MemoryLake
返回全部文章
Tutorial2026 年 10 月 21 日·10 分钟阅读

如何导出 Codex 聊天并保留其解决的问题(2026 指南)

一个漫长的 Codex 会话中包含的不仅仅是最终的差异(diff)。它记录了你首先尝试的方法以及失败的原因、最终让测试通过的标志,以及在 Codex 停止忽略之前你解释了两次的约束条件。当会话结束时,这些推理过程仍留在聊天中,而聊天正是你最不可能再次打开的部分。

Codex 提供了一个导出这些内容的命令。在 CLI 中,/export 会将完整的对话以 Markdown 格式写入文件或剪贴板。此外,还有一些命令可以获取最后一个回答、总结长聊天以及捕获脚本运行的输出。

本指南将介绍每个命令的工作原理、Codex 保留哪些本地历史记录以及设置如何限制它,以及如何将导出的聊天转化为下一次会话可以使用的内容。如果你正在寻找已不在列表中的聊天,我们关于寻找丢失的 Codex 聊天历史记录的指南涵盖了这一内容。如果你想分支一个聊天而不是保存它,我们关于分支 Codex 聊天的指南涵盖了 /fork。

为什么花一分钟导出 Codex 聊天是值得的

本地历史记录取决于你的设置

默认情况下,Codex 会保留本地记录。OpenAI 的配置指南指出:“默认情况下,Codex 将本地会话记录保存在 CODEX_HOME 下(例如 ~/.codex/history.jsonl)。”它是否包含你以后需要的内容取决于你的设置。

有两个设置会改变这一点。在 [history] 下将 persistence 设置为 none 会关闭本地历史记录持久化。而 history.max_bytes 会限制文件大小:“当文件超过上限时,Codex 会丢弃最旧的条目并压缩文件,同时保留最新的记录。”对于 codex exec 运行,--ephemeral 标志运行 Codex 时“不会将会话展开文件持久化到磁盘”。

如果你或你的团队设置了其中任何一项,你以后想要搜索的聊天记录可能就不存在了。

压缩会重写聊天内容

长会话可以被压缩,可以根据 model_auto_compact_token_limit 设置的阈值自动压缩,也可以手动压缩。/compact 命令“用简短的总结替换较早的轮次,在释放上下文的同时保留关键细节。”这正是你对上下文窗口所期望的,但活动聊天中较早的轮次会被总结所取代。在压缩之前进行导出可以保留完整的交流内容。

删除是永久性的

归档和删除是不同的。/archive 会从活动列表中移除会话,同时保留其聊天记录,你可以使用 codex unarchive 恢复它。/delete 则不提供这种功能:“Codex 会永久删除聊天记录和生成的子会话。”

记忆也不会保存聊天记录

Codex 具有记忆功能,但它不是你对话的副本。OpenAI 表示:“ChatGPT 网页版使用 ChatGPT 记忆,而本地 Codex 客户端使用独立的本地记忆存储和控制。”在桌面应用中,Codex 记忆是“针对所选机器”开启或关闭的。OpenAI 还建议不要在必须应用的规则上依赖它们:“将记忆视为一个有用的召回层,而不是必须始终应用的规则的唯一来源。”我们关于开启 Codex 本地记忆的指南介绍了它们的工作原理。

Codex 为导出聊天提供了哪些功能

/export:将完整对话导出为 Markdown

在 Codex CLI 中,输入 /export 并选择“复制到剪贴板”或“保存到文件”。OpenAI 的斜杠命令参考指出:“Codex 将完整的对话导出为 Markdown。”要跳过菜单并直接写入文件,请运行 /export session.md。一个条件:“在导出之前,请等待当前轮次结束。”

/copy:仅复制最新回答

当你只需要最后一个结果时,/copy 会“将最新完成的 Codex 输出复制到剪贴板”。你也可以在主 TUI 中按 Ctrl+O。如果某个轮次仍在运行,它会复制最新完成的输出,而不是正在进行的响应。在第一个完成的输出之前或回滚之后,该命令不可用。

/recap:不进行压缩的总结

当 Codex 处于空闲状态时,/recap 会生成当前对话的总结。参考文档将其目的描述为“在不压缩其上下文的情况下了解聊天进度”。即使你关闭了自动总结,它也能工作。总结是你记录笔记的一个很好的起点,但它只是一个摘要,而不是聊天记录。

脚本运行:将输出写入文件

对于使用 codex exec 启动的运行,有两个标志可以在没有斜杠命令的情况下捕获输出。--json 会打印“换行符分隔的 JSON 事件,而不是格式化的文本”。而 --output-last-message 会将“助手的最后一条消息写入文件”,OpenAI 称其“对下游脚本非常有用”。

