AI สำหรับผู้เริ่มต้นคู่มือ
ทำไมคำตอบ AI หยุดกลางประโยค? อธิบาย max_tokens, หน้าต่างบริบท และ finish_reason
คำตอบ AI ที่หยุดกลางประโยคชนขีดจำกัด อ่าน finish_reason แยก max_tokens จากหน้าต่างบริบทที่เต็ม และตรวจขีดจำกัดเอาต์พุตของแต่ละโมเดล

ในหน้านี้
คำตอบที่หยุดกลางประโยคมักถูกตัดด้วยขีดจำกัด โมเดลไม่ได้หลุดความคิด แต่คำขอไม่มีพื้นที่เหลือ คำตอบจะบอกว่าเป็นขีดจำกัดใด: อ่าน finish_reason length หมายถึงชนขีดจำกัด stop หมายถึงโมเดลจบเอง
มีสามปัจจัยที่กำหนดความยาวของคำตอบได้ เมื่อรู้ว่าตัวไหนเป็นตัวตัด ปัญหาก็แก้ได้ในไม่กี่นาที
สามขีดจำกัดที่ตัดคำตอบ#
max_tokensคือเพดานที่คุณตั้งในคำขอ เมื่อคำตอบถึงเพดานนี้ การสร้างจะหยุดทันที แม้กลางคำ เอกสารอ้างอิง API ของ DeepSeek นิยามว่าเป็นจำนวนโทเค็นสูงสุดที่สร้างใน completion- ขีดจำกัดเอาต์พุตของโมเดล คือเพดานสำหรับคำตอบเดียวจากโมเดลนั้น เป็นของคุณสมบัติของโมเดล ดังนั้นควรตั้ง
max_tokensให้ไม่เกินค่านี้ ตัวเลขของโมเดลของเราอยู่ในตารางด้านล่าง - หน้าต่างบริบท คือพื้นที่สำหรับบทสนทนาทั้งหมด: อินพุตและคำตอบรวมกัน เอกสารอ้างอิงของ DeepSeek ระบุว่าโทเค็นอินพุตและที่สร้างรวมกันถูกจำกัดด้วยความยาวบริบทของโมเดล
หากโทเค็นยังเป็นแนวคิดที่คลุมเครือ เริ่มจาก What is a token in AI? หน้านี้ถือว่าคุณรู้แล้วว่าโทเค็นคืออะไร
อ่าน finish_reason ก่อน#
ทุก choice ในคำตอบแชตมี finish_reason อยู่ข้าง ๆ usage บอกว่ามีโทเค็นเข้าและออกกี่ตัว
นี่คือหน้าตาของคำตอบที่ถูกตัดเทียบกับคำตอบที่จบแล้ว คำขอถามว่า "In one short sentence, what is a token?" ครั้งแรกตั้ง max_tokens เป็น 16 จากนั้นเป็น 200
ตัวอย่างประกอบ ไม่ใช่คำตอบที่บันทึกไว้: จำนวนและฟิลด์เพิ่มเติมของคุณจะต่างออกไป
{
"choices": [
{
"message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usu" },
"finish_reason": "length"
}
],
"usage": { "prompt_tokens": 21, "completion_tokens": 16, "total_tokens": 37 }
}{
"choices": [
{
"message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usually a word or part of a word." },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 21, "completion_tokens": 24, "total_tokens": 45 }
}ในคำตอบแรก completion_ คือ 16 เท่ากับเพดานพอดี และข้อความจบที่ "usu" ในคำตอบที่สองโมเดลหยุดที่ 24 โทเค็น ต่ำกว่าเพดาน 200 มาก เพราะมันจบแล้ว
หากต้องการหาว่าเกิดอะไรขึ้น ให้ไล่ตามลำดับนี้:
- ดู
finish_reasonถ้าเป็นstopคำตอบสมบูรณ์ โมเดลเลือกจบเอง หรือชน stop sequence ที่คุณตั้งไว้ ถ้าเป็นlengthแสดงว่ามีขีดจำกัดตัดคำตอบ และขั้นถัดไปจะบอกว่าเป็นตัวไหน ค่าอื่นก็มี เช่นcontent_filterและtool_callsซึ่งไม่ใช่ปัญหาความยาว - เทียบ
completion_กับtokens max_tokensที่คุณส่งไป ถ้าเท่ากันหรือใกล้เคียง แสดงว่าคุณชนmax_tokens - ถ้า
completion_ต่ำกว่าtokens max_tokensมาก และprompt_tokensมีขนาดใหญ่ หน้าต่างบริบทอาจเต็ม เอกสารอ้างอิงของ DeepSeek ใช้lengthทั้งสองกรณี ดังนั้นฟิลด์เดียวแยกไม่ได้ การเทียบในขั้นที่ 2 คือวิธีแยก เอกสารของ Anthropic และ Z.ai เรียกกรณีที่สองแยกออกมาเป็นmodel_ดูฟิลด์ในคำตอบของคุณเองว่าได้ชื่อไหนcontext_ window_ exceeded
คำอธิบายทั้งสามมาจากเอกสารของนักพัฒนา ตรวจสอบเมื่อ 20 ตุลาคม 2026: DeepSeek, Anthropic และ Z.ai
เลื่อนตารางไปทางขวา →
| สิ่งที่เห็น | finish_reason |
สาเหตุ | สิ่งที่ต้องทำ |
|---|---|---|---|
ถูกตัด, completion_ เท่ากับ max_tokens |
length |
ถึง max_tokens แล้ว |
เพิ่ม max_tokens หรือขอคำตอบเป็นส่วน ๆ |
ถูกตัด, completion_ ต่ำกว่า max_tokens มาก, อินพุตยาว |
length (หรือ model_ ในบาง API) |
หน้าต่างบริบทเต็ม | ย่ออินพุตหรือประวัติ หรือเลือกโมเดลที่มีหน้าต่างใหญ่กว่า |
| สมบูรณ์แต่สั้นกว่าที่ต้องการ | stop |
โมเดลจบเอง หรือ stop sequence ทำงาน | ขอรายละเอียดเพิ่ม ตรวจพารามิเตอร์ stop |
| ไม่มีข้อความ หรือถูกปฏิเสธ | content_filter |
คำตอบถูกกรอง | เขียนคำขอใหม่ |
| ไม่มีข้อความ แต่มีคำขอเรียกเครื่องมือ | tool_calls |
โมเดลต้องการเรียกเครื่องมือ | รันเครื่องมือแล้วส่งผลกลับ |
วิธีแก้ 1: เพิ่ม max_tokens#
สาเหตุที่พบบ่อยที่สุดก็แก้ได้ง่ายที่สุด ตั้ง max_tokens เอง เพื่อให้รู้ว่าเพดานไหนมีผล อย่าพึ่งค่าเริ่มต้น
from openai import OpenAI
client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": "Write a detailed guide to setting up a home network."}],
max_tokens=16000, # example value: stay at or below the model's output limit
)
choice = resp.choices[0]
print(choice.finish_reason, resp.usage.completion_tokens)นี่แสดงรูปร่างของการเรียก คีย์ใส่เป็น YOUR_API_KEY ที่นี่ อย่าเก็บคีย์จริงไว้ในโค้ดที่แชร์
การเพิ่มตัวเลขช่วยได้เพียงถึงขีดจำกัดของโมเดลเอง นี่คือขีดจำกัดบน CheapTokens ตรวจสอบเมื่อ 20 ตุลาคม 2026 เทียบกับรายการโมเดลของ CheapTokens:
เลื่อนตารางไปทางขวา →
| โมเดล | Model ID | เอาต์พุตสูงสุดต่อคำตอบ | บริบท |
|---|---|---|---|
| DeepSeek-V4-Flash (0731) | deepseek- |
32,768 โทเค็น | 380K |
| GLM-5.3-Flash | zai- |
8,192 โทเค็น | 390K |
| MiniMax-M2.7 | MiniMaxAI/ |
8,192 โทเค็น | 200K |
นักพัฒนาเผยแพร่ขีดจำกัดของ API ตัวเอง ตัวอย่างเช่น Z.ai ระบุเอาต์พุตสูงสุดถึง 128K สำหรับซีรีส์ GLM-5 ซึ่งไม่ใช่ขีดจำกัดของ GLM-5.3-Flash บน CheapTokens ที่ 8,192 โทเค็นต่อคำตอบ สำหรับสิ่งที่คุณสร้างบน CheapTokens ให้ใช้ตารางด้านบน
วิธีแก้ 2: เมื่อหน้าต่างบริบทเต็ม#
ในการแชต ประวัติทั้งหมดถูกส่งไปใหม่ทุกข้อความ อินพุตจึงโตขึ้นทุกเทิร์น หน้าต่างบริบทต้องรองรับประวัตินั้นบวกคำตอบใหม่ ถ้าประวัติอย่างเดียวกินเกือบทั้งหมด แทบไม่เหลือที่ให้ตอบ
หน้าต่างเหล่านี้ใหญ่ และคำถามสั้น ๆ ข้อเดียวไม่ทำให้เต็ม แต่แชตยาว ๆ และเอกสารที่วางเข้ามาทำได้ สิ่งที่ช่วยได้:
- เริ่มแชตใหม่สำหรับงานใหม่ แทนการต่อจากของเก่า
- ขอให้โมเดลสรุปบทสนทนาที่ผ่านมา แล้วพาไปต่อแค่สรุป
- ตัดข้อความเก่าและไฟล์แนบที่ไม่ต้องการแล้ว
- ถ้าอินพุตเองใหญ่โต ให้เลือกโมเดลที่หน้าต่างใหญ่ที่สุด ในบรรดาของเรา นั่นคือ GLM-5.3-Flash ที่ 390K ขีดจำกัดเอาต์พุตคือ 8,192 โทเค็น ดังนั้นขอผลลัพธ์ยาว ๆ เป็นส่วน ๆ
วิธีแก้ 3: ขอคำตอบยาวเป็นส่วน ๆ#
เมื่อคำตอบที่ต้องการยาวกว่าขีดจำกัดเอาต์พุตของโมเดล ไม่มีการตั้งค่าใดทำให้พอดีในคำตอบเดียวได้ ขอเป็นชิ้น ๆ: เมื่อ finish_reason เป็น length ส่งคำตอบบางส่วนกลับไปแล้วขอให้โมเดลทำต่อ
messages = [{"role": "user", "content": "Write a detailed guide to setting up a home network."}]
parts = []
for _ in range(4): # example limit: at most 4 rounds
resp = client.chat.completions.create(
model="zai-org/GLM-5.3-Flash",
messages=messages,
max_tokens=8000, # example value: below this model's output limit
)
choice = resp.choices[0]
parts.append(choice.message.content)
if choice.finish_reason != "length":
break
messages.append({"role": "assistant", "content": choice.message.content})
messages.append({"role": "user", "content": "Continue exactly where you stopped. Don't repeat anything."})
text = "".join(parts)ข้อควรระวังเดิม: เป็นตัวอย่างของรูปแบบ ไม่ใช่การรันที่บันทึกไว้ อ่านรอยต่อระหว่างส่วน โมเดลบางครั้งพูดประโยคซ้ำหรือเริ่มลิสต์ใหม่ตรงรอยต่อ
แต่ละรอบส่งทุกอย่างที่ผ่านมาเป็นอินพุตใหม่ และทุกโทเค็นเอาต์พุตมีค่าใช้จ่าย คำตอบยาวมีค่าใช้จ่ายมากกว่าคำตอบสั้น นี่คือคำตอบแปดพันโทเค็นบนอินพุต 2,000 โทเค็น ซึ่งพอดีกับทุกโมเดลในตาราง:
| โมเดล | Input $/1M | Output $/1M | ค่าใช้จ่าย | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00036 | $0.00069 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00083 | $0.0013 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0013 | $0.0102 |
2,000 โทเค็นอินพุตและ 8,000 โทเค็นเอาต์พุตรวมทั้งหมด ราคาต่อ 1M โทเค็นเป็นราคาปัจจุบันและเปลี่ยนแปลงไปพร้อมกับอัตราค่าบริการของเรา คอลัมน์ OpenRouter แสดงราคาอ้างอิงสำหรับปริมาณงานเดียวกัน
เมื่อ finish_reason เป็น stop#
stop หมายถึงโมเดลจบคำตอบ ถ้ามันจบเร็วกว่าที่ต้องการ นั่นไม่ใช่ปัญหาขีดจำกัด และการเพิ่ม max_tokens ก็ไม่ช่วยอะไร บอกสิ่งที่ต้องการ: ความยาว หัวข้อ ระดับรายละเอียด และตรวจว่าคำขอตั้งพารามิเตอร์ stop ไว้หรือไม่ stop sequence ที่ปรากฏในคำตอบจะจบทันที
เลือกโมเดลตามความยาวคำตอบ#
เริ่มจากคำตอบที่คุณต้องการ ถ้าพอดีใน 8,192 โทเค็น MiniMax-M2.7 (MiniMaxAI/) รองรับได้บน CheapTokens เอาต์พุตถูกกว่าราคาอ้างอิงของ OpenRouter และคิดราคาที่ $0.15 (ต่อ 1M โทเค็นเอาต์พุต) ราคาเท่ากันทุกชั่วโมง ไม่มีช่วงพีค และ API เข้ากันได้กับ OpenAI และ Anthropic
นี่คือรายการราคาปัจจุบันของทุกโมเดล:
| โมเดล | บริบท | Input $/1M | Output $/1M | OpenRouter เข้า | OpenRouter ออก |
|---|---|---|---|---|---|
| GLM-5.3-Flash reasoning | 390K | $0.02 | $0.04 | $0.0413 | $0.0758 |
| DeepSeek-V4-Flash | 380K | $0.015 | $0.10 | $0.0475 | $0.1568 |
| MiniMax-M2.7 | 180K | $0.05 | $0.15 | $0.30 | $1.20 |
ราคาเป็น USD ต่อ 1 ล้านโทเค็น ตัวเลขของ OpenRouter แสดงไว้เพื่อเปรียบเทียบและอาจมีการเปลี่ยนแปลง
ถ้ายังไม่ได้ส่งคำขอ Your first API request with CheapTokens อธิบายขั้นตอนไว้ สำหรับโทเค็นคืออะไรและทำไมอินพุตและเอาต์พุตนับแยกกัน ดู What is a token in AI?
Endpoint, model id และขีดจำกัดของทุกโมเดลอยู่ใน CheapTokens docs



