LiteLLM Proxy 集成
概述
LiteLLM Proxy 是一个常见的 AI 网关中间件,可以让你用统一的 OpenAI 格式调用多家 API 提供商的模型。本文介绍如何在 LiteLLM Proxy 中配置 AIone 作为上游提供商。
如果你不使用 LiteLLM Proxy,而是直接调用 AIone API,请参考 快速开始。
基础配置
在 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.openbili.com/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.openbili.com/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.openbili.com/v1"
api_key: "sk-nex-your-key-here"关键点:模型名前缀
model 字段必须使用 openai/ 前缀(如 openai/claude-sonnet-4-6),因为 AIone 暴露的是 OpenAI 兼容接口 /v1/chat/completions。
如果使用 anthropic/ 或 gemini/ 前缀,LiteLLM 会尝试直连 Anthropic / Google 官方 API,绕过 AIone。
Gemini 图片模型配置
Gemini 图片模型需要透传 imageConfig 等自定义参数。LiteLLM Proxy 默认不会将这些非标准字段转发给上游,需要通过 extra_body 配置。
方式一:在 config.yaml 中预设参数
适合默认参数固定的场景:
model_list:
- model_name: gemini-image
litellm_params:
model: openai/gemini-3-pro-image-preview
api_base: "https://api.openbili.com/v1"
api_key: "sk-nex-your-key-here"
extra_body:
aspect_ratio: "1:1"
image_size: "4K"方式二:在请求体中动态传参
适合参数需要按请求变化的场景。在调用 LiteLLM Proxy 时,将自定义参数放在 extra_body 中:
{
"model": "gemini-image",
"messages": [
{"role": "user", "content": "画一只穿宇航服的猫咪"}
],
"max_tokens": 4096,
"extra_body": {
"image_size": "4K",
"aspect_ratio": "16:9"
}
}也可以使用嵌套的 imageConfig 格式,两种写法等效:
{
"model": "gemini-image",
"messages": [
{"role": "user", "content": "画一只穿宇航服的猫咪"}
],
"max_tokens": 4096,
"extra_body": {
"imageConfig": {
"aspect_ratio": "16:9",
"image_size": "4K"
}
}
}方式三: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": "画一只穿宇航服的猫咪"}],
max_tokens=4096,
extra_body={
"image_size": "4K",
"aspect_ratio": "16:9",
},
)
# 文本内容
print(response.choices[0].message.content)
# 图片数据(如果有)
images = getattr(response.choices[0].message, "images", None)
if images:
for img in images:
base64_data = img["image_url"]["url"] # data:image/jpeg;base64,...模型命名简化
你不需要为每种分辨率创建独立的 LiteLLM 模型条目。可以只配置一个模型名,通过请求参数控制分辨率:
model_list:
# 一个模型名,通过 image_size 参数控制分辨率
- model_name: gemini-image
litellm_params:
model: openai/gemini-3-pro-image-preview
api_base: "https://api.openbili.com/v1"
api_key: "sk-nex-your-key-here"请求时通过 extra_body 指定分辨率:
{"extra_body": {"image_size": "4K"}}优先级规则: 如果同时使用了带分辨率后缀的模型名(如
-4k)和image_size参数,参数优先。后缀只在没传image_size时生效。
参考图输入
当你需要传参考图(例如图片编辑、风格迁移),建议直接传 base64 数据,不要传外部 URL:
{
"model": "gemini-image",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "把这张图的背景换成星空"},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQ..."
}
}
]
}
],
"max_tokens": 4096,
"extra_body": {"image_size": "2K"}
}为什么推荐 base64?
AIone 服务器(香港节点)从部分 CDN(如阿里云 CDN)下载图片可能存在网络问题或防盗链限制。base64 直接嵌入请求体,不受网络和 CDN 策略影响,是最稳定的方式。
响应格式
AIone 对 Gemini 图片模型的响应格式做了 OpenAI 兼容处理:
纯文本响应
{
"choices": [{
"message": {
"role": "assistant",
"content": "这是模型的文字回复"
}
}]
}含图片的响应
{
"choices": [{
"message": {
"role": "assistant",
"content": "这是为你生成的图片:\n\n",
"images": [
{
"type": "image_url",
"index": 0,
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQ...",
"detail": "auto"
}
}
]
}
}]
}两个字段的作用:
| 字段 | 类型 | 说明 |
|---|---|---|
content |
string | Markdown 格式的文本 + 图片,符合 OpenAI spec |
images |
array | 结构化的图片数据,方便程序提取 |
重要: LiteLLM 的
openai/handler 是纯直通模式,不会自动从content中提取图片。如果你的应用需要程序化处理图片,请使用images字段。
完整配置示例
以下是一个包含多种模型的完整 LiteLLM Proxy 配置:
model_list:
# === Claude 系列 ===
- model_name: claude-opus-4-6
litellm_params:
model: openai/claude-opus-4-6
api_base: "https://api.openbili.com/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.openbili.com/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.openbili.com/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.openbili.com/v1"
api_key: "sk-nex-your-key-here"
# === Gemini 图片 ===
- model_name: gemini-image
litellm_params:
model: openai/gemini-3-pro-image-preview
api_base: "https://api.openbili.com/v1"
api_key: "sk-nex-your-key-here"
- model_name: gemini-image-flash
litellm_params:
model: openai/gemini-3.1-flash-image-preview
api_base: "https://api.openbili.com/v1"
api_key: "sk-nex-your-key-here"常见问题
extra_body 参数没有生效
确认你使用了正确的透传方式:
- config.yaml 中:在
litellm_params下添加extra_body - 请求体中:将参数放在顶层
extra_body字段内 - Python SDK:使用
extra_body={}参数
LiteLLM 默认会丢弃不认识的顶层字段。所有非标准参数(image_size、aspect_ratio、imageConfig 等)必须通过 extra_body 传递。
图片生成返回 500 错误
- 确认
model字段使用了openai/前缀 - 确认
max_tokens已设置(建议 4096) - 4K 图片生成耗时较长(2-3 分钟),检查 LiteLLM Proxy 的超时设置是否足够
图片数据在哪里
content字段:包含 Markdown 格式的图片()images字段:包含结构化的 base64 图片数据- LiteLLM
openai/handler 不会自动提取图片,请直接读取images字段
LiteLLM Proxy 超时
4K 图片生成可能需要 2-3 分钟。在 LiteLLM Proxy 配置中增加超时时间:
litellm_settings:
request_timeout: 600 # 秒同时建议在请求中使用 "stream": true,AIone 网关会每 10 秒发送 keepalive 心跳,防止连接被中间网络设备断开。
模型名不存在
- LiteLLM
litellm_params.model中的模型名必须与 AIone 支持的模型 ID 一致 - 可通过
GET https://api.openbili.com/v1/models查看完整列表 - 完整模型命名规则请参考 模型命名与兼容规则