Codex Desktop App 使用 Ollama 本地模型技术方案


1. 目标

Codex Desktop App 不再走 ChatGPT/Codex 云端额度,而是使用本地 Ollama 模型,例如:

复制代码
gpt-oss-codex:20b

最终效果:

复制代码
codex app

打开 Desktop App 后,默认模型走本地:

复制代码
Ollama Local → gpt-oss-codex:20b

而不是云端默认模型,因此不会触发:

复制代码
You've hit your usage limit. Upgrade to Pro...

2. 背景问题

之前我们已经跑通了 CLI 本地模型:

复制代码
codex --profile ollama-local

它能真正执行 shell:

复制代码
• Ran pwd && ls -la

说明本地链路已经成功:

复制代码
Codex CLI
  ↓
~/.codex/ollama-local.config.toml
  ↓
Ollama /v1/responses
  ↓
gpt-oss-codex:20b

但是启动 Desktop App:

复制代码
codex app

仍然提示:

复制代码
You've hit your usage limit. Upgrade to Pro...

这说明 Desktop App 没有使用 ollama-local profile,而是走了默认云端模型。


3. 根因

3.1 CLI 和 Desktop App 的启动方式不同

CLI 跑通时使用的是:

复制代码
codex --profile ollama-local

这个命令会显式读取:

复制代码
~/.codex/ollama-local.config.toml

但 Desktop App 启动时是:

复制代码
codex app

它没有携带:

复制代码
--profile ollama-local

所以 App 会读取默认配置:

复制代码
~/.codex/config.toml

如果主配置中没有指定:

复制代码
model = "gpt-oss-codex:20b"
model_provider = "ollama-local"

App 就会使用默认云端模型,从而触发云端额度限制。


4. 方案选择

方案 A:只让 CLI 使用 Ollama

适合:

复制代码
只在终端里用本地 Codex,不关心 Desktop App

配置方式:

复制代码
codex --profile ollama-local

优点:

复制代码
安全,不影响全局默认模型

缺点:

复制代码
codex app 仍然可能走云端模型

方案 B:让 CLI 和 Desktop App 都默认使用 Ollama

适合你的目标。

方式:

复制代码
把 Ollama 本地模型配置写入 ~/.codex/config.toml 主配置

这样启动:

复制代码
codex app

也会默认使用本地模型。

这是当前推荐方案。


5. 前置条件

确保你已经有本地大上下文模型:

复制代码
ollama list | grep gpt-oss-codex

应该能看到类似:

复制代码
gpt-oss-codex:20b

如果没有,先创建:

复制代码
cat > /tmp/Modelfile.gpt-oss-codex <<'EOF'
FROM gpt-oss:20b
PARAMETER num_ctx 8192
EOF

ollama create gpt-oss-codex:20b -f /tmp/Modelfile.gpt-oss-codex

为什么需要派生模型?

因为原始 gpt-oss:20b 默认上下文是 4096,而 Codex 的真实 agent prompt 约 5664 tokens,之前日志里已经出现:

复制代码
truncating input prompt limit=4096 prompt=5664

所以必须把上下文提升到至少 8192。


6. 最终推荐配置

6.1 备份原配置

复制代码
cp ~/.codex/config.toml ~/.codex/config.toml.bak.$(date +%Y%m%d-%H%M%S)

6.2 写入 Desktop App 可用的全局本地模型配置

编辑:

复制代码
nano ~/.codex/config.toml

写入:

复制代码
model = "gpt-oss-codex:20b"
model_provider = "ollama-local"

model_context_window = 8192
model_max_output_tokens = 2048

approval_policy = "on-request"
sandbox_mode = "workspace-write"
oss_provider = "ollama"

[model_providers.ollama-local]
name = "Ollama Local"
base_url = "http://localhost:11434/v1"
wire_api = "responses"
requires_openai_auth = false

[tui.model_availability_nux]
"gpt-5.5" = 1

如果你想信任某个项目目录,可以额外加:

复制代码
[projects."/Users/an/Documents/daily"]
trust_level = "trusted"

不要把下面这个写进主配置:

复制代码
[profiles.ollama-launch]

否则新版 Codex 会报 legacy profile 错误。


7. 可选:保留 CLI profile

即使主配置已经默认走 Ollama,也可以保留:

复制代码
~/.codex/ollama-local.config.toml

内容:

复制代码
model = "gpt-oss-codex:20b"
model_provider = "ollama-local"

model_context_window = 8192
model_max_output_tokens = 2048

[model_providers.ollama-local]
name = "Ollama Local"
base_url = "http://localhost:11434/v1"
wire_api = "responses"
requires_openai_auth = false

这样你仍然可以用:

复制代码
codex --profile ollama-local

但如果主配置已经写了本地模型,普通:

复制代码
codex

和:

复制代码
codex app

也会默认走本地模型。


8. 启动方式

8.1 从项目目录启动 Desktop App

不要在 ~/.codex 里启动,应该进入真实项目目录:

复制代码
cd ~/Documents/daily
codex app

或者直接指定 workspace:

复制代码
codex app ~/Documents/daily

如果你不知道项目在哪,先查:

复制代码
ls -la ~/Documents
ls -la ~/Documents/Project

8.2 启动前确认 Ollama 正常

复制代码
ollama list
curl http://localhost:11434/v1/models

如果失败,启动 Ollama:

复制代码
brew services start ollama

或者:

