














最近在学习 Codex 时,最容易混淆的就是 Thread History、Compaction、Memory、AGENTS.md、Context。
其实它们不是一回事。
Codex 可以理解成一个 软件智能体(Agent)产品,底层由 Harness / Agent Loop 负责把大模型、工具、上下文和执行过程串起来。
简单理解:
LLM 是大脑,Codex 是让这个大脑真正能读取代码、调用工具并持续完成任务的运行系统。
就是当前这个 Thread 以前发生过什么。
例如:
我:这个项目使用 Vue3
Codex:好的
我:所有列表页的操作列固定右侧
Codex:好的
这些属于当前 Thread 的历史。
同一个 Thread 继续对话时,之前的消息、Tool Call、Tool Result 等都可能成为后续 Context 的一部分。
Thread 聊得越来越长后,不可能无限把全部原始历史都塞给模型。
Codex 会进行 Compaction(上下文压缩),把以前的大量 Context 压缩成更小的可继续使用状态。
可以简单理解成:
原始历史很多
↓
Compaction
↓
保留重要信息的压缩状态
↓
继续后面的对话
所以:
Compaction = 为了让当前 Thread 能继续聊,而不是为了形成长期 Memory。
需要注意,Compaction 并不一定只是生成一段普通文字摘要,也可以理解成对旧上下文进行更紧凑的保存和表示。
Memory 才更接近我们平时说的长期记忆。
它主要保存过去工作中,未来仍然可能有价值的信息,例如:
用户偏好:
- 技术解释尽量简单
- 修改完成后先测试
长期习惯:
- 回复尽量简洁
- 输出代码前先说明修改思路
历史经验:
- 某类启动问题之前是配置错误导致的
所以可以把它理解成:
Memory = 以后还可能再次有用的长期工作笔记。
假设一次聊天有 100 句话:
打开 user.vue
看看第 38 行
按钮颜色改浅一点
重新启动项目
……
这些大部分只是当前任务过程,没有必要都成为长期 Memory。
更值得长期保留的通常是:
可以简单理解成:
大量工作过程
↓
识别重要信息
↓
形成 Memory
↓
以后需要时再次使用
Memory 的核心并不是:
“大模型的大脑永久记住了这些内容。”
而是:
过去的工作
↓
保留有价值的信息
↓
以后出现相关任务
↓
Codex 使用相关 Memory / Context
↓
放进本次模型可见的 Context
↓
交给 LLM
所以可以记住:
Memory
=
保存重要信息
+
以后需要时重新使用
至于 Codex 底层具体使用什么数据库、向量库以及完整的检索算法,目前并没有完全公开,因此不要简单理解成“Codex Memory 就是某个向量数据库”。
不会把所有长期信息无脑塞进每一次 Context。
例如我现在问:
继续优化这个页面
真正有用的可能是:
- 当前项目的长期规则
- 之前已经做出的设计决定
- 用户的开发习惯
- 之前纠正过的重要要求
而其他无关内容没有必要参与当前任务。
所以可以理解成:
Memory 是长期资料库,Context 是这一次真正拿出来给模型看的资料。
这两个也很容易混。
AGENTS.md
=
项目长期指导和规则
Memory
=
从过去经验中保留下来的长期信息
例如:
AGENTS.md:
修改代码后必须执行测试
Memory:
用户更喜欢简短、通俗的技术解释
可以类比成:
AGENTS.md = 员工手册
Memory = 员工长期积累的工作笔记
Codex 会自动识别适用的 AGENTS.md,并把其中的项目指导加入模型输入。
最后用最简单的方式记:
Thread History
= 当前这个聊天以前发生过什么
Compaction
= 当前聊天太长了,把旧 Context 压缩后继续使用
Memory
= 跨时间保留的长期有价值信息
AGENTS.md
= 项目长期规则和指导
项目文件
= 正式代码和资料
Context
= 这一次真正给大模型看的所有信息
LLM
= 负责看这些信息并思考的大脑
最重要的一句话:
Codex 的“记忆”并不是让大模型永久记住所有聊天,而是把不同类型的信息保存下来,在需要的时候重新组成 Context,再交给大模型。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。