📚AI 编程官方教程中文版
📘 OpenAI Codex理解版 · 从原理到实战

03 · Codex 看到的上下文从哪里来

你直接把这句话扔给 Codex 会怎样?看下面四阶段,Codex 给的答案完全不一样:

⏱️ 预计阅读 13 分钟 | 🎯 目标:把 Codex 的判断从「凭直觉」换成「凭证据」

上一篇讲 Codex 任务管线 7 步。第 3 步「收集上下文」是一切的地基。 这一篇要回答:上下文具体由哪些东西组成?为什么"上下文质量 = Codex 输出质量"?怎么用 AGENTS.md(项目规则文件)让上下文长期稳定?


🎬 同一个 bug,给不同上下文会怎样

你遇到一个问题:

点击保存按钮后没反应。

你直接把这句话扔给 Codex 会怎样?看下面四阶段,Codex 给的答案完全不一样

阶段你给的上下文Codex 的回应
① 只给现象"点击保存按钮没反应"瞎猜:可能是事件未绑定 / 表单校验失败 / API 报错 / 状态未更新 / 样式遮挡……5 个方向都有可能
② 加页面路径+ "发生在 /settings/profile"定位到具体文件,能开始读相关组件
③ 加控制台报错+ "Cannot read properties of undefined (reading 'email')"方向变了:不是按钮事件,是数据结构缺字段
④ 加最近改动+ "昨天把 user profile API 从 /api/user 切到 /api/profile"建立强假设:新 API 返回结构变了,前端仍按旧结构读取 → 直接命中根因

🤔 不是 Codex 突然变聪明,是你给了它能推理的证据。

Codex 输出质量 ≈ 上下文质量。这是这一篇的核心。


🧱 上下文不是一团信息,是 5 层栈

很多新手把上下文理解成"我在聊天框里写过的话"。这远远不够。Codex 的真实上下文有 5 层,每层来源不同,作用也不同:

stateDiagram-v2
    direction TB
    [*] --> Task

    Task: 1️⃣ 任务上下文<br/>(本次要做什么)
    Project: 2️⃣ 项目上下文<br/>(项目怎么组织)
    Local: 3️⃣ 局部代码上下文<br/>(任务相关的文件)
    Rule: 4️⃣ 规则上下文<br/>(AGENTS.md / 团队规范)
    Feedback: 5️⃣ 反馈上下文<br/>(测试 / 报错 / 审查)

    Task --> Project: 决定方向
    Project --> Local: 决定工作方式
    Local --> Rule: 决定具体怎么改
    Rule --> Feedback: 决定不能做什么
    Feedback --> Task: 决定下一步调整

    note right of Task: 来自你的提示词
    note right of Project: 来自 README / package.json / 目录
    note right of Local: 来自 Codex 主动读文件
    note right of Rule: 来自 AGENTS.md 等规则文件
    note right of Feedback: 来自命令运行结果
是什么来源缺它会怎样
1️⃣ 任务(task)本次要解决的具体问题你的提示词Codex 不知道要干什么
2️⃣ 项目(project)项目技术栈、目录结构、运行方式README.md / package.json / 目录凭空想象项目结构
3️⃣ 局部代码(local code)本次任务直接相关的源文件Codex 主动读 / 你贴的代码改错文件
4️⃣ 规则(rule)项目长期约定AGENTS.md / 团队规范重复犯同类错(如包管理器用错)
5️⃣ 反馈(feedback)执行后产生的新证据测试输出 / 构建报错 / 你的审查改完一次就停,不能修正

💡 5 层合起来才是 Codex 真正的"工作现场"。少哪一层,Codex 就在哪一层"靠猜"。

后面 §🎯 给上下文的 4 步法、§📜 AGENTS.md 章节会逐层落地。


🤔 为什么 Codex 经常"乱改"?

新手抱怨最多的是「Codex 乱改」。但拆开看,"乱改"几乎都是上下文缺失的症状:

flowchart LR
    A1[范围缺失] -->|"优化登录体验"| B1[改 UI / API / 路由 / 状态<br/>全部都改]
    A2[禁止事项缺失] -->|"没说不能装新依赖"| B2[安装第三方表单库]
    A3[验收标准缺失] -->|"没说怎么算完成"| B3[跑个不相关测试就交差]
    A4[项目规则缺失] -->|"没说项目用 pnpm"| B4[执行 npm install<br/>污染 lock 文件]

    style A1 fill:#fee2e2,stroke:#ef4444
    style A2 fill:#fee2e2,stroke:#ef4444
    style A3 fill:#fee2e2,stroke:#ef4444
    style A4 fill:#fee2e2,stroke:#ef4444
