LiteLLM Proxy 集成

概述

LiteLLM Proxy 是一个常见的 AI 网关中间件,可以让你用统一的 OpenAI 格式调用多家 API 提供商的模型。本文介绍如何在 LiteLLM Proxy 中把 AIone 配置为模型提供商。

如果你不使用 LiteLLM Proxy,而是直接调用 AIone API,请参考 快速开始

本文示例基于 LiteLLM 1.101


基础配置

在 LiteLLM Proxy 的 config.yaml 中添加 AIone 作为提供商:

model_list:
  # Claude 模型
  - model_name: claude-sonnet-4-6
    litellm_params:
      model: openai/claude-sonnet-4-6
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  # GPT 模型
  - model_name: gpt-5.4
    litellm_params:
      model: openai/gpt-5.4
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  # Gemini 文本模型
  - model_name: gemini-2.5-pro
    litellm_params:
      model: openai/gemini-2.5-pro
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"

关键点:模型名前缀与 api_base 成对出现

LiteLLM 用 model 字段的前缀决定按哪种协议发请求,用 api_base 决定发到哪里。只要 api_base 指向 AIone,请求就不会绕过 AIone,无论前缀是什么。

前缀 LiteLLM 发出的协议 配套 api_base 适用
openai/ OpenAI Chat(/chat/completions https://api.aiin1.ai/v1 文本模型、图片模型的快速出图
gemini/ Gemini 原生(/models/{model}:generateContent https://api.aiin1.ai/v1beta 图片模型需要指定分辨率、宽高比时

注意 api_base 的路径不同:openai/ 对应 /v1gemini/ 对应 /v1beta。LiteLLM 会在 api_base 后面自己拼接剩余路径,所以 gemini/ 前缀配 /v1 会得到 404


Gemini 图片模型配置

Gemini 图片模型的分辨率与宽高比要通过 Gemini 原生参数 generationConfig.imageConfig 传递,因此在 LiteLLM 中使用 gemini/ 前缀 + /v1beta

model_list:
  - model_name: gemini-image
    litellm_params:
      model: gemini/gemini-3.1-flash-image
      api_base: "https://api.aiin1.ai/v1beta"
      api_key: "sk-nex-your-key-here"

可用的图片模型见《Gemini 图片生成》,常用的是 gemini-3.1-flash-image(快)和 gemini-3-pro-image(质量稳)。

指定分辨率与宽高比

LiteLLM 会丢弃它不认识的顶层字段,generationConfig 需要放在 extra_body 里才能到达 AIone。三种等价方式:

方式一:在 config.yaml 中预设

适合分辨率固定的场景,客户端不用改:

model_list:
  - model_name: gemini-image-2k
    litellm_params:
      model: gemini/gemini-3.1-flash-image
      api_base: "https://api.aiin1.ai/v1beta"
      api_key: "sk-nex-your-key-here"
      extra_body:
        generationConfig:
          responseModalities: ["IMAGE"]
          imageConfig:
            imageSize: "2K"
            aspectRatio: "16:9"

方式二:在请求体中动态传参

适合每次请求分辨率不同的场景:

{
  "model": "gemini-image",
  "messages": [
    {"role": "user", "content": "画一只穿宇航服的猫咪"}
  ],
  "extra_body": {
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"imageSize": "4K", "aspectRatio": "16:9"}
    }
  }
}

方式三:Python SDK 中使用 extra_body

from openai import OpenAI
 
# 连接你的 LiteLLM Proxy
client = OpenAI(
    api_key="sk-your-litellm-key",
    base_url="http://localhost:4000/v1",  # LiteLLM Proxy 地址
)
 
response = client.chat.completions.create(
    model="gemini-image",
    messages=[{"role": "user", "content": "画一只穿宇航服的猫咪"}],
    extra_body={
        "generationConfig": {
            "responseModalities": ["IMAGE"],
            "imageConfig": {"imageSize": "2K", "aspectRatio": "16:9"},
        }
    },
)
 
for img in response.choices[0].message.images:
    data_url = img["image_url"]["url"]  # data:image/png;base64,...

imageSize 取值 512 / 1K / 2K / 4KaspectRatio 支持 14 种,完整取值与实际像素见《Gemini 图片生成》。

