กลับไปที่บล็อก

การแก้ไขปัญหาคู่มือ

Claude API 400 error บน temperature, top_p, top_k: วิธีแก้ไข

คำขอ Claude ของคุณเริ่มคืนค่า 400 บน API เวอร์ชัน 2026-10-21? ลบ temperature, top_p และ top_k หรือปักหมุดเวอร์ชันเก่า ขั้นตอนอยู่ข้างใน

โดย CheapTokens Teamเผยแพร่เมื่อ ใช้เวลาอ่าน 4 นาที

การ์ดสไตล์เทอร์มินัล: error 400 สำหรับ temperature, top_p และ top_k ใน Claude API
ในหน้านี้
  1. คำขอที่ล้มเหลวมีหน้าตาอย่างไร
  2. วิธีแก้: ลบสามพารามิเตอร์
  3. คำตอบจะเปลี่ยนไปหลังจากลบมันหรือไม่?
  4. เช็กลิสต์ด่วนเมื่อคุณเจอ 400
  5. เส้นทางโค้ดเดียวสำหรับ Claude และ API สไตล์ OpenAI

คำขอ Claude ของคุณทำงานได้เมื่อวาน คุณอัปเดตเป็น API เวอร์ชัน 2026-10-21 (เฮดเดอร์ anthropic-version หรือ SDK รุ่นที่สร้างมาสำหรับเวอร์ชันนั้น) และตอนนี้มันตอบกลับด้วย 400 ดูที่ body ของคำขอ: ถ้ามี temperature, top_p หรือ top_k นั่นคือสาเหตุ ลบสามฟิลด์นั้นแล้วคำขอจะผ่าน

ตามคู่มือการย้ายเวอร์ชันของ Anthropic สำหรับเวอร์ชัน 2026-10-21 (ตรวจสอบ https://platform.claude.com/docs/en/api/migration-2026-10-21, เมื่อ 24 ตุลาคม 2026) คำขอ Messages หรือ Message Batches ที่ส่งหนึ่งในสามฟิลด์นี้จะคืนค่า 400 error เกิดขึ้นแม้ว่าค่าจะเป็นค่าเริ่มต้นของพารามิเตอร์นั้น ให้มองหา status 400 และชื่อฟิลด์เหล่านั้นในคำขอของคุณ

คำขอที่ล้มเหลวมีหน้าตาอย่างไร#

สมมติว่าคุณมีสคริปต์เล็ก ๆ ที่ขอให้ Claude สรุปตั๋วและทำให้คำตอบคงที่ด้วย temperature ต่ำ:

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: ..."}],
)

เรื่องเดียวกันกับ HTTP ธรรมดา ถ้าคุณตั้งเฮดเดอร์เวอร์ชันเอง นี่คือบรรทัดที่พาคุณไปสู่พฤติกรรมใหม่:

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"}]}'

วิธีแก้: ลบสามพารามิเตอร์#

ลบ temperature, top_p และ top_k ออกจากทุกคำขอ Messages และ Message Batches หากไม่มีพารามิเตอร์เหล่านี้ โมเดลจะสุ่มด้วยค่าเริ่มต้นของมัน (temperature 1.0) เหมือนกับคำขอ 2023-06-01 ที่ไม่ใส่พารามิเตอร์เหล่านี้

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
ก่อนและหลัง: คำขอที่มี temperature คืนค่า 400 คำขอเดียวกันที่ไม่มีมันจะผ่าน
คำขอเดียวกันก่อนและหลังลบ temperature

SDK เวอร์ชันหลักล่าสุดและ CLI ant (2.0.0) ไม่มีพารามิเตอร์เหล่านี้แล้ว ดังนั้นหลังจากอัปเกรดคุณต้องลบมันออกจากโค้ดของคุณ 400 มาจากคำขอที่ส่งออกไปด้วย anthropic-version: 2026-10-21 และยังมีหนึ่งในสามฟิลด์นั้น อะแดปเตอร์ .NET IChatClient ใช้เส้นทางที่นุ่มนวลกว่า: ตอนนี้พวกมันเพิกเฉยต่อ ChatOptions.Temperature, TopK และ TopP หมายเลขเวอร์ชัน SDK ที่แน่นอนสำหรับแต่ละภาษาอยู่ในแท็บ Upgrade steps ของคู่มือ

ถ้าคุณเรียก API โดยไม่มี SDK เวอร์ชันคือเฮดเดอร์ anthropic-version และ 2026-10-21 คือค่าที่เปิดใช้กฎใหม่

คำตอบจะเปลี่ยนไปหลังจากลบมันหรือไม่?#