表象真实原因解法
改了一堆文件没限定范围提示词写"只改 X 目录"
装了新依赖没限定禁止事项提示词写"不新增依赖"
跑错测试就报完成验收标准提示词写真实验证命令
用了错的命令项目规则写进 AGENTS.md,一劳永逸

🎯 解决"乱改"不是骂它"别乱改",而是把缺失的上下文补回去。


📐 上下文质量的 3 个维度:怎么算"好上下文"?

不是堆得越多越好。好上下文同时满足 3 个维度。先看「真实性 × 相关性」的 2×2 矩阵:

🎯 高相关🌫️ 不相关
✅ 高真实⭐ 高质量上下文
· 项目目录树
· 完整报错信息
· AGENTS.md 规则
· 当前任务相关源文件
真实但跑题
· 修登录 bug 时读到的支付模块代码
· 与任务无关的旧测试

👉 浪费上下文窗口
⚠️ 不真实🚨 高危误导
· 凭印象的口头描述("应该是用 ... 吧")
· 复制来的别项目提示词

👉 让 Codex 朝错方向加速
噪音
· 无关的历史对话
· 过期截图

👉 稀释注意力

💡 右上角才是你想要的。其他三格各有各的麻烦,最危险的是左下→左上的高危误导(看着相关其实假)。

