Skip to main content
Open In ColabOpen on GitHub

谷歌生成式AI嵌入(AI Studio与Gemini API)

使用 GoogleGenerativeAIEmbeddings 类,该类位于 langchain-google-genai 包中,连接到 Google 的生成式 AI 嵌入服务。

这将帮助您使用 LangChain 开始使用 Google 的生成式 AI 嵌入模型(如 Gemini)。有关 GoogleGenerativeAIEmbeddings 功能和配置选项的详细文档,请参阅 API 参考

概览

集成详情

提供者
Google Geminilangchain-google-genai

设置

要访问 Google Generative AI 嵌入模型,您需要创建一个 Google Cloud 项目,启用 Generative Language API,获取 API 密钥,并安装 langchain-google-genai 集成包。

凭据

要使用 Google Generative AI 模型,您必须拥有一个 API 密钥。您可以在 Google AI Studio 中创建一个。请参阅 Google 文档 获取说明。

获得密钥后,将其设置为环境变量 GOOGLE_API_KEY

import getpass
import os

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: ")

安装

%pip install --upgrade --quiet  langchain-google-genai

使用

from langchain_google_genai import GoogleGenerativeAIEmbeddings

embeddings = GoogleGenerativeAIEmbeddings(model="models/gemini-embedding-exp-03-07")
vector = embeddings.embed_query("hello, world!")
vector[:5]
[-0.024917153641581535,
0.012005362659692764,
-0.003886754624545574,
-0.05774897709488869,
0.0020742062479257584]

批量

你也可以一次性嵌入多个字符串以加快处理速度:

vectors = embeddings.embed_documents(
[
"Today is Monday",
"Today is Tuesday",
"Today is April Fools day",
]
)
len(vectors), len(vectors[0])
(3, 3072)

索引与检索

嵌入模型通常用于检索增强生成(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
API 参考:InMemoryVectorStore
'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 计算的。

默认情况下,我们在 embed_documents 方法中使用 RETRIEVAL_DOCUMENT,在 embed_query 方法中使用 RETRIEVAL_QUERY。如果您提供了任务类型,我们将为所有方法使用该类型。

%pip install --upgrade --quiet  matplotlib scikit-learn
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from sklearn.metrics.pairwise import cosine_similarity

query_embeddings = GoogleGenerativeAIEmbeddings(
model="models/gemini-embedding-exp-03-07", task_type="RETRIEVAL_QUERY"
)
doc_embeddings = GoogleGenerativeAIEmbeddings(
model="models/gemini-embedding-exp-03-07", 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 is 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
---

API 参考

有关GoogleGenerativeAIEmbeddings功能和配置选项的详细文档,请参阅API参考

附加配置

您可以向 ChatGoogleGenerativeAI 传递以下参数以自定义 SDK 的行为:

  • client_options: 客户端选项,用于传递给 Google API 客户端,例如自定义的 client_options["api_endpoint"]
  • transport: 使用的传输方法,例如 restgrpcgrpc_asyncio