<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>交互模型 on Codexer</title><link>https://codexer.com/tags/%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%9E%8B/</link><description>Recent content in 交互模型 on Codexer</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 17 Oct 2026 06:55:00 +0800</lastBuildDate><atom:link href="https://codexer.com/tags/%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%9E%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>instant_interrupt：让 Codex 随时能被打断，代价是留下一堆半成品</title><link>https://codexer.com/posts/2026-10-17-codex-instant-interrupt-partial-state/</link><pubDate>Sat, 17 Oct 2026 06:55:00 +0800</pubDate><guid>https://codexer.com/posts/2026-10-17-codex-instant-interrupt-partial-state/</guid><description>&lt;p&gt;你让 Codex 重构认证模块，跨 40 个文件。四十秒之后你发现方向错了：它在按 session 方案往下写，而你要的是 JWT token。&lt;/p&gt;
&lt;p&gt;这时候你敲一行新指令进去，会发生什么？&lt;/p&gt;
&lt;p&gt;在默认配置下，什么都不会发生。Codex 会先把手上这次工具调用跑完，可能是一条几秒的 shell 命令，也可能是一串连续的文件写入，等它回到输入缓冲区，才看得到你刚才那句话。等你这行字生效，session 方案已经铺进十几个文件了。&lt;/p&gt;
&lt;p&gt;Codex CLI 给这个行为留了一个开关：&lt;code&gt;instant_interrupt&lt;/code&gt;。打开它，你的输入会立刻中断当前工具调用，控制权马上回到你手里。&lt;/p&gt;
&lt;p&gt;一行配置的事，但它动的是交互模型的底层。&lt;/p&gt;
&lt;h2 id="为什么默认要等"&gt;为什么默认要等&lt;/h2&gt;
&lt;p&gt;根源在同步执行。Codex 发起一次工具调用，然后阻塞，直到这次调用结束，再回头重新评估交互状态。&lt;/p&gt;
&lt;p&gt;同步的好处是可预测。每一步都是完整的原子操作：工具调用跑完，结果进上下文，模型生成下一步。步骤和步骤之间，状态永远干净一致。&lt;/p&gt;
&lt;p&gt;坏处是不听话。它在干活的时候你按键，它听不见。&lt;/p&gt;
&lt;p&gt;打开 &lt;code&gt;instant_interrupt&lt;/code&gt; 之后，新输入（一行改方向的指令、一次按键、一个 Ctrl+C）会立即打断当前工具调用。它不等 shell 进程退出，不等文件写完，不等网络请求返回。&lt;/p&gt;
&lt;h2 id="怎么打开"&gt;怎么打开&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;~/.codex/config.json&lt;/code&gt; 里加一行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;instant_interrupt&amp;#34;&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者写成 TOML：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;instant_interrupt&lt;/span&gt; = &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;几个需要知道的设定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认是 &lt;code&gt;false&lt;/code&gt;，到现在仍然是 opt-in&lt;/li&gt;
&lt;li&gt;没有对应的命令行参数，只能在配置文件里设&lt;/li&gt;
&lt;li&gt;设定对这台机器上所有 Codex 会话生效，目前没有按会话或按项目的覆盖方式&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="有它和没它差在哪儿"&gt;有它和没它，差在哪儿&lt;/h2&gt;
&lt;p&gt;没开 &lt;code&gt;instant_interrupt&lt;/code&gt; 的时候：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;你： [发送改方向的指令]
Codex： [跑完当前工具调用，可能 2 到 30 秒]
Codex： [读到你的指令]
Codex： [按新方向开始执行]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;打开之后：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;你： [发送改方向的指令]
Codex： [立刻停掉当前工具调用]
Codex： [读到你的指令]
Codex： [按新方向开始执行]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;差别就是中间那一行，也就是你等了多久才把控制权拿回来。&lt;/p&gt;</description></item></channel></rss>