GuidesModels
用 Gemini Embeddings 做文本向量化
按 Gemini API Embeddings 文档:用 embedContent 生成向量,配置 task 前缀或 task_type,并用 output_dimensionality 控制维度。
基于 Google AI for Developers 整理 · 官方资料 ↗
Embedding 把文本(以及更新模型上的多模态内容)映射成向量。相近语义在空间里更近,适合检索、分类、聚类,而不是靠关键词硬匹配。
官方当前主推 gemini-embedding-2(多模态统一向量空间);纯文本场景仍可用 gemini-embedding-001。这篇先把文本向量化跑通,再补上 task 配置与维度控制。
Embeddings 能做什么
Gemini API 的 embedding 模型把内容变成数值向量。常见用途是语义搜索、分类、聚类,以及 RAG:先检索相关片段,再交给生成模型回答。
若你只想要托管式文档检索,官方也提供 File Search;需要自己掌控 chunk、索引与相似度计算时,才直接用 Embeddings。
生成第一条文本向量
用 google-genai 的 Client,调用 models.embed_content。最新模型名是 gemini-embedding-2。
官方 embedContent 最小示例
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-2",
contents="What is the meaning of life?",
)
print(result.embeddings)成功时 result.embeddings 里是向量对象;每个向量的 values 才是你要入库或算相似度的浮点数组。
Task 类型为什么重要
同一段话用于检索查询、文档入库、分类或句子相似度时,优化目标不同。官方要求按任务组织输入,否则检索质量会掉。
对 gemini-embedding-2 的非对称检索,查询侧用 task 前缀,文档侧用 title/text 结构。例如搜索:
Embeddings 2:非对称检索的 query / document 前缀
def prepare_query(query: str) -> str:
return f"task: search result | query: {query}"
def prepare_document(content: str, title: str | None = None) -> str:
if title is None:
title = "none"
return f"title: {title} | text: {content}"
# 对称任务(分类 / 聚类 / 句子相似度)则 query 与 document 用同一格式:
# return f"task: classification | query: {content}"对 gemini-embedding-001,可在 EmbedContentConfig 里设 task_type。语义相似度示例:
Embeddings 1:task_type=SEMANTIC_SIMILARITY
from google import genai
from google.genai import types
client = genai.Client()
texts = [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
]
result = client.models.embed_content(
model="gemini-embedding-001",
contents=texts,
config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY"),
)
print([len(e.values) for e in result.embeddings])- 检索文档用 RETRIEVAL_DOCUMENT;查询用 RETRIEVAL_QUERY(001)或 task: search result(2)
- 分类 / 聚类 / 句子相似度属于对称任务,查询与文档格式必须一致
- 不要用 sentence similarity 任务去做搜索检索
用 output_dimensionality 控制向量长度
两个模型都按 Matryoshka Representation Learning 训练:默认 3072 维,也可截到更短前缀。官方推荐 768、1536 或 3072。
截断到 768 维
from google import genai
from google.genai import types
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-2",
contents="What is the meaning of life?",
config=types.EmbedContentConfig(output_dimensionality=768),
)
[embedding_obj] = result.embeddings
print(f"Length of embedding: {len(embedding_obj.values)}")更短向量可省存储、加快下游计算。gemini-embedding-2 在小于 3072 时会自动归一化;001 在非 3072 维度上需要你自行归一化后再比相似度。
容易踩的坑
查询向量与文档向量对不上,检索几乎随机
检查两边是否用了同一套 task 约定;检索场景不要混用 sentence similarity 格式。
维度改小后相似度异常
确认模型:embedding-2 自动 normalize;embedding-001 需按官方说明手动归一化。
只想做文档问答却卡在自建向量库
若接受托管检索,先看 File Search;只有需要自建索引流水线时才坚持纯 Embeddings。
官方资料
Google AI for Developers
Embeddings ↗