Qwen Code 改进建议
April 5, 2026 · View on GitHub
核心洞察:在一个大型的 Monorepo(单体仓库)中,前端(React/TypeScript)、后端(Go/Python)和文档目录通常有着截然不同的代码风格和最佳实践。如果将所有规则全挤在一个根目录的
QWEN.md里,不仅浪费 Token,还会因为规则冲突导致大模型产生幻觉(例如在 Go 代码里错误应用了 React 的规范)。Claude Code 通过引入@include指令与“递归向上遍历查找”的嵌套记忆自动发现机制,完美解决了这个痛点,而 Qwen Code 目前欠缺这一精细化的规则挂载能力。返回 改进建议总览
一、架构缺陷与使用痛点
1. Qwen Code 的现状:单体配置困境
Qwen Code 目前通常只读取项目根目录下的少量特定配置文件。
- 配置割裂与臃肿:假设你在维护一个全栈项目。你需要告诉 Agent:“前端要使用
camelCase,并使用 TailwindCSS;后端要使用snake_case,不要使用 ORM,手写 SQL”。在现有的单文件配置模式下,这些冲突的指令只能揉在一起,导致 System Prompt 急剧膨胀。 - 无模块化能力:开发者不能像写代码
import那样复用规范,多项目之间共享的通用规范(如安全准则)必须复制粘贴多次。
2. Claude Code 的解决方案:多级挂载与引用
在 utils/claudemd.ts 中,Claude Code 实现了一套灵活的文档加载器系统:
机制一:目录级别的记忆自动发现 (Directory Traversal)
当你让 Agent 编辑 src/frontend/components/Button.tsx 时,Claude Code 不仅会读取全局配置,还会沿着目标文件所在的路径“逐级向上爬”:
- 查找全局系统配置 (
/etc/claude-code/CLAUDE.md) - 查找用户根目录 (
~/.claude/CLAUDE.md) - 查找项目根目录 (
/project/CLAUDE.md) - 查找沿途的特定目录 (
/project/src/frontend/CLAUDE.md,.claude/rules/*.md等)
并且,优先级是越具体的越近(后加载覆盖前加载)。这意味着在处理前端组件时,Agent 会优先看到针对前端的专项定制化指令,不会被后端的指令干扰。
机制二:@include 指令的动态引入
如果不想依赖隐式的目录查找,Claude Code 还提供显式的 @include 指令。
开发者可以在 CLAUDE.md 的任何文本节点(不在代码块内)写下:
# 我们的全栈项目规范
@./src/frontend/frontend_rules.md
@~/global_security_rules.md
加载器会拦截这些指令(利用 marked 进行 Lex 解析提取 Tokens),并将引用的文件内容平铺(Inline)注入到上下文中。系统还硬编码了 MAX_INCLUDE_DEPTH = 5 防止循环引用死锁。
二、Qwen Code 的改进路径 (P1 优先级)
要实现智能体的工业级落地,Qwen Code 必须支持配置的去中心化与模块化。
阶段 1:支持目录爬升自动加载 (Directory Climbing)
- 拦截文件修改操作(如在 Tool 层或更底层的 Context 组装阶段)。
- 每当涉及某个具体文件路径时,计算该路径的祖先目录数组。
- 从上到下,依次读取
.qwen.md或.qwen/rules/*.md并注入系统提示。
阶段 2:解析与支持 @include (Include Directive)
- 编写或引入一个小型的 Markdown 解析器/正则表达式层,在读取
QWEN.md时拦截以@开头的独立行。 - 支持
@./(相对当前配置文件) 和@~/(相对用户 Home 目录) 两种路径。 - 递归解析这些文件,并拼接最终的纯文本 System Prompt。
阶段 3:缓存去重与安全防御
- 引入解析树去重机制(避免被包含的文件内部出现交叉包含引发栈溢出)。
- 只允许包含纯文本后缀的文件(如
.txt,.md),拒绝.bin,.exe等二进制文件读取以防止奇怪的文件系统错误。
三、改进收益评估
- 实现成本:中。需要改造配置加载阶段的逻辑。
- 直接收益:
- 巨幅节省 Token 成本:按需加载让大模型的系统上下文变得精简、相关,消除不必要的输入计费。
- 消除规则冲突:Monorepo 下前后端协作再也不用担心大模型混淆命名规范或架构约定。
- 增强企业级复用能力:团队可以通过
@~/引入全局的安全指南,真正做到架构规范的“代码化(Config as Code)”。