
1. 这次更新到底改了什么从“一次性问答”到“可持续会话”Codex 这次加的那个被大家叫做“续命按钮”的东西说白了就是会话延续能力。以前用 Codex 写代码最让人抓狂的地方在于你给它一段需求它给你一版代码你发现有个地方不对想让它改结果它要么忘了上文要么把整个文件重写一遍改完还引入新 bug。那种感觉就像你跟一个记忆力只有七秒的人合作每次开口都得从头讲一遍项目背景。这次更新之后Codex 支持在同一个任务上下文里持续追加指令你可以在它上一轮输出的基础上说“把这里的循环改成递归”“这个函数加个异常处理”“把变量名统一成驼峰”它会带着之前的上下文继续改而不是推倒重来。这个变化看起来小实际用起来差别巨大。我拿一个真实场景试过一个大概三百行的数据处理脚本涉及 CSV 读取、字段清洗、分组聚合、结果导出四个环节。以前用旧方式我至少要把整个脚本贴进去三次每次都要重新描述需求。现在只需要在第一轮把需求说清楚后面每一轮针对具体函数提修改意见就行整体耗时从四十多分钟压到了十五分钟左右。这个“续命按钮”背后的核心机制我推测是基于会话状态保持加上增量 diff 应用。它不会每次重新生成整个文件而是尽量在你指定的范围内做局部修改。这一点对程序员来说太重要了因为实际工作中我们大部分时间不是在从零写代码而是在改代码。改代码最怕的就是“改一处崩三处”而增量修改能大幅降低这种风险。适合谁来用我觉得三类人受益最明显。第一类是日常写业务代码的后端和前端经常需要在一个文件里反复调整逻辑第二类是做数据分析和脚本自动化的同学Python 脚本改来改去是常态第三类是正在学习编程的新手因为他们更需要一个能记住上下文、能连续对话的助手而不是每次都要重新解释“我要做什么”。注意会话延续不等于无限记忆。实际测试下来如果单个会话轮次太多、上下文太长它仍然可能丢失早期细节。建议把一个复杂任务拆成几个中等长度的会话每个会话聚焦一个模块。2. 为什么这个功能对程序员这么重要三个真实痛点2.1 痛点一重复描述需求的成本太高写代码的人都知道描述需求本身就很费时间。你要说清楚输入是什么、输出是什么、边界条件有哪些、异常怎么处理。如果每次让 AI 改代码都要重新描述一遍那还不如自己改。Codex 这次的会话延续能力本质上是把“描述需求”这件事从每次重复变成了一次性投入。第一轮把需求讲透后面就可以用很短的指令来驱动修改比如“把第三行的判断改成 switch”“给这个函数加个日志”“把超时时间从 5 秒改成 10 秒”。这种交互效率的提升用过就回不去了。2.2 痛点二AI 改代码容易“用力过猛”旧版 Codex 有个毛病你让它改一个小地方它可能把整个文件重写一遍顺便把你没让它改的地方也“优化”了。结果就是你得逐行对比看它到底动了哪里。新版在会话延续模式下更倾向于做局部修改。我实测下来只要你在指令里明确说“只改这个函数其他不要动”它基本能守住边界。这一点对维护老项目特别重要因为老项目里很多代码看起来“不优雅”但其实是故意那么写的乱改会出问题。2.3 痛点三新手不知道怎么跟 AI 协作很多刚接触 AI 编程的人最大的困惑不是“AI 能不能写代码”而是“我怎么跟它配合”。旧模式下新手往往第一轮问完就不知道下一步该说什么了因为 AI 给了一版代码新手看不出哪里有问题也不知道怎么提修改意见。会话延续模式相当于给了一个更自然的协作节奏你可以先让它写一版然后说“帮我解释一下这段逻辑”再说“我觉得这里可能有问题你检查一下”然后说“帮我加个测试”。这种多轮对话的方式更接近真实工作中跟同事协作的感觉。3. 实操怎么用上这个“续命按钮”3.1 环境准备与基础配置先说清楚Codex 的使用方式在不同平台上有差异。我这边主要是在命令行环境和编辑器插件里用核心思路是一样的你需要有一个能持续保持会话的入口。如果你用的是 API 方式调用那需要在请求里带上会话标识或者上下文历史如果你用的是现成的 Codex 界面那一般会有“继续对话”或者“追加指令”的入口。配置层面最关键的是模型选择和上下文长度。模型选不对会话延续的效果会打折扣。上下文长度设置太短聊几轮就忘了前面说什么设置太长响应速度会变慢而且成本也会上去。我的经验是对于大多数日常开发任务中等上下文长度就够用了大概能支撑十到十五轮有效对话。如果你要处理的是大型重构任务那可能需要更长上下文但建议配合任务拆分来做。# 以命令行方式为例设置会话保持的基本参数 # 具体参数名以实际工具为准这里展示的是思路 codex --session-mode continue --context-window medium --task-name data-cleanup上面这段命令的意思是开启会话延续模式上下文窗口设为中等给这个任务起个名字方便后续找回。实际工具里参数名可能不一样但核心就是这三个东西会话模式、上下文长度、任务标识。3.2 第一轮把需求讲清楚但别一次讲太多第一轮对话的质量直接决定后面能延续多少轮。我的做法是第一轮只讲核心目标和主要约束不要把所有细节都塞进去。比如你要写一个用户注册接口第一轮就说“用 Python 写一个用户注册函数接收用户名、邮箱、密码做基本校验返回成功或失败”。先让它出一版能跑的代码然后再在后续轮次里加细节。这样做的好处是第一轮输出比较快你能快速看到整体结构对不对。如果第一轮就塞太多细节AI 容易顾此失彼而且你也不好判断到底是哪里出了问题。3.3 后续轮次用短指令驱动局部修改第一轮代码出来之后后面就是“续命按钮”真正发挥作用的地方。你可以用很短的指令来驱动修改比如“把密码校验改成至少八位包含大小写和数字”“邮箱校验用正则不要用简单的 判断”“加一个重复用户名的检查”“把返回结果改成 JSON 格式”“给这个函数加个单元测试”每一轮它都会带着之前的上下文来改不会把整个文件重写。我实测下来一个中等复杂度的函数经过七八轮调整就能达到可用的状态而且每一轮改动都很小容易 review。提示每轮指令尽量聚焦一个点。如果你一轮里说“把密码校验改了再加个日志顺便把返回格式也调一下”它可能会顾此失彼。分开说每轮改一个地方效果更稳。3.4 什么时候该开新会话会话延续不是越长越好。我踩过的坑是一个会话聊了二十多轮之后它开始出现“记忆混乱”把前面已经改过的逻辑又改回去了。后来我总结出一个经验当一个模块的修改基本完成准备进入下一个模块时就开新会话。新会话里把上一个模块的最终代码贴进去作为起点然后开始新模块的需求描述。这样既保留了成果又避免了上下文过长带来的混乱。4. 常见问题与排查技巧4.1 会话延续失效了怎么办最常见的情况是你说了“继续改”但它好像忘了之前的内容。这时候先检查两件事。第一你的会话标识是不是丢了。有些工具在切换页面或者重启之后会丢失会话状态需要手动恢复。第二上下文是不是超了。如果前面聊了太多轮早期内容可能已经被挤出去了。解决办法是把当前最新的代码和关键需求重新贴一遍然后说“基于这个继续改”。4.2 它改代码时动了不该动的地方这个问题在旧版里很常见新版虽然好一些但偶尔还是会发生。我的应对方法是在指令里明确加一句“只修改我指定的部分其他代码保持原样”。另外每次它改完我都会用 diff 工具看一下改动范围。如果发现它动了不该动的地方直接说“撤销上一轮对 XX 部分的修改只保留 YY 部分的改动”。多轮对话的好处就是你可以让它回退。4.3 响应变慢了会话轮次多了之后响应速度下降是正常的因为每次都要带上之前的上下文。如果你觉得太慢可以主动开新会话把当前状态作为新会话的起点。另外检查一下你的上下文窗口设置是不是太大了。对于大多数任务中等窗口就够用没必要开到最大。4.4 常见问题速查表问题现象可能原因解决办法它忘了之前说过的需求上下文超限或会话丢失重新贴最新代码和关键需求开新会话改了不该改的地方指令边界不清晰明确说“只改 XX 部分”用 diff 检查响应越来越慢会话轮次过多开新会话把当前状态作为起点改完代码跑不起来增量修改引入了不一致让它解释改动逻辑或回退到上一版同一个问题反复出现早期错误被带入后续轮次开新会话从干净状态重新开始5. 我个人的使用体会和一些额外建议用了一段时间之后我最大的感受是AI 编程工具的价值不在于一次性能写出多完美的代码而在于能不能形成一个顺畅的协作节奏。Codex 这次的会话延续能力本质上是在补全这个节奏。以前是“你问一句它答一句”现在是“你带着它一步步把东西做出来”。这个转变对日常开发效率的提升是实实在在的。另外分享一个小技巧我会在会话开始时先让它用注释的形式把需求要点写在代码顶部。这样后面每一轮它都能看到这些要点不容易跑偏。比如# 需求要点 # 1. 输入用户名、邮箱、密码 # 2. 校验用户名非空邮箱格式正确密码至少8位 # 3. 输出成功返回用户ID失败返回错误信息 # 4. 异常数据库连接失败时返回统一错误码 def register_user(username, email, password): pass这个做法看起来简单但实测能明显减少它“忘记需求”的情况。因为需求就写在代码里每一轮它都能看到。还有一个建议是不要指望它一次就写出生产级代码。把它当成一个能快速出草稿的助手然后你来做 review 和打磨。会话延续模式最大的好处就是让这个“打磨”过程变得很顺你可以一轮一轮地提意见它一轮一轮地改最后你拿到的是一个经过多轮迭代的版本而不是一个需要你从头重写的半成品。最后说一个我踩过的坑有一次我让它改一个涉及数据库事务的函数它改完之后逻辑看起来没问题但实际跑的时候发现事务边界变了。后来我养成了一个习惯凡是涉及事务、并发、权限、金额计算这些关键逻辑的修改改完之后一定要自己逐行看一遍。AI 能帮你写代码但关键逻辑的最终把关还是得靠自己。这个习惯帮我避免了好几次潜在的生产事故。