复制代码
ollama serve

9. 验证是否真的走本地模型

打开 Desktop App 后,输入:

复制代码
执行 pwd,然后执行 ls -la。不要修改文件。

成功标志应该是类似:

复制代码
Ran pwd && ls -la

而不是:

复制代码
You've hit your usage limit

如果仍然出现 usage limit,说明 App 仍在走云端模型。


10. 如果仍然走云端额度,怎么排查

10.1 确认主配置里有默认模型

复制代码
cat ~/.codex/config.toml

必须有:

复制代码
model = "gpt-oss-codex:20b"
model_provider = "ollama-local"

以及:

复制代码
[model_providers.ollama-local]
base_url = "http://localhost:11434/v1"
wire_api = "responses"
requires_openai_auth = false

10.2 确认没有旧 profile 污染

复制代码
grep -R "profiles.ollama-launch\|profile = \"ollama-launch\"" ~/.codex

如果看到:

复制代码
[profiles.ollama-launch]

~/.codex/config.toml 中删除。


10.3 彻底关闭 Desktop App 后重启

复制代码
pkill -f Codex
codex app

如果你是从项目启动:

复制代码
cd ~/Documents/daily
codex app

10.4 查看 Ollama 是否收到请求

如果 App 真的走本地模型,Ollama 日志应该有请求。

你当前 Homebrew 安装的 Ollama 日志位置是:

复制代码
/opt/homebrew/var/log/ollama.log

查看实时日志:

复制代码
tail -f /opt/homebrew/var/log/ollama.log

然后在 Desktop App 里发送:

复制代码
执行 pwd,然后执行 ls -la。不要修改文件。

如果日志里出现:

复制代码
POST "/v1/responses"

说明 Desktop App 正在打到本地 Ollama。

如果日志完全没有变化,说明 Desktop App 仍没有使用本地 provider。


11. 不要使用 ollama launch codex

当前不建议使用:

复制代码
ollama launch codex

原因是它会自动写入旧格式:

复制代码
[profiles.ollama-launch]

而 Codex 0.135.0 会报错:

复制代码
legacy profile selector/table

所以统一使用:

复制代码
codex app

并让 ~/.codex/config.toml 指定默认本地模型。


12. 常见问题

12.1 出现 Model metadata not found

例如:

复制代码
Model metadata for `gpt-oss-codex:20b` not found.

可以先忽略。

原因是 gpt-oss-codex:20b 是你自己通过 ollama create 创建的派生模型,Codex 没有内置 metadata。


12.2 出现 Skill descriptions were shortened

例如:

复制代码
Skill descriptions were shortened to fit the 2% skills context budget.

不是错误。

说明 Codex 压缩了 skill 描述,以适配上下文预算。


12.3 出现 502 Bad Gateway

查看日志:

复制代码
tail -80 /opt/homebrew/var/log/ollama.log

如果看到:

复制代码
truncating input prompt limit=8192 prompt=xxxxx

说明 8192 仍不够,可以考虑升级到 16384。

创建 16384 版本:

复制代码
cat > /tmp/Modelfile.gpt-oss-codex <<'EOF'
FROM gpt-oss:20b
PARAMETER num_ctx 16384
EOF

ollama create gpt-oss-codex:20b -f /tmp/Modelfile.gpt-oss-codex

然后修改:

复制代码
model_context_window = 16384

但你的机器是 24GB 内存,建议先用 8192,确认稳定后再考虑 16384。


12.4 出现 API key login is required

检查配置里是否有:

复制代码
forced_login_method = "api"

如果有,删除。

本地 Ollama provider 应该使用:

复制代码
requires_openai_auth = false

12.5 出现 wire_api = "chat" is no longer supported

新版 Codex 不支持:

复制代码
wire_api = "chat"

必须使用:

复制代码
wire_api = "responses"

13. 推荐 alias

CLI 继续使用本地模型:

复制代码
echo "alias codex-local='codex --profile ollama-local'" >> ~/.zshrc
source ~/.zshrc

Desktop App 启动:

复制代码
echo "alias codex-app-local='codex app'" >> ~/.zshrc
source ~/.zshrc

如果你固定用某个项目:

复制代码
echo "alias codex-daily-app='codex app ~/Documents/daily'" >> ~/.zshrc
source ~/.zshrc

14. 最终结论

要让 Codex Desktop App 走 Ollama 本地模型,不能只配置:

复制代码
codex --profile ollama-local

因为这只影响 CLI profile。

必须把本地模型写成全局默认配置:

复制代码
model = "gpt-oss-codex:20b"
model_provider = "ollama-local"

并在主配置中定义:

复制代码
[model_providers.ollama-local]
base_url = "http://localhost:11434/v1"
wire_api = "responses"
requires_openai_auth = false

最终推荐启动:

复制代码
cd ~/Documents/daily
codex app

验证成功标志:

复制代码
Ran pwd && ls -la

如果不再出现 usage limit,并且 Ollama 日志出现 /v1/responses 请求,就说明 Desktop App 已经走本地 Ollama 模型。

相关推荐
冬奇Lab1 天前
Agent 系列(23):Web Agent——让 Agent 真正浏览网页
人工智能·llm·agent
冬奇Lab1 天前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
IT_陈寒1 天前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
jooloo1 天前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户5191495848451 天前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户5191495848451 天前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户018349301691 天前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能
这token有力气2 天前
Function Calling 格式漂移
人工智能