Quay lại blog

Khắc phục sự cốHướng dẫn

Lỗi 400 Claude API với temperature, top_p, top_k: cách sửa

Yêu cầu Claude của bạn bắt đầu trả về 400 trên phiên bản API 2026-10-21? Hãy xóa temperature, top_p và top_k, hoặc ghim phiên bản cũ. Các bước ở trong.

Bởi CheapTokens TeamĐã xuất bản 5 phút đọc

Thẻ kiểu terminal: lỗi 400 cho temperature, top_p và top_k trong Claude API
Trên trang này
  1. Yêu cầu lỗi trông như thế nào
  2. Cách sửa: xóa ba tham số
  3. Câu trả lời có thay đổi sau khi xóa chúng không?
  4. Danh sách kiểm tra nhanh khi bạn thấy lỗi 400
  5. Một đường code cho Claude và các API kiểu OpenAI

Yêu cầu Claude của bạn chạy được hôm qua, bạn chuyển nó sang phiên bản API 2026-10-21 (header anthropic-version, hoặc một bản phát hành SDK được xây dựng cho phiên bản đó), và giờ nó trả về lỗi 400. Hãy xem phần body của yêu cầu: nếu nó có temperature, top_p hoặc top_k, đó chính là nguyên nhân. Xóa ba trường đó và yêu cầu sẽ chạy được.

Theo hướng dẫn migration của Anthropic cho phiên bản 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, đã kiểm tra ngày 24 tháng 10 năm 2026), một yêu cầu Messages hoặc Message Batches gửi bất kỳ trường nào trong ba trường này sẽ trả về lỗi 400. Điều này xảy ra ngay cả khi giá trị là mặc định của tham số. Hãy tìm trạng thái 400 và các tên trường đó trong yêu cầu của bạn.

Yêu cầu lỗi trông như thế nào#

Giả sử bạn có một script nhỏ yêu cầu Claude tóm tắt một ticket và giữ câu trả lời ổn định bằng temperature thấp:

python
import anthropic

client = anthropic.Anthropic()

reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    temperature=0.2,  # <- this line now causes the 400
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)

Tương tự với HTTP thuần. Nếu bạn tự đặt header phiên bản, đây là dòng đưa bạn sang hành vi mới:

bash
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2026-10-21" \
  -H "content-type: application/json" \
  -d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
       "messages": [{"role": "user", "content": "Hello"}]}'

Cách sửa: xóa ba tham số#

Xóa temperature, top_p và top_k khỏi mọi yêu cầu Messages và Message Batches. Không có chúng, model sẽ lấy mẫu theo mặc định (temperature 1.0), đúng như một yêu cầu 2023-06-01 bỏ qua chúng.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Trước và sau: yêu cầu có temperature trả về 400, cùng yêu cầu đó không có nó thì chạy được
Cùng một yêu cầu trước và sau khi xóa temperature

Các phiên bản SDK major mới nhất và CLI ant (2.0.0) không còn các tham số này nữa, nên sau khi nâng cấp bạn phải xóa chúng khỏi code. Lỗi 400 đến từ các yêu cầu gửi đi với anthropic-version: 2026-10-21 và vẫn mang một trong ba trường. Các adapter .NET IChatClient đi theo hướng nhẹ nhàng hơn: chúng giờ bỏ qua ChatOptions.Temperature, TopK và TopP. Số phiên bản SDK chính xác cho từng ngôn ngữ nằm trong các tab Upgrade steps của hướng dẫn.

Nếu bạn gọi API không dùng SDK, phiên bản chính là header anthropic-version, và 2026-10-21 là giá trị bật quy tắc mới.

Câu trả lời có thay đổi sau khi xóa chúng không?#

Tùy thuộc vào model, và hướng dẫn nói rõ điều này.

  • Claude 4.7 và mới hơn vốn chỉ chấp nhận giá trị lấy mẫu mặc định. Không có gì thay đổi với bạn: trước đây chúng lấy mẫu theo mặc định và vẫn như vậy.
  • Các model chấp nhận giá trị khác, chẳng hạn Claude Sonnet 4.6: nếu bạn hạ temperature để có đầu ra nhất quán hơn, hiệu ứng đó sẽ biến mất, và không có cài đặt nào khác thay thế nó.

Nếu một yêu cầu cụ thể thực sự dựa vào giá trị không mặc định, bạn có hai lựa chọn từ hướng dẫn: ngừng gửi tham số và chấp nhận lấy mẫu mặc định, hoặc giữ yêu cầu đó trên anthropic-version: 2023-06-01.

Nếu câu trả lời của bạn phải nhất quán nghiêm ngặt, hãy đưa tính nhất quán vào prompt thay vì thế: một định dạng đầu ra cố định, một ví dụ ngắn về câu trả lời bạn muốn, và một kiểm tra trong code loại bỏ mọi thứ sai định dạng. Việc này tốn công hơn một con số, nhưng nó không phụ thuộc vào một nút vặn lấy mẫu.

Danh sách kiểm tra nhanh khi bạn thấy lỗi 400#

  1. Tìm trong dự án các từ temperature, top_p, top_k, kể cả các wrapper và file cấu hình dùng chung.
  2. Kiểm tra các batch job: quy tắc áp dụng cho từng yêu cầu bên trong một Message Batch được tạo với 2026-10-21, nên hãy xem params của mọi yêu cầu trong batch.
  3. Kiểm tra xem điều gì đã thay đổi: phiên bản SDK major, phiên bản CLI, hoặc header anthropic-version.
  4. Xóa các trường, hoặc ghim yêu cầu đó vào 2023-06-01 nếu nó cần giá trị không mặc định.
  5. Chạy thử một yêu cầu trước khi khởi chạy lại một batch lớn.

Một đường code cho Claude và các API kiểu OpenAI#

Một thiết lập phổ biến: một helper duy nhất xây dựng yêu cầu và gửi nó đến Anthropic Messages hoặc đến endpoint Chat Completions kiểu OpenAI. Cách sửa đơn giản nhất là tách các tham số. Chỉ giữ temperature trong nhánh kiểu OpenAI, và đừng thêm nó vào nhánh Messages.

Trong định dạng Chat Completions, cài đặt này là một trường yêu cầu bình thường. Trên CheapTokens nó hoạt động qua địa chỉ tương thích OpenAI https://api.cheaptokens.dev/v1. Đây là một yêu cầu đến DeepSeek-V4-Flash (ngữ cảnh 380K, tối đa 32.768 token đầu ra mỗi câu trả lời), với model id đầy đủ từ tài liệu CheapTokens:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "temperature": 0.2,
    "max_tokens": 300,
    "messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
  }'

Một yêu cầu như vậy, với 1.000 token đầu vào và 300 token đầu ra, tốn $0.000045 theo giá hiện tại. DeepSeek-V4-Flash có một mức giá vào mọi thời điểm trong ngày, không có giờ cao điểm, và một số dư bao trùm mọi model. Với cùng đường code đó với cửa sổ ngữ cảnh 390K còn có GLM-5.3-Flash (zai-org/GLM-5.3-Flash, tối đa 8.192 token đầu ra). Giá hiện tại cho mọi model nằm trên trang giá.

Để xem cài đặt này hoạt động thế nào, hãy đọc System prompt và temperature: chúng làm gì và cách đặt chúng. Để gọi Messages định dạng Claude từ Python, xem Anthropic Python SDK với CheapTokens. Địa chỉ cơ sở và thiết lập key nằm trong tài liệu CheapTokens.