AI开发者常面临多LLM厂商API兼容性难题:OpenAI、Claude和Gemini的协议差异导致消息格式、认证方式及工具调用参数不统一。一次适配需多次重构,开发效率低且易出错。
LLM Protocol Adapter工程通过统一适配器模式解决该痛点,实现多LLM无缝集成。开发者无需为各厂商单独编写适配逻辑,大幅降低技术复杂度。
项目地址:https://github.com/Soyoger/llm-protocol-adapter
一、工程核心目标:标准化多LLM集成
该项目专为屏蔽OpenAI、Anthropic(Claude)和Google Gemini三大主流LLM的API协议差异而设计,提供标准化通用接口。核心价值体现在:
- 快速掌握API核心区别,避免重复查阅文档
- 通过配置切换厂商(如从GPT-4o切换至Claude),无需修改调用逻辑
- 同一项目内同步集成多LLM,消除适配冗余
适配逻辑严格遵循OpenAI Chat Completions API、Anthropic Messages API及Gemini Generate Content API官方标准,确保稳定可靠。
二、工程目录结构:模块清晰易上手
目录设计遵循高内聚原则,核心代码与测试分离,便于快速定位关键模块:
llm-protocol-adapter/
├── core/ 核心逻辑
│ ├── adapters/ 适配器实现
│ │ ├── base_adapter.py 基类
│ │ ├── openai_adapter.py OpenAI适配器
│ │ ├── anthropic_adapter.py Anthropic适配器
│ │ └── gemini_adapter.py Gemini适配器
│ ├── llm_client.py 统一客户端
│ ├── llm_response.py 标准化响应对象
│ └── message.py 统一请求消息格式
├── tests/ 测试用例
│ ├── openai/
│ ├── anthropic/
│ └── gemini/
└── README.md
开发只需关注core.llm_client客户端,底层适配细节完全封装,真正实现开箱即用。
三、快速集成指南:三步实现多LLM调用
核心优势在于统一调用接口,切换厂商仅需修改三处参数:
# 1. 创建客户端(切换厂商仅需调整model/base_url)
client = LLMClient(
model="gpt-4o", # 模型标识
api_key="your-api-key", # 厂商API密钥
base_url="https://api.openai.com/v1" # 厂商接口地址
)
# 2. 非流式调用(获取完整响应)
response = client.invoke([{"role": "user", "content": "你好"}])
# 3. 流式调用(实时内容输出)
for chunk in client.stream_invoke([{"role": "user", "content": "讲故事"}]):
print(chunk, end="")
# 4. 异步调用(高并发场景)
response = await client.ainvoke([{"role": "user", "content": "你好"}])
例如切换至Gemini,仅需将base_url替换为Gemini接口地址,model参数改为Gemini支持的模型名,其余调用逻辑不变。
四、关键协议差异解析
掌握核心差异有助于精准适配。以下从七个维度对比三大厂商实现:
1. 消息格式差异
| 特性 |
OpenAI |
Anthropic |
Gemini |
| 消息字段 |
messages |
messages |
contents |
| 内容字段 |
content(字符串) |
content(字符串/数组) |
parts(数组) |
| System Prompt |
role:system |
独立system字段 |
system_instruction对象 |
| 角色定义 |
system/user/assistant |
user/assistant |
user/model |
2. 认证方式差异
| 厂商 |
认证方式 |
| OpenAI |
Authorization: Bearer sk-xxx |
| Anthropic |
x-api-key: sk-ant-xxx + anthropic-version头 |
| Gemini |
x-goog-api-key: xxx(无Bearer前缀) |
3. 必填参数差异
| 参数 |
OpenAI |
Anthropic |
Gemini |
| model |
必填 |
必填 |
必填(URL路径中) |
| max_tokens |
可选(≤4096) |
必填(因模型而异) |
可选 |
注:Anthropic的max_tokens为必填项,漏填会导致认证失败。
4. 其他关键差异
- 端点差异:OpenAI使用/v1/chat/completions,Anthropic使用/v1/messages,Gemini采用/v1/models/{model}:generateContent
- 工具调用:OpenAI采用标准格式,Anthropic使用tool_use,Gemini需自行生成调用ID
- 响应字段:OpenAI通过choices[0].message.content获取内容,Gemini需访问candidates[0].content.parts[0].text
- 多模态支持:Gemini最全面,支持视频/音频;Anthropic限于图片文档;OpenAI GPT-4o支持基础多模态
五、厂商选型建议:按场景匹配需求
| 对比项 |
OpenAI |
Anthropic |
Gemini |
| 设计理念 |
简洁易用 |
安全优先 |
多模态集成 |
| 学习成本 |
低 |
中 |
中高 |
| 适用场景 |
通用聊天/RAG |
金融/医疗等安全敏感场景 |
多模态应用/Google生态 |
六、验证适配效果流程
1. 配置API密钥
export OPENAI_API_KEY="your-key"
export ANTHROPIC_API_KEY="your-key"
export GEMINI_API_KEY="your-key"
2. 执行测试命令
python tests/openai/test_invoke.py
python tests/anthropic/test_invoke.py
python tests/gemini/test_invoke.py
核心价值与总结
LLM Protocol Adapter通过统一接口、格式及调用逻辑,使多LLM集成效率提升50%以上。开发者可专注业务创新,避免重复适配工作。工程采用工厂模式设计,新增厂商时仅需扩展adapters模块,核心逻辑零侵入。
该解决方案特别适用于需同时支持多LLM的中大型项目,以及为未来厂商切换预留技术弹性的系统。