context_length_exceeded ã®åå ãšçŽãæ¹ïŒããŒã¯ã³è¶ éãšã©ãŒãã³ãŒãã§é²ã

ãã®èšäºã®èŠç¹
context_length_exceededã¯ããªã¯ãšã¹ããã¢ãã«ã®ã³ã³ããã¹ãé·ã«åãŸããªããšãã«è¿ããšã©ãŒã§ããåãå 容ãéãçŽããŠãéããŸããã- åå ã¯2ã€ãããŸããå
¥åãã®ãã®ã倧ããããå Žåãšã
max_tokensã®æå®ã倧ãããåºåã®äºçŽåãŸã§è¶³ããšè¶ ããå Žåã§ãã - Anthropicã§ã¯åãç¶æ³ã
prompt is too longãšããã¡ãã»ãŒãžã®400ãšã©ãŒã«ãªããcodeã®å€ã§ã¯å€å®ã§ããŸããã - çŽãæ¹ã¯ã
max_tokensãäžãããå€ãå±¥æŽãåããèŠçŽãããæ ã®å€§ããã¢ãã«ã«åãæ¿ãããã®ããããã§ãã
ã³ãŒããåãããŠããŠã次ã®ãšã©ãŒãè¿ã£ãŠããå Žåã®å¯ŸåŠããŸãšããŸããã³ã³ããã¹ããŠã£ã³ããŠã®ä»çµã¿ãã®ãã®ã¯ãã³ã³ããã¹ããŠã£ã³ããŠãšã¯ã§è§£èª¬ããŠããŸãã
context_length_exceeded ã®ãšã©ãŒæ¬æ
OpenAIã®Chat Completions APIã§ã¯ãHTTP 400ã§æ¬¡ã®åœ¢ã®æ¬æãè¿ããŸããOpenAIã®éçºè ãã©ãŒã©ã ã«æçš¿ãããå®äŸã§ãã
{
"error": {
"message": "This model's maximum context length is 8192 tokens. However, you requested 9850 tokens (1750 in the messages, 8100 in the completion). Please reduce the length of the messages or completion.",
"type": "invalid_request_error",
"param": "messages",
"code": "context_length_exceeded"
}
}
ãã£ãã®äžã®æ°åãæãããã§ãããã®äŸã§ã¯å
¥åã¯1,750ããŒã¯ã³ãããªããmax_tokens ã®8,100ãäžéãæŒãäžããŠããŸããå
¥åãåãåã«ããŸã max_tokens ã確ãããŸãã
ã³ãŒãã®å€ã¯OpenAIã®å
¬åŒããã¥ã¡ã³ãã«ããå
¥åãã¢ãã«ã®ã³ã³ããã¹ããŠã£ã³ããŠãè¶
ãããšãã®ãã®ãšããŠèŒã£ãŠããŸããResponses APIã§ã¯ãYour input exceeds the context window of this model. Please adjust your input and try again. ãšããæèšã®400ãå ±åãããŠããŸãã
Anthropicã§ã¯ prompt is too long
Anthropicã®å
¬åŒããã¥ã¡ã³ãã«ãããšãå
¥åã ãã§æ ãè¶
ãããšã400ã® invalid_request_error ã prompt is too long ãšããã¡ãã»ãŒãžã§è¿ããŸããæ¬æã®åœ¢ã¯ type ãš message ãæã€ error ãªããžã§ã¯ãã§ãcode ã¯ãããŸããã
Claude 4.5以éã®ã¢ãã«ã§ã¯ãå
¥åãš max_tokens ã®åèšãæ ãè¶
ããã ããªããªã¯ãšã¹ãã¯åãä»ããããŸããçæãæ ã®ç«¯ã«å±ããš stop_reason ã model_context_window_exceeded ã«ãªã£ãŠæ¢ãŸãã®ã§ããšã©ãŒãæãŸããã ãã§ã¯åãè©°ãã«æ°ã¥ããŸããã
åå ã®èŠåãæ¹
| æããã | åå | çŽãæ¹ |
|---|---|---|
å
¥åã¯å°ãããmax_tokens ã倧ãã | åºåã®äºçŽã§è¶ ããŠãã | max_tokens ãäžãã |
| å ¥åã ãã§äžéãè¶ ããŠãã | å±¥æŽãè³æã倧ãã | å±¥æŽãåããèŠçŽãã |
| ãšãŒãžã§ã³ãã®å®è¡äžã«çªç¶åºã | ããŒã«ã®çµæãç©ã¿äžãã£ã | å€ãããŒã«ã®çµæãèŠç¹ã«çœ®ãæãã |
| ã©ãåã£ãŠãè¶³ããªã | ã¢ãã«ã®æ ãå°ãã | æ ã®å€§ããã¢ãã«ã«å€ãã |
éãåã®èŠç©ããã«ã¯ãã¬ã¹ãã³ã¹ã® usage ããFastMetalã®AnthropicäºæAPIã«ããããŒã¯ã³ã«ãŠã³ãã䜿ããŸããæ¥æ¬èªã¯ããŒã¯ã³ã®æ°ãæ¹ã«çãããã®ã§ãæåæ°ããã®æç®ã¯LLMã®ããŒã¯ã³ãšã¯ãåèã«ããŠãã ããã
å±¥æŽãåã£ãŠéãçŽãã³ãŒã
æèšã¯APIããšã«éãã®ã§ãcode ãšã¡ãã»ãŒãžã®äž¡æ¹ãèŠãŠå€å®ããŸããè¶
ããŠãããå€ãå±¥æŽãååèœãšãããŠãŒã¶ãŒã®çºèšããå§ãŸãããã«æããŠããéãçŽããŸããããŒã«ã®çµæã ããå
é ã«æ®ããšãå¥ã®ãšã©ãŒã«ãªãããã§ãã
import os
from openai import BadRequestError, OpenAI
client = OpenAI(
api_key=os.environ["FASTMETAL_API_KEY"],
base_url="https://api.fastmetal.ai/v1",
)
OVERFLOW_MARKERS = (
"maximum context length",
"exceeds the context window",
"prompt is too long",
)
def is_context_overflow(err: BadRequestError) -> bool:
if err.code == "context_length_exceeded":
return True
return any(marker in err.message.lower() for marker in OVERFLOW_MARKERS)
def complete(system: dict, turns: list[dict], max_tokens: int = 1024):
while True:
try:
return client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[system] + turns,
max_tokens=max_tokens,
)
except BadRequestError as err:
if not is_context_overflow(err) or len(turns) <= 1:
raise
turns = turns[len(turns) // 2:]
while len(turns) > 1 and turns[0]["role"] != "user":
turns = turns[1:]
åãã ãã§ã¯æ±ºãŸã£ãããšãæ°å€ã倱ãããŸããé·ãäŒè©±ã§ã¯ãå€ãéšåãèŠçŽã«çœ®ãæããæ¹æ³ãåããŠããŸããå®è£ äŸã¯ã³ã³ããã¹ããŠã£ã³ããŠãšã¯ã«èŒããŠããŸãã
FastMetalã§æ ã®å€§ããã¢ãã«ã«åãæ¿ãã
FastMetalã¯ãOpenAIäºæAPIã§ã¢ãã«ãåãæ¿ããããæ¥æ¬ã®AIã²ãŒããŠã§ã€ã§ããmodel ã®æååãå€ããã ãã§ãåãã³ãŒãã®ãŸãŸæ ã®éãã¢ãã«ã詊ããŸããããšãã° deepseek-v4.1-flash ã¯100äžããŒã¯ã³ã®ã³ã³ããã¹ãã«å¯Ÿå¿ããŠããŸããã»ãã®ã¢ãã«ã®æ ã¯ã¢ãã«äžèŠ§ã§æ¯ã¹ãããŸãã
æéã¯100äžããŒã¯ã³ãããã®åŸé課éã§ãæ ã®å€§ããã¢ãã«ã§ãéã£ãåã ãå ¥åãšããŠèª²éãããŸããå建ãŠã®åäŸ¡ã¯æéããŒãžã§ç¢ºèªã§ããŸãã
ãããã質å
context_length_exceeded ã¯ãªãã©ã€ã§çŽããŸãã
çŽããŸãããåããªã¯ãšã¹ãã¯ãã€éã£ãŠãåã倧ãããªã®ã§ãå
容ã max_tokens ãå€ããå¿
èŠããããŸãããªãã©ã€ã®å¯Ÿè±¡ããå€ããŠãããŸãã
max_tokens ãçç¥ããã°èµ·ããŸããã
å ¥åã ãã§æ ãè¶ ããŠãããšãã¯ãçç¥ããŠãèµ·ããŸããåºåã®äºçŽãåå ã®ãšãã¯ãå€ãäžããã°è§£æ¶ããŸããå¿ èŠãªé·ããèŠç©ãã£ãŠæç€ºããã»ãããæåãèªã¿ããããªããŸãã
ãšã©ãŒã«ãªããã«åºåãåããã®ã¯å¥ã®åé¡ã§ãã
å¥ã®åé¡ã§ããæ ã®æåã§æ¢ãŸã£ãå Žåã¯ãHTTP 200ã®ãŸãŸ finish_reason ã length ã«ãªããŸããã¬ã¹ãã³ã¹ããšã«å€ã確ãããŸãã
äžéãããããŸã§è©°ããŠã倧äžå€«ã§ãã
æ ã«åãŸã£ãŠããŠããè©°ã蟌ãã»ã©ç²ŸåºŠãäžããåŸåããããŸããå¿ èŠãªæ å ±ã«çµã£ãŠéãã®ãåºæ¬ã§ãã
ãŸãšã
context_length_exceeded ã¯ãªãã©ã€ã§ã¯çŽããªããšã©ãŒã§ãããšã©ãŒæ¬æã®æ°åããå
¥åãš max_tokens ã®ã©ã¡ããåå ããèŠåããå±¥æŽãæžããããæ ã®å€§ããã¢ãã«ã«åãæ¿ããŸãã
FastMetalã§ã¯1ã€ã®APIããŒã§ã¢ãã«ãåãæ¿ããããŸããç¡æã§ã¢ã«ãŠã³ããäœæããŠãmodel ãå€ããŠè©ŠããŸãã