告别多LLM适配烦恼!LLM Protocol Adapter 让多厂商API无缝切换

熊猫办公
做AI开发的朋友,大概率都踩过这样的坑:
告别多LLM适配烦恼!LLM Protocol Adapter 让多厂商API无缝切换
想在项目里同时集成OpenAI、Claude、Gemini,结果每个厂商的API协议都不一样——消息格式千差万别,认证方式各有一套,甚至连工具调用的参数都完全不兼容。写一套适配代码,换个厂商就要重构大半,既耗时又容易出bug。
今天给大家分享一个实用工程——LLM Protocol Adapter,专门解决多LLM厂商API适配的痛点,用统一的适配器模式,让开发者再也不用在不同协议之间反复横跳。
项目地址:https://github.com/Soyoger/llm-protocol-adapter

一、工程核心意图:让多LLM集成变简单

这个工程的核心目标很明确,就是搞定OpenAI、Anthropic(Claude)、Google Gemini这三大主流LLM厂商的API协议差异,给开发者提供一套“通用接口”。
简单说,有了它,你能实现3件事:
快速摸清三大厂商API的核心区别,不用再逐个啃官方文档;
无缝切换不同LLM提供商,改一行配置就能从GPT-4o切换到Claude、Gemini;
快速集成多种LLM到同一个项目,不用为每个厂商单独写适配逻辑。
参考来源也很明确:OpenAI Chat Completions API、Anthropic Messages API、Gemini Generate Content API,所有适配逻辑都基于官方标准,稳定且可靠。

二、工程目录结构:清晰易懂,上手无压力

工程的目录设计很规整,核心代码和测试用例分离,哪怕是新手也能快速找到自己需要的部分,先给大家贴一下完整结构:

llm-protocol-adapter/├── core/核心逻辑目录(重点关注)│ ├── adapters/适配器实现(核心中的核心)│ │ ├──__init__.py│ │ ├── base_adapter.py适配器基类(所有适配器的基础)│ │ ├── openai_adapter.pyOpenAI专属适配器│ │ ├── anthropic_adapter.pyAnthropic专属适配器│ │ └── gemini_adapter.pyGemini专属适配器│ ├── constant.py常量定义(不用改,直接用)│ ├── exceptions.py异常定义(统一异常处理)│ ├── llm_adapters.py适配器工厂函数(快速创建适配器)│ ├── llm_client.py统一客户端(对外提供通用接口)│ ├── llm_response.py响应对象(统一三种API的返回格式)│ └── message.py消息对象(统一三种API的请求格式)├── tests/测试用例目录(验证适配效果)│ ├── openai/OpenAI测试用例(四种调用方式全覆盖)│ ├── anthropic/Anthropic测试用例│ └── gemini/Gemini测试用例├── .gitignore├── LICENSE└── README.md

重点看core目录里的adapters和llm_client:adapters里是各个厂商的适配逻辑,llm_client是我们开发时直接调用的入口,不用关心底层适配细节,真正做到“开箱即用”。

三、快速开始:3步搞定多LLM调用

最关键的部分来了——怎么用?其实非常简单,几行代码就能搞定,不管是OpenAI、Claude还是Gemini,调用方式完全统一。
先看基础调用示例(以OpenAI为例,切换其他厂商只需改配置):

from core.llm_client import LLMClient1. 创建客户端(自动适配对应厂商,改model和base_url即可切换)client = LLMClient(model="gpt-4o",api_key="your-api-key",替换成你的API密钥base_url="https://api.openai.com/v1",厂商对应接口地址timeout=60)2. 非流式调用(适合短文本回复,直接获取完整结果)response = client.invoke([{"role":"user","content":"你好"}])3. 流式调用(适合长文本、实时回复,逐段获取内容)for chunk in client.stream_invoke([{"role":"user","content":"讲故事"}]):print(chunk, end="")4. 异步调用(适合高并发场景,不阻塞主线程)import asyncioresponse = await client.ainvoke([{"role":"user","content":"你好"}])

