Qwen Code 改进建议

April 5, 2026 · View on GitHub

核心洞察:现代 AI Agent 在发起一轮对话时,除了用户输入的文字,还需隐式携带大量“附件(Attachments)”(包括系统指令、环境变量、挂载的文件、LSP 报错、Lint 告警、MCP 资源等)。如果不加以严格的容量管制和层级区分,一段长达 15KB 的 LSP 报错日志可能会把仅有的剩余 Token 预算全部挤占,甚至导致真正关键的用户文件代码被抛弃。Claude Code 首创了高达 40 多种维度的“附件类型(Attachment Types)”并给各自设定了微观的 Token Budget(令牌预算);而 Qwen Code 目前在拼装上下文时基本是盲目的字符串追加。

返回 改进建议总览

一、没有预算管控的混沌上下文

1. Qwen Code 现状:暴力的追加与溢出

当处理用户的输入(比如用户在对话中抛入了一张图,或者系统自动读取了某个代码文件)时,Qwen Code 的逻辑通常是将其拼接到 messages 数组里,直到触发最终的 70% 截断红线。

  • 痛点一(垃圾挤占高价值信息):如果后台扫描抛出了一堆很长的警告信息(Warning Logs),或者某一个次要配置文件体积过大,它们会被全盘照收,结果就是上下文空间被劣质数据填满。
  • 痛点二(无法提供截断解释):当因为长度限制不得不丢弃内容时,Qwen Code 的做法是底层强行截断。大模型并不知道“这里少了一块”,因而容易产生幻觉(以为文件原本就这么短)。

2. Claude Code 解决方案:微观限额与类型感知

Claude Code 的 utils/attachments.ts 实现了一个非常严谨和细致的“装载协议”。

机制一:按类型的独立微观预算

它为 40 种不同的附加数据定义了严格的配额:

  • memory_file_content(记忆文件):最多允许 200 行或 4KB。超过后,模型知道自己只看到了摘要,需要进一步调用 FileRead 自己去看。
  • lsp_diagnostic(语言服务器报错):极有可能爆炸的数据源,单独限制了一个紧凑的阈值。
  • 所有附件整体有一个总预算(例如 60KB Token),当逼近总线时,会根据优先级(Priority)丢弃不重要的数据。

机制二:三阶段有序执行收集

收集如此多的上下文信息需要非常讲究的顺序(防止错乱和竞态):

  1. User Input Attachments (用户输入级):最先被解析(例如命令行直接拖入的图片、硬链接的文件),因为它的重要度最高,且可能触发深层目录的记忆规则发掘。
  2. Thread Attachments (会话流级别):处理在对话流转中后台任务收集到的诊断和工具记录。
  3. Main Thread Attachments (主进程状态):最后附加最新的 Git 状态树和环境变量。

机制三:优雅的脱水降级提示

当任意一处触发了截断(Truncation),它不会生硬截掉,而是附加上明确的旁白: "... [Content truncated. Use FileRead Tool to view the complete content]" 这给了大模型一个“台阶下”,让大模型明白这不是全貌,如果它觉得关键,它可以马上动用自身能力去检索!

二、Qwen Code 的改进路径 (P1 优先级)

为了防止长上下文变成无意义的“垃圾场”,必须实施严格的“进场检查”。

阶段 1:定义 Attachment 数据结构与层级

  1. 新增 packages/core/src/core/attachments.ts
  2. 重构当前各种拼接提示词的杂乱逻辑。定义统一的 AttachmentItem 接口:type, content, priority, maxTokens
  3. 根据不同类型设定常量,比如针对普通文本文件的 FILE_CONTENT_LIMIT = 8192

阶段 2:引入预检与分级截断器

agent-core.ts 组装给模型的最终 Payload 前进行截断组装:

  1. 编写计算剩余 Token 的估算工具(可以用简单的体积估算法)。
  2. 在往 messages 插入非核心附件前检查:如果剩余额度告急,优先丢弃低优先级的环境信息或日志,死保用户输入和核心代码树。
  3. 如果单一文件发生体积截断,用专有后缀字符串 [Truncated, invoke your tool to read full text if necessary] 收尾。

阶段 3:并行抓取机制

为了与前面的“同步变异步”理念配合,将阶段性的获取动作改成 Promise.all() 的数组并发收集模式,极大缩短上下文汇聚的耗时。

三、改进收益评估

  • 实现成本:中等。核心是重写 Payload 的组装方式,增强类型的规范性。
  • 直接收益
    1. 上下文质量的极致提升:模型获取到的信息具有更高的“信噪比(SNR)”,大大减少大模型因为冗余背景噪声产生的推理偏差。
    2. 避免溢出车祸:消灭那些因为某一个文件奇大无比而直接阻断整个问答回合的意外报错。