GPT Researcher 用 Claude、GPT-5 等长输出模型报告被截断时怎么调整 SMART_TOKEN_LIMIT
【免费下载链接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher
用 GPT Researcher 跑研究时,如果把SMART_LLM换成 Claude 4.x 或 GPT-5 这类输出能力更强的模型,生成的报告可能在段落中间突然结束、内容不完整。官方文档明确说明:默认的 token 限制是按 GPT-4o 级别模型(16k 最大输出)校准的,对于输出容量更大的模型,需要把SMART_TOKEN_LIMIT及相关变量提高到默认值之上,否则会出现截断报告(truncated reports)。LLM 配置文档 中专门用一段引用块提示了这一点,并指向 配置文档 的推荐值表格。本文按"确认问题 → 选值 → 配置 → 验证"的顺序给出操作路径。
确认截断是否由 token 限制引起
SMART_TOKEN_LIMIT控制 smart LLM 响应的最大 token 数,即研究报告、推理这类 smart 操作的输出上限(config.md 中对它的定义是 "Maximum token limit for smart LLM responses")。研究报告生成时,SMART_TOKEN_LIMIT会作为max_tokens传入 LLM 调用(见 report_generation.py),所以报告长度被卡在这个值上时,模型就会在中途停写。
两个文档中记录过的截断现象,可以作为判断参考:
- 深度研究报告不完整、结果不一致,issue 归因于 token limits 和 provider TPM caps,维护者的处理建议就是调高
SMART_TOKEN_LIMIT(ISSUE_BACKLOG.md 中 #1378)。 - 多 Agent 场景下,reviewer 的 JSON 输出因
SMART_TOKEN_LIMIT过低被截断、无法修复,导致修复循环一直转(同上文件 #1137)。
另外,SMART_TOKEN_LIMIT有硬性上限 200000(防止写错的 sanity guard)。如果值被误配得超过 200k,llm.py 中的create_chat_completion会直接抛出ValueError,错误信息会提示:
max_tokens=... exceeds the largest output limit of any currently available model (128k as of late 2025). Check your FAST_TOKEN_LIMIT / SMART_TOKEN_LIMIT / STRATEGIC_TOKEN_LIMIT env vars for typos.出现这条报错时,问题不是"值太小",而是环境变量写错了。
一个需要注意的默认值差异:config.md 写SMART_TOKEN_LIMIT默认值是6000,而仓库内 default.py 当前默认值是12000(同文件中FAST_TOKEN_LIMIT为6000、STRATEGIC_TOKEN_LIMIT为8000)。两处不一致,判断当前环境实际生效的默认值时,以你安装的版本中default.py为准。
按所用模型选择推荐值
config.md 给出的长输出模型推荐值如下:
| 模型系列 | 最大输出 | 推荐 SMART_TOKEN_LIMIT |
|---|---|---|
| GPT-4o / GPT-4.1 | 16k | 8000 |
| Claude Haiku 4.5 | 64k | 16000 |
| Claude Sonnet 4.6 | 64k | 16000 |
| Claude Opus 4.7 | 128k | 32000 |
| GPT-5 系列 | 128k | 32000 |
两点配套说明(均来自同一文档):
- 如果你的
FAST_LLM、STRATEGIC_LLM用的是不同的模型,需要给FAST_TOKEN_LIMIT和STRATEGIC_TOKEN_LIMIT按同样比例设置相应数值。 - 对于 reasoning 模型,这个限制在 default.py 的注释中说明会映射到
max_completion_tokens,该额度同时覆盖 reasoning tokens,因此在可见输出之上还需要预留余量;llm.py 中对应注释也说"预算需要额外的 headroom"。
配置方法
文档给出两条路径:改.env/ 手动 export,或者提供外部 JSON 配置文件。
方式一:环境变量(.env 或 export)
config.md 说明可以直接在.env文件中添加与配置项同名的变量,或在本地手动 export。以 GPT-5 系列模型为例:
export SMART_TOKEN_LIMIT=32000如果 fast/strategic 角色也换了长输出模型,按比例追加,例如:
export FAST_TOKEN_LIMIT=16000 export STRATEGIC_TOKEN_LIMIT=16000方式二:外部 config.json
也可以在config_path参数中指定一个自定义 JSON 文件,格式需与默认 config 的键一致(下面按文档示例格式裁剪,只保留与本文相关的键,SMART_TOKEN_LIMIT按上表 GPT-5 系列的推荐值 32000 填写):
{ "SMART_LLM": "openai:gpt-5.4", "FAST_TOKEN_LIMIT": 16000, "SMART_TOKEN_LIMIT": 32000, "STRATEGIC_TOKEN_LIMIT": 16000 }启动时指定该文件(命令来自 config.md):
python gpt_researcher/main.py --config_path my_config.json如果同时使用 Anthropic 模型,SMART_LLM等变量需按 llms.md 的 Anthropic 章节设置(如SMART_LLM=anthropic:claude-3-opus-20240229),并确保安装了langchain-anthropic(Docker 场景需要把该依赖加入 requirements.txt)。
验证配置是否生效
用官方 LLM 连通性脚本做基础验证
testing-your-llm.md 提供了一个验证 LLM 环境变量配置是否正确的代码片段(仓库中对应文件为 test-your-llm.py),它读取当前Config里的smart_token_limit并实际发起一次调用:
from gpt_researcher.config.config import Config from gpt_researcher.utils.llm import create_chat_completion import asyncio from dotenv import load_dotenv load_dotenv() async def main(): cfg = Config() try: report = await create_chat_completion( model=cfg.smart_llm_model, messages = [{"role": "user", "content": "sup?"}], temperature=0.35, llm_provider=cfg.smart_llm_provider, stream=True, max_tokens=cfg.smart_token_limit, llm_kwargs=cfg.llm_kwargs ) except Exception as e: print(f"Error in calling LLM: {e}") # Run the async function asyncio.run(main())这个脚本的作用是确认 provider、模型名和 token 限制这套组合能正常调通:出现Error in calling LLM: ...说明环境变量或依赖有问题,需要先解决它再谈报告截断。
重跑研究任务确认报告完整
基础调通后,用与截断时相同的研究任务重跑一次。文档给出的目标结果就是"avoid truncated reports":报告应能完整生成,而不是在半句处中断。注意 llms.md 同时提醒,GPT Researcher 是在 GPT 模型上优化和大量测试的,其他模型可能会遇到 context limit 错误和异常响应——如果调高SMART_TOKEN_LIMIT后问题依旧,先核对模型名是否被 provider 正确支持,而不是继续加大这个值。
边界与已知限制
- 硬性上限 200k:
SMART_TOKEN_LIMIT超过 200000 会触发ValueError(见上文报错信息),这是防笔误的保护,不是可突破的配额。 - reasoning 模型额度共享:对 reasoning 模型,
max_completion_tokens同时覆盖 reasoning tokens 和可见输出,文档注释建议在可见输出之上预留余量,取值时不要只按最终报告长度估算。 - provider 侧限制仍然存在:issue #1378 中截断的成因除了 token limits,还包括 provider TPM caps。调高
SMART_TOKEN_LIMIT解决的是本项目侧的输出上限,provider 的配额限制需要另行处理。 - 多 Agent 场景:低
SMART_TOKEN_LIMIT导致 JSON 被截断还会引发 reviewer 修复循环(issue #1137),调高该值是消除这一现象的前提。
【免费下载链接】gpt-researcherAn autonomous agent that conducts deep research on any data using any LLM providers项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-researcher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考