Skip to content

Commit 7e1f4ad

Browse files
wenshaoclaude
andcommitted
docs: rewrite item-9 (conditional rules) for clarity
Replace abstract "指令条件规则" with concrete "按目录自动切换编码规范": - Add concrete monorepo example (frontend TS + backend Python + docs) - Show two .claude/rules/ file examples with paths: frontmatter - Explain eager vs lazy loading in plain language - Remove redundant "意义/缺失后果/改进收益" block (already in problem statement) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ed6ab4c commit 7e1f4ad

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

docs/comparison/qwen-code-improvement-report-p0-p1-core.md

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -391,16 +391,27 @@ Preconnect 实现极简(71 行)——发一个不等响应的 HEAD 请求,
391391

392392
<a id="item-9"></a>
393393

394-
### 9. 指令条件规则(P1)
394+
### 9. 按目录自动切换编码规范(P1)
395395

396-
**思路**:一个 monorepo 项目包含前端(TypeScript/React)、后端(Python/FastAPI)、文档(Markdown)三个子目录,各有不同的编码规范。当前 Qwen Code 只支持一个全局 `QWEN.md`——所有规则塞在一起,无论 Agent 操作哪个目录的文件都全部加载。结果是
396+
**用户痛点**
397397

398-
- **Token 浪费**:操作 Python 文件时,TypeScript 和 Markdown 的规则也被注入系统提示
399-
- **规则干扰**:前端规范"组件用函数式写法"和后端规范"用 class-based view"同时存在,模型困惑
398+
一个 monorepo 项目有 3 个子目录,编码规范完全不同:
400399

401-
Claude Code 支持 **条件规则**——在 `.claude/rules/` 目录下创建多个规则文件,每个文件可以用 YAML frontmatter 指定生效路径:
400+
```
401+
myapp/
402+
├── packages/frontend/ # TypeScript + React——"组件用函数式,用 Tailwind"
403+
├── packages/backend/ # Python + FastAPI——"用 class-based view,PEP8"
404+
└── docs/ # Markdown——"中文技术文档,术语保留英文"
405+
```
406+
407+
当前 Qwen Code 只有一个全局 `QWEN.md`,三套规范全部塞在里面。Agent 编辑 Python 文件时,TypeScript 和 Markdown 的规范也在系统提示中——**浪费 token**,而且前端规范"用函数式"和后端规范"用 class"**互相矛盾**,模型会困惑。
408+
409+
**Claude Code 的解决方案**
410+
411+
`.claude/rules/` 目录下创建多个规则文件,每个文件用 YAML frontmatter 指定**生效路径**
402412

403413
```markdown
414+
<!-- .claude/rules/frontend.md -->
404415
---
405416
paths:
406417
- "packages/frontend/**/*.tsx"
@@ -411,7 +422,23 @@ React 组件必须用函数式写法,禁止 class component。
411422
使用 Tailwind CSS,不要写内联样式。
412423
```
413424

414-
`paths:` 的规则只在 Agent 操作匹配文件时才惰加载(lazy load),没有 `paths:` 的规则在 session 启动时急加载(eager load)。此外支持 HTML 注释剥离——规则作者可以写 `<!-- 这是给人看的备注 -->` 而不占 token 预算。
425+
```markdown
426+
<!-- .claude/rules/backend.md -->
427+
---
428+
paths:
429+
- "packages/backend/**/*.py"
430+
---
431+
432+
使用 class-based view,遵循 PEP8。
433+
数据库查询必须用参数化 SQL。
434+
```
435+
436+
**加载规则**
437+
-`paths:` 的规则 → Agent 操作匹配文件时才加载(惰加载)
438+
- 没有 `paths:` 的规则 → session 启动时加载(急加载)
439+
- HTML 注释 `<!-- ... -->` 自动剥离,不占 token
440+
441+
**效果**:Agent 编辑 `packages/frontend/src/App.tsx` 时,只加载 frontend 规范;编辑 `packages/backend/api/users.py` 时,只加载 backend 规范。精准且省 token。
415442

416443
**Claude Code 源码索引**
417444

@@ -420,22 +447,20 @@ React 组件必须用函数式写法,禁止 class component。
420447
| `utils/claudemd.ts` (1479行) | `processMdRules()``@include` 指令解析、HTML 注释剥离 |
421448
| `utils/frontmatterParser.ts` | `paths:` glob 解析(`ignore` 库 picomatch) |
422449

423-
**Qwen Code 现状**:仅支持单一 `QWEN.md` 全局指令文件,无条件加载机制。所有规则始终注入系统提示,无法按文件路径过滤
450+
**Qwen Code 现状**:仅支持单一 `QWEN.md` 全局指令文件,无条件加载机制。所有规则始终注入系统提示。
424451

425-
**Qwen Code 修改方向**`memoryImportProcessor.ts` 新增 frontmatter 解析;`memoryDiscovery.ts` 区分急/惰加载;文件操作时触发条件规则检查。
452+
**Qwen Code 修改方向**
453+
1. 支持 `.qwen/rules/` 目录 + YAML frontmatter `paths:` 字段
454+
2. `memoryDiscovery.ts` 区分急/惰加载
455+
3. 文件操作时触发条件规则匹配
426456

427457
**实现成本评估**
428458
- 涉及文件:~3 个
429459
- 新增代码:~200 行
430460
- 开发周期:~3 天(1 人)
431-
- 难点:glob 模式匹配性能(大量规则时)
432461

433462
**相关文章**[指令文件加载](./instruction-loading-deep-dive.md)
434463

435-
**意义**:大型项目不同目录有不同编码规范(TS/Python/Docs),全部加载浪费 token。
436-
**缺失后果**:所有规则塞在一个 QWEN.md 中——系统提示膨胀,规则互相干扰。
437-
**改进收益**:按文件路径匹配加载规则——操作 TS 文件时只注入 TS 规范,精准且省 token。
438-
439464
---
440465

441466
<a id="item-10"></a>

0 commit comments

Comments
 (0)