从提示词到上下文工程:管理 Codex 的信息环境

范式转变:为什么"写好提示词"不够了?

2025 年之前,大家谈的是 Prompt Engineering——怎么写好一条提示词。2025-2026 年,行业共识转向了 Context Engineering——怎么管理整个信息环境。

维度Prompt EngineeringContext 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。

选读建议:掌握了上下文工程的思维框架,下一步是把它应用到真实场景——→ 提示词实战案例库。如果你想深入了解记忆层的管理——→ 记忆与长期上下文 章节。