划重点:切换厂商时,只需要修改model、api_key和base_url三个参数,调用方法完全不变!比如切换到Gemini,只需把base_url改成Gemini的接口地址,model改成Gemini的模型名,不用改任何调用逻辑。

四、三大LLM协议差异详解(必看!避坑关键)

虽然适配器帮我们屏蔽了大部分差异,但了解三大厂商的API区别,能帮我们更好地排查问题、优化性能。下面从7个核心维度,给大家讲清楚最关键的差异点,都是实际开发中会遇到的问题。

1. 消息格式差异(最直观的区别)

三个厂商的消息请求格式差异最大,直接上表格和示例,一看就懂:
特性 OpenAI Anthropic Gemini
消息字段 messages messages contents
消息内容 content(字符串) content(字符串或数组) parts(数组)
System Prompt 放在messages数组中,role为system 独立的system字段 system_instruction对象
角色 system, user, assistant user, assistant user, model
举个实际请求示例,更直观:
OpenAI格式:

{"model":"gpt-4o","messages":[{"role":"system","content":"你是一个助手"},{"role":"user","content":"你好"}]}

Anthropic格式:

{"model":"claude-sonnet-4-20250514","max_tokens":1024,"system":"你是一个助手","messages":[{"role":"user","content":"你好"}]}

Gemini格式:

{"system_instruction": {"parts": [{"text":"你是一个助手"}]},"contents": [{"role":"user","parts": [{"text":"你好"}]}]}

2. 认证方式差异(容易踩坑的点)

每个厂商的认证方式都不同,记错了会直接报认证失败,一定要记牢:
厂商 认证方式
OpenAI 请求头携带 Authorization: Bearer sk-xxx(sk开头的密钥)
Anthropic 请求头携带 x-api-key: sk-ant-xxx + anthropic-version 头
Gemini 请求头携带 x-goog-api-key: xxx(直接填密钥,无Bearer前缀)

3. 必看差异:Anthropic的max_tokens是必填项

这是Anthropic和另外两家最大的区别之一,很多人第一次集成Claude时,都会因为漏填max_tokens而报错。
参数 OpenAI Anthropic Gemini
model 必填 必填 必填(在URL路径中)
max_tokens 可选,最大4096 必填,最大因模型而异 可选,最大因模型而异
messages/contents 必填 必填 必填

4. 其他关键差异(简要说明)

端点差异:OpenAI是POST /v1/chat/completions,Anthropic是POST /v1/messages,Gemini是POST /v1/models/{model}:generateContent(model在URL里);
工具调用差异: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
设计理念 简洁易用,事实标准 安全优先,透明可解释 多模态集成,Google生态
学习曲线 低(最容易上手) 中高(多模态部分较复杂)
适用场景 通用聊天、RAG(检索增强生成) 安全敏感应用(如金融、医疗) 多模态应用、Google生态集成

六、运行测试:快速验证适配效果

集成完成后,怎么验证适配是否成功?工程里已经写好了完整的测试用例,只需两步操作:

1. 设置环境变量(替换成你的API密钥)

exportOPENAI_API_KEY="your-key"exportANTHROPIC_API_KEY="your-key"exportGEMINI_API_KEY="your-key"

2. 运行测试用例(分别测试三个厂商的调用)

python tests/openai/test_invoke.pypython tests/openai/test_stream_invoke.pypython tests/anthropic/test_invoke.pypython tests/gemini/test_invoke.py

如果测试用例能正常运行,没有报错,就说明适配成功,可以放心在项目中使用了。

最后总结

LLM Protocol Adapter的核心价值,就是“统一”——统一接口、统一格式、统一调用方式,帮开发者省去重复的适配工作,把精力放在核心业务上。
不管你是想同时集成多个LLM,还是想预留厂商切换的灵活性,这个工程都能帮你少走很多弯路。感兴趣的朋友可以直接基于这个工程二次开发,适配自己的项目需求。
项目地址:https://github.com/Soyoger/llm-protocol-adapter
后续如果有新的LLM厂商需要适配,只需新增一个适配器类,不用修改核心逻辑,扩展性也拉满~
© 版权声明

相关文章