恢复和分支:继续在聊天中工作

有时你根本不需要文件,只需要恢复会话。codex resume 将“通过 ID 继续之前的交互式会话,或恢复最近的聊天”。对于脚本运行,codex exec resume 接受会话 ID,或者使用 --last “从当前工作目录继续最近的会话”,以及使用 --all 考虑来自任何目录的会话。codex fork 会从较早的聊天中创建一个新聊天,“并保留原始聊天记录”。

这些可以保持对话继续,但它们依赖于会话仍保存在磁盘上。而导出则是无需依赖磁盘的副本。

桌面应用

/export 命令在 CLI 参考文档中有记载。在 ChatGPT 桌面应用中,键盘快捷键列表包括“复制对话路径”(标记为仅限 Codex),它会复制对话的路径。桌面应用的文档中没有描述导出命令,因此要进行完整的 Markdown 导出,CLI 是官方文档推荐的途径。

导出捕获了什么,没有捕获什么

导出的是文本形式的对话。代码更改本身存在于你的工作区和 git 历史记录中,因此提交和 /diff 仍然是更改内容的记录。/diff 显示“你已暂存的更改、尚未暂存的更改以及 Git 尚未开始跟踪的文件”。

导出也不会为你整理任何内容。一个三小时会话的 Markdown 记录包含了每一个死胡同和每一次工具调用。这作为存档很有用,但很难作为参考。有用的部分是聊天中解决的问题,而将其提取出来是一个单独的步骤。

人们首先尝试的方法

依赖本地历史记录。 它默认是开启的,但 [history] 设置、大小限制或 codex exec 运行时的 --ephemeral 标志可能意味着当你寻找时,聊天记录已经不在了。

先压缩,后导出。 在 /compact 之后,活动聊天中较早的轮次就变成了总结。

删除已结束的会话以进行整理。 /delete 是永久性的。/archive 会保留聊天记录,并且可以撤销。

将 Codex 记忆视为记录。 它们是单机召回层,OpenAI 建议将必需的指南保存在 AGENTS.md 或已签入的文档中。

将整个导出内容粘贴到下一次会话中。 这可行,但冗长的聊天记录会让死胡同填满上下文窗口。而总结可以用极小的空间承载相同的结论。

保存导出内容后从未打开。 原始聊天记录只是一个存档。除非你提取出关键内容,否则它对下一次会话毫无帮助。

解决方案:导出完整聊天,提取解决的问题,然后将其放在下一次会话能找到的地方

步骤 1:在压缩、归档或删除之前导出

当会话达到值得保留的结果时,请在它完整时进行导出。等待当前轮次结束,然后运行 /export 并指定一个说明会话用途的文件名,例如 /export auth-retry-fix.md。除非你的团队在版本控制中保留会话笔记,否则请将其保存在代码仓库之外。

如果你准备运行 /compact 来释放上下文,请先进行导出。对于 /delete 也是如此。

步骤 2:提取结论

打开导出文件并写一个简短的总结。先运行 /recap 可以为你提供一个起点。保留以下四类信息:

  • 决策: 你选择了什么以及原因。
  • 死胡同: 你尝试过但没有成功的方法,以免下一次会话重复这些尝试。
  • 可用的命令和设置: 使其正常工作的确切标志、环境变量或步骤。
  • 开放性问题: 还剩下什么以及你下一步会检查什么。

排除会话处理的任何敏感内容,例如凭据、令牌或客户数据。一个有用的调试会话总结可能如下:重试 bug 源于两处设置的超时;仅更改客户端值不起作用;同时设置两者并重启 worker 解决了问题;集成测试仍需要针对慢速路径的 fixture。

步骤 3:将结论放在下一次会话能看到的地方

代码仓库的规则和约定属于 AGENTS.md 或已签入的文档,OpenAI 建议将必需的团队指南保存在这些地方。有用但非规则的笔记(例如为什么选择某个库而不是另一个库)可以放入你自己的笔记或记忆层中。

当你开始下一次会话时,让 Codex 指向总结,而不是完整的聊天记录。一个简短、准确的总结比原始对话占用的上下文更少。我们关于为什么 Codex 会遗忘项目上下文的指南介绍了 Codex 自身会加载哪些内容。

在 MemoryLake 中进行设置

导出解决了问题的一半:聊天记录被保存了下来。剩下的是如何让这些结论在 Codex 以及你用于同一项目的其他工具中可用,而无需有人去翻阅 Markdown 聊天记录。

MemoryLake 是一个记忆层,用于将这些结论保存在你维护的一个列表中,供 Codex 以及你连接的其他助手(如 Claude Code 和 ChatGPT)使用。