ขึ้นอยู่กับโมเดล และคู่มือระบุไว้ชัดเจนตรงนี้

  • Claude 4.7 และใหม่กว่า ยอมรับเฉพาะค่าการสุ่มเริ่มต้นเท่านั้น ไม่มีอะไรเปลี่ยนสำหรับคุณ: พวกมันสุ่มด้วยค่าเริ่มต้นมาก่อนและยังคงเป็นเช่นนั้น
  • โมเดลที่ยอมรับค่าอื่น เช่น Claude Sonnet 4.6: ถ้าคุณลด temperature เพื่อให้ได้ผลลัพธ์ที่สม่ำเสมอขึ้น ผลนั้นจะหายไป และไม่มีการตั้งค่าอื่นมาแทนที่

ถ้าคำขอใดคำขอหนึ่งพึ่งพาค่าที่ไม่ใช่ค่าเริ่มต้นจริง ๆ คุณมีสองทางเลือกจากคู่มือ: หยุดส่งพารามิเตอร์และยอมรับการสุ่มแบบค่าเริ่มต้น หรือเก็บคำขอนั้นไว้บน anthropic-version: 2023-06-01

ถ้าคำตอบของคุณต้องสม่ำเสมออย่างเคร่งครัด ให้ใส่ความสม่ำเสมอลงใน prompt แทน: รูปแบบผลลัพธ์ที่ตายตัว ตัวอย่างสั้น ๆ ของคำตอบที่คุณต้องการ และการตรวจสอบในโค้ดของคุณที่ปฏิเสธสิ่งที่ไม่ตรงรูปแบบ มันทำงานมากกว่าตัวเลขหนึ่งตัว แต่ไม่ขึ้นอยู่กับปุ่มปรับการสุ่ม

เช็กลิสต์ด่วนเมื่อคุณเจอ 400#

  1. ค้นหาในโปรเจกต์สำหรับ temperature, top_p, top_k รวมถึง wrapper และไฟล์ config ที่ใช้ร่วมกัน
  2. ตรวจสอบงาน batch: กฎนี้ใช้กับแต่ละคำขอภายใน Message Batch ที่สร้างด้วย 2026-10-21 ดังนั้นดูที่ params ของทุกคำขอใน batch
  3. ตรวจสอบว่าอะไรเปลี่ยนไป: เวอร์ชันหลักของ SDK, เวอร์ชัน CLI หรือเฮดเดอร์ anthropic-version
  4. ลบฟิลด์เหล่านั้น หรือปักหมุดคำขอนั้นไว้ที่ 2023-06-01 ถ้ามันต้องการค่าที่ไม่ใช่ค่าเริ่มต้น
  5. รันหนึ่งคำขอก่อนที่คุณจะเริ่ม batch ขนาดใหญ่อีกครั้ง

เส้นทางโค้ดเดียวสำหรับ Claude และ API สไตล์ OpenAI#

การตั้งค่าที่พบบ่อย: helper ตัวเดียวที่สร้างคำขอและส่งไปยัง Anthropic Messages หรือไปยัง endpoint Chat Completions สไตล์ OpenAI วิธีแก้ที่ง่ายที่สุดคือแยกพารามิเตอร์ เก็บ temperature ไว้ในสาขาสไตล์ OpenAI เท่านั้น และอย่าเพิ่มมันในสาขา Messages

ในรูปแบบ Chat Completions การตั้งค่านี้เป็นฟิลด์คำขอปกติ บน CheapTokens มันทำงานผ่านที่อยู่ที่เข้ากันได้กับ OpenAI https://api.cheaptokens.dev/v1 นี่คือคำขอไปยัง DeepSeek-V4-Flash (context 380K, เอาต์พุตสูงสุด 32,768 โทเค็นต่อคำตอบ) พร้อม model id แบบเต็มจากเอกสาร 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: ..."}]
  }'

คำขอแบบนั้น ที่มีอินพุต 1,000 โทเค็นและเอาต์พุต 300 โทเค็น มีค่าใช้จ่าย $0.000045 ที่ราคาปัจจุบัน DeepSeek-V4-Flash มีราคาเดียวตลอดเวลา ไม่มีช่วง peak และยอดคงเหลือเดียวครอบคลุมทุกโมเดล สำหรับเส้นทางโค้ดเดียวกันกับหน้าต่าง context 390K ยังมี GLM-5.3-Flash (zai-org/GLM-5.3-Flash, เอาต์พุตสูงสุด 8,192 โทเค็น) ราคาปัจจุบันของทุกโมเดลอยู่ในหน้าราคา

หากต้องการดูว่าการตั้งค่านี้ทำงานอย่างไร อ่าน System prompt และ temperature: มันทำอะไรและตั้งค่าอย่างไร หากต้องการเรียก Messages รูปแบบ Claude จาก Python ดู Anthropic Python SDK กับ CheapTokens การตั้งค่าที่อยู่ฐานและคีย์อยู่ในเอกสาร CheapTokens