Generative API Router:轻松管理多供应商LLM服务
在人工智能迅速发展的今天,大型语言模型(LLM)已经成为许多应用的核心组件,比如OpenAI的GPT模型和Google的Gemini模型。然而,当你需要同时使用多个供应商的服务时,事情可能会变得复杂。每个供应商的API接口、认证方式和模型配置都不尽相同,这给开发带来了不小的挑战。为了解决这个问题,Generative API Router应运而生。这是一个用Go语言编写的微服务,专门用来将OpenAI兼容的API调用代理到多个LLM供应商。它提供了一个统一的接口,让开发者无需操心底层差异,就能轻松集成和管理AI服务。
这篇文章将带你全面了解Generative API Router,包括它的功能、使用方法、部署方式以及开发和安全注意事项。无论你是刚接触AI开发的初学者,还是希望优化现有项目的开发者,这篇文章都能为你提供实用的指导。
什么是Generative API Router?
简单来说,Generative API Router是一个代理工具。它允许你通过一个统一的API端点,向不同的LLM供应商(如OpenAI和Gemini)发送请求,而无需为每个供应商单独编写代码。它是用Go语言开发的开源项目,设计目标是简化多供应商AI服务的集成。你可以把它想象成一个“翻译官”:你用标准的OpenAI格式发出请求,它会帮你把请求转发给合适的供应商,然后把响应原封不动地返回给你。
这个工具的核心优势在于,它隐藏了多供应商管理的复杂性,比如选择哪个模型、处理认证信息、管理响应格式等。无论你是想随机调用不同供应商的模型,还是指定某个特定模型,Generative API Router都能轻松胜任。
主要特点
Generative API Router提供了一系列实用功能,让它在管理多供应商LLM服务时表现出色。以下是它的核心特点:
多供应商支持
它可以将你的请求路由到多个LLM供应商,比如OpenAI和Gemini。关键在于,它利用了OpenAI API的兼容性,这意味着即使你调用的是Gemini模型,也能使用熟悉的OpenAI请求格式。
随机选择
如果你配置了多个供应商和模型,Generative API Router会自动在它们之间随机分配请求。这种随机选择不仅能平衡负载,还能提高服务的可靠性。比如,当某个供应商的响应变慢时,请求可能会自动转到另一个供应商。
供应商过滤
虽然随机选择很方便,但有时候你可能想明确指定某个供应商。这也很简单,只需要在请求中加一个?vendor=
参数,比如?vendor=openai
,就能确保请求只发给OpenAI。
透明代理
作为代理,Generative API Router不会篡改你的请求或响应内容(除了模型选择的部分)。你发出的请求和收到的响应,跟直接调用供应商API时几乎一模一样,这保证了数据的完整性。
流支持
对于需要实时响应的场景,比如聊天应用,Generative API Router支持流式传输。它能处理分块的流响应,让数据一点点传回来,而不是等全部处理完再返回。
工具调用
如果你开发的是更复杂的AI代理,可能需要用到函数调用或工具功能。Generative API Router支持这一点,并会对请求进行验证,确保调用过程安全可靠。
模块化设计
项目的代码设计非常清晰,把不同的功能分成了独立的部分,比如选择器(决定用哪个模型)、验证器(检查请求是否合法)和客户端(处理API调用)。这种模块化设计让代码更容易理解和维护。
配置驱动
你可以通过简单的JSON文件来配置模型和凭证。不需要改代码,只要调整配置文件,就能添加或删除供应商和模型,非常灵活。
快速入门
想试试Generative API Router?以下是快速上手的步骤,跟着做就能在本地跑起来。
先决条件
-
Go语言环境:需要安装Go 1.24.3或更高版本。 -
API密钥:你需要至少一个供应商的API密钥,比如OpenAI或Google Gemini。
安装步骤
-
克隆仓库
打开终端,运行以下命令,把项目代码下载到本地:git clone https://github.com/aashari/go-generative-api-router.git cd go-generative-api-router
-
配置凭证
项目需要知道你的API密钥。先复制示例文件:cp credentials.json.example credentials.json
然后编辑
credentials.json
,填入你的API密钥。比如:[ { "platform": "openai", "type": "api-key", "value": "sk-your-openai-key" }, { "platform": "gemini", "type": "api-key", "value": "your-gemini-key" } ]
这里填入你从OpenAI或Gemini官网拿到的真实密钥。
-
配置模型
编辑models.json
文件,告诉系统你想用哪些模型。比如:[ { "vendor": "gemini", "model": "gemini-1.5-flash" }, { "vendor": "openai", "model": "gpt-4o" } ]
这个文件定义了可用的供应商和模型对,系统会从中选择。
-
本地运行
安装依赖并启动服务:go mod tidy go run ./cmd/server
启动后,服务会运行在
http://localhost:8082
,你可以用浏览器或命令行工具访问它。
测试一下
服务跑起来后,可以用curl
命令试试健康检查端点:
curl -X GET http://localhost:8082/health
如果返回OK
,说明一切正常。
用Docker部署
如果你更喜欢用容器化方式运行服务,可以用Docker Compose。步骤很简单:
-
确保你已经安装了Docker和Docker Compose。
-
在项目目录下运行:
docker-compose up --build
-
服务会在
http://localhost:8082
上启动。
这种方式的好处是不用手动安装Go环境,适合快速部署或生产环境。
API参考
Generative API Router提供了几个关键的API端点,下面详细介绍它们的用法。
健康检查
-
端点: GET /health
-
作用:检查服务是否正常运行。 -
响应:如果服务没问题,会返回状态码 200 OK
,内容是OK
。
示例:
curl -X GET http://localhost:8082/health
返回:OK
模型列表
-
端点: GET /v1/models
或者带参数:GET /v1/models?vendor=openai
-
作用:列出当前可用的模型。 -
响应:返回一个JSON列表,包含模型信息。
示例请求:
curl -X GET http://localhost:8082/v1/models
示例响应:
{
"object": "list",
"data": [
{
"id": "gpt-4o",
"object": "model",
"created": 1715929200,
"owned_by": "openai"
}
]
}
如果加了?vendor=openai
,只会返回OpenAI的模型。
聊天完成
-
端点: POST /v1/chat/completions
或者带参数:POST /v1/chat/completions?vendor=gemini
-
作用:发送消息给模型,获取回复。
基本用法
示例请求:
curl -X POST http://localhost:8082/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "any-model",
"messages": [{"role": "user", "content": "你好,你好吗?"}]
}'
这里"model": "any-model"
表示让系统自己选一个配置好的模型。
支持流式响应
如果需要实时接收响应,可以加"stream": true
:
curl -X POST http://localhost:8082/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "any-model",
"messages": [{"role": "user", "content": "写一首短诗"}],
"stream": true
}'
响应会分块返回,适合实时应用。
支持工具调用
对于需要调用外部功能的场景,可以用工具调用:
curl -X POST http://localhost:8082/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "any-model",
"messages": [{"role": "user", "content": "波士顿的天气怎么样?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取某个地点的天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"}
},
"required": ["location"]
}
}
}],
"tool_choice": "auto"
}'
这个例子让模型调用一个假想的get_weather
函数来获取天气信息。
项目架构
Generative API Router的代码设计很有条理,采用了模块化结构。以下是它的目录布局:
go-generative-api-router/
├── cmd/server/ # 程序入口
├── internal/
│ ├── app/ # 核心逻辑和HTTP处理
│ ├── config/ # 配置管理
│ ├── proxy/ # API客户端和代理功能
│ ├── selector/ # 模型选择策略
│ └── validator/ # 请求验证
└── models.json # 模型配置文件
这种结构把不同的功能分开,比如selector
负责决定用哪个模型,validator
检查请求是否合法。这样即使项目变大,也容易维护和扩展。
开发指南
想自己改代码或测试功能?这里有一些开发相关的内容。
构建项目
在项目目录下运行:
go build -o go-generative-api-router ./cmd/server
这会生成一个可执行文件go-generative-api-router
。
测试功能
可以用以下命令测试主要功能:
-
健康检查:
curl -X GET http://localhost:8082/health
-
列出模型:
curl -X GET http://localhost:8082/v1/models
-
发送消息:
curl -X POST http://localhost:8082/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "any-model", "messages": [{"role": "user", "content": "你好"}]}'
这些命令可以帮你验证服务是否正常工作。
安全注意事项
在实际使用Generative API Router时,有几点安全问题需要注意:
-
API密钥存储
当前版本把API密钥明文存在credentials.json
文件里。这在本地测试时没问题,但在生产环境不安全。建议改用环境变量或专门的密钥管理工具。 -
防止泄露
项目已经把credentials.json
加到了.gitignore
文件,确保密钥不会被意外提交到代码仓库。 -
速率限制
生产环境中,建议加上速率限制,防止服务被滥用或过载。
这些措施能大大提高系统的安全性。
如何贡献
如果你对这个项目感兴趣,想帮忙改进它,可以这样做:
-
分叉(fork)仓库到你的GitHub账号。 -
创建一个新分支: git checkout -b feature/my-feature
-
提交你的更改: git commit -am '添加新功能'
-
推送分支: git push origin feature/my-feature
-
在GitHub上提交拉取请求(Pull Request)。
你的贡献会让项目变得更好!
致谢
Generative API Router的灵感来源于一个实际需求:希望有个统一的方式来调用不同LLM供应商的服务。特别感谢Go社区,提供了许多优秀的工具和库,让这个项目得以实现。
总结
Generative API Router是一个实用且强大的工具,专为需要集成多供应商LLM服务的开发者设计。它通过统一的接口、灵活的配置和丰富的功能,极大简化了开发过程。无论你是想快速试用AI模型,还是在生产环境部署复杂应用,这个项目都能帮到你。从快速入门到API调用,再到开发和安全建议,这篇文章提供了一个完整的指南,希望能让你轻松上手。如果你有任何问题或想法,欢迎去GitHub仓库交流!