https://www.doubao.com/chat/38449238196456706
报错根因
MCP服务器、Skills在会话初始化就会把全部工具定义、系统提示注入上下文,哪怕闲置也持续占用token;自动摘要多次之后依然顶满窗口,说明静态工具定义+历史+大工具返回叠加超限,不是单纯对话太长。下面按优先级操作:
1. 立刻处理(最快见效)
- 查看当前所有MCP列表
/mcp
- 只保留当前任务必须的1~2个MCP,其余全部禁用(多个MCP的工具Schema叠加消耗非常大,是这个报错头号元凶)
原则:能直接用内置CLI命令完成的(git、gh、ls等),不要开对应MCP
- 清理Skills:打开配置,关闭当前任务不需要的Skills。每个Skill都会注入一长串system prompt,多个叠加很容易吃掉几万token
- 会话命令
/compact # 手动强制压缩历史(已经多次自动压缩时效果有限)
/clear # 终极方案:新开干净会话,把任务摘要、关键文件路径写进去,不要粘贴整段代码
提示:
/compact多次失败后不要再反复压缩,压缩本身也会占用上下文,直接新开会话更稳
2. MCP深度优化(根治静态开销)
- 启用
defer_loading(延迟加载):MCP配置里加上defer_loading: true,不调用的时候不把工具定义塞进上下文,只在真正要调用这个工具时才加载,是最推荐的优化项 - 限制MCP单次输出上限:环境变量
MAX_MCP_OUTPUT_TOKENS=10000
默认20000,日志、大文件读取很容易打满;还可以设置 CODEBUDDY_DISABLE_MCP_LARGE_OUTPUT_FILES=1 强制截断超大返回,避免落盘+引用文本持续占上下文
- 工具调用习惯:读大文件、日志时,不要一次性全量读取,使用offset/limit分页读取,或者让它只返回过滤后的摘要,不要原始全量文本
3. Skills 优化
- 精简每个Skill的prompt,删掉冗余说明、长篇示例
- 多Skill不要同时启用,按需临时启用,用完立刻关掉
- 长规则、知识库不要塞在Skill里,改成让Agent按需读取本地文件(@文件路径),而不是永久注入系统上下文
4. 文件读取 & 任务流习惯(长期防超限)
- 不要粘贴大段代码、日志进对话,统一用
@path/to/file引用 - 大项目任务拆分:大重构拆成多个子任务,每个子任务独立会话;用子代理执行日志扫描、批量分析,子代理只返回摘要,原始输出留在子会话不进主上下文
- 查看token消耗:
/cost
看是 system(工具/skill)、history 还是 tool_output 占大头,针对性砍
5. 兜底方案
- 切换更大上下文窗口的模型
/model - 配置文件层面直接注释掉暂时不用的MCP和Skill,而不是只在界面关闭(部分版本界面开关不生效)
排查顺序速记
/mcp→ 关掉无关MCP(优先)- 关闭闲置Skills
- 配置MCP
defer_loading: true - 大文件分页读取,禁止全量读入上下文
/compact压缩;无效就/clear新开会话- 调小
MAX_MCP_OUTPUT_TOKENS