返回免费内容

上下文工程实战:决定 AI 输出质量的第一变量

从环境配置、任务指定、迭代反馈到外部获取,用四层上下文管理减少返工和误解。

上下文工程实战:决定 AI 输出质量的第一变量

上下文是 AI 输出质量的第一变量

大多数人把精力放在”怎么写 prompt”上,但实际上决定 AI 输出质量的第一变量是你给了它什么上下文

一个普通的 prompt + 精心组织的上下文 > 一个精心设计的 prompt + 混乱的上下文。


上下文工程的四个层次

第一层:环境上下文(始终存在)

这是 AI 在每次交互中都能”看到”的背景信息:

  • Claude Code:CLAUDE.md + 项目目录结构 + 最近的 git 状态
  • Cursor:Rules 文件 + 当前打开的文件 + 项目索引
  • Codex:AGENTS.md + 仓库完整快照

优化策略:投入时间写好这些文件。你花 30 分钟写一份好的 CLAUDE.md,之后每次对话都能受益。

CLAUDE.md 的关键内容:

# 项目名称

## 技术栈
- 前端: React 19 + TypeScript + TailwindCSS
- 后端: Node.js + Hono
- 数据库: PostgreSQL + Drizzle ORM
- 部署: Vercel

## 目录结构
src/
  app/       # 路由和页面
  lib/       # 共享逻辑
  components/ # UI 组件

## 代码规范
- 使用 TypeScript strict mode
- 组件文件使用 PascalCase
- 工具函数使用 camelCase
- 禁止使用 any 类型

## 常用命令
- dev: npm run dev
- build: npm run build
- test: npm test

第二层:任务上下文(每次对话指定)

针对当前任务需要 AI 知道的具体信息:

给什么

  • 相关的源代码文件(只给相关的,不是全部)
  • 错误信息/日志(完整的,不要截断)
  • 相关的设计文档或需求描述
  • 类似功能的参考实现

不给什么

  • 不相关的文件(噪声)
  • 过长的历史对话(信息污染)
  • 模糊的口头描述(“你懂的那个功能”)

第三层:反馈上下文(迭代中积累)

在多轮对话中,你的反馈本身就是重要上下文:

轮次1: "实现一个用户登录功能"
AI: (生成基础版本)

轮次2: "这里需要加上 rate limiting,用 token bucket 算法"
AI: (加入限流逻辑)

轮次3: "限流阈值从环境变量读取,不要硬编码"
AI: (改为配置化)

每一轮反馈都在精确化需求。这比一次性写一个超长 prompt 更高效,因为你可以基于 AI 的输出做精准纠正

第四层:外部上下文(按需获取)

通过 MCP 或工具调用从外部系统获取的信息:

  • 数据库 schema(通过 DB MCP server)
  • API 文档(通过 context7 或 web fetch)
  • 第三方库的最新用法(通过文档查询)
  • 生产环境的错误日志(通过监控系统 MCP)

常见的上下文错误

错误1:信息过载

把整个项目的 20 个文件都扔给 AI,“你自己看着办”。

问题:AI 会”注意力分散”,可能忽略真正重要的文件中的关键细节。

正确做法:只给 3-5 个最相关的文件,并明确告诉 AI “重点看 X 文件的 Y 函数”。

错误2:信息不足

只说”这个 bug 怎么修”,不给报错信息、不给相关代码。

问题:AI 只能猜测,输出的方案大概率偏离实际情况。

正确做法:提供完整的错误堆栈 + 相关代码 + 你已经尝试过什么。

错误3:历史污染

在一个对话里先做了任务 A,再做完全不相关的任务 B。

问题:任务 A 的上下文会干扰任务 B 的输出,AI 可能用 A 的约定去处理 B。

正确做法:不同任务开新对话。一个对话只解决一个问题。

错误4:隐含假设

你心里知道”这个项目用 Tailwind v4”,但没有明确告诉 AI。

问题:AI 可能默认 Tailwind v3 的语法,生成的代码需要你手动修改。

正确做法:在 Rules/CLAUDE.md 中明确写清楚版本号和关键约定。


实战模板

模板1:Bug 修复的上下文

## 问题描述
[一句话描述 bug 表现]

## 复现步骤
1. ...
2. ...

## 错误信息
[完整的错误堆栈]

## 相关文件
- [关键文件1的路径和相关函数]
- [关键文件2的路径和相关函数]

## 已尝试的方案
- 尝试过 X,结果是...
- 排除了 Y 的可能性,因为...

模板2:新功能开发的上下文

## 功能需求
[2-3 句话描述要做什么]

## 影响范围
- 需要修改的文件: [列出]
- 需要新建的文件: [列出]
- 依赖的现有模块: [列出]

## 参考实现
[类似功能在项目中的现有实现路径]

## 约束
- 性能要求: ...
- 兼容性要求: ...
- 安全要求: ...

模板3:代码审查的上下文

## 变更目的
[这次修改要解决什么问题]

## 关注点
- 请重点检查: [具体方面]
- 已知的 trade-off: [你选择这么做的原因]

## 变更范围
[git diff 或文件列表]

度量你的上下文质量

如何判断你给的上下文够不够好?看 AI 的响应:

AI 响应信号意味着应该做
”我假设你使用的是…”信息不足明确告诉它技术栈版本
输出完全偏离预期关键上下文缺失补充相关文件和需求描述
输出过于泛化/教科书式缺少项目特定信息给出项目中的具体代码示例
精准命中需求上下文恰到好处继续保持这个模式
输出矛盾或自相冲突上下文有冲突信息清理对话或重新组织信息

小结

上下文工程的操作原则:给对的信息,给够的量,在对的时机

  • 对的信息:只给相关的,排除噪声
  • 够的量:不多不少,AI 不用猜
  • 对的时机:持久信息放 Rules,临时信息放对话

上下文质量直接影响返工次数。如果你发现经常需要多轮纠正 AI 输出,优先检查给出的上下文是否充分、准确、无冲突,而不是反复调整 prompt 措辞。

最后验证日期:2026-06-13。工具的上下文机制、默认行为和配置文件格式可能随版本更新变化,使用前请核对官方文档。