Bumalik sa blog

AI para sa mga baguhanGabay

Bakit humihinto sa gitna ng pangungusap ang sagot ng AI? Ipinaliwanag ang max_tokens, context window at finish_reason

Ang sagot ng AI na humihinto sa gitna ng pangungusap ay naabot ang isang limitasyon. Basahin ang finish_reason, tukuyin ang max_tokens mula sa punong context window at tingnan ang output limit ng bawat modelo.

Ni CheapTokens TeamNai-publish noong Na-update noong 7 min na pagbabasa

Madilim na cover na may logo ng cheaptokens: ang mga salitang max_tokens, finish_reason at length sa mga kahon, at ang headline na “Answer cut off mid-sentence?”
Sa pahinang ito
  1. Tatlong limitasyon na pumuputol ng sagot
  2. Basahin muna ang finish_reason
  3. Ayos 1: taasan ang max_tokens
  4. Ayos 2: kapag puno ang context window
  5. Ayos 3: kumuha ng mahabang sagot nang paisa-isa
  6. Kapag ang finish_reason ay stop
  7. Pagpili ng modelo ayon sa haba ng sagot

Ang isang sagot na humihinto sa gitna ng pangungusap ay halos palaging pinutol ng isang limitasyon. Hindi nawala ang takbo ng isip ng modelo; naubusan lang ng espasyo ang kahilingan. Sinasabi ng tugon kung aling limitasyon ito: basahin ang finish_reason. Ang length ay nangangahulugang naabot ang isang limitasyon. Ang stop ay nangangahulugang natural na natapos ang modelo.

Tatlong bagay ang nagtatakda kung gaano kahaba ang isang sagot. Kapag alam mo na kung alin ang kumagat, isang minuto lang ang pag-aayos.

Tatlong limitasyon na pumuputol ng sagot#

  • max_tokens ay isang takda na ikaw ang nagtatakda sa kahilingan. Kapag naabot ito ng sagot, humihinto ang pagbuo, kahit sa gitna ng salita. Itinutukoy ito ng API reference ng DeepSeek bilang maximum na bilang ng token na nabuo sa completion.
  • Ang output limit ng modelo ay ang kisame para sa isang sagot mula sa modelong iyon. Pag-aari ito ng modelo, kaya panatilihing nasa o mas mababa sa limitasyong ito ang max_tokens. Ang mga numero para sa aming mga modelo ay nasa talahanayan sa ibaba.
  • Ang context window ay ang espasyo para sa buong palitan: ang iyong input at ang sagot nang magkasama. Sinasabi ng reference ng DeepSeek na ang input at nabuong token nang magkasama ay nililimitahan ng context length ng modelo.

Kung malabo pa rin ang ideya ng token, magsimula sa What is a token in AI?. Ipinapalagay ng pahinang ito na alam mo kung ano ito.

Basahin muna ang finish_reason#

Bawat pagpipilian sa isang chat response ay may finish_reason. Sa tabi nito, sinasabi ng usage kung ilang token ang pumasok at lumabas.

Narito ang hitsura ng isang putol na sagot sa tabi ng isang tapos na. Ang kahilingan ay nagtanong ng "In one short sentence, what is a token?", una na may max_tokens na nakatakda sa 16, pagkatapos ay may 200.

Halimbawang paglalarawan, hindi isang naitalang tugon: mag-iiba ang iyong mga bilang at karagdagang field.

json
{
  "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 }
}
json
{
  "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 }
}

Sa unang tugon, ang completion_tokens ay 16, eksaktong ang takda, at nagtatapos ang teksto sa "usu". Sa pangalawa, huminto ang modelo sa 24 na token, mas mababa sa takdang 200, dahil tapos na ito.

Para malaman kung ano ang nangyari, sundan ito nang sunod-sunod:

  1. Tingnan ang finish_reason. Kung ito ay stop, kumpleto ang sagot. Pinili ng modelong tapusin ito, o naabot ang isang stop sequence na itinakda mo. Kung ito ay length, may limitasyong pumutol sa sagot, at sasabihin ng susunod na hakbang kung alin. May iba pang mga halaga, tulad ng content_filter at tool_calls; wala sa mga ito ang problema sa haba.
  2. Ihambing ang completion_tokens sa max_tokens na ipinadala mo. Kung pantay o halos pantay ang mga ito, naabot mo ang max_tokens.
  3. Kung ang completion_tokens ay mas mababa nang malaki sa max_tokens at malaki ang prompt_tokens, malamang napuno ang context window. Ginagamit ng reference ng DeepSeek ang length para sa parehong kaso, kaya hindi ito maihihiwalay ng field nang mag-isa; ang paghahambing sa hakbang 2 ang paraan para malaman. Pinangalanan ng dokumentasyon ng Anthropic at Z.ai ang pangalawang kaso nang hiwalay, bilang model_context_window_exceeded. Tingnan ang field sa iyong sariling mga tugon para makita kung aling pangalan ang nakukuha mo.

Ang lahat ng tatlong paglalarawan ay mula sa dokumentasyon ng mga developer, sinuri noong 20 Oktubre 2026: DeepSeek, Anthropic at Z.ai.

