从提示词到上下文工程:管理 Codex 的信息环境
范式转变:为什么"写好提示词"不够了?
2025 年之前,大家谈的是 Prompt Engineering——怎么写好一条提示词。2025-2026 年,行业共识转向了 Context Engineering——怎么管理整个信息环境。
| 维度 | Prompt Engineering | Context Engineering |
|---|---|---|
| 关注点 | 单条提示词怎么写 | 模型看到的全部信息怎么组织 |
| 范围 | 用户输入 | 用户输入 + 配置文件 + 代码库 + 工具输出 + 历史 + 记忆 |
| 核心动作 | 写、改提示词 | 选择、组织、注入、压缩、裁剪 |
| 心智模型 | "我该怎么说" | "模型该看到什么" |
| 目标 | 单次输出质量 | 持续稳定的输出质量 |
Martin Fowler 的定义很精准:上下文工程就是 "curating what the model sees so that you get a better result"——策展模型看到的信息,从而获得更好的结果。
提示词是上下文的一部分,但不是全部。你的 AGENTS.md、rules 文件、skills、@mention 的文件引用、对话历史——这些都是上下文。只优化提示词而忽略其他上下文,就像只调方向盘而不管轮胎和路面。
上下文四支柱框架
改编自 Sourcegraph 的 AI Agent 上下文工程框架,在 Codex 中有具体的对应物:
| 支柱 | 定义 | Codex 中的对应物 | 管理方式 |
|---|---|---|---|
| 指令层 | 静态行为规则和身份定义 | AGENTS.md / rules / skills | 配置文件,启动时加载 |
| 检索层 | 动态上下文来源 | @mention 文件 / 图片 / 工具输出 | 按需注入 |
| 协调层 | 多 Agent / 线程间的上下文编排 | 子代理 / 云端线程 / side chat | 委派 + 结果回收 |
| 记忆层 | 跨会话的持久化信息 | 对话历史 / 自动压缩 / 长期记忆 | 自动管理 + 手动干预 |
支柱 1:指令层
静态行为规则,在每次对话开始时自动加载到上下文中。
| 配置文件 | 作用范围 | 加载时机 |
|---|---|---|
AGENTS.md | 整个项目 | 每次会话自动加载 |
.claude/rules/*.md | 按路径匹配 | 相关文件在上下文中时加载 |
| skills | 特定任务类型 | 按需加载(匹配时触发) |
| 子代理定义 | 特定任务委派 | 委派时加载 |
关键原则:指令层要精简。 每个 token 都在和任务上下文竞争空间。AGENTS.md 里放了 500 行规则,意味着 Codex 还没开始你的任务,上下文就已经被占了 500 行。
交叉引用:AGENTS.md 的详细配置方法见 AGENTS.md 指南;rules 文件见 Rules 配置。
支柱 2:检索层
动态注入的上下文,按需加载。
| 方式 | 说明 | 适用场景 |
|---|---|---|
@mention 文件 | 手动引用特定文件到上下文 | 你知道 Codex 需要看哪些文件 |
| 图片引用 | 截图、设计稿作为上下文 | UI 实现、视觉对比 |
| 工具输出 | 命令执行结果、API 响应 | 调试、性能分析 |
| 代码库搜索 | Codex 自主搜索代码库 | 探索性任务 |
关键原则:用引用代替塞入。 不要直接把大段代码粘贴到提示词里——用 @path/to/file 引用文件,让 Codex 自己读取。这是 Artifact 句柄模式的核心思想(详见下文)。
支柱 3:协调层
多个 Agent 或线程之间的上下文编排。
| 模式 | 上下文特点 | 适用场景 |
|---|---|---|
| 单线程 | 所有上下文在一个窗口中 | 简单任务 |
| 多本地线程 | 每个线程独立上下文,文件级隔离 | 并行修改不同模块 |
| 本地 + 云端委派 | 规划在本地,执行在独立上下文 | 耗时任务 |
| 子代理 | 独立上下文窗口,完成后返回结果 | 调研、分析等独立子任务 |
交叉引用:子代理的详细配置见 子智能体与并行 章节。
支柱 4:记忆层
跨会话的持久化信息。
| 类型 | 生命周期 | 示例 |
|---|---|---|
| 对话历史 | 当前线程 | 你和 Codex 的所有交互记录 |
| 自动压缩 | 线程内,自动 | Codex 自动总结早期对话,丢弃细节 |
| 长期记忆 | 跨线程 | Codex 记住的项目偏好、你的习惯 |
交叉引用:记忆机制的详细说明见 记忆与长期上下文 章节。
上下文是有限资源
Google 在上下文工程实践中提出的核心原则:
| 原则 | 在 Codex 中的体现 |
|---|---|
| 递减边际回报 | 前 100 行 AGENTS.md 价值最高,第 500 行可能已经在拖后腿 |
| 避免 Context Dumping | 一次性 @mention 20 个文件 ≠ 有效上下文,反而让 Codex 不知道该看哪个 |
| 高信号低噪声 | 一个精确的 @mention 比一段复制粘贴的代码更有价值 |
| 每个 token 都在竞争 | AGENTS.md 占的 token 多了,留给任务上下文的空间就少了 |
Context Dumping 是最常见的反模式。 把能找到的所有相关文件、文档、规范全塞进上下文,以为"信息越多越好"。实际上,信息过载会让 Codex 的注意力分散,输出质量反而下降。正确做法:只注入和当前任务直接相关的信息。
Artifact 句柄模式
不要用"塞入"的方式提供上下文,用"引用"的方式。
| 方式 | 示例 | 效果 |
|---|---|---|
| ❌ 塞入 | 把 200 行配置文件的内容粘贴到提示词里 | 占用大量上下文空间 |
| ✅ 句柄 | @config/database.ts — 让 Codex 自己读取 | 只占用引用路径的 token |
| ❌ 塞入 | 把 API 文档全文粘贴 | 文档可能已过期,且占用空间 |
| ✅ 句柄 | "API 规范见 docs/api-spec.yaml" | Codex 按需读取 |
在提示词中使用 Artifact 句柄的三种方式:
# 文件路径引用
查看 @src/features/auth/middleware.ts 的实现。
# 文档引用
遵循 docs/coding-style.md 中的命名规范。
# ID/链接引用
这个需求对应 JIRA-1234,具体要求我已经放在 @docs/requirements/JIRA-1234.md。
上下文工程实践清单
| 最佳实践 | 操作 |
|---|---|
| 精简指令层 | 定期审查 AGENTS.md,删除过时规则,合并重复内容 |
| 按需加载 | skills 只在匹配时加载,不要全局启用所有 skills |
| 用引用代替塞入 | @mention 文件路径,不要粘贴大段内容 |
| 分治上下文 | 大任务拆成子任务,每个子任务在独立上下文中执行 |
| 监控上下文余量 | 长任务中注意 Codex 显示的上下文剩余空间 |
| 迭代构建 | 不要试图一次配好所有上下文,根据实际输出逐步调整 |
快速配置你的上下文环境(5 分钟):
- 第一步:精简指令层(2 分钟)——检查 AGENTS.md,删除不再适用的规则
- 第二步:建立检索路径(2 分钟)——确认关键文档有明确路径,方便 @mention
- 第三步:设置记忆边界(1 分钟)——检查哪些信息需要跨线程保留,哪些不需要
"控制幻觉"警告
Martin Fowler 有一个重要提醒:上下文工程会给你一种控制感,但 AI 对上下文的解读是概率性的。
| 你以为的 | 实际发生的 |
|---|---|
| 写了规则,Codex 就会遵循 | Codex 大概率遵循,但不保证 |
| 给了上下文,Codex 就会参考 | Codex 会参考,但可能不是你以为的重点 |
| 设了约束,Codex 就不会越界 | Codex 会尽量遵守,但边界情况可能越界 |
实操建议:
- 迭代构建,不要一次塞太多。 每次加一条规则或一个上下文来源,验证效果后再加下一个。
- 验证输出,不要假设控制。 即使你的上下文工程看起来很完美,也要检查 Codex 的实际输出。
- 接受不确定性。 上下文工程提高的是概率,不是确定性。
验证清单
- AGENTS.md 精简且只包含当前适用的规则
- 用 @mention 引用文件,而不是粘贴大段内容
- 长任务会关注上下文余量
- 大任务会拆分成独立上下文的子任务
- 每次加新规则/上下文后验证了效果
FAQ
Q:上下文工程和 RAG 是什么关系?
RAG(检索增强生成)是上下文工程的一种实现技术——通过检索外部知识库来动态注入上下文。但在 Codex 这样的编码助手场景中,上下文工程更多是关于"管理代码库中哪些信息在什么时候可见",不完全是传统 RAG。
Q:AGENTS.md 写多少算合适?
没有硬限制,但建议在 100-200 行以内。如果你的 AGENTS.md 超过 300 行,大概率可以精简——把具体规范移到独立文件,AGENTS.md 只保留"什么时候加载什么"的路由规则。
Q:子代理的上下文是独立的吗?
是的。子代理运行在独立的上下文窗口中,不共享主线程的对话历史。它只能看到你在委派时传递的信息,以及它自己的工作目录中的文件。这也是为什么委派时需要把规划写清楚——子代理不知道你和主线程讨论了什么。
平台能力、套餐限制以 OpenAI Codex 官方文档为准;本文写于 2026-06-24。
选读建议:掌握了上下文工程的思维框架,下一步是把它应用到真实场景——→ 提示词实战案例库。如果你想深入了解记忆层的管理——→ 记忆与长期上下文 章节。