楼主:
DrTech (竹科管理处网军研发人员)
2026-03-08 00:28:14※ 引述《pacino (扫地僧)》之铭言:
: 看了这两串, 充满了疑问..
: 想讨论一下这个主题: token
: (1) 每个LLM 都有自己的max. tokens
: 这是在training model时就要决定的
: (2) max output tokens是让agent在送给LLM 之前处理用的,避免超过LLM model的max. to
: (3) rules 没被执行,有可能是context可能超过LLM model的max. tokens, agent 主动压?
: 这样不就解释了两串原po的问题?
: 麻烦指正,若我的了解有误。
CLAUDE_CODE_MAX_OUTPUT_TOKENS
用途:用来指定LLM单次最多回答多少tokens。
但这个长度控制,不是由LLM或agent来控制的。
也不是放在prompt给LLM做推理判断长度的。
LLM只是一堆权重与计算。
不是真正有action的程式,不会自己决定输出长度。只会被动的等待输入,计算输出。
LLM会停止输出,全部是靠写死的程式码控制。
(非AI自己决定停止)
以下举几个例子:
1.正常情况:
没用满模型token最大长度限制,就得到答案。
机制如下:
应用层的model serving 程式码 (例如用vllm假设) 看到LLM这是是输出 EOS (end-of-sentence) token。
tokens,停止继续使用LLM推理。
决定停止推理下一个token的不是LLM
而是应用层,程式码码写死:看到了各模型输出了特殊的EOS,请应用层停止再使用LLM。
对模型来说,输出EOS是没特殊意义的,
就是机率+ decoding strategy决定的。
LLM不会因为输出EOS有什么行动。
赋予EOS要停止使用LLM的是应用层。
简单说:停止答案继续输出,的绝对不是LLM自己决定的。
2. 模型一直输出,但输出太长了还是没算出答案
也就是一直输出,但没算出EOS token。
这种情况,也不是LLM在控制长度,
而是应用层在处理太长的问题。
这分成两种情况:
1. model serving层有做防呆机制,发现长度太长了,所以直接不使用llm产生next token,是回传讯息到上一层讯息,让上一层决定怎么处理。
(大家看到市面上产品,都是走这种方式)
所以会看到 claude产品会输出提示讯息。
所以,长度控制,也不是LLM决定的,是应用层model serving决定的。也可以说人去设定的。
2. 没做防呆机制,直接丢过长的文字(或tensor)给LLM去推理。这是也是看推理层程式码有没有防呆,例如,如果是走pytorch,就是直接跳error程长度不一致,直接结束process。
长度不符,根本进不去,LLM做计算。
以上所有情况可发现:
LLM本身不决定输出长度,全部是其他应用层决定的。
硬要扯:LLM会自己决定输出EOS,要求停止。
这也是观念错误,EOS对LLM没有特殊意义。
EOS是应用层赋予的意义。
你也可以写成看到EOS不要停止的问答系统。
(许多model serving tools都可以改EOS)
最后回答最初那篇:
64K输出长度限制都没终结答案。
也输出过程大概都超过 3000行文字或程式码了。
通常有两种改善方向:
1. prompt要更明确,缩减范围。
2.把复杂任务,拆小一点,每个session解决一个小问题。