Cách sử dụng API Claude Fable 5.1 (Hướng dẫn từng bước với Apidog)

Hướng dẫn API Claude Fable 5.1 từng bước: yêu cầu đầu tiên, công sức, truyền tải theo luồng, công cụ chặt chẽ thay vì buộc phải chọn công cụ, các phương án dự phòng, cập nhật tiến độ, kiểm tra bộ đệm.

Ashley Innocent

Ashley Innocent

2 tháng 9 2026

Cách sử dụng API Claude Fable 5.1 (Hướng dẫn từng bước với Apidog)

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Claude Fable 5.1 được phát hành vào ngày 1 tháng 9 năm 2026, với ID mô hình API là chuỗi chính xác claude-fable-5-1, không có hậu tố ngày. Nó có chi phí tương tự như Fable 5: 10 đô la cho mỗi triệu token đầu vào và 50 đô la cho mỗi triệu token đầu ra, với chi phí đọc bộ nhớ đệm giảm xuống còn 0,25 đô la cho mỗi triệu, và nó đi kèm với ba thay đổi đột phá mà Fable 5 không có.

Hướng dẫn này sẽ chỉ dẫn toàn bộ quá trình: lấy khóa, gửi yêu cầu đầu tiên, kiểm soát nỗ lực, truyền phát, sử dụng công cụ mà không cần ép buộc tool_choice, dự phòng từ chối, cập nhật tiến độ và đọc đối tượng usage để xác nhận bộ nhớ đệm của bạn đang hoạt động với mức giá mới. Mỗi yêu cầu đều là HTTP thuần túy với JSON, vì vậy bạn có thể xây dựng và gỡ lỗi nó trong Apidog trước khi đưa vào mã ứng dụng.

Nếu bạn đang di chuyển một dịch vụ Fable 5 hoặc Opus 5 hiện có thay vì bắt đầu mới, hãy đọc hướng dẫn di chuyển đầy đủ song song với hướng dẫn này. Để có cái nhìn tổng quan về mô hình, hãy bắt đầu với Claude Fable 5.1 là gì.

Trước cuộc gọi đầu tiên của bạn: ba điều sẽ trả về 400

1. Tư duy không thể cấu hình, chỉ có thể điều hướng. Fable 5.1 chạy tư duy thích ứng trên mọi yêu cầu. Bỏ qua trường thinking hoặc gửi {"type": "adaptive"}. Cả {"type": "disabled"}{"type": "enabled", "budget_tokens": N} đều trả về 400. Nếu bạn đang chuyển từ Opus 5, nơi disabled được chấp nhận ở mức nỗ lực high trở xuống, hãy loại bỏ nó và kiểm soát chi phí bằng output_config.effort thay thế.

2. Việc buộc sử dụng công cụ đã bị loại bỏ. tool_choice: {"type": "any"}{"type": "tool", "name": "..."} sẽ trả về thông báo tool_choice: type "tool" and "any" are not supported for this model. Cách khắc phục nằm ở bước sử dụng công cụ bên dưới.

3. Tổ chức của bạn cần lưu giữ dữ liệu 30 ngày. Fable 5.1 là một Mô hình được bảo hiểm (Covered Model). Một yêu cầu từ một tổ chức hoặc không gian làm việc với chính sách không lưu giữ dữ liệu sẽ trả về 400 invalid_request_error mà không có manh mối nào khác. Nếu cuộc gọi đầu tiên của bạn thất bại và phần thân yêu cầu trông có vẻ đúng, hãy kiểm tra chính sách lưu giữ dữ liệu trước bất cứ điều gì khác.

Cả ba điều trên đều được ghi lại trong tài liệu Có gì mới trong Claude Fable 5.1 của Anthropic.

Bước 1: Lấy khóa API

Đăng nhập vào Claude Console, mở phần khóa API trong cài đặt tổ chức của bạn và tạo khóa. Sao chép nó một lần; bạn sẽ không thể đọc lại nó sau này. Xuất nó thay vì dán trực tiếp vào mã:

export ANTHROPIC_API_KEY="sk-ant-..."

Trong Apidog, lưu trữ nó dưới dạng biến môi trường có tên ANTHROPIC_API_KEY và tham chiếu nó là {{ANTHROPIC_API_KEY}} trong tiêu đề, để khóa không bao giờ xuất hiện trong phần thân yêu cầu đã lưu.

