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 模型。

相关推荐
谷哥的小弟1 小时前
大模型核心基础知识(12)—机器学习的基本概念与常见方法
人工智能·深度学习·机器学习·大模型·大语言模型
_Oracle1 小时前
机器学习——绪论
人工智能·机器学习
mit6.8242 小时前
AI时代下的TypeScript
人工智能
sulikey2 小时前
大模型是如何工作的
人工智能
久违 °9 小时前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
AI360labs_atyun10 小时前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.10 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary10 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_10 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程