Ano ang nakikita mo finish_reason Sanhi Ano ang gagawin
Putol, ang completion_tokens ay katumbas ng max_tokens length Naabot ang max_tokens Taasan ang max_tokens, o hilingin ang sagot nang paisa-isa
Putol, ang completion_tokens ay malayo sa ibaba ng max_tokens, mahaba ang input length (o model_context_window_exceeded sa ilang API) Puno ang context window Paikliin ang input o ang history, o pumili ng modelong may mas malaking window
Kumpleto pero mas maikli kaysa sa gusto mo stop Natapos ang modelo, o may nag-trigger na stop sequence Humingi ng mas maraming detalye; tingnan ang parameter na stop
Walang teksto, o isang pagtanggi content_filter Na-filter ang tugon Baguhin ang pagkakasabi ng kahilingan
Walang teksto, isang tool request sa halip tool_calls Gustong tumawag ng tool ng modelo Patakbuhin ang tool at ipadala pabalik ang resulta

Ayos 1: taasan ang max_tokens#

Ang pinakakaraniwang sanhi ay ang pinakamadaling ayusin. Itakda mo mismo ang max_tokens, para alam mo kung aling takda ang naaangkop. Huwag umasa sa default.

python
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)

Ipinapakita nito ang hugis ng tawag. Ang key ay ipinasok bilang YOUR_API_KEY dito; huwag maglagay ng tunay na key sa code na ibinabahagi mo.

Ang pagtaas ng numero ay nakakatulong lamang hanggang sa sariling limitasyon ng modelo. Narito ang mga limitasyon sa CheapTokens, sinuri noong 20 Oktubre 2026 laban sa listahan ng modelo ng CheapTokens:

Modelo Model ID Max output bawat sagot Context
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32,768 token 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8,192 token 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8,192 token 200K

Naglalathala ang mga developer ng sarili nilang mga limitasyon para sa sarili nilang mga API. Halimbawa, naglilista ang Z.ai ng hanggang 128K output para sa seryeng GLM-5. Hindi iyon ang mga limitasyon ng GLM-5.3-Flash sa CheapTokens, na 8,192 token bawat sagot. Para sa anumang binuo mo sa CheapTokens, gamitin ang talahanayan sa itaas.

Ayos 2: kapag puno ang context window#

Sa isang chat, ang buong history ay ipinapadala muli sa bawat mensahe, kaya lumalaki ang input sa bawat turn. Kailangang hawakan ng context window ang history na iyon kasama ang bagong sagot. Kung ang history pa lang ay halos kumukuha ng lahat, halos wala nang natitirang espasyo para sa tugon.

Malalaki ang mga window na ito, at hindi ito mapupuno ng isang maikling tanong. Mapupuno ito ng mahahabang chat at mga na-paste na dokumento. Ano ang nakakatulong:

  • Magsimula ng bagong chat para sa bagong gawain sa halip na ipagpatuloy ang luma.
  • Hilingin sa modelong ibuod ang pag-uusap hanggang ngayon, at dalhin lamang ang buod.
  • Putulin ang mga lumang mensahe at attachment na hindi mo na kailangan.
  • Kung napakalaki ng input mismo, piliin ang modelong may pinakamalaking window. Sa amin, iyon ay GLM-5.3-Flash sa 390K. Ang output limit nito ay 8,192 token, kaya humingi ng mahabang resulta nang paisa-isa.

Ayos 3: kumuha ng mahabang sagot nang paisa-isa#

Kapag ang sagot na gusto mo ay mas mahaba kaysa sa output limit ng modelo, walang setting na makakapagkasya ito sa isang tugon. Humingi nang paisa-isa: kapag ang finish_reason ay length, ipadala pabalik ang bahagyang sagot at hilingin sa modelong magpatuloy.

python
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)

Parehong paalala: halimbawa ng pattern, hindi naitalang run. Basahin ang mga dugtong sa pagitan ng mga bahagi. Minsan inuulit ng modelo ang isang pangungusap o nagsisimula muli ng listahan sa dugtong.

Bawat round ay ipinapadala muli ang lahat ng nauna bilang input, at bawat output token ay sinisingil. Mas mahal ang mahabang sagot kaysa sa maikli. Narito ang isang walong-libong-token na sagot sa 2,000 token na input, na kasya sa lahat ng modelo sa talahanayan:

Modelo Gastos OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

2,000 input at 8,000 output na token sa kabuuan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Kapag ang finish_reason ay stop#

Ang stop ay nangangahulugang tinapos ng modelo ang sagot. Kung natapos ito nang mas maaga kaysa sa gusto mo, hindi iyon problema sa limitasyon at walang mababago ang mas malaking max_tokens. Sabihin kung ano ang gusto mo: ang haba, ang mga seksyon, ang antas ng detalye. Tingnan din kung nagtatakda ang kahilingan ng parameter na stop; ang stop sequence na lumalabas sa sagot ay nagtatapos dito agad.

Pagpili ng modelo ayon sa haba ng sagot#

Magsimula sa sagot na kailangan mo. Kung kasya ito sa 8,192 token, kayang hawakan ito ng MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) sa CheapTokens. Mas mura ang output nito kaysa sa reference price ng OpenRouter, at sinisingil ito sa $0.15 (bawat 1M output token). Pareho ang presyo sa anumang oras, walang peak hours, at ang API ay OpenAI- at Anthropic-compatible.

Narito ang kasalukuyang listahan ng presyo para sa bawat modelo:

Modelo Context Input $/1M Output $/1M OpenRouter in OpenRouter out
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

Mga presyo sa USD bawat 1M token. Ang mga figure ng OpenRouter ay ipinapakita para sa paghahambing at maaaring magbago.

Kung hindi ka pa nakakapagpadala ng kahilingan, tinutukoy ito ng Your first API request with CheapTokens. Para sa kung ano ang token at bakit hiwalay na binibilang ang input at output, tingnan ang What is a token in AI?.

Ang mga endpoint, model id at limitasyon para sa bawat modelo ay nasa CheapTokens docs.