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/ 对应 /v1,gemini/ 对应 /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 / 4K,aspectRatio 支持 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.content 为 null:
{
"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,不要去解析 content。usage.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 SDK:
extra_body={"generationConfig": {...}}
图片数据在哪里
gemini/ 前缀调用时图片在 message.images[],message.content 为 null。直接遍历 images 取 image_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查看完整列表- 完整模型命名规则请参考 模型命名与兼容规则