Bước 2: Gửi yêu cầu đầu tiên của bạn

Tạo một yêu cầu POST tới https://api.anthropic.com/v1/messages với ba tiêu đề: x-api-key, anthropic-version: 2023-06-01content-type: application/json.

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "max_tokens": 16000,
    "messages": [
      {"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}
    ]
  }'

Cuộc gọi tương tự trong Python với SDK chính thức:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    messages=[{"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}],
)

if response.stop_reason == "refusal":
    print("declined:", response.stop_details.category if response.stop_details else None)
else:
    for block in response.content:
        if block.type == "text":
            print(block.text)

Hai thói quen cần xây dựng từ cuộc gọi đầu tiên. Kiểm tra stop_reason trước khi đọc content, vì việc phân loại từ chối là một phản hồi HTTP 200 với một mảng nội dung trống. Và hãy cấp đủ không gian cho max_tokens. Nó giới hạn tổng số token tư duy và token phản hồi, và tư duy luôn được bật, vì vậy một giá trị chặt chẽ được điều chỉnh cho mô hình không tư duy sẽ bị cắt ngắn tại đây.

Phản hồi chứa một khối thinking mà văn bản của nó trống dưới cài đặt display mặc định là "omitted". Điều này là bình thường. Hãy truyền nó trở lại mà không thay đổi trong lượt tiếp theo.

Bước 3: Kiểm soát chi phí và độ sâu bằng tham số nỗ lực (effort)

Tham số nỗ lực (effort) là đòn bẩy chính trên Fable 5.1. Nó nằm bên trong output_config, không phải ở cấp cao nhất, và chấp nhận các giá trị low, medium, high, xhighmax. Mặc định là high.

{
  "model": "claude-fable-5-1",
  "max_tokens": 16000,
  "output_config": {"effort": "medium"},
  "messages": [{"role": "user", "content": "Summarize this changelog in five bullets."}]
}

Hướng dẫn của Anthropic: bắt đầu ở mức high, sau đó thử các mức khác dựa trên đánh giá của riêng bạn và chạy lại quá trình thử nghiệm ngay cả khi bạn đã thực hiện trên Fable 5, vì tên mức không tương ứng với cùng một lượng tư duy giữa các mô hình. Họ khẳng định rằng medium gần như tương đương với Fable 5 với chi phí thấp hơn và low thường cạnh tranh với Opus và Sonnet về chi phí trên mỗi tác vụ. Hai hành vi cụ thể về nỗ lực cần biết: ở mức low, Fable 5.1 ít gọi các công cụ tìm kiếm và truy xuất hơn và trả lời nhiều hơn từ bộ nhớ, còn ở mức xhighmax, nó có thể phác thảo một tài liệu dài trong quá trình tư duy và sau đó viết lại, vì vậy hãy đặt max_tokens cho cả hai trường hợp.

Thay đổi nỗ lực giữa cuộc trò chuyện (beta). Trên Fable 5, việc thay đổi nỗ lực ở cấp cao nhất giữa các yêu cầu sẽ làm mất tiền tố đã được lưu vào bộ nhớ đệm. Trên Fable 5.1, một tin nhắn role: "system" với nội dung trống và một output_config sẽ thay đổi nỗ lực từ lượt người dùng tiếp theo trở đi mà không làm mất hiệu lực bộ nhớ đệm. Điều này yêu cầu tiêu đề beta mid-conversation-output-config-2026-07-01 và không gian tên client.beta.messages.

response = client.beta.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    output_config={"effort": "high"},
    betas=["mid-conversation-output-config-2026-07-01"],
    messages=[
        {"role": "user", "content": "Plan a migration from SQLite to PostgreSQL in three short steps."},
        {"role": "assistant", "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
        {"role": "system", "content": [], "output_config": {"effort": "low"}},
        {"role": "user", "content": "Summarize the plan in one sentence."},
    ],
)

Giảm nỗ lực theo cách này là đáng tin cậy. Tăng nỗ lực hoạt động tốt nhất cho những bước nhảy lớn, chẳng hạn như từ low lên xhigh. Hướng dẫn tham số nỗ lực cho Opus 5 bao gồm năm cấp độ một cách chi tiết, và cùng ngữ nghĩa đó cũng áp dụng ở đây.

Bước 4: Truyền phát phản hồi (stream the response)

Fable 5.1 cho phép các tác vụ khó chạy trong vài phút với nỗ lực cao hơn, vì vậy hãy truyền phát bất kỳ nội dung nào có thể dài. SDK yêu cầu truyền phát cho các giá trị max_tokens gần giới hạn 128.000 để tránh hết thời gian chờ HTTP.

with client.messages.stream(
    model="claude-fable-5-1",
    max_tokens=64000,
    messages=[{"role": "user", "content": "Write a test plan for a rate-limited public API."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    final = stream.get_final_message()

print(final.stop_reason, final.usage.output_tokens)

Trong Apidog, các phản hồi truyền phát được hiển thị ngay khi chúng đến, đây là cách nhanh nhất để xem một lượt nỗ lực high tốn bao nhiêu thời gian để suy nghĩ trước khi xuất hiện token văn bản đầu tiên.

Bước 5: Thêm sử dụng công cụ mà không cần ép buộc

Xác định công cụ tương tự như trên Fable 5. Điều thay đổi là cách bạn đảm bảo một cuộc gọi. Trên Fable 5, bạn có thể buộc gọi bằng tool_choice: {"type": "tool", ...}. Trên Fable 5.1, điều đó trả về 400, bởi vì một cuộc gọi bị ép buộc sẽ bỏ qua quá trình tư duy và mô hình sẽ viết các lập luận của nó vào các đối số.

Cách thay thế có ba phần: giữ tool_choiceauto, đặt tên công cụ trong hướng dẫn và đặt strict: true (sử dụng công cụ nghiêm ngặt) trên công cụ với additionalProperties: false trong lược đồ để các đối số luôn được xác thực.

record_summary_tool = {
    "name": "record_summary",
    "description": "Record the structured summary of the document.",
    "strict": True,
    "input_schema": {
        "type": "object",
        "properties": {"summary": {"type": "string"}},
        "required": ["summary"],
        "additionalProperties": False,
    },
}

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    tools=[record_summary_tool],
    tool_choice={"type": "auto"},
    messages=[{"role": "user", "content": "Summarize: The meeting moved to Thursday. Call the record_summary tool with your result."}],
)

Nếu cuộc gọi bị ép buộc chỉ tồn tại để nhận lại JSON, hãy sử dụng đầu ra có cấu trúc (output_config.format) thay vì một công cụ. Nếu ứng dụng của bạn, chứ không phải người dùng, yêu cầu một cuộc gọi cụ thể trong lượt hiện tại của cuộc trò chuyện nhiều lượt, hãy thêm một tin nhắn role: "system" sau lượt người dùng gần nhất để đặt tên công cụ và nói rằng cuộc gọi là bắt buộc, và giữ tin nhắn đó trong lịch sử sau đó. tool_choice: {"type": "none"} vẫn hoạt động cho một lượt không được gọi công cụ.

Vòng lặp tác tử (agentic loop) không thay đổi: khi stop_reasontool_use, thực thi mọi khối tool_use, trả về tất cả các khối tool_result trong một tin nhắn người dùng và thêm lại lượt của trợ lý chính xác như đã được trả về, bao gồm cả các khối thinking. Điều khoản cuối cùng đó quan trọng hơn trên Fable 5.1 so với bất kỳ mô hình nào trước đây, vì những lý do mà hướng dẫn thinking được bảo toàn giải thích.

Một hành vi cần chú ý: trong các vòng lặp dài nơi các lần đọc độc lập tiếp theo chỉ được ngụ ý bởi tác vụ, Fable 5.1 có thể đưa ra một cuộc gọi công cụ cho mỗi lượt trong khi Fable 5 xử lý hàng loạt nhiều cuộc gọi. Cách khắc phục của Anthropic là một lời nhắc nhở gồm một câu được thêm vào sau mỗi tin nhắn kết quả công cụ: "Đầu tiên hãy liệt kê riêng những gì bạn cần tiếp theo; sau đó yêu cầu mọi mục không phụ thuộc vào kết quả của mục khác trong phản hồi này." Gửi nó dưới dạng một tin nhắn hệ thống giới hạn lượt (turn-scoped system message) (clear_at: "next_user_message", tiêu đề beta mid-conversation-system-clear-at-2026-08-21) và giữ nguyên mọi bản sao trước đó.

Bước 6: Xử lý từ chối bằng dự phòng (fallbacks)

Fable 5.1 chạy các bộ phân loại an toàn. Một yêu cầu bị từ chối sẽ trả về HTTP 200 với stop_reason: "refusal" và một đối tượng stop_details nêu rõ danh mục: cyber, bio, frontier_llm, reasoning_extraction hoặc general_harms. Một lần từ chối trước bất kỳ đầu ra nào sẽ không bị tính phí.

Chọn sử dụng dự phòng (fallbacks) theo mặc định. Hình thức đơn giản nhất là fallbacks: "default" với tiêu đề beta server-side-fallback-2026-07-01, tiêu đề này sẽ thử lại một yêu cầu bị từ chối trên mô hình mà Anthropic khuyến nghị cho danh mục đó. Đối với Fable 5.1, các mục tiêu được phép là claude-opus-4-8claude-opus-5.

response = client.beta.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    fallbacks="default",
    betas=["server-side-fallback-2026-07-01"],
    messages=[{"role": "user", "content": "Audit this authentication middleware for logic bugs."}],
)

fallback_ran = any(
    entry.type == "fallback_message" for entry in (response.usage.iterations or [])
)
if fallback_ran and response.stop_reason != "refusal":
    print("served by", response.model)

Phản hồi sẽ đặt tên mô hình phục vụ trong trường model cấp cao nhất của nó, và một khối nội dung fallback đánh dấu sự chuyển giao. Hãy giữ khối đó ở vị trí nó xuất hiện khi bạn phản hồi lại lượt đó. Hai giới hạn: fallbacks bị từ chối trên API Batches, và nó không khả dụng trên Bedrock, Google Cloud hoặc Foundry, nơi bạn phải đăng ký BetaRefusalFallbackMiddleware của SDK trên client thay thế. Hướng dẫn xử lý từ chối bao gồm việc tính phí, định tuyến cố định và việc thử lại thủ công với tín dụng dự phòng.

Bước 7: Nhận cập nhật tiến độ trong các lượt dài

Giữa các cuộc gọi công cụ, Fable 5.1 ghi lại các ghi chú ngắn về những gì nó tìm thấy và những gì nó sẽ làm tiếp theo. Mỗi ghi chú xuất hiện dưới dạng khối thinking riêng biệt ngay trước cuộc gọi công cụ, và dưới cài đặt display mặc định, các khối này trống. Đặt display: "updates" với tiêu đề beta thinking-display-updates-2026-08-18 để nhận chúng dưới dạng văn bản trong khi quá trình lập luận vẫn được ẩn đi.

{
  "model": "claude-fable-5-1",
  "max_tokens": 16000,
  "thinking": {"type": "adaptive", "display": "updates"},
  "tools": [...],
  "messages": [{"role": "user", "content": "Review the PRs open against our billing service."}]
}

Bất kỳ khối thinking nào có văn bản không trống đều là một dòng trạng thái mà bạn có thể hiển thị. Fable 5.1 viết ít khối này hơn Fable 5, vì vậy nếu giao diện người dùng của bạn phụ thuộc vào việc tường thuật, hãy xóa bất kỳ dòng nhắc nào yêu cầu mô hình giữ lại các phát hiện cho phản hồi cuối cùng.

Bước 8: Đọc đối tượng sử dụng (usage object) để biết mức giá bộ nhớ đệm 0,25 đô la

Bộ nhớ đệm nhắc (Prompt caching) là nơi thay đổi giá của Fable 5.1 diễn ra. Đặt cache_control trên tiền tố ổn định và xác nhận các lần truy cập trong usage:

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    system=[{"type": "text", "text": LONG_STABLE_SYSTEM_PROMPT, "cache_control": {"type": "ephemeral"}}],
    messages=[{"role": "user", "content": "Which endpoints in the spec lack an error schema?"}],
)
u = response.usage
print(u.input_tokens, u.cache_creation_input_tokens, u.cache_read_input_tokens)

Trong lần gửi đầu tiên, cache_creation_input_tokens có giá trị khác 0 (được tính phí 12,50 đô la cho mỗi triệu cho TTL 5 phút). Trong lần gửi thứ hai trong vòng năm phút, cache_read_input_tokens phải có giá trị khác 0, được tính phí 0,25 đô la cho mỗi triệu. Nếu nó vẫn bằng 0 qua các yêu cầu giống hệt nhau, có điều gì đó trong tiền tố thay đổi mỗi lần: một dấu thời gian trong lời nhắc hệ thống, JSON không được sắp xếp, một mảng công cụ thay đổi. Lời nhắc tối thiểu có thể lưu vào bộ nhớ đệm là 512 token.

Hai điểm đáng chú ý về bộ nhớ đệm dành riêng cho mô hình này. Bởi vì một lần bỏ lỡ tốn gấp 40 lần so với một lần truy cập, việc giữ cho bộ nhớ đệm "ấm" trở nên quan trọng hơn so với Fable 5, và cả nỗ lực trên mỗi tin nhắn lẫn các tin nhắn hệ thống giới hạn lượt đều tồn tại một phần để bạn có thể thay đổi mọi thứ giữa phiên mà không cần đặt lại. Và cùng những chỉnh sửa làm đặt lại bộ nhớ đệm (xây dựng lại system, chỉnh sửa các lượt trước đó) giờ đây cũng làm mất hiệu lực các khối thinking, vì vậy nguyên tắc chỉ thêm (append-only) mang lại lợi ích gấp đôi.

Kiểm tra và gỡ lỗi toàn bộ quy trình trong Apidog

Lưu mỗi bước trên dưới dạng một yêu cầu trong một bộ sưu tập Apidog: cuộc gọi đầu tiên, các biến thể nỗ lực, truyền phát, vòng lặp công cụ, dự phòng, kiểm tra bộ nhớ đệm. Sử dụng các biến môi trường cho khóa và cho model, để việc chuyển đổi toàn bộ bộ sưu tập giữa claude-fable-5claude-fable-5-1 chỉ là một thao tác chỉnh sửa. Sau đó thêm các khẳng định (assertions): stop_reason không phải là refusal trên các lời nhắc kiểm tra lành tính của bạn, usage.cache_read_input_tokens lớn hơn 0 trên yêu cầu bộ nhớ đệm thứ hai, và không có mục input_transformations nào có reason: "prefix_binding_mismatch" khi bạn chạy với tiêu đề thinking-binding. Chạy bộ sưu tập trước và sau bất kỳ thay đổi nào trong harness. Tải xuống Apidog để thiết lập; bộ sưu tập tương tự hoạt động như một kiểm tra CI thông qua Apidog CLI.

Các lỗi và cạm bẫy bạn sẽ gặp phải

Câu hỏi thường gặp (FAQ)

ID mô hình cho API Claude Fable 5.1 là gì? claude-fable-5-1. Trên Amazon Bedrock là anthropic.claude-fable-5-1; Google Cloud, Microsoft Foundry và Claude Platform trên AWS sử dụng claude-fable-5-1.

Tôi có cần tiêu đề beta để sử dụng Claude Fable 5.1 không? Không. Mô hình cơ bản, tư duy thích ứng, nỗ lực, công cụ và bộ nhớ đệm đều hoạt động trên tiêu đề chuẩn anthropic-version: 2023-06-01. Các tiêu đề beta chỉ cần thiết cho nỗ lực trên mỗi tin nhắn, tin nhắn hệ thống giới hạn lượt, cập nhật tiến độ, dự phòng phía máy chủ và các kiểm soát thinking-binding.

Tôi có thể ép buộc gọi công cụ trên Claude Fable 5.1 không? Không. tool_choice anytool trả về 400. Hãy sử dụng auto, đặt tên công cụ trong lời nhắc và đặt strict: true cho các đối số hợp lệ theo lược đồ, hoặc sử dụng đầu ra có cấu trúc để trích xuất JSON.

Đầu ra tối đa trên API Claude Fable 5.1 là bao nhiêu? 128.000 token trên Messages API. Hãy truyền phát cho bất kỳ nội dung lớn nào. API Batch beta 300.000 token không được liệt kê cho Fable 5.1.

Làm cách nào để xem các lần đọc bộ nhớ đệm với chi phí thấp hơn? Hãy xem usage.cache_read_input_tokens trên một yêu cầu lặp lại. Các token đó được tính phí 0,25 đô la cho mỗi triệu trên Fable 5.1, so với 1 đô la trên Fable 5 và 0,50 đô la trên Opus 5. Bảng phân tích giá giải thích chi tiết các con số.

Hướng dẫn API Fable 5 vẫn áp dụng chứ? Phần lớn là có. Hướng dẫn API Fable 5 đề cập đến cùng một điểm cuối, nhưng các ví dụ về việc buộc sử dụng công cụ của nó hiện trả về 400 và nó có trước các tính năng nỗ lực trên mỗi tin nhắn và cập nhật tiến độ.

nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API