一个提供多种大语言模型服务提供商接口的中间件,支持动态切换服务提供商,提供OpenAI兼容的API接口。
- 🔄 支持多种服务提供商(CodeGeex、Qwen、Gemini CLI等)
- 🎯 提供完全OpenAI兼容的API接口
- 🔌 易于扩展新的服务提供商
- 🛠️ 支持跨平台(Windows、Linux、MacOS)
- 🚀 简单易用的配置
- 📊 支持多实例配置和负载均衡
- 🌊 支持流式响应(SSE)
- 🛡️ 完善的错误处理机制
- 🔧 支持多种认证方式
graph LR
Client[客户端] --> |OpenAI兼容请求| Server[OpenAICompatible服务]
Server --> |负载均衡| LoadBalancer[负载均衡器]
LoadBalancer --> |根据配置路由| Provider1[CodeGeex Provider]
LoadBalancer --> |根据配置路由| Provider2[Qwen Provider]
LoadBalancer --> |根据配置路由| Provider3[Gemini CLI Provider]
Provider1 --> |转换请求| CodeGeex[CodeGeex API]
Provider2 --> |转换请求| Qwen[Qwen API]
Provider3 --> |转换请求| Gemini[Gemini CLI API]
subgraph 配置管理
Config[配置文件] --> |配置加载| Server
Config --> |多实例配置| LoadBalancer
end
subgraph 错误处理
ErrorHandler[错误处理器] --> |统一错误处理| Server
end
subgraph 流式响应
StreamHandler[流式处理器] --> |SSE响应| Server
end
从releases页面下载适合你系统的预编译二进制文件。
docker pull ghcr.io/wenchuntech/openaicompatible:latest
docker run -d -v config.json:/app/config.json -p 8080:8080 openaicompatible:latest需求:
- Go 1.24.2 或更高版本
# 克隆仓库
git clone https://github.com/WenChunTech/OpenAICompatible.git
cd OpenAICompatible
# 构建
./build.sh创建config.json配置文件:
{
"host": "0.0.0.0",
"port": 8080,
"codegeex": [
{
"token": "你的CodeGeex token 1",
"prefix": "codegeex1",
"user_id": "user_id_1",
"user_role": 1,
"ide": "vscode",
"ide_version": "1.0.0",
"plugin_version": "1.0.0",
"machine_id": "machine_1",
"talk_id": "talk_1",
"locale": "zh-CN"
},
{
"token": "你的CodeGeex token 2",
"prefix": "codegeex2"
}
],
"qwen": [
{
"token": "你的Qwen token 1",
"prefix": "qwen1"
},
{
"token": "你的Qwen token 2",
"prefix": "qwen2"
}
],
"gemini_cli": [
{
"project_id": "你的Gemini项目ID",
"token": {
// 你的Gemini访问令牌
},
"prefix": "gemini1"
}
]
}host: 服务监听地址port: 服务监听端口codegeex: CodeGeex服务配置数组token: 访问令牌prefix: 前缀标识(可选)user_id: 用户ID(可选)user_role: 用户角色(可选)ide: IDE标识(可选)ide_version: IDE版本(可选)plugin_version: 插件版本(可选)machine_id: 机器ID(可选)talk_id: 会话ID(可选)locale: 语言环境(可选)
qwen: Qwen服务配置数组token: 访问令牌prefix: 前缀标识(可选)
gemini_cli: Gemini CLI服务配置数组project_id: Google Cloud项目IDtoken: OAuth2访问令牌prefix: 前缀标识(可选)
系统支持每个服务提供商配置多个实例,会自动进行负载均衡。请求时会按顺序轮询使用不同的实例。
- CodeGeex: 使用API Token
- Qwen: 使用API Token
- Gemini CLI: 使用OAuth2 Token
系统会自动从各个服务提供商获取支持的模型列表,并为每个模型添加前缀以区分来源。例如:
codegeex/codegeex4: CodeGeex 4模型qwen/qwen-turbo: Qwen Turbo模型gemini_cli/gemini-pro: Gemini Pro模型
完整的模型列表可以通过/v1/models API获取。
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "你好"
}
]
}'curl http://localhost:8080/v1/models- 在
src/provider目录下创建新的服务提供商包 - 实现
Provider接口:
type Provider interface {
HandleChatCompleteRequest(ctx context.Context, r *model.OpenAIChatCompletionRequest) (*request.Response, error)
HandleChatCompleteResponse(ctx context.Context, w http.ResponseWriter, r *request.Response) error
HandleListModelRequest(ctx context.Context) (*request.Response, error)
HandleListModelResponse(ctx context.Context, w http.ResponseWriter, r *request.Response) (*model.OpenAIModelListResponse,error)
}- 在
config.json中添加相应的配置项 - 在
main.go中注册新的服务提供商
系统提供了统一的错误处理机制,包括:
- 请求验证错误
- 服务提供商连接错误
系统支持通过Server-Sent Events (SSE)实现流式响应:
- 在请求中设置
"stream": true - 系统会自动处理SSE格式的响应
- 支持错误流的处理
流式响应使用示例:
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "codegeex/codegeex4",
"messages": [
{
"role": "user",
"content": "你好"
}
],
"stream": true
}'如果您想为OpenAICompatible项目做出贡献,请遵循COMMIT_RULE.md文件中的提交规则。
本项目采用 MIT 许可证 - 详见 LICENSE 文件