Skip to content
Closed
87 changes: 87 additions & 0 deletions docs/comparison/qwen-code-improvement-report-p0-p1-engine.md
Original file line number Diff line number Diff line change
Expand Up @@ -909,3 +909,90 @@ Claude Code 在系统提示中覆盖了 4 个关键领域,每个都有具体
**意义**:系统提示是模型行为的根基——缺少具体指导则模型按自己的"默认模式"行事。
**缺失后果**:无 OWASP 列表 = 模型可能写出 SQL 注入代码;无注入检测 = MCP 恶意结果被信任执行。
**改进收益**:具体指导 = 模型行为精确可控——安全漏洞/注入攻击/代码膨胀全部防护。

---

<a id="item-25"></a>

### 25. 系统提示模块化(P1)

Claude Code 将系统提示设计为 **sections 缓存 + dynamic boundary** 架构。系统提示不是单一字符串,而是由多个独立 section 拼装而成,每个 section 有自己的缓存策略和失效规则:

| Section 类型 | 缓存策略 | 失效条件 | 示例 |
|:------------:|----------|----------|------|
| Static | 会话级缓存 | `/clear` 或 `/compact` | 核心行为准则、工具定义 |
| Dynamic | 每轮重新计算 | 每轮 | git 状态、token 用量 |
| Uncached | 强制不缓存 | N/A | 用户自定义指令 |

Claude Code 使用 `systemPromptSection(name, compute)` 创建可缓存 section,计算一次直到失效;`DANGEROUS_uncachedSystemPromptSection(name, compute, reason)` 创建每轮强制重新计算的 volatile section(带 `cacheBreak: true` 标记)。`buildSystemPromptBlocks()` 使用 prompt caching 机制将 sections 作为独立 block 可独立缓存。

**Qwen Code 现状**:系统提示通过 `getMainSessionSystemInstruction()` 拼接(instruction + memory + append),单一字符串,无 sections 缓存机制,无 dynamic boundary 概念。每轮全量重新构建。

**Claude Code 源码索引**:

| 文件 | 关键函数/常量 |
|------|-------------|
| `constants/systemPromptSections.ts` | `systemPromptSection()`、`DANGEROUS_uncachedSystemPromptSection()` |
| `constants/prompts.ts` (915行) | 各 section 定义 |
| `services/api/claude.ts` (3419行) | `buildSystemPromptBlocks()` |

**Qwen Code 修改方向**:`prompts.ts` 改为 sections 架构;静态段(行为准则、工具定义)缓存到会话级;动态段(git 状态、token 用量)每轮重新计算;使用 `cache_control` 标记静态段末端实现 prompt cache 优化。

**实现成本评估**:
- 涉及文件:~3 个
- 新增代码:~300 行
- 开发周期:~3 天(1 人)
- 难点:section 缓存失效策略设计

**改进前后对比**:
- **改进前**:每轮重新构建完整系统提示(~5K token)→ API 调用中重复发送
- **改进后**:静态段缓存 + dynamic boundary → prompt cache 命中率提升 80%+ → 节省 token 费用

**意义**:系统提示是每轮 API 调用必发的固定开销,模块化 + 缓存可大幅降低 token 成本。
**缺失后果**:每轮全量发送系统提示 → 浪费 token → 增加费用。
**改进收益**:sections 缓存 → 静态段只发一次 → prompt cache 命中率提升 → 节省费用。

---

---

<a id="item-26"></a>

### 26. 系统提示模块化(P1)

**问题**:系统提示是每轮 API 调用必发的固定开销(~5K token),全量发送浪费 token。Claude Code 把系统提示设计为 sections 缓存 + dynamic boundary 架构——静态段只发一次,动态段每轮重新计算。

**关键设计细节**:

- **3 种 Section 类型**:
- Static(会话级缓存):核心行为准则、工具定义,`/clear` 或 `/compact` 时失效
- Dynamic(每轮重新计算):git 状态、token 用量,带 `cacheBreak: true` 标记
- Uncached(强制不缓存):用户自定义指令
- **缓存 API**:`systemPromptSection(name, compute)` 创建可缓存 section;`DANGEROUS_uncachedSystemPromptSection(name, compute, reason)` 创建每轮强制重算 section
- **Prompt Cache 集成**:`buildSystemPromptBlocks()` 使用 `cache_control` 标记静态段末端,实现 API 级缓存

**Claude Code 源码索引**:

| 文件 | 关键函数/常量 |
|------|-------------|
| `constants/systemPromptSections.ts` | `systemPromptSection()`、`DANGEROUS_uncachedSystemPromptSection()` |
| `constants/prompts.ts` (915行) | 各 section 定义 |
| `services/api/claude.ts` (3419行) | `buildSystemPromptBlocks()` |

**Qwen Code 现状**:系统提示通过 `getMainSessionSystemInstruction()` 拼接(instruction + memory + append),单一字符串,无 sections 缓存机制,无 dynamic boundary 概念。每轮全量重新构建。

**Qwen Code 修改方向**:① `prompts.ts` 改为 sections 架构;② 静态段(行为准则、工具定义)缓存到会话级;③ 动态段(git 状态、token 用量)每轮重新计算;④ 使用 `cache_control` 标记静态段末端实现 prompt cache 优化。

**实现成本评估**:
- 涉及文件:~3 个
- 新增代码:~300 行
- 开发周期:~3 天(1 人)
- 难点:section 缓存失效策略设计

**相关文章**:[系统提示模块化 Deep-Dive](./system-prompt-modularization-deep-dive.md)

**意义**:系统提示是每轮 API 调用必发的固定开销,模块化 + 缓存可大幅降低 token 成本。
**缺失后果**:每轮全量发送系统提示 → 浪费 token → 增加费用。
**改进收益**:sections 缓存 → 静态段只发一次 → prompt cache 命中率提升 → 节省费用。

---
Loading