BLOG

codex 原理

2026/04/29 4 min read BLOG 编程学习之路 CODEX 原理

codex.ps1 (wrapper)

gateway.ps1 (桥接层)

真实 CLI / runtime

你现在这条链是:

codex.ps1 (wrapper)

gateway.ps1 (桥接层)

真实 CLI / runtime


👉 gateway.ps1 的作用是:

统一参数传递 + 环境隔离 + 子进程执行

典型职责:

  • 解析 JSON 参数(CODEX_FORWARD_ARGS_JSON)
  • 保证 pwsh / node / runtime 一致
  • 做 stderr/stdout 捕获
  • 返回结构化结果(你看到的 gatewayJson)

这个问题你问对了,而且你那次现象其实非常典型,我给你直接拆到“工程级原因”,不是泛泛讲。


🧠 一句话结论

Codex 只能回复、不能调用工具 = 工具链断了(不是模型问题)

🔥 一、先把现象还原(你当时经历的)

你当时是:

✔ AI能说话(回复正常)
❌ 但不会执行命令 / 调工具

👉 说明:

LLM(大脑)正常
工具执行链(手脚)断了

🧱 二、工具调用链长什么样(关键)

你必须理解这条链👇

你输入

模型(Codex)

生成 tool_call(JSON)

工具执行器(shell / MCP / provider)

执行结果

返回给模型

👉 出问题就是:

中间某一层断了

🔥 三、最常见的 6 个真实原因(结合你情况)

我给你按“概率从高到低”排👇


❗1. 上下文爆了(你非常可能中招)

现象:

模型开始只聊天,不再调用工具

原因:

上下文太长 → 模型“忘了工具存在”

👉 真实案例:
重开会话后恢复正常 (Reddit)


👉 你当时也有:

长会话 + 多轮调试

❗2. 工具协议没接上(最核心)

比如:

AIClient2API / provider / MCP

问题:

工具描述没注册
参数格式不对

👉 结果:

模型不知道“怎么调用工具”

❗3. provider / base_url 错乱(你命中过)

你之前有:

crs → tengokukk → AIClient2API

👉 可能发生:

模型在A
工具在B
协议在C

👉 结果:

调用链断裂

❗4. 工具执行器挂了(很常见)

比如:

bash执行器
shell工具

Codex 实际上:

工具调用依赖执行器

而且:

某些版本只支持 Bash 工具 :contentReference[oaicite:1]{index=1}

👉 如果执行器异常:

模型就退化成“聊天模式”

❗5. 权限 / approval 限制

比如你看到过:

approval_policy = never
sandbox_mode = xxx

👉 如果策略不允许:

工具调用被阻止

❗6. tool schema / 参数错误

例如:

工具定义不符合模型训练格式

会导致:

模型不会调用工具 :contentReference[oaicite:2]{index=2}

🧠 四、你那次最可能的真实原因(我帮你判断)

结合你整个上下文,我给你一个最接近真相的判断


👉 你的情况 ≈ 组合问题

1️⃣ 长会话(上下文污染)
+
2️⃣ 多层代理(crs / tengokukk / AIClient2API)
+
3️⃣ 工具链不统一(responses / chat混用)

👉 结果:

模型退化成“只聊天模式”

🔥 五、核心原理(你必须理解)

模型不是“自动会调用工具”,它需要:

✔ 知道工具存在
✔ 知道格式
✔ 知道能成功执行

👉 任何一个条件失败:

就会退回:
👉 只输出文本

🧠 六、你可以用这个快速判断(以后必用)

遇到“只聊天不执行”,直接问:


1️⃣ 模型有没有发 tool_call?

有 → 执行层问题
没有 → 提示/上下文问题

2️⃣ tool_call 有没有被执行?

没有 → MCP / executor / provider问题

3️⃣ 执行结果有没有返回?

没有 → 网络 / 中断 / API问题

🔧 七、解决套路(标准流程)


🟢 1. 重置会话

/new

🟢 2. 打印 tool schema

确认:

模型能看到工具

🟢 3. 单独测试工具

bash command

🟢 4. 简化链路

直接 → 官方API
不要走代理

🧠 最后一刀总结

“只能回复不能调用工具”
 
不是AI变傻了
 
👉 是你的“工具调用链断了”

🚀 给你一个更高级认知(非常重要)

你现在已经接触到一个本质问题:

AI系统 = 推理层 + 工具层 + 执行层

你那次问题:

推理层 ✔
执行层 ❌

👉 所以你会感觉:

“它在说,但不做”

如果你要彻底解决(强烈建议)

我可以帮你做一版:

✔ 工具调用链完整结构图
✔ 每一层怎么验证
✔ 怎么防止“退化成聊天”

你只要说:

工具链排查图

我给你一版工程级 debug 手册(你以后不会再被这个坑)