简写: 只要求出图、不指定尺寸时,可以用 OpenAI 风格的 "modalities": ["image"] 代替 responseModalities,LiteLLM 会自动转换。


参考图输入

用 OpenAI 标准的多模态 messages.content 传参考图即可,LiteLLM 会转换成 Gemini 原生格式:

{
  "model": "gemini-image",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "把这张图的背景换成星空"},
        {
          "type": "image_url",
          "image_url": {"url": "data:image/png;base64,iVBORw0KGgoAAA..."}
        }
      ]
    }
  ],
  "modalities": ["image"]
}

建议直接传 base64 数据,不要传外部 URL:部分 CDN(如阿里云 CDN)存在防盗链或格式转换,直链可能取不到。base64 直接嵌入请求体,不受网络和 CDN 策略影响。

参考图会计入 prompt_tokens


响应格式

gemini/ 前缀调用时,LiteLLM 把图片放在 message.images[] 里,message.contentnull

{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": null,
      "images": [
        {
          "type": "image_url",
          "index": 0,
          "image_url": {"url": "data:image/png;base64,iVBORw0KGgoAAA..."}
        }
      ]
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 2,
    "completion_tokens": 1120,
    "total_tokens": 1122,
    "completion_tokens_details": {"text_tokens": 0, "image_tokens": 1120}
  }
}

程序化处理时直接读 message.images,不要去解析 contentusage.completion_tokens_details.image_tokens 是图片输出 token,也是计费依据。


完整配置示例

以下是一个包含多种模型的完整 LiteLLM Proxy 配置:

model_list:
  # === Claude 系列 ===
  - model_name: claude-opus-4-6
    litellm_params:
      model: openai/claude-opus-4-6
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  - model_name: claude-sonnet-4-6
    litellm_params:
      model: openai/claude-sonnet-4-6
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  # === GPT 系列 ===
  - model_name: gpt-5.4
    litellm_params:
      model: openai/gpt-5.4
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  # === Gemini 文本 ===
  - model_name: gemini-2.5-pro
    litellm_params:
      model: openai/gemini-2.5-pro
      api_base: "https://api.aiin1.ai/v1"
      api_key: "sk-nex-your-key-here"
 
  # === Gemini 图片(注意:gemini/ 前缀 + /v1beta)===
  - model_name: gemini-image
    litellm_params:
      model: gemini/gemini-3.1-flash-image
      api_base: "https://api.aiin1.ai/v1beta"
      api_key: "sk-nex-your-key-here"
 
  - model_name: gemini-image-pro
    litellm_params:
      model: gemini/gemini-3-pro-image
      api_base: "https://api.aiin1.ai/v1beta"
      api_key: "sk-nex-your-key-here"
 
  # 预设 4K 横幅的独立条目
  - model_name: gemini-image-4k-wide
    litellm_params:
      model: gemini/gemini-3.1-flash-image
      api_base: "https://api.aiin1.ai/v1beta"
      api_key: "sk-nex-your-key-here"
      extra_body:
        generationConfig:
          responseModalities: ["IMAGE"]
          imageConfig:
            imageSize: "4K"
            aspectRatio: "21:9"

常见问题

图片模型返回 404 Not Found

gemini/ 前缀的 api_base 必须是 https://api.aiin1.ai/v1beta。写成 /v1 或只写域名都会 404——LiteLLM 会在 api_base 后拼接 /models/{model}:generateContent,路径就对不上了。

generationConfig 没有生效,出图始终是默认尺寸

LiteLLM 会丢弃不认识的顶层字段。generationConfig 必须放在 extra_body 内:

  • config.yaml 中litellm_params.extra_body.generationConfig
  • 请求体中:顶层 extra_body.generationConfig
  • Python SDKextra_body={"generationConfig": {...}}

图片数据在哪里

gemini/ 前缀调用时图片在 message.images[]message.contentnull。直接遍历 imagesimage_url.url(data URI)。

LiteLLM Proxy 超时

高分辨率出图耗时较长。在 LiteLLM Proxy 配置中放宽超时:

litellm_settings:
  request_timeout: 600  # 秒

模型名不存在

  • litellm_params.model 的前缀后面必须是 AIone 支持的模型 ID,可通过 GET https://api.aiin1.ai/v1/models 查看完整列表
  • 完整模型命名规则请参考 模型命名与兼容规则