Codex CLI 接本地模型:配置写法,和那 12 次 “expected i32”

用自定义 model_provider 把 Codex CLI 指向 llama-server。LFM2.5-24B 上 12 项全过,但工具参数类型错了 12 次,它靠重试自救,第一次修 bug 跑了 599 秒。

配置

Codex 的做法:在 ~/.codex/config.toml 里定义一个 [model_providers.<名字>],写上 base_url,再把 model_provider 指向它。自定义 provider 不能用保留的 ID:openai、ollama、lmstudio。项目级 .codex/config.toml 里写 provider 不生效,必须放在用户级配置里。

我们实测用的 config.toml:

model = "lfm25"            # 与 llama-server --alias 一致
model_provider = "llamacpp"
model_context_window = 32768
model_auto_compact_token_limit = 28000
approval_policy = "never"
sandbox_mode = "workspace-write"

[model_providers.llamacpp]
name = "llama.cpp local"
base_url = "http://127.0.0.1:8080/v1"
env_key = "OPENAI_API_KEY"   # 环境变量里放一个假 key 即可
wire_api = "responses"

model_context_window 告诉 Codex 本地上下文只有 32K,model_auto_compact_token_limit 让它在 28K 时提前压缩。

如果只是用 Ollama 或 LM Studio,可以直接 codex --oss,配合 oss_provider = "ollama"。这个我们没试。

运行:

codex exec --skip-git-repo-check -s workspace-write "修好 calc.py 里的 bug,让 pytest 通过"

服务端参数和 Claude Code 那篇一样,--jinja 必须加。

实测:能过,但慢在重试上

模型 修 bug 计时器网页 鹈鹕 工具错误
LFM2.5-24B(3 轮) 3/3,中位 85 s 3/3,中位 161 s 3/3,中位 407 s 12
Qwen3.6-35B(1 轮) 1/1,74 s 1/1,99 s 1/1,268 s 0

错误几乎都是同一种,把整数当字符串传给工具:

failed to parse function arguments: invalid type: string "96787", expected i32

Codex 会读到报错再改,最后都过了。LFM 第一次修 bug 用了 599 秒,中位 85 秒;同一题 pi 是 47 秒。

第一次请求的提示词约 6.4k tokens(pi 约 1.4k,Claude Code 约 15.8k)。后面几轮日志里的数字更小,是因为 llama.cpp 缓存了前缀,只算新增部分。

相关

常见问题

Codex 怎么接本地模型? 在 ~/.codex/config.toml 定义 [model_providers.xxx] 的 base_url,并设置 model_provider;不能写在项目级配置里。

参考资料