17d - 开发中的上下文工程
本文是《AI Agent 实战手册》第 17 章第 4 节。 上一节:17c-微任务执行与人工审查 | 下一节:18a-2026-AI测试工具全景
概述
上下文工程是 Spec-Driven Agentic Workflow 的隐形支柱——规划再好、任务拆分再细,如果 AI Agent 在执行时”看不到”正确的信息,输出质量依然会崩塌。Martin Fowler 团队在 2025 年的总结一针见血:“上下文工程就是策划模型看到的内容,让你得到更好的结果。“本节聚焦开发阶段的上下文工程实践:如何精确选择文件、如何通过 MCP 连接外部工具、如何编写和组织 Steering/Rules 规则文件,以及如何在编码会话中管理有限的上下文窗口。这些技术与第 3 章的上下文工程方法论一脉相承,但更侧重”写代码时怎么用”。
1. 文件选择策略:给 AI 看什么
核心原则
上下文窗口不是越大越好。2025 年的研究表明,即使模型支持 200K 甚至 1M+ token,无差别地塞入大量文件反而会降低输出质量——模型的注意力被分散,关键信息被淹没。文件选择的核心原则是:精确、最小、相关。
工具推荐
| 工具 | 文件选择方式 | 价格 | 适用场景 |
|---|---|---|---|
| Kiro | #File、#Folder 引用;Spec 文件自动注入 | 免费(预览) | Spec-Driven 开发,自动上下文管理 |
| Cursor | @file、@folder、@codebase 语义搜索 | $20/月 | 灵活的手动上下文控制 |
| Claude Code | /add 命令、CLAUDE.md 自动加载、/compact 压缩 | $20/月(Pro) | CLI 环境,大型代码库 |
| Windsurf | Cascade 自动索引 + 手动引用 | $15/月 | 多步骤 agent 自动发现 |
| GitHub Copilot | #file、@workspace 全局搜索 | $10/月 | 轻量级内联补全 |
| Augment Code | 全代码库索引 + 智能检索 | $50/月 | 超大型代码库(100万+ 行) |
操作步骤
步骤 1:建立文件选择心智模型
每次向 AI 发起编码请求前,问自己三个问题:
- 这个任务需要修改哪些文件? → 直接引用
- 这个任务依赖哪些接口/类型定义? → 引用类型文件和接口文件
- 有没有类似的已有实现可以参考? → 引用示例文件
文件选择决策树:
任务描述 → 需要修改的文件(必选)
→ 相关类型/接口定义(必选)
→ 设计文档/Spec(推荐)
→ 类似实现的参考文件(可选)
→ 测试文件(如果任务包含测试)
❌ 不要加入的:
- 整个 node_modules 或 vendor 目录
- 无关模块的实现文件
- 历史变更日志
- 构建产物步骤 2:按工具执行精确引用
在 Kiro 中:
# 引用单个文件
#File src/sync_engine.rs
# 引用整个目录(Kiro 会智能筛选相关文件)
#Folder src/components/
# Spec 文件自动注入——无需手动引用
# Kiro 的 Spec 工作流会自动将 requirements.md、design.md
# 作为上下文提供给 AI Agent在 Cursor 中:
# 引用文件
@file src/sync_engine.rs
# 引用文件夹
@folder src/components/
# 语义搜索整个代码库(适合不确定文件位置时)
@codebase "文件同步的冲突检测逻辑在哪里?"
# 引用外部文档
@docs https://docs.rs/tokio/latest/tokio/在 Claude Code 中:
# 添加文件到当前会话上下文
/add src/sync_engine.rs src/types.rs src/config.rs
# 添加整个目录
/add src/components/
# 当上下文过大时,压缩历史对话
/compact
# 清除上下文重新开始
/clear步骤 3:分层文件选择策略
根据任务复杂度,采用不同的文件选择层级:
┌─────────────────────────────────────────────┐
│ 层级 1:最小上下文(简单修改) │
│ • 目标文件 + 直接依赖的类型定义 │
│ • 适合:修 bug、改样式、加字段 │
│ • 示例:修改按钮组件 → Button.tsx + types.ts │
├─────────────────────────────────────────────┤
│ 层级 2:模块上下文(功能开发) │
│ • 目标文件 + 同模块文件 + 接口定义 + Spec │
│ • 适合:实现新功能、重构模块 │
│ • 示例:实现同步引擎 → engine.rs + types.rs │
│ + config.rs + design.md │
├─────────────────────────────────────────────┤
│ 层级 3:跨模块上下文(架构变更) │
│ • 多个模块的核心文件 + 架构文档 + 测试 │
│ • 适合:跨模块重构、API 变更 │
│ • 示例:修改 API 层 → routes/ + services/ │
│ + models/ + tests/ + openapi.yaml │
└─────────────────────────────────────────────┘提示词模板
请实现 [任务描述]。
相关上下文:
- 设计文档:参考 design.md 中的 [具体章节]
- 类型定义:见 [types 文件路径]
- 参考实现:[类似模块路径] 中有类似的实现模式
- 编码规范:遵循项目 Steering/Rules 文件中的约定
只修改以下文件:
- [文件1路径]
- [文件2路径]
不要修改其他文件。不要引入新的依赖。2. MCP 连接外部工具:扩展 AI 的能力边界
为什么开发阶段需要 MCP
编码不只是写代码——开发者需要查数据库 schema、看 GitHub issue、读 API 文档、检查部署状态。MCP(Model Context Protocol)让 AI Agent 直接连接这些外部工具,省去”复制粘贴”的上下文传递。Martin Fowler 团队将 MCP Server 归类为”上下文接口”——它们是 AI 获取更多上下文的通道,模型可以按需调用。
关于 MCP 的完整概念和架构,详见 08a-MCP概念入门。本节聚焦开发阶段最实用的 MCP 配置。
工具推荐
| MCP Server | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| GitHub MCP | 读写 issue、PR、代码搜索 | 免费(需 token) | 任务管理、代码审查 |
| PostgreSQL MCP | 查询数据库 schema 和数据 | 免费(开源) | 数据库相关开发 |
| Filesystem MCP | 文件读写、目录浏览 | 免费(内置) | 基础文件操作 |
| Context7 MCP | 实时获取库文档 | 免费(开源) | 查阅第三方库最新文档 |
| Sentry MCP | 查看错误日志和堆栈 | 免费(需账号) | 调试线上问题 |
| Linear/Jira MCP | 读写项目管理任务 | 免费(需 token) | 任务状态同步 |
| Docker MCP | 管理容器和镜像 | 免费(开源) | 容器化开发 |
| Playwright MCP | 浏览器自动化测试 | 免费(开源) | E2E 测试、UI 验证 |
| Chrome DevTools MCP | 实时浏览器调试 | 免费(开源) | 前端调试、性能分析 |
| Figma MCP | 读取设计稿 | 免费(需 token) | 设计到代码转换 |
操作步骤
步骤 1:配置 MCP Server
Kiro 配置(.kiro/settings/mcp.json):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
}
},
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp@latest"]
}
}
}Cursor 配置(.cursor/mcp.json):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxx"
}
}
}
}Claude Code 配置(.mcp.json,项目根目录):
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:pass@localhost:5432/mydb"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxx"
}
}
}
}步骤 2:按开发场景选择 MCP 组合
场景 1:全栈 Web 开发
├── GitHub MCP(任务管理 + PR)
├── PostgreSQL MCP(数据库 schema 查询)
├── Context7 MCP(查阅框架文档)
└── Playwright MCP(E2E 测试)
场景 2:前端开发
├── Figma MCP(设计稿读取)
├── Chrome DevTools MCP(实时调试)
├── Context7 MCP(组件库文档)
└── GitHub MCP(issue 追踪)
场景 3:后端 API 开发
├── PostgreSQL MCP(数据库操作)
├── Docker MCP(容器管理)
├── Sentry MCP(错误追踪)
└── GitHub MCP(代码审查)
场景 4:DevOps / 基础设施
├── Docker MCP(容器管理)
├── GitHub MCP(CI/CD 配置)
└── Sentry MCP(监控告警)步骤 3:安全注意事项
⚠️ MCP 安全清单:
1. 永远不要在配置文件中硬编码密钥
✅ 使用环境变量:${GITHUB_TOKEN}
❌ 直接写入:ghp_abc123...
2. 数据库 MCP 使用只读连接
✅ postgresql://readonly_user:pass@host/db
❌ postgresql://admin:pass@host/db
3. 限制 MCP Server 的权限范围
- GitHub MCP:只授予必要的 scope(repo:read)
- 文件系统 MCP:限制可访问的目录
4. 不要将 .mcp.json 提交到公开仓库
→ 添加到 .gitignore
→ 或使用环境变量引用提示词模板
我正在开发 [功能描述],需要了解数据库结构。
请通过 PostgreSQL MCP:
1. 查询 [表名] 的完整 schema(列名、类型、约束)
2. 查看与 [表名] 相关的外键关系
3. 获取 [表名] 的示例数据(LIMIT 5)
基于查询结果,生成对应的 [TypeScript/Rust] 类型定义。3. Steering / Rules 规则文件实践
什么是 Steering / Rules 文件
Steering 文件(Kiro)、CLAUDE.md(Claude Code)、.cursorrules(Cursor)本质上是同一个概念的不同实现——它们是持久化的 AI 上下文,告诉 AI Agent “在这个项目中应该怎么做”。Martin Fowler 团队将其归类为”指导”(Guidance)型上下文:不是让 AI 做某件具体的事,而是设定通用的行为准则。
关于规则文件的完整编写指南,详见 03b-规则文件编写指南。本节聚焦开发阶段的实战配置。
工具推荐
| 工具 | 规则文件格式 | 位置 | 价格 | 特点 |
|---|---|---|---|---|
| Kiro Steering | Markdown (.md) | .kiro/steering/ | 免费 | 支持 always/manual 两种加载模式,全局+项目两级 |
| CLAUDE.md | Markdown | 项目根目录 / 子目录 | $20/月 | 层级继承(根→子目录),自动加载 |
| .cursorrules | Markdown | 项目根目录 | $20/月 | 单文件,全局生效 |
| Cursor Rules (MDC) | Markdown + Frontmatter | .cursor/rules/ | $20/月 | 支持 always/auto/agent/manual 四种模式 |
| Codex AGENTS.md | Markdown | 项目根目录 / 子目录 | 按 API 计费 | 类似 CLAUDE.md 的层级继承 |
| Copilot Instructions | Markdown | .github/copilot-instructions.md | $10/月 | GitHub 生态集成 |
操作步骤
步骤 1:设计规则文件结构
最佳实践是按职责拆分规则文件,而不是把所有规则塞进一个文件。QES 团队的研究表明,按角色拆分文件(如 API 标准、安全规范)能有效减少 AI 的混淆和幻觉。
Kiro Steering 推荐结构:
.kiro/
├── steering/
│ ├── coding-standards.md # 编码规范(always 模式)
│ ├── architecture.md # 架构约定(always 模式)
│ ├── testing-standards.md # 测试规范(always 模式)
│ ├── security-rules.md # 安全规则(always 模式)
│ └── migration-guide.md # 迁移指南(manual 模式)
├── specs/
│ └── my-feature/
│ ├── requirements.md
│ ├── design.md
│ └── tasks.md
└── settings/
└── mcp.jsonCLAUDE.md 推荐结构:
项目根目录/
├── CLAUDE.md # 全局规则(自动加载)
├── src/
│ ├── CLAUDE.md # 前端特定规则(进入 src/ 时加载)
│ └── components/
│ └── CLAUDE.md # 组件开发规则(进入 components/ 时加载)
├── server/
│ └── CLAUDE.md # 后端特定规则
└── tests/
└── CLAUDE.md # 测试特定规则Cursor Rules 推荐结构:
.cursor/
└── rules/
├── general.mdc # 通用规则(always 模式)
├── react-components.mdc # React 组件规则(auto 模式,匹配 *.tsx)
├── api-routes.mdc # API 路由规则(auto 模式,匹配 routes/*.ts)
└── database.mdc # 数据库规则(agent 模式,按需加载)步骤 2:编写高质量规则文件
规则文件的质量直接影响 AI 输出。2025 年的研究发现,LLM 生成的规则文件在 8 个测试场景中有 5 个反而降低了性能,而人工精心编写的规则文件平均提升约 4 个百分点。关键在于:规则要具体、可执行、不冗余。
Kiro Steering 实战示例(RustSync 项目):
<!-- .kiro/steering/coding-standards.md -->
---
inclusion: always
---
# RustSync 编码规范
## Rust 代码规范
- 错误处理使用 `thiserror` 定义错误类型,禁止在生产代码中使用 `unwrap()` 或 `expect()`
- 所有公共函数和结构体必须有 `///` 文档注释
- 异步运行时统一使用 `tokio`,不混用其他异步运行时
- 使用 `clippy` 的所有默认 lint,CI 中 `clippy -- -D warnings`
- 文件操作使用 `tokio::fs`,不使用 `std::fs` 的同步版本
## TypeScript 代码规范
- 样式使用 CSS Modules(`*.module.css`),不用内联样式或 Tailwind
- 组件使用函数式组件 + hooks,不使用 class 组件
- 类型定义集中在 `src/types/index.ts`,组件 props 类型与组件同文件
- 状态管理使用 React hooks(useState/useReducer),不引入 Redux
## 通用规范
- 提交信息使用 Conventional Commits 格式
- 每个模块必须有对应的单元测试文件(`*.test.ts` 或 `*_test.rs`)
- 不引入未在 design.md 中规划的新依赖CLAUDE.md 实战示例:
# CLAUDE.md
## 项目概述
RustSync 是一个基于 Tauri 的文件同步工具,前端 React + TypeScript,后端 Rust。
## 关键约定
- Tauri 命令定义在 src-tauri/src/commands.rs
- 前端 API 调用封装在 src/api/ 目录
- 所有 Tauri 命令必须返回 Result<T, String> 类型
## 不要做的事
- 不要修改 Cargo.toml 添加新依赖(除非任务明确要求)
- 不要使用 `console.log` 调试,使用项目的 logging 模块
- 不要在组件中直接调用 Tauri invoke,通过 api/ 层封装
## 测试
- Rust 测试:cargo test
- 前端测试:npm run test
- 类型检查:npm run typecheck步骤 3:规则文件的加载策略
不同的规则需要不同的加载时机。过多的 always 规则会占用宝贵的上下文空间。
加载策略决策树:
这条规则每次编码都需要吗?
├── 是 → always 模式(编码规范、架构约定、安全规则)
└── 否 → 这条规则能通过文件路径自动判断吗?
├── 是 → auto 模式(前端规则匹配 *.tsx,后端规则匹配 *.rs)
└── 否 → 这条规则需要 AI 自己判断何时使用吗?
├── 是 → agent 模式(数据库迁移指南、性能优化建议)
└── 否 → manual 模式(一次性迁移指南、特殊场景处理)Kiro Steering 加载模式:
<!-- always 模式:每次对话都注入 -->
---
inclusion: always
---
# 编码规范
...
<!-- manual 模式:只在用户通过 @steering 显式引用时加载 -->
---
inclusion: manual
---
# 数据库迁移指南
...Cursor MDC Rules 加载模式:
<!-- always 模式 -->
---
alwaysApply: true
---
# 通用编码规范
<!-- auto 模式:匹配特定文件时自动加载 -->
---
globs: ["src/components/**/*.tsx", "src/components/**/*.css"]
---
# React 组件开发规范
<!-- agent 模式:AI 自行判断是否需要 -->
---
alwaysApply: false
---
# 数据库查询优化指南提示词模板
请审查当前项目的 Steering/Rules 文件,检查以下问题:
1. 是否有冗余或矛盾的规则?
2. 是否有规则过于模糊,AI 难以执行?
3. 是否有重要的项目约定没有被规则覆盖?
4. always 模式的规则是否过多(建议不超过 [N] 个文件)?
输出改进建议,包括:
- 需要删除的冗余规则
- 需要细化的模糊规则
- 需要补充的缺失规则
- 需要调整加载模式的规则4. 上下文窗口管理:编码会话中的实战技巧
为什么需要管理上下文窗口
即使 2025-2026 年的模型上下文窗口已经很大(Claude Sonnet 4.6 达到 1M token,Gemini 2.5 Pro 达到 1M+),在实际编码会话中,上下文依然是稀缺资源。原因有三:
- 成本:每个 token 都有成本,200K token 的会话比 20K 贵 10 倍
- 注意力衰减:模型在超长上下文中的注意力会分散,“中间丢失”(Lost in the Middle)现象依然存在
- 竞争:MCP 工具描述、Steering 规则、历史对话、代码文件都在争夺上下文空间
操作步骤
步骤 1:监控上下文使用量
Claude Code:
- 使用 /cost 命令查看当前会话的 token 消耗
- 使用 /compact 在上下文过大时压缩历史对话
- 观察 "Context window usage" 指示器
Cursor:
- 查看聊天窗口底部的 token 计数
- 使用 "New Chat" 开始新会话释放上下文
Kiro:
- 关注 Spec 文件的大小——过大的 design.md 会占用大量上下文
- 使用 #File 精确引用而非 #Folder 批量引用步骤 2:上下文压缩技术
技术 1:会话分段
├── 每完成一个微任务,开始新的会话
├── 在新会话中只加载下一个任务需要的上下文
└── 避免一个会话跨越多个不相关的任务
技术 2:渐进式上下文加载
├── 先给 AI 最小上下文,让它开始工作
├── 当 AI 需要更多信息时,按需添加
└── 比一次性加载所有文件更高效
技术 3:上下文摘要
├── 对于大型设计文档,提供摘要而非全文
├── 对于长对话历史,使用 /compact 压缩
└── 对于大型代码文件,只引用相关函数而非整个文件
技术 4:四文件工作记忆系统
├── progress.md:当前任务进度和已完成的工作
├── decisions.md:关键技术决策和原因
├── context.md:项目上下文摘要
└── next-steps.md:下一步计划
→ 每次新会话加载这四个文件,恢复工作状态步骤 3:交叉引用设计文档
在 Spec-Driven 工作流中,设计文档是最重要的上下文来源之一。但直接把整个 design.md 塞进上下文往往不是最优选择。
交叉引用策略:
1. 任务级引用(推荐)
"请实现 Task 3.2。参考 design.md 中'差异计算引擎'章节的算法设计。"
→ AI 只需要关注设计文档的特定部分
2. 类型级引用
"请参考 design.md 中的数据模型定义,实现对应的 Rust 结构体。"
→ 聚焦数据模型,忽略其他设计细节
3. 接口级引用
"请参考 design.md 中的 API 设计,实现 /sync/status 端点。"
→ 只关注 API 接口定义
❌ 避免:
"请阅读整个 design.md 然后实现这个功能。"
→ 浪费上下文空间,AI 可能被无关信息干扰提示词模板
当前会话的上下文已经比较大了。请帮我:
1. 总结到目前为止我们完成的工作(3-5 句话)
2. 列出当前正在进行的任务和关键决策
3. 列出下一步需要做的事情
我会用这个摘要开始一个新的会话,以释放上下文空间。5. 上下文工程的协同:把四个支柱串起来
Spec + 文件选择 + MCP + Steering 的协同工作流
在实际开发中,四个上下文支柱不是孤立使用的,而是协同工作:
┌─────────────────────────────────────────────────────────┐
│ 开发中的上下文工程协同模型 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ │
│ │ Steering 规则 │ ← 始终注入,设定行为基线 │
│ │ (编码规范、 │ │
│ │ 架构约定) │ │
│ └──────┬───────┘ │
│ ↓ │
│ ┌──────────────┐ │
│ │ Spec 文件 │ ← 任务级注入,提供需求和设计上下文 │
│ │ (requirements │ │
│ │ + design) │ │
│ └──────┬───────┘ │
│ ↓ │
│ ┌──────────────┐ │
│ │ 精选代码文件 │ ← 按需引用,提供实现上下文 │
│ │ (目标文件 + │ │
│ │ 类型 + 参考) │ │
│ └──────┬───────┘ │
│ ↓ │
│ ┌──────────────┐ │
│ │ MCP 工具 │ ← 按需调用,获取外部信息 │
│ │ (DB schema, │ │
│ │ GitHub, docs)│ │
│ └──────────────┘ │
│ │
│ → AI Agent 在这个精心策划的上下文中执行任务 → │
│ │
└─────────────────────────────────────────────────────────┘操作步骤
完整的上下文工程工作流(每个微任务):
1. 开始新会话(或 /compact 压缩旧会话)
2. Steering 规则自动加载 ← 无需手动操作
3. 引用当前任务的 Spec 上下文
- Kiro:自动注入
- Claude Code:"参考 SPEC.md 中的 Task 3.2"
4. 精确引用需要的代码文件
- 目标文件 + 类型定义 + 参考实现
5. 如需外部信息,通过 MCP 获取
- "查询 users 表的 schema"
- "查看 GitHub issue #42 的描述"
6. 执行任务
7. 审查输出,确认符合 Steering 规则
8. 完成后更新工作记忆文件(progress.md)实战案例:RustSync 项目的上下文工程配置
项目背景
RustSync 是一个基于 Tauri 的文件同步工具(前端 React + TypeScript,后端 Rust),使用 Kiro 的 Spec-Driven 工作流开发。以下是该项目的完整上下文工程配置。
目录结构
rustsync/
├── .kiro/
│ ├── steering/
│ │ ├── coding-standards.md # 编码规范(always)
│ │ ├── rust-patterns.md # Rust 特定模式(always)
│ │ └── testing-guide.md # 测试指南(always)
│ ├── specs/
│ │ └── rustsync-tool/
│ │ ├── requirements.md # 12 个用户故事
│ │ ├── design.md # 架构设计
│ │ └── tasks.md # 25 个实现任务
│ └── settings/
│ └── mcp.json # MCP 配置
├── src-tauri/src/ # Rust 后端
│ ├── sync_engine.rs
│ ├── diff.rs
│ ├── config.rs
│ └── ...
├── src/ # React 前端
│ ├── components/
│ ├── hooks/
│ ├── api/
│ └── types/index.ts
└── .gitignore # 包含 .kiro/settings/mcp.jsonSteering 文件配置
<!-- .kiro/steering/coding-standards.md -->
---
inclusion: always
---
# RustSync 编码规范
## Rust 代码
- 使用 `thiserror` 处理错误,不要用 `unwrap()`
- 所有公共函数必须有文档注释(`///`)
- 使用 `clippy` 的所有默认 lint
- 异步代码使用 `tokio`
- Tauri 命令返回 `Result<T, String>`
## TypeScript 代码
- 使用 CSS Modules,不用内联样式
- 组件使用函数式组件 + hooks
- 类型定义集中在 types/index.ts
- API 调用封装在 api/ 目录
## 测试
- 每个模块必须有单元测试
- 核心逻辑必须有 Property-Based Testing
- 测试文件与源文件同目录MCP 配置
// .kiro/settings/mcp.json
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}典型任务的上下文选择示例
Task: 实现文件差异计算模块(diff.rs)
上下文选择:
├── Steering:coding-standards.md(自动加载)
├── Spec:design.md 中"差异计算引擎"章节
├── 代码文件:
│ ├── src-tauri/src/diff.rs(目标文件)
│ ├── src-tauri/src/types.rs(类型定义)
│ ├── src-tauri/src/sync_engine.rs(调用方,了解接口需求)
│ └── src-tauri/src/config.rs(配置项)
├── MCP:无需外部工具
└── 总上下文估算:~15K tokens(远低于 200K 限制)
提示词:
"请实现 Task 4:文件差异计算模块。
参考 design.md 中差异算法的设计。
diff.rs 需要实现 compute_diff() 函数,
接受两个文件路径,返回 DiffResult。
类型定义见 types.rs。
遵循 Steering 中的 Rust 编码规范。"案例分析
这个配置的关键决策点:
-
Steering 文件按职责拆分:编码规范、Rust 模式、测试指南各一个文件,而不是一个巨大的文件。这样 AI 更容易理解和遵循。
-
MCP 配置最小化:只配置了 GitHub MCP,因为 RustSync 是本地应用,不需要数据库 MCP。按需添加,不预先配置所有可能用到的 MCP。
-
文件选择精确到函数级别:不是引用整个
src-tauri/src/目录,而是只引用与当前任务直接相关的 4 个文件。 -
Spec 引用精确到章节:不是”参考 design.md”,而是”参考 design.md 中差异算法的设计”。
避坑指南
❌ 常见错误
-
把所有文件都塞进上下文
- 问题:上下文过载导致模型注意力分散,输出质量下降。即使 1M token 窗口也不意味着应该填满它
- 正确做法:遵循”精确、最小、相关”原则,只引用当前任务需要的文件
-
用 AI 生成 Steering/Rules 文件
- 问题:研究表明 LLM 生成的规则文件在多数场景下反而降低性能——规则过于泛化、缺乏项目特定的洞察
- 正确做法:人工编写规则文件,基于项目实际踩过的坑和团队约定
-
MCP 配置过多导致上下文膨胀
- 问题:每个 MCP Server 的工具描述都会占用上下文空间。配置 10 个 MCP Server 可能消耗数千 token 仅用于工具描述
- 正确做法:只配置当前开发阶段需要的 MCP Server,按需启用
-
不管理会话长度
- 问题:长时间的编码会话中,历史对话、错误尝试、废弃方案都在消耗上下文空间
- 正确做法:每完成一个微任务就考虑开始新会话或使用
/compact压缩
-
Steering 规则相互矛盾
- 问题:多个规则文件中的指令冲突,AI 无所适从,输出不一致
- 正确做法:定期审查规则文件,确保无矛盾;使用层级结构(全局→模块→文件级)明确优先级
-
忽略上下文的”四种失败模式”
- 问题:上下文中毒(错误信息)、干扰(无关信息)、混淆(格式混乱)、冲突(信息矛盾)
- 正确做法:每次提供上下文前检查信息的准确性、相关性、一致性和清晰度
✅ 最佳实践
- “三问法”选择文件:每次编码前问自己——要改什么文件?依赖什么接口?有没有参考实现?
- Steering 文件保持精简:每个文件不超过 200 行,规则要具体可执行,避免空泛的”写好代码”类指令
- MCP 按场景组合:为不同开发场景(前端/后端/全栈/DevOps)准备不同的 MCP 配置组合
- 会话分段执行:一个微任务一个会话,避免上下文漂移
- 维护工作记忆文件:用 progress.md 等文件在会话间传递关键上下文,避免每次从零开始
- 定期审计上下文效率:观察 AI 的输出质量,如果下降了,检查是否上下文过载或缺失关键信息
- 规则文件版本化:将 Steering/Rules 文件纳入 Git 管理,团队共享,随项目演进更新
相关资源与延伸阅读
- Context Engineering for Coding Agents - Martin Fowler — 编码 Agent 上下文工程的系统化分类框架
- Kiro Steering 官方文档 — Kiro Steering 文件的完整配置指南
- Kiro Steering 文件优先级指南 — 多个 Steering 文件的优先级管理实践
- Kiro Steering 最佳实践配置 — 按角色拆分规则文件的推荐方法
- CLAUDE.md 工作流指南 — CLAUDE.md 编写和使用的完整指南
- Softcery Agentic Coding 最佳实践 — 上下文文件、工作记忆和结构化工作流实践
- 四文件工作记忆系统 — 用四个 Markdown 文件为 AI 编码助手建立持久记忆
- AI-Ready Codebase Guide — 让代码库对 AI 友好的实践指南
- MCP 开发者集成工作流 — GitHub、Jira、数据库的 MCP 集成实战
- AI 编码工具配置参考 — Cursor、Claude Code、Codex 的规则文件格式对比
参考来源
- Context Engineering for Coding Agents (2025 年 6 月)
- Context files for coding agents often don’t help (2025 年 6 月)
- Kiro Steering 官方文档 (2025 年)
- Best Practices for Configuring Kiro Steering (2025 年 6 月)
- Kiro Steering File Priority Guide (2025 年 1 月)
- Rules Files, Agents, MCP & Context Engineering (2025 年 5 月)
- 50 Claude Code Tips (2025 年 6 月)
- This Simple Four-File System Gives Claude Code a Working Memory (2025 年 6 月)
- Comparing Kiro with Cursor after a Month of Heavy Use (2025 年 8 月)
- Spec-Driven Design with Kiro: Lessons from Seddle (2025 年 6 月)
Content was rephrased for compliance with licensing restrictions.
📖 返回 总览与导航 | 上一节:17c-微任务执行与人工审查 | 下一节:18a-2026-AI测试工具全景