Gemini Embedding 2 預覽版:LiteLLM 上的多模態嵌入
LiteLLM 現已支援使用 gemini-embedding-2-preview 的多模態嵌入,可在單一請求中混合文字、圖片、音訊、影片與 PDF 內容。可透過 Gemini API(API 金鑰)與 Vertex AI(GCP 憑證)使用。
回應格式因提供者而異
- Gemini API(
gemini/...):每個輸入元素都會回傳各自的嵌入,依0..N-1索引,形狀與 OpenAI 的/embeddings相同。LiteLLM 會路由至batchEmbedContents端點,並為每個輸入使用一個EmbedContentRequest。 - Vertex AI(
vertex_ai/...):所有輸入元素會透過embedContent組合成單一整合嵌入。Vertex AI 不會為 Gemini embedding models 提供batchEmbedContents,因此N部分 →1向量。若要為每個項目取得一個向量,請針對每個輸入呼叫一次embedding(...)。
支援的輸入類型
| 模態 | 支援格式 |
|---|---|
| 文字 | 純文字 |
| 圖片 | PNG、JPEG |
| 音訊 | MP3、WAV |
| 影片 | MP4、MOV |
| 文件 |
輸入格式
LiteLLM 接受多模態內容的三種輸入格式:
- Data URI – Base64 編碼內嵌:
data:image/png;base64,<encoded_data> - GCS URL – 雲端儲存空間路徑(Vertex AI):
gs://bucket/path/to/file.png - Gemini File References – 已預先上傳的檔案(Gemini API):
files/abc123
快速入門
- Gemini API
- Vertex AI
- LiteLLM Proxy
from litellm import embedding
import os
os.environ["GEMINI_API_KEY"] = "your-api-key"
# Text + Image (base64)
response = embedding(
model="gemini/gemini-embedding-2-preview",
input=[
"The food was delicious and the waiter...",
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII"
],
)
print(response)
import litellm
from litellm import embedding
litellm.vertex_project = "your-project-id"
litellm.vertex_location = "us-central1"
# Text + Image (GCS URL)
response = embedding(
model="vertex_ai/gemini-embedding-2-preview",
input=[
"Describe this image",
"gs://my-bucket/images/photo.png"
],
)
print(response)
1. 設定(config.yaml)
model_list:
- model_name: gemini-embedding-2-preview
litellm_params:
model: gemini/gemini-embedding-2-preview
api_key: os.environ/GEMINI_API_KEY
- model_name: vertex-gemini-embedding-2-preview
litellm_params:
model: vertex_ai/gemini-embedding-2-preview
vertex_project: os.environ/VERTEXAI_PROJECT
vertex_location: os.environ/VERTEXAI_LOCATION
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
2. 啟動 proxy
litellm --config config.yaml
3. 呼叫 embeddings
curl -X POST http://localhost:4000/embeddings \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-embedding-2-preview",
"input": [
"The food was delicious and the waiter...",
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII"
]
}'
輸入格式範例
| 格式 | 範例 | 提供者 |
|---|---|---|
| Data URI | data:image/png;base64,... | Gemini、Vertex AI |
| GCS URL | gs://bucket/path/image.png | Vertex AI |
| 檔案參照 | files/abc123 | 僅 Gemini API |
Data URI 支援的 MIME 類型
- 圖片:
image/png、image/jpeg - 音訊:
audio/mpeg、audio/wav - 影片:
video/mp4、video/quicktime - 文件:
application/pdf
GCS URL MIME 推斷
對於 Vertex AI,MIME 類型會根據檔案副檔名推斷:
.png→image/png.jpg/.jpeg→image/jpeg.mp3→audio/mpeg.wav→audio/wav.mp4→video/mp4.mov→video/quicktime.pdf→application/pdf
選用參數
| 參數 | 說明 | 對應 |
|---|---|---|
dimensions | 輸出嵌入大小 | outputDimensionality |
response = embedding(
model="gemini/gemini-embedding-2-preview",
input=["text to embed"],
dimensions=768, # Optional: control output vector size
)
合併嵌入(Gemini API,選用)
預設情況下,Gemini API 路徑會為每個輸入元素回傳一個嵌入(相容 OpenAI)。若要將多種模態融合為單一向量,例如以名稱 + 照片表示的產品,請將它們包裝在巢狀清單中:
from litellm import embedding
# Default: 2 inputs → 2 separate embeddings
embedding(
model="gemini/gemini-embedding-2-preview",
input=["a red shoe", "data:image/png;base64,..."],
)
# Combined: text + image fused into 1 embedding
embedding(
model="gemini/gemini-embedding-2-preview",
input=[["a red shoe", "data:image/png;base64,..."]],
)
# Mixed: 1 combined entity + 1 plain text → 2 embeddings total
embedding(
model="gemini/gemini-embedding-2-preview",
input=[["a red shoe", "data:image/png;base64,..."], "just text"],
)
這對於單一實體具有多種模態的多模態檢索很有用。詳情請參閱 embedding 文件。在 Vertex AI 上,不需要這個選用設定;每個請求都已經會回傳一個整合向量。