你用自己的话亲自编写这些条目。不会从你的 Codex 会话、你的 history.jsonl、你导出的文件、你的 Codex 记忆或任何厂商的存储中读取、写入或删除任何内容。请排除凭据以及你团队政策规定保留在代码仓库中的任何内容。

步骤 1:创建 API 密钥

登录并从控制面板生成一个密钥。该密钥属于你的 MemoryLake 工作区,与你的 ChatGPT 和 Codex 登录凭据是分开的。

MemoryLake 控制台显示 API 密钥屏幕,在此创建并复制新密钥以供代理使用
MemoryLake 控制台显示 API 密钥屏幕,在此创建并复制新密钥以供代理使用

步骤 2:上传你的第一批记忆

从解决方案步骤 2 中的总结开始:你导出的会话中的决策、死胡同和可用命令。每个条目一个要点,注明日期,并标记代码仓库或任务。

MemoryLake 工作区已上传首批文档,列出了每个文件成为可搜索记忆的过程
MemoryLake 工作区已上传首批文档,列出了每个文件成为可搜索记忆的过程

步骤 3:连接你的 AI 和代理

连接 Codex 和你使用的其他助手。针对同一问题的下一次会话将从上一次会话解决的问题开始。

MemoryLake 集成屏幕,列出了可以连接到记忆层的 AI 客户端和代理框架
MemoryLake 集成屏幕,列出了可以连接到记忆层的 AI 客户端和代理框架

这在实践中带来了什么改变

第一个区别是,结束的会话会留下一些东西。完整的聊天记录被保存下来,并且结论以你真正会重新阅读的形式记录下来。

第二个区别是,下一次会话的起点更高。它知道死胡同和可用的命令,因此不会花第一个小时重新发现它们。

第三个区别是,工作成果可以在工具之间传递。如果你将项目的一部分切换到另一个代理,结论会随你同行。我们关于从 Codex 迁移到 Claude Code 的指南涵盖了这一迁移,而我们关于导出 Claude Code 会话的指南则涵盖了另一个方向。

导出 Codex 聊天的最佳实践

在聊天完整时导出。 在运行 /compact、/archive 或 /delete 之前。

等待轮次结束。 OpenAI 表示在导出前应先等待轮次结束。

根据结果命名文件。 这样你以后能更快地找到它。

使用 /copy 复制单个回答。 在主 TUI 中按 Ctrl+O 也可以达到同样的效果。

使用标志捕获脚本运行。 在 codex exec 中使用 --output-last-message 或 --json。

归档而不是删除。 /archive 会保留聊天记录,而 codex unarchive 可以恢复会话。

检查你的历史记录设置。 了解 [history]、history.max_bytes 或 --ephemeral 是否在起作用。

进行总结,然后保留总结。 原始聊天记录只是一个存档,而不是参考资料。

结论

Codex 提供了几种导出对话的方法。/export 将完整的聊天写入为 Markdown,/copy 获取最后一个回答,/recap 在不压缩的情况下进行总结,而 codex exec 标志则捕获脚本输出。默认情况下存在本地历史记录,但设置可以将其关闭或裁剪,/compact 用总结替换较早的轮次,而 /delete 是永久性的。

在聊天完整时导出它,提取其决策、死胡同和可用命令,并将规则放入 AGENTS.md,将其他所有内容放在你下一次会话能找到的地方。

常见问题

如何导出 Codex 聊天?

在 Codex CLI 中,输入 /export 并选择“复制到剪贴板”或“保存到文件”,或者运行 /export session.md 直接写入文件。Codex 会将完整的对话导出为 Markdown。请先等待当前轮次结束。

我可以从 ChatGPT 桌面应用中导出 Codex 聊天吗?

/export 命令在 Codex CLI 参考文档中有记载。桌面应用的快捷键列表包括针对 Codex 聊天的“复制对话路径”,但其文档中没有描述导出命令。

Codex 将聊天历史记录存储在哪里?

默认情况下,Codex 将本地会话记录保存在 CODEX_HOME 下,例如 ~/.codex/history.jsonl。你可以通过 [history] 设置关闭持久化,或者通过 history.max_bytes 限制文件大小。

/compact 会删除我的 Codex 聊天历史记录吗?

它会用简短的总结替换活动聊天中较早的轮次,以释放上下文。如果你想要完整的交流内容,请先导出聊天。

我可以恢复已删除的 Codex 会话吗?

不能。OpenAI 表示 /delete 会永久删除聊天记录和生成的子会话。已归档的会话可以使用 codex unarchive 恢复。

如何仅保存最后一个 Codex 回答?

使用 /copy 或在主 TUI 中按 Ctrl+O 复制最新完成的输出。对于 codex exec 运行,--output-last-message 会将最后一条消息写入文件。