维度含义反例
🔍 真实性来自项目文件 / 命令输出 / 测试结果凭印象的口头描述("这个项目用 npm" 但 lockfile 显示 pnpm
🎯 相关性跟当前任务直接相关修登录按钮,扫了支付模块代码(噪音)
⏱️ 时效性反映当前状态而非历史旧 README、旧截图、半年前的报错

⚠️ 3 维度排序:真实 > 相关 > 时效。 真实但跑题,至少不会带偏方向;不真实即使相关,也会让 Codex 朝错方向加速。


🎯 怎么给 Codex 好上下文?4 步法

不要一上来直接让 Codex 改代码。下面 4 步是稳妥顺序:

第 1 步 · 让它画地图

第一次进入项目,先要项目级地图

请阅读当前项目,不要修改文件。
请输出:
- 项目用途
- 技术栈
- 主要目录职责
- 启动和测试命令
- 你认为最重要的 5 个文件
- 哪些是确认的、哪些只是推测

第 2 步 · 让它定位任务

针对具体任务,让它指出相关文件

我要做:{任务}
请先收集上下文,不要修改文件。
输出:
- 涉及哪些文件、它们的关系
- 还需要我补充什么
- 哪些地方修改风险最高
- 建议的最小修改范围

第 3 步 · 让它分类信息

要求它把已有信息分四类,避免把推测当事实

请把当前掌握的信息分四类:
- ✅ 事实:从文件 / 命令 / 明确输入确认的
- 💭 推断:基于事实推出的、说明依据
- ❓ 不确定:还不能确认的、会影响任务的
- 🚀 下一步:为确认不确定信息要做什么

第 4 步 · 你确认后才执行

如果 ❓ 不确定项里有关键问题,先问、先查、不动手

flowchart LR
    Map[1️⃣ 画地图] --> Locate[2️⃣ 定位任务]
    Locate --> Classify[3️⃣ 分类信息]
    Classify --> Check{你审查}
    Check -->|关键不确定| Ask[问 / 查 / 只读分析]
    Check -->|信息齐了| Execute[4️⃣ 执行]
    Ask --> Locate

    style Check fill:#fef3c7,stroke:#f59e0b
    style Execute fill:#dcfce7,stroke:#22c55e

💡 这 4 步都不写代码。听起来慢,实际比"猜了一通改完再回滚"快得多。


📜 AGENTS.md:项目门口的工作说明

新手最强大的杠杆是 AGENTS.md(Codex 的项目规则文件)。写一次,长期生效,不用每次提示词重复说

它是什么?

AGENTS.md 是面向编程 Agent(智能代理)的开放格式,类似给 Agent 看的 README。规范由 OpenAI Codex 与 Cursor、Amp、Jules、Factory 等共同支持,目前由 Linux Foundation 下的 Agentic AI Foundation 维护。

Codex 怎么读它?(指令链 / instruction chain)

Codex 启动时按"全局 → 项目根 → 当前目录"逐层串联:

flowchart TB
    G["🌐 全局<br/>~/.codex/AGENTS.md<br/>(或 AGENTS.override.md)"]
    P["📁 项目根<br/>repo/AGENTS.md"]
    S["📂 子目录<br/>repo/src/AGENTS.md"]
    C["📍 当前目录<br/>repo/src/feature/AGENTS.md"]

    G --> P --> S --> C --> Final["🎯 最终指令链<br/>越靠近 cwd 优先级越高"]

    style Final fill:#dcfce7,stroke:#22c55e,stroke-width:2px
关键规则说明
一目录一文件每层最多读一份 AGENTS.md
越近越优先子目录可覆盖父目录指令(因为追加在后面)
优先级链AGENTS.override.md > AGENTS.md > project_doc_fallback_filenames 配置的备选名
大小限制project_doc_max_bytes 默认 32 KiB,超了会截断
加载时机每次 Codex 启动加载一次(CLI 通常一会话一次)

📖 来源:OpenAI 官方文档 · Custom instructions with AGENTS.md配置参考

该写什么进 AGENTS.md?

✅ 适合:
- 启动 / 测试 / 构建命令(pnpm dev / pnpm test ...)
- 包管理器(用 pnpm,不要用 npm)
- 目录职责(src/api 是后端、src/ui 是前端)
- 编码风格(用 TypeScript 严格模式)
- 禁止事项(不要改 db migration、不要碰 .env)
- 验收要求(提交前必须 pnpm test 通过)

❌ 不适合:
- 一次性临时要求(写在本次提示词里)
- 商业秘密 / 个人偏好(私有,别开源)
- 大段产品文档(超过 32 KiB 会被截断)
- 时效性强的事实(很快过期)

⚠️ 超过 32 KiB 怎么办? 拆到子目录下分别写,或调高 project_doc_max_bytes 上限(但更建议拆分)。


⚖️ 上下文 vs 记忆 vs 提示词:边界在哪?

很多新手把这三个混用。其实它们生命周期完全不同

类型生命周期适合放什么不适合放什么
📝 当前提示词本次任务任务目标、临时边界、特定验收标准每次都要重复说的项目规则
📜 AGENTS.md项目长期项目命令、目录职责、编码风格、禁止事项个人偏好、临时要求、商业秘密
📖 README项目长期项目用途、安装、运行方式、FAQ(常见问题)面向 Agent 的指令细节
🧠 记忆 (memory)跨任务跨项目用户长期偏好、反复出现的经验项目级规则(每个项目都不同)
📊 命令输出本次反馈当前验证结果、错误证据背景知识

🎯 判断口诀

  • 这个项目里每个人都该知道?→ 写 AGENTS.md
  • 这次任务临时要这样?→ 写当前提示词
  • 跨项目都要遵守?→ 写记忆 / 全局 ~/.codex/AGENTS.md
  • 当前这一步的证据?→ 命令输出 / 报错粘贴

🎓 3 个上下文管理习惯

① 让它先分类,再行动

把「事实 / 推断 / 不确定 / 下一步」四分要求写进每个复杂任务的提示词

请把当前信息分四类输出:
✅ 事实  /  💭 推断  /  ❓ 不确定  /  🚀 下一步

➡️ 显著减少幻觉(hallucination,AI 把推测当事实输出)。

② 上下文不足时停下来,不要硬上

如果缺少关键信息,不要猜,不要修改文件。
先列出缺口和需要确认的问题。

➡️ 涉及支付 / 数据迁移 / 权限 / 删除 / 生产发布时尤其重要 —— 缺上下文硬做的代价远大于停下来问的代价。

③ 给读取预算阶段

请先读取最相关的 10 个文件。
如果需要扩大范围,先说明原因。

或者分阶段:

第一阶段只建立目录地图。
第二阶段追踪具体功能。
第三阶段才提出修改方案。

➡️ 防止 Codex 一上来全库扫描几十个文件,拿到一堆相似 / 旧 / 生成文件后判断变慢。


🚫 常见误解 → ✅ 正确理解

❌ 误解✅ 正解
Codex 已经知道整个项目它需要主动读取相关文件才能建立现场
发过一次背景就永远记得长对话会被压缩,重要规则应写进 AGENTS.md
报错让它自己猜,不用贴完整报错是最高价值上下文,必须粘贴
规则越多越好规则要短、明确、可执行(32 KiB 也是物理上限)
上下文越多越好上下文有质量差异:真实 > 相关 > 时效
我已经告诉它项目用什么了"我说"不算证据,让它从 lockfile / 配置 验证

🔍 想再深一层(点击展开)

🪟 上下文窗口 vs 项目知识库(GPT-5.4 1M 容量怎么用)

新手容易把"Codex 能看到上下文"理解成"Codex 已经拥有整个项目知识库"。这不准确


上下文窗口(context window)更像 一张当前工作台


  • 桌上能放:任务说明、几份文件、命令输出、规则片段、对话记录
  • Codex 根据工作台上的材料推理
  • 工作台空间有限,注意力也有限

2026 现状GPT-5.4 在 Codex 里实验性支持 1M(一百万)token 上下文窗口 —— 这意味着工作台变大了,但不等于该把所有东西塞进去:


  • 放太少 → 不知道现场
  • 放太多 → 注意力被无关材料稀释
  • 最优做法:把当前任务最有用的材料放工作台,长期规则放 AGENTS.md,跨任务偏好放记忆

💡 核心结论:1M context 是上限不是建议值。好材料的少,胜过全材料的多。


☢️ 上下文污染:5 种常见污染源

上下文不只是缺失会出问题,错误上下文同样会带偏 Codex。常见污染:


污染源例子后果
🗑️ 过期 README半年前写的"用 npm" 但项目早改成 pnpmCodex 一直用错命令
📦 已废弃目录pages/ 已迁移到 app/ 但旧目录没删改了不生效的代码
🧪 旧测试文件已废弃的 spec 还在跑了通过但其实没验证
📋 复制来的提示词别项目的提示词包含错误规则错误传染
🗣️ 你自己的不确定描述"应该是用 ... 吧"推测被当事实写进 diff

防御提示词


请不要把我的描述都当成事实。
请用项目文件验证关键假设,并标出哪些是确认的、哪些仍是推测。

🩺 案例完整版:从一句话到根因(医生问诊式)

回到开头的"保存按钮没反应"案例。这个 bug 排查的全过程像医生问诊


sequenceDiagram
    participant 你
    participant Codex
    participant 项目
<br />
    你->>Codex: 点击保存按钮没反应
    Codex->>你: 5 个可能原因都猜一遍(噪音)
<br />
    Note over 你,Codex: ⬇️ 加上下文 ⬇️
<br />
    你->>Codex: + 页面是 /settings/profile
    Codex->>项目: 读 ProfileForm.tsx
    Codex->>你: 找到 onSubmit handler
<br />
    你->>Codex: + 控制台报 Cannot read 'email' of undefined
    Codex->>你: 方向变了:数据缺字段,不是事件没绑
<br />
    你->>Codex: + 昨天把 /api/user 改成 /api/profile
    Codex->>项目: 对比新 API 返回结构
    Codex->>你: 根因:profile 接口返回结构变化,<br/>前端仍按旧字段读取

关键观察:每补一层上下文,Codex 给的答案完全不同。 不是模型变聪明,是它能用的证据变多了。


📝 上下文管理万能提示词模板

复杂任务直接套用:


请为下面任务建立高质量上下文,不要修改文件。
<br />
任务:
{写任务}
<br />
请按下面格式输出:
<br />
一、确认事实
- 只写从文件 / 命令输出 / 明确提示中确认的信息
- 每条标出来源(文件路径 / 命令名)
<br />
二、合理推断
- 写根据事实推断出的信息
- 每条说明依据
<br />
三、不确定信息
- 写还不能确认但会影响任务的信息
<br />
四、需要补充的问题
- 问最关键的 3 到 5 个
<br />
五、建议下一步
- 上下文足够:给计划
- 上下文不足:先列缺口,不动手

📖 术语速查表
英文 / 缩写中文一句话解释
context上下文Codex 当前能看到的所有信息
context window上下文窗口模型一次能处理的最大文本量(GPT-5.4 实验支持 1M)
AGENTS.md给 Agent 看的项目规则文件,格式开放
AGENTS.override.md优先级更高的覆盖文件
instruction chain指令链Codex 把多个 AGENTS.md 串联成一份指令的机制
project root项目根通常是 git 仓库根目录
CODEX_HOME全局配置目录环境变量,默认 ~/.codex
project_doc_max_bytesAGENTS.md 大小上限配置项,默认 32 KiB
hallucination幻觉AI 把推测当事实输出
memory记忆跨任务跨项目保留的长期偏好

📖 官方文档来源:




📝 本章自检

#问题对应章节自检
1Codex 上下文的 5 层栈分别是什么?哪层来自 AGENTS.md🧱 5 层栈
2「保存按钮没反应」从一句话变到根因,靠的是什么?🎬 钩子场景 + 案例完整版
3哪些信息该写进 AGENTS.md?哪些不该?为什么有 32 KiB 限制?📜 AGENTS.md

过关标准(这次放在折叠块里):

展开看答案 ⬇️

"Codex 输出质量 ≈ 上下文质量。模型负责推理,上下文负责给推理提供材料。"

把 5 层上下文(任务 / 项目 / 局部 / 规则 / 反馈)一一对位,再用 AGENTS.md 把项目级规则固化下来 —— 这是高质量交付的工程基础。


📚 下一篇


🧭 一句话记住

模型负责推理,上下文负责给推理提供材料。
材料错了,再强的推理也偏;材料缺了,再好的计划也漏。

On this page