这将帮助您开始使用 LangChain 与 Google 生成式 AI 嵌入模型。如需详细文档,请参阅 GoogleGenerativeAIEmbeddings 功能和配置选项,请参阅 API 参考.
概述
集成详情
设置
要访问 Google Gemini 嵌入模型,您需要创建一个 Google Cloud 项目,启用生成式语言 API,获取 API 密钥,并安装 langchain-google-genai 集成包。
凭证
前往 Google AI Studio 注册并生成 API 密钥。请参阅 Gemini API 密钥文档 了解更多详情。完成此操作后,请设置 GOOGLE_API_KEY 环境变量:
if not os.getenv("GOOGLE_API_KEY"):
os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Google API key: ")
要启用模型调用的自动追踪,请设置您的 LangSmith API 密钥:
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
安装
LangChain Google 生成式 AI 集成位于 langchain-google-genai package:
pip install -qU langchain-google-genai
实例化
现在我们可以实例化模型对象并生成嵌入:
from langchain_google_genai import GoogleGenerativeAIEmbeddings
embeddings = GoogleGenerativeAIEmbeddings(model="gemini-embedding-2-preview")
vector = embeddings.embed_query("hello, world!")
vector[:5]
[-0.024917153641581535,
0.012005362659692764,
-0.003886754624545574,
-0.05774897709488869,
0.0020742062479257584]
降低维度
gemini-embedding-2-preview 通过俄罗斯套娃表示学习 (MRL) 支持灵活的输出维度。您可以降低维度以优化存储和延迟:
embeddings = GoogleGenerativeAIEmbeddings(
model="gemini-embedding-2-preview",
output_dimensionality=768, # Suggested: 768, 1536, or 3072 (default)
)
vector = embeddings.embed_query("hello, world!")
len(vector)
768
批处理
您还可以一次嵌入多个字符串以加快处理速度:
vectors = embeddings.embed_documents(
[
"Today is Monday",
"Today is Tuesday",
"Today is April Fools day",
]
)
len(vectors), len(vectors[0])
(3, 768)
索引和检索
嵌入模型通常用于检索增强生成 (RAG) 流程,既作为索引数据的一部分,也用于后续检索。如需更详细的说明,请参阅我们的 RAG 教程.
下文展示了如何使用上面初始化的 embeddings 对象来索引和检索数据。在此示例中,我们将在 InMemoryVectorStore.
# Create a vector store with a sample text
from langchain_core.vectorstores import InMemoryVectorStore
text = "LangChain is the framework for building context-aware reasoning applications"
vectorstore = InMemoryVectorStore.from_texts(
[text],
embedding=embeddings,
)
# Use the vectorstore as a retriever
retriever = vectorstore.as_retriever()
# Retrieve the most similar text
retrieved_documents = retriever.invoke("What is LangChain?")
# show the retrieved document's content
retrieved_documents[0].page_content
'LangChain is the framework for building context-aware reasoning applications'
任务类型
GoogleGenerativeAIEmbeddings 可选地支持 task_type,目前必须是以下之一:
- -
SEMANTIC_SIMILARITY:用于生成针对评估文本相似度进行优化的嵌入。 - -
CLASSIFICATION:用于生成针对根据预设标签对文本进行分类进行优化的嵌入。 - -
CLUSTERING:用于生成针对根据相似性对文本进行聚类进行优化的嵌入。 - -
RETRIEVAL_DOCUMENT,RETRIEVAL_QUERY,QUESTION_ANSWERING和FACT_VERIFICATION:用于生成针对文档搜索或信息检索优化的向量。 - -
CODE_RETRIEVAL_QUERY:用于根据自然语言查询检索代码块,例如排序数组或反转链表。代码块的向量使用以下方式计算RETRIEVAL_DOCUMENT.
默认情况下,我们使用 RETRIEVAL_DOCUMENT 在 embed_documents 方法中, RETRIEVAL_QUERY 在 embed_query 方法中。如果您提供任务类型,我们将对所有方法使用该类型。
pip install -qU matplotlib scikit-learn
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from sklearn.metrics.pairwise import cosine_similarity
query_embeddings = GoogleGenerativeAIEmbeddings(
model="gemini-embedding-2-preview", task_type="RETRIEVAL_QUERY"
)
doc_embeddings = GoogleGenerativeAIEmbeddings(
model="gemini-embedding-2-preview", task_type="RETRIEVAL_DOCUMENT"
)
q_embed = query_embeddings.embed_query("What is the capital of France?")
d_embed = doc_embeddings.embed_documents(
["The capital of France is Paris.", "Philipp likes to eat pizza."]
)
for i, d in enumerate(d_embed):
print(f"Document {i + 1}:")
print(f"Cosine similarity with query: {cosine_similarity([q_embed], [d])[0][0]}")
print("---")
Document 1:
Cosine similarity with query: 0.7892893360164779
---
Document 2:
Cosine similarity with query: 0.5438283285204146
---
额外配置
您可以向以下内容传递以下参数 GoogleGenerativeAIEmbeddings 来自定义 SDK 的行为:
- -
base_url:API 客户端的自定义基础 URL(例如自定义端点) - -
output_dimensionality:减少返回向量的维度(例如,output_dimensionality=256) - -
request_options:请求选项字典(例如,{"timeout": 10}) - -
additional_headers:包含在 API 请求中的额外 HTTP 头 - -
client_args:传递给底层 HTTP 客户端的额外参数
API 参考
有关 GoogleGenerativeAIEmbeddings 功能和配置选项的详细文档,请参阅 API 参考.