OllamaToOpenAI 是一个基于 ASP.NET Core 的轻量代理服务,用于将 Ollama 风格接口请求转换并转发到 OpenAI 兼容的 Chat Completions 接口。
- 兼容 Ollama
/api/chat与/api/generate接口。 - 兼容 OpenAI
/v1/chat/completions与/chat/completions接口透传。 - 支持流式与非流式响应。
- 支持按模型前缀路由到不同 OpenAI 兼容服务。
- 支持多个同前缀节点失败切换。
- 自动记录请求、响应和失败切换日志。
- .NET 8.0 SDK
- 复制示例配置文件:
copy appsettings.example.json appsettings.json- 修改
appsettings.json中的代理地址、API Key 和默认模型。 - 启动服务:
dotnet run默认监听地址由 appsettings.json 中的 Kestrel:Endpoints:Http:Url 控制,示例配置为:
http://0.0.0.0:11434
核心配置位于 Proxy 节点:
| 配置项 | 说明 |
|---|---|
TargetUrl |
默认 OpenAI 兼容 Chat Completions 接口地址。 |
ApiKey |
默认后端服务 API Key。 |
DefaultModel |
请求未指定模型时使用的默认模型。 |
Routes |
按模型前缀匹配的后端路由列表。 |
Routes[].ModelPrefix |
模型前缀,例如gpt-、deepseek-、claude-。 |
Routes[].TargetUrl |
当前模型前缀对应的后端接口地址。 |
Routes[].ApiKey |
当前模型前缀对应的后端 API Key。 |
路由匹配规则:
- 优先匹配最长
ModelPrefix。 - 同一个前缀配置多个节点时,会按配置顺序尝试失败切换。
- 未匹配任何模型前缀时,使用
Proxy根节点的默认配置。
| 接口 | 说明 |
|---|---|
POST /api/chat |
Ollama Chat 接口,转换为 OpenAI Chat Completions 请求。 |
POST /api/generate |
Ollama Generate 接口,转换为 OpenAI Chat Completions 请求。 |
POST /v1/chat/completions |
OpenAI 兼容接口,原始请求体透传。 |
POST /chat/completions |
OpenAI 兼容接口,原始请求体透传。 |
curl http://localhost:11434/api/chat `
-H "Content-Type: application/json" `
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"你好"}],"stream":false}'curl http://localhost:11434/v1/chat/completions `
-H "Content-Type: application/json" `
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"你好"}],"stream":false}'服务会将请求、响应和失败切换信息写入运行目录下的 logs 文件夹,日志文件按日期生成。
appsettings.json包含真实密钥,已被.gitignore忽略,请勿提交。- 仓库中仅保留
appsettings.example.json作为示例配置。