Google GenAI 集成,用于 Haystack
模块 haystack_integrations.components.generators.google_genai.chat.chat_generator
GoogleGenAIChatGenerator
一个组件,用于通过 Google Gen AI SDK 使用 Google 的 Gemini 模型生成聊天补全。
支持 gemini-2.0-flash 等模型以及其他 Gemini 变体。对于 Gemini 2.5 系列模型,可以通过generation_kwargs={"thinking_budget": value}.
启用思考功能(Gemini 2.5 系列)
- 推理透明度:模型可以展示其推理过程
- 思考签名:在与工具的多轮对话中保持思考上下文
- 可配置思考预算:控制推理的 token 分配
配置思考行为
thinking_budget: -1:动态分配(默认)thinking_budget: 0:禁用思考(仅限 Flash/Flash-Lite)thinking_budget: N:设置显式 token 预算
多轮思考与思考签名
当存在工具时,Gemini 使用思考签名——加密的“保存状态”,可在多轮对话中保持上下文。在聊天历史中包含先前的助手响应以保留上下文。
身份验证
Gemini 开发者 API:设置GOOGLE_API_KEY 或GEMINI_API_KEY 环境变量 Vertex AI:使用api="vertex" 结合应用默认凭证或 API 密钥
身份验证示例
1. Gemini 开发者 API(API 密钥身份验证)
from haystack_integrations.components.generators.google_genai import GoogleGenAIChatGenerator
# export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)
chat_generator = GoogleGenAIChatGenerator(model="gemini-2.0-flash")
2. Vertex AI(应用默认凭证)
from haystack_integrations.components.generators.google_genai import GoogleGenAIChatGenerator
# Using Application Default Credentials (requires gcloud auth setup)
chat_generator = GoogleGenAIChatGenerator(
api="vertex",
vertex_ai_project="my-project",
vertex_ai_location="us-central1",
model="gemini-2.0-flash"
)
3. Vertex AI(API 密钥身份验证)
from haystack_integrations.components.generators.google_genai import GoogleGenAIChatGenerator
# export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)
chat_generator = GoogleGenAIChatGenerator(
api="vertex",
model="gemini-2.0-flash"
)
使用示例
from haystack.dataclasses.chat_message import ChatMessage
from haystack.tools import Tool, Toolset
from haystack_integrations.components.generators.google_genai import GoogleGenAIChatGenerator
# Initialize the chat generator with thinking support
chat_generator = GoogleGenAIChatGenerator(
model="gemini-2.5-flash",
generation_kwargs={"thinking_budget": 1024} # Enable thinking with 1024 token budget
)
# Generate a response
messages = [ChatMessage.from_user("Tell me about the future of AI")]
response = chat_generator.run(messages=messages)
print(response["replies"][0].text)
# Access reasoning content if available
message = response["replies"][0]
if message.reasonings:
for reasoning in message.reasonings:
print("Reasoning:", reasoning.reasoning_text)
# Tool usage example with thinking
def weather_function(city: str):
return f"The weather in {city} is sunny and 25°C"
weather_tool = Tool(
name="weather",
description="Get weather information for a city",
parameters={"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
function=weather_function
)
# Can use either List[Tool] or Toolset
chat_generator_with_tools = GoogleGenAIChatGenerator(
model="gemini-2.5-flash",
tools=[weather_tool], # or tools=Toolset([weather_tool])
generation_kwargs={"thinking_budget": -1} # Dynamic thinking allocation
)
messages = [ChatMessage.from_user("What's the weather in Paris?")]
response = chat_generator_with_tools.run(messages=messages)
GoogleGenAIChatGenerator.__init__
def __init__(*,
api_key: Secret = Secret.from_env_var(
["GOOGLE_API_KEY", "GEMINI_API_KEY"], strict=False),
api: Literal["gemini", "vertex"] = "gemini",
vertex_ai_project: Optional[str] = None,
vertex_ai_location: Optional[str] = None,
model: str = "gemini-2.0-flash",
generation_kwargs: Optional[Dict[str, Any]] = None,
safety_settings: Optional[List[Dict[str, Any]]] = None,
streaming_callback: Optional[StreamingCallbackT] = None,
tools: Optional[Union[List[Tool], Toolset]] = None)
初始化一个 GoogleGenAIChatGenerator 实例。
参数:
api_key:Google API 密钥,默认为GOOGLE_API_KEY和GEMINI_API_KEY环境变量。如果使用 Vertex AI 并配合应用默认凭证,则不需要。获取 Gemini API 密钥请访问 https://aistudio.google.com/app/apikey。获取 Vertex AI API 密钥请访问 https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys。api:要使用的 API。可以是 "gemini"(用于 Gemini 开发者 API)或 "vertex"(用于 Vertex AI)。vertex_ai_project:Vertex AI 的 Google Cloud 项目 ID。在使用 Vertex AI 和应用默认凭证时必需。vertex_ai_location:Vertex AI 的 Google Cloud 位置(例如 "us-central1"、"europe-west1")。在使用 Vertex AI 和应用默认凭证时必需。model:要使用的模型名称(例如 "gemini-2.0-flash")generation_kwargs:用于生成的配置(temperature、max_tokens 等)。对于 Gemini 2.5 系列,支持thinking_budget来配置思考行为thinking_budget:int,控制思考 token 分配-1:动态(大多数模型的默认值)0:禁用思考(仅限 Flash/Flash-Lite)- 正整数:设置显式预算
safety_settings:用于内容过滤的安全设置streaming_callback: 当从流中接收到新 token 时调用的回调函数。tools:模型可以使用的一系列 Tool 对象或 Toolset。每个工具都应有一个唯一的名称。
GoogleGenAIChatGenerator.to_dict
def to_dict() -> Dict[str, Any]
将组件序列化为字典。
返回值:
包含序列化数据的字典。
GoogleGenAIChatGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "GoogleGenAIChatGenerator"
从字典反序列化组件。
参数:
data: 要反序列化的字典。
返回值:
反序列化后的组件。
GoogleGenAIChatGenerator.run
@component.output_types(replies=List[ChatMessage])
def run(messages: List[ChatMessage],
generation_kwargs: Optional[Dict[str, Any]] = None,
safety_settings: Optional[List[Dict[str, Any]]] = None,
streaming_callback: Optional[StreamingCallbackT] = None,
tools: Optional[Union[List[Tool], Toolset]] = None) -> Dict[str, Any]
在给定的输入数据上运行 Google Gen AI 聊天生成器。
参数:
messages: 一个 ChatMessage 实例列表,表示输入消息。generation_kwargs:用于生成的配置。如果提供,它将覆盖默认配置。支持thinking_budget用于 Gemini 2.5 系列的思考配置。safety_settings:用于内容过滤的安全设置。如果提供,它将覆盖默认设置。streaming_callback: 当从流中接收到新 token 时调用的回调函数。tools:模型可以使用的一系列 Tool 对象或 Toolset。如果提供,它将覆盖初始化时设置的工具。
引发:
RuntimeError:如果在 Google Gen AI 聊天生成过程中发生错误。ValueError:如果 ChatMessage 不包含 TextContent、ToolCall 或 ToolCallResult 中的至少一项,或者 ChatMessage 中的 role 不是 User、System 或 Assistant。
返回值:
包含以下键的字典
replies:一个包含生成的 ChatMessage 响应的列表。
GoogleGenAIChatGenerator.run_async
@component.output_types(replies=List[ChatMessage])
async def run_async(
messages: List[ChatMessage],
generation_kwargs: Optional[Dict[str, Any]] = None,
safety_settings: Optional[List[Dict[str, Any]]] = None,
streaming_callback: Optional[StreamingCallbackT] = None,
tools: Optional[Union[List[Tool], Toolset]] = None) -> Dict[str, Any]
run 方法的异步版本。在给定的输入数据上运行 Google Gen AI 聊天生成器。
参数:
messages: 一个 ChatMessage 实例列表,表示输入消息。generation_kwargs:用于生成的配置。如果提供,它将覆盖默认配置。支持thinking_budget用于 Gemini 2.5 系列的思考配置。有关可能的取值,请参阅 https://ai.google.dev/gemini-api/docs/thinking。safety_settings:用于内容过滤的安全设置。如果提供,它将覆盖默认设置。streaming_callback: 当从流中接收到新 token 时调用的回调函数。tools:模型可以使用的一系列 Tool 对象或 Toolset。如果提供,它将覆盖初始化时设置的工具。
引发:
RuntimeError:如果在异步 Google Gen AI 聊天生成过程中发生错误。ValueError:如果 ChatMessage 不包含 TextContent、ToolCall 或 ToolCallResult 中的至少一项,或者 ChatMessage 中的 role 不是 User、System 或 Assistant。
返回值:
包含以下键的字典
replies:一个包含生成的 ChatMessage 响应的列表。
模块 haystack_integrations.components.embedders.google_genai.document_embedder
GoogleGenAIDocumentEmbedder
使用 Google AI 模型计算文档嵌入。
身份验证示例
1. Gemini 开发者 API(API 密钥身份验证)
from haystack_integrations.components.embedders.google_genai import GoogleGenAIDocumentEmbedder
# export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)
document_embedder = GoogleGenAIDocumentEmbedder(model="text-embedding-004")
**2. Vertex AI (Application Default Credentials)**
```python
from haystack_integrations.components.embedders.google_genai import GoogleGenAIDocumentEmbedder
__Using Application Default Credentials (requires gcloud auth setup)__
document_embedder = GoogleGenAIDocumentEmbedder(
api="vertex",
vertex_ai_project="my-project",
vertex_ai_location="us-central1",
model="text-embedding-004"
)
3. Vertex AI(API 密钥身份验证)
from haystack_integrations.components.embedders.google_genai import GoogleGenAIDocumentEmbedder
__export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)__
document_embedder = GoogleGenAIDocumentEmbedder(
api="vertex",
model="text-embedding-004"
)
使用示例
from haystack import Document
from haystack_integrations.components.embedders.google_genai import GoogleGenAIDocumentEmbedder
doc = Document(content="I love pizza!")
document_embedder = GoogleGenAIDocumentEmbedder()
result = document_embedder.run([doc])
print(result['documents'][0].embedding)
__[0.017020374536514282, -0.023255806416273117, ...]__
GoogleGenAIDocumentEmbedder.__init__
def __init__(*,
api_key: Secret = Secret.from_env_var(
["GOOGLE_API_KEY", "GEMINI_API_KEY"], strict=False),
api: Literal["gemini", "vertex"] = "gemini",
vertex_ai_project: Optional[str] = None,
vertex_ai_location: Optional[str] = None,
model: str = "text-embedding-004",
prefix: str = "",
suffix: str = "",
batch_size: int = 32,
progress_bar: bool = True,
meta_fields_to_embed: Optional[List[str]] = None,
embedding_separator: str = "\n",
config: Optional[Dict[str, Any]] = None) -> None
创建一个 GoogleGenAIDocumentEmbedder 组件。
参数:
api_key:Google API 密钥,默认为GOOGLE_API_KEY和GEMINI_API_KEY环境变量。如果使用 Vertex AI 并配合应用默认凭证,则不需要。获取 Gemini API 密钥请访问 https://aistudio.google.com/app/apikey。获取 Vertex AI API 密钥请访问 https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys。api:要使用的 API。可以是 "gemini"(用于 Gemini 开发者 API)或 "vertex"(用于 Vertex AI)。vertex_ai_project:Vertex AI 的 Google Cloud 项目 ID。在使用 Vertex AI 和应用默认凭证时必需。vertex_ai_location:Vertex AI 的 Google Cloud 位置(例如 "us-central1"、"europe-west1")。在使用 Vertex AI 和应用默认凭证时必需。model:用于计算嵌入的模型名称。默认模型是text-embedding-ada-002.prefix: 添加到每个文本开头的字符串。suffix: 添加到每个文本末尾的字符串。batch_size:一次嵌入的文档数量。progress_bar: 如果True,则运行时显示进度条。meta_fields_to_embed: 要与文档文本一起嵌入的元数据字段列表。embedding_separator: 用于将元数据字段连接到文档文本的分隔符。config:一个字典,包含用于配置嵌入内容配置的关键字参数types.EmbedContentConfig。如果未指定,则默认为 {"task_type": "SEMANTIC_SIMILARITY"}。有关更多信息,请参阅 Google AI 任务类型。
GoogleGenAIDocumentEmbedder.to_dict
def to_dict() -> Dict[str, Any]
将组件序列化为字典。
返回值:
包含序列化数据的字典。
GoogleGenAIDocumentEmbedder.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "GoogleGenAIDocumentEmbedder"
从字典反序列化组件。
参数:
data: 要反序列化的字典。
返回值:
反序列化后的组件。
GoogleGenAIDocumentEmbedder.run
@component.output_types(documents=List[Document], meta=Dict[str, Any])
def run(
documents: List[Document]
) -> Union[Dict[str, List[Document]], Dict[str, Any]]
嵌入一系列文档。
参数:
documents:要嵌入的文档列表。
返回值:
包含以下键的字典
documents:包含嵌入的文档列表。meta:有关模型使用情况的信息。
GoogleGenAIDocumentEmbedder.run_async
@component.output_types(documents=List[Document], meta=Dict[str, Any])
async def run_async(
documents: List[Document]
) -> Union[Dict[str, List[Document]], Dict[str, Any]]
异步嵌入一系列文档。
参数:
documents:要嵌入的文档列表。
返回值:
包含以下键的字典
documents:包含嵌入的文档列表。meta:有关模型使用情况的信息。
模块 haystack_integrations.components.embedders.google_genai.text_embedder
GoogleGenAITextEmbedder
使用 Google AI 模型嵌入字符串。
您可以使用它来嵌入用户查询并将查询发送到嵌入检索器。
身份验证示例
1. Gemini 开发者 API(API 密钥身份验证)
from haystack_integrations.components.embedders.google_genai import GoogleGenAITextEmbedder
# export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)
text_embedder = GoogleGenAITextEmbedder(model="text-embedding-004")
**2. Vertex AI (Application Default Credentials)**
```python
from haystack_integrations.components.embedders.google_genai import GoogleGenAITextEmbedder
__Using Application Default Credentials (requires gcloud auth setup)__
text_embedder = GoogleGenAITextEmbedder(
api="vertex",
vertex_ai_project="my-project",
vertex_ai_location="us-central1",
model="text-embedding-004"
)
3. Vertex AI(API 密钥身份验证)
from haystack_integrations.components.embedders.google_genai import GoogleGenAITextEmbedder
__export the environment variable (GOOGLE_API_KEY or GEMINI_API_KEY)__
text_embedder = GoogleGenAITextEmbedder(
api="vertex",
model="text-embedding-004"
)
使用示例
from haystack_integrations.components.embedders.google_genai import GoogleGenAITextEmbedder
text_to_embed = "I love pizza!"
text_embedder = GoogleGenAITextEmbedder()
print(text_embedder.run(text_to_embed))
__{'embedding': [0.017020374536514282, -0.023255806416273117, ...],__
__'meta': {'model': 'text-embedding-004-v2',__
__ 'usage': {'prompt_tokens': 4, 'total_tokens': 4}}}__
GoogleGenAITextEmbedder.__init__
def __init__(*,
api_key: Secret = Secret.from_env_var(
["GOOGLE_API_KEY", "GEMINI_API_KEY"], strict=False),
api: Literal["gemini", "vertex"] = "gemini",
vertex_ai_project: Optional[str] = None,
vertex_ai_location: Optional[str] = None,
model: str = "text-embedding-004",
prefix: str = "",
suffix: str = "",
config: Optional[Dict[str, Any]] = None) -> None
创建一个 GoogleGenAITextEmbedder 组件。
参数:
api_key:Google API 密钥,默认为GOOGLE_API_KEY和GEMINI_API_KEY环境变量。如果使用 Vertex AI 并配合应用默认凭证,则不需要。获取 Gemini API 密钥请访问 https://aistudio.google.com/app/apikey。获取 Vertex AI API 密钥请访问 https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys。api:要使用的 API。可以是 "gemini"(用于 Gemini 开发者 API)或 "vertex"(用于 Vertex AI)。vertex_ai_project:Vertex AI 的 Google Cloud 项目 ID。在使用 Vertex AI 和应用默认凭证时必需。vertex_ai_location:Vertex AI 的 Google Cloud 位置(例如 "us-central1"、"europe-west1")。在使用 Vertex AI 和应用默认凭证时必需。model:用于计算嵌入的模型名称。默认模型是text-embedding-004.prefix:添加到每个待嵌入文本开头的字符串。suffix:添加到每个待嵌入文本末尾的字符串。config:一个字典,包含用于配置嵌入内容配置的关键字参数types.EmbedContentConfig。如果未指定,则默认为 {"task_type": "SEMANTIC_SIMILARITY"}。有关更多信息,请参阅 Google AI 任务类型。
GoogleGenAITextEmbedder.to_dict
def to_dict() -> Dict[str, Any]
将组件序列化为字典。
返回值:
包含序列化数据的字典。
GoogleGenAITextEmbedder.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "GoogleGenAITextEmbedder"
从字典反序列化组件。
参数:
data: 要反序列化的字典。
返回值:
反序列化后的组件。
GoogleGenAITextEmbedder.run
@component.output_types(embedding=List[float], meta=Dict[str, Any])
def run(text: str) -> Union[Dict[str, List[float]], Dict[str, Any]]
嵌入单个字符串。
参数:
text:要嵌入的文本。
返回值:
包含以下键的字典
embedding:输入文本的嵌入。meta:有关模型使用情况的信息。
GoogleGenAITextEmbedder.run_async
@component.output_types(embedding=List[float], meta=Dict[str, Any])
async def run_async(
text: str) -> Union[Dict[str, List[float]], Dict[str, Any]]
异步嵌入单个字符串。
这是run 方法。它具有相同的参数和返回值,但可以在异步代码中与await 一起使用。
参数:
text:要嵌入的文本。
返回值:
包含以下键的字典
embedding:输入文本的嵌入。meta:有关模型使用情况的信息。
