内容
# 代码 Ollama 代理
[npm 包](https://www.npmjs.com/package/codex-ollama-proxy)
在 Codex 中使用 Ollama、OpenRouter 等响应 API 提供商,同时保留 Codex 插件、MCP 工具、`tool_search` 和 `apply_patch`。
Codex 通常使用 OpenAI 特有的命名空间和动态工具格式发送插件和 MCP 工具。许多自定义提供商拒绝或无法解释这些格式,从而产生以下错误:
- `不支持的调用`
- MCP 工具可见但从未被调用
- `tool_search` 终止
- 命名空间工具被拒绝
- `apply_patch` 以错误格式返回
`codex-ollama-proxy` 在本地运行,并在 Codex 和配置的模型提供商之间转换请求和响应格式。
这是一个非官方的实验性项目。Codex 内部工具格式可能会发生变化,因此代理可能需要随着 Codex 的更新而进行更新。
## 快速开始
```bash
npm install -g codex-ollama-proxy
codex-ollama-proxy init
codex-ollama-proxy install
```
代理监听 `127.0.0.1:11436` 并转发到配置的上游响应 API 服务器。默认情况下,上游是本地 Ollama,地址为 `http://127.0.0.1:11434/v1`。
要固定特定版本,请从 npm tarball 安装:
```bash
npm install -g https://registry.npmjs.org/codex-ollama-proxy/-/codex-ollama-proxy-0.3.3.tgz
```
## 在 Codex 中使用 Ollama 插件
默认上游是 Ollama 的本地 OpenAI 兼容响应 API:
```bash
codex-ollama-proxy upstream --url "http://127.0.0.1:11434/v1"
codex-ollama-proxy restart
```
代理将 Codex 命名空间/插件工具展平为模型可调用的函数,然后将生成的调用映射回 Codex 期待的格式。
## 在 Codex 中使用 OpenRouter 插件
将上游指向兼容响应 API 的 OpenRouter 端点,并提供 bearer token:
```bash
codex-ollama-proxy upstream --url "https://openrouter.ai/api/v1" --api-key "KEY"
codex-ollama-proxy restart
```
上游必须公开兼容的响应 API。仅限聊天补全的 API(`/v1/chat/completions`)需要单独的适配器,此设置不支持。
## 配置上游响应 API
设置或检查上游响应 API 服务器:
```bash
codex-ollama-proxy upstream --url "https://example.com/v1" --api-key "KEY"
codex-ollama-proxy upstream --status
```
分离文本和图像模型:
```bash
codex-ollama-proxy route --text-model "TEXT_MODEL" --image-model "IMAGE_MODEL" --auto-image
codex-ollama-proxy switch ollama --model "TEXT_MODEL"
```
单一模型同时处理文本和图像:
```bash
codex-ollama-proxy route --text-model "MODEL" --image-model "MODEL" --auto-image
codex-ollama-proxy switch ollama --model "MODEL"
```
切换后,重启 Codex 或打开新线程。
## 修复 Codex 中的 MCP 不支持调用错误
Codex 应用插件和 MCP 工具可以作为命名空间工具或动态加载工具到达。本地/自定义提供商通常无法直接调用这些格式。代理将这些工具重写为普通的函数工具,供模型使用,然后为 Codex 恢复调用。
## 修复 Codex 命名空间工具兼容性
命名空间工具被展平为模型提供商可以调用的名称。例如,命名空间工具可以作为类似函数的工具公开,然后拆分为 Codex 期待的命名空间/名称对。
## 修复自定义提供商的 tool_search
代理通过保留延迟工具发现并将返回的工具调用映射回 Codex 兼容的形状,使 Codex 的 `tool_search` 流程可用。
最近的 Codex/Desktop 版本可以通过原生托管工具公开 `tool_search`:
```json
{ "type": "tool_search", "execution": "client" }
```
许多自定义提供商不将此原生项目视为可调用的。代理将其重写为模型的一个名为 `tool_search` 的普通函数工具,然后将模型的 `function_call` 映射回 Codex 的原生 `tool_search_call`。
如果 Codex 在某个回合中省略了原生 `tool_search` 项目,代理仍然会注入相同的函数 shim,以便本地/自定义模型可以一致地发现延迟工具。
当 `tool_search` 返回延迟的 MCP/插件命名空间工具时,代理还会将这些发现的工具作为后续模型请求上的顶级可调用函数公开。例如,Storefront Builder 工具由搜索返回为 `mcp__storefront_builder.list_storefront_build_sessions`,它作为 `mcp__storefront_builder__list_storefront_build_sessions` 对模型可调用,然后翻译回 Codex 为:
```json
{
"type": "function_call",
"namespace": "mcp__storefront_builder",
"name": "list_storefront_build_sessions"
}
```
## apply_patch 翻译工作原理
Codex 可以将 `apply_patch` 公开为自定义/任意工具。代理为 Codex 保留自定义工具行为,同时使周围的工具列表更容易被本地或自定义响应 API 提供商处理。
## 支持的提供商
- Ollama 兼容的响应 API 服务器
- OpenRouter 或其他公开兼容响应 API 的自定义提供商
- 接受 `POST /v1/responses` 的本地 shim
仅限聊天补全的提供商仅通过上游 URL 配置不支持。
## 已知限制
- 此软件包与 OpenAI 无关。
- Codex 内部工具模式可能会更改。
- 提供商支持取决于上游与响应 API 的匹配程度。
- 网络搜索从 Ollama 云搜索、本地 Ollama 搜索到 DuckDuckGo HTML 搜索依次fallback。
## Codex 技能
将此技能链接复制到 Codex:
```text
https://raw.githubusercontent.com/bharat2808/codex-ollama-proxy/main/skills/codex-ollama-proxy/SKILL.md
```
然后询问:
```text
安装此技能并使用它设置 codex-ollama-proxy。
```
## 有用的命令
```bash
codex-ollama-proxy status
codex-ollama-proxy upstream --status
codex-ollama-proxy logs --tail 100
codex-ollama-proxy restart
codex-ollama-proxy switch openai
```
## 卸载
```bash
codex-ollama-proxy switch openai
codex-ollama-proxy uninstall
npm uninstall -g codex-ollama-proxy
```
## 文件
运行时配置和日志:
```text
~/.codex/ollama-shape-proxy/proxy-models.toml
~/.codex/ollama-shape-proxy/proxy.log
```
调试标志默认关闭:
```toml
verbose_tools = false
log_upstream_body = false
```