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。

安装步骤

  1. 克隆仓库
    打开终端,运行以下命令,把项目代码下载到本地:

    git clone https://github.com/aashari/go-generative-api-router.git
    cd go-generative-api-router
    
  2. 配置凭证
    项目需要知道你的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官网拿到的真实密钥。

  3. 配置模型
    编辑models.json文件,告诉系统你想用哪些模型。比如:

    [
      {
        "vendor": "gemini",
        "model": "gemini-1.5-flash"
      },
      {
        "vendor": "openai",
        "model": "gpt-4o"
      }
    ]
    

    这个文件定义了可用的供应商和模型对,系统会从中选择。

  4. 本地运行
    安装依赖并启动服务:

    go mod tidy
    go run ./cmd/server
    

    启动后,服务会运行在http://localhost:8082,你可以用浏览器或命令行工具访问它。

测试一下

服务跑起来后,可以用curl命令试试健康检查端点:

curl -X GET http://localhost:8082/health

如果返回OK,说明一切正常。


用Docker部署

如果你更喜欢用容器化方式运行服务,可以用Docker Compose。步骤很简单:

  1. 确保你已经安装了Docker和Docker Compose。

  2. 在项目目录下运行:

    docker-compose up --build
    
  3. 服务会在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文件,确保密钥不会被意外提交到代码仓库。

  • 速率限制
    生产环境中,建议加上速率限制,防止服务被滥用或过载。

这些措施能大大提高系统的安全性。


如何贡献

如果你对这个项目感兴趣,想帮忙改进它,可以这样做:

  1. 分叉(fork)仓库到你的GitHub账号。
  2. 创建一个新分支:

    git checkout -b feature/my-feature
    
  3. 提交你的更改:

    git commit -am '添加新功能'
    
  4. 推送分支:

    git push origin feature/my-feature
    
  5. 在GitHub上提交拉取请求(Pull Request)。

你的贡献会让项目变得更好!


致谢

Generative API Router的灵感来源于一个实际需求:希望有个统一的方式来调用不同LLM供应商的服务。特别感谢Go社区,提供了许多优秀的工具和库,让这个项目得以实现。


总结

Generative API Router是一个实用且强大的工具,专为需要集成多供应商LLM服务的开发者设计。它通过统一的接口、灵活的配置和丰富的功能,极大简化了开发过程。无论你是想快速试用AI模型,还是在生产环境部署复杂应用,这个项目都能帮到你。从快速入门到API调用,再到开发和安全建议,这篇文章提供了一个完整的指南,希望能让你轻松上手。如果你有任何问题或想法,欢迎去GitHub仓库交流!