Haystack 的 IBM watsonx.ai 集成
模块 haystack_integrations.components.generators.watsonx.generator
WatsonxGenerator
使用 IBM 的 watsonx.ai 基础模型进行文本补全。
此组件扩展了 WatsonxChatGenerator,提供了标准的 Generator 接口,该接口使用 prompt 字符串而不是 ChatMessage 对象。
该生成器与 IBM 的基础模型一起使用,包括
- granite-13b-chat-v2
- llama-2-70b-chat
- llama-3-70b-instruct
- 其他 watsonx.ai 聊天模型
您可以通过 watsonx.ai API 的generation_kwargs 参数来定制生成行为。这些参数直接传递给 watsonx.ai 推理端点。
有关 watsonx.ai API 参数的更多详细信息,请参阅 IBM watsonx.ai 文档。
使用示例
from haystack_integrations.components.generators.watsonx.generator import WatsonxGenerator
from haystack.utils import Secret
generator = WatsonxGenerator(
api_key=Secret.from_env_var("WATSONX_API_KEY"),
model="ibm/granite-13b-chat-v2",
project_id=Secret.from_env_var("WATSONX_PROJECT_ID"),
)
response = generator.run(
prompt="Explain quantum computing in simple terms",
system_prompt="You are a helpful physics teacher.",
)
print(response)
输出
{
"replies": ["Quantum computing uses quantum-mechanical phenomena like...."],
"meta": [
{
"model": "ibm/granite-13b-chat-v2",
"project_id": "your-project-id",
"usage": {
"prompt_tokens": 12,
"completion_tokens": 45,
"total_tokens": 57,
},
}
],
}
WatsonxGenerator.__init__
def __init__(*,
api_key: Secret = Secret.from_env_var("WATSONX_API_KEY"),
model: str = "ibm/granite-3-2b-instruct",
project_id: Secret = Secret.from_env_var("WATSONX_PROJECT_ID"),
api_base_url: str = "https://us-south.ml.cloud.ibm.com",
system_prompt: str | None = None,
generation_kwargs: dict[str, Any] | None = None,
timeout: float | None = None,
max_retries: int | None = None,
verify: bool | str | None = None,
streaming_callback: StreamingCallbackT | None = None) -> None
创建 WatsonxGenerator 实例。
在初始化组件之前,您可以设置环境变量
WATSONX_TIMEOUT来覆盖默认超时时间WATSONX_MAX_RETRIES来覆盖默认重试次数
参数:
api_key:用于 watsonx.ai 访问的 IBM Cloud API 密钥。可以通过WATSONX_API_KEY环境变量设置,或直接传递。model:用于补全的模型 ID。默认为 "ibm/granite-13b-chat-v2"。可用模型可在您的 IBM Cloud 账户中找到。project_id:IBM Cloud 项目 IDapi_base_url:API 端点的自定义基 URL。默认为 "https://us-south.ml.cloud.ibm.com"。system_prompt:用于文本生成的系统提示。generation_kwargs:用于控制文本生成的附加参数。这些参数直接传递给 watsonx.ai 推理端点。支持的参数包括temperature:控制随机性(越低越确定)max_new_tokens:生成的最大 token 数min_new_tokens:生成的最小 token 数top_p:核心采样概率阈值top_k:要考虑的最高概率 token 数repetition_penalty:重复 token 的惩罚length_penalty:基于输出长度的惩罚stop_sequences:生成应停止的序列列表random_seed:用于可复现结果的种子timeout:API 请求的超时时间(秒)。默认为环境变量WATSONX_TIMEOUT或 30 秒。max_retries:失败请求的最大重试次数。默认为环境变量WATSONX_MAX_RETRIES或 5。verify:SSL 验证设置。可以是- True:验证 SSL 证书(默认)
- False:跳过验证(不安全)
- 用于自定义证书的 CA 捆绑包的路径
streaming_callback:用于流式响应的回调函数。
WatsonxGenerator.to_dict
def to_dict() -> dict[str, Any]
将组件序列化为字典。
返回值:
序列化后的组件(字典格式)。
WatsonxGenerator.from_dict
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "WatsonxGenerator"
从字典反序列化此组件。
参数:
data:此组件的字典表示。
返回值:
反序列化的组件实例。
WatsonxGenerator.run
@component.output_types(replies=list[str], meta=list[dict[str, Any]])
def run(*,
prompt: str,
system_prompt: str | None = None,
streaming_callback: StreamingCallbackT | None = None,
generation_kwargs: dict[str, Any] | None = None) -> dict[str, Any]
同步生成文本补全。
参数:
prompt:用于文本生成的输入 prompt 字符串。system_prompt:可选的系统提示,用于提供上下文或生成指令。如果未提供,将使用__init__方法中设置的系统提示。streaming_callback:当从流接收到新 token 时调用的回调函数。如果提供,此函数将覆盖__init__方法中设置的streaming_callback。generation_kwargs:用于文本生成的附加关键字参数。这些参数可能会覆盖在streaming_callback。支持的参数包括 temperature、max_new_tokens、top_p 等。
返回值:
包含以下键的字典
replies:作为字符串生成的文本补全列表。meta:包含每次生成信息的元数据字典列表,包括模型名称、结束原因和 token 使用统计信息。
WatsonxGenerator.run_async
@component.output_types(replies=list[str], meta=list[dict[str, Any]])
async def run_async(
*,
prompt: str,
system_prompt: str | None = None,
streaming_callback: StreamingCallbackT | None = None,
generation_kwargs: dict[str, Any] | None = None) -> dict[str, Any]
异步生成文本补全。
参数:
prompt:用于文本生成的输入 prompt 字符串。system_prompt:可选的系统提示,用于提供上下文或生成指令。streaming_callback:当从流接收到新 token 时调用的回调函数。如果提供,此函数将覆盖__init__方法中设置的streaming_callback。generation_kwargs:用于文本生成的附加关键字参数。这些参数可能会覆盖在streaming_callback。支持的参数包括 temperature、max_new_tokens、top_p 等。
返回值:
包含以下键的字典
replies:作为字符串生成的文本补全列表。meta:包含每次生成信息的元数据字典列表,包括模型名称、结束原因和 token 使用统计信息。
模块 haystack_integrations.components.generators.watsonx.chat.chat_generator
WatsonxChatGenerator
使用 IBM 的 watsonx.ai 基础模型进行聊天补全。
此组件与 IBM 的 watsonx.ai 平台交互,使用各种基础模型生成聊天响应。它支持 ChatMessage 格式的输入和输出,包括带有文本和图像的多模态输入。
该生成器与 IBM 的基础模型一起使用,包括
- granite-13b-chat-v2
- llama-2-70b-chat
- llama-3-70b-instruct
- llama-3-2-11b-vision-instruct (多模态)
- llama-3-2-90b-vision-instruct (多模态)
- pixtral-12b (多模态)
- 其他 watsonx.ai 聊天模型
您可以通过 watsonx.ai API 的generation_kwargs 参数来定制生成行为。这些参数直接传递给 watsonx.ai 推理端点。
有关 watsonx.ai API 参数的更多详细信息,请参阅 IBM watsonx.ai 文档。
使用示例
from haystack_integrations.components.generators.watsonx.chat.chat_generator import WatsonxChatGenerator
from haystack.dataclasses import ChatMessage
from haystack.utils import Secret
messages = [ChatMessage.from_user("Explain quantum computing in simple terms")]
client = WatsonxChatGenerator(
api_key=Secret.from_env_var("WATSONX_API_KEY"),
model="ibm/granite-13b-chat-v2",
project_id=Secret.from_env_var("WATSONX_PROJECT_ID"),
)
response = client.run(messages)
print(response)
多模态使用示例
from haystack.dataclasses import ChatMessage, ImageContent
# Create an image from file path or base64
image_content = ImageContent.from_file_path("path/to/your/image.jpg")
# Create a multimodal message with both text and image
messages = [ChatMessage.from_user(content_parts=["What's in this image?", image_content])]
# Use a multimodal model
client = WatsonxChatGenerator(
api_key=Secret.from_env_var("WATSONX_API_KEY"),
model="meta-llama/llama-3-2-11b-vision-instruct",
project_id=Secret.from_env_var("WATSONX_PROJECT_ID"),
)
response = client.run(messages)
print(response)
WatsonxChatGenerator.__init__
def __init__(*,
api_key: Secret = Secret.from_env_var("WATSONX_API_KEY"),
model: str = "ibm/granite-3-2b-instruct",
project_id: Secret = Secret.from_env_var("WATSONX_PROJECT_ID"),
api_base_url: str = "https://us-south.ml.cloud.ibm.com",
generation_kwargs: dict[str, Any] | None = None,
timeout: float | None = None,
max_retries: int | None = None,
verify: bool | str | None = None,
streaming_callback: StreamingCallbackT | None = None) -> None
创建 WatsonxChatGenerator 实例。
在初始化组件之前,您可以设置环境变量
WATSONX_TIMEOUT来覆盖默认超时时间WATSONX_MAX_RETRIES来覆盖默认重试次数
参数:
api_key:用于 watsonx.ai 访问的 IBM Cloud API 密钥。可以通过WATSONX_API_KEY环境变量设置,或直接传递。model:用于补全的模型 ID。默认为 "ibm/granite-13b-chat-v2"。可用模型可在您的 IBM Cloud 账户中找到。project_id:IBM Cloud 项目 IDapi_base_url:API 端点的自定义基 URL。默认为 "https://us-south.ml.cloud.ibm.com"。generation_kwargs:用于控制文本生成的附加参数。这些参数直接传递给 watsonx.ai 推理端点。支持的参数包括temperature:控制随机性(越低越确定)max_new_tokens:生成的最大 token 数min_new_tokens:生成的最小 token 数top_p:核心采样概率阈值top_k:要考虑的最高概率 token 数repetition_penalty:重复 token 的惩罚length_penalty:基于输出长度的惩罚stop_sequences:生成应停止的序列列表random_seed:用于可复现结果的种子timeout:API 请求的超时时间(秒)。默认为环境变量WATSONX_TIMEOUT或 30 秒。max_retries:失败请求的最大重试次数。默认为环境变量WATSONX_MAX_RETRIES或 5。verify:SSL 验证设置。可以是- True:验证 SSL 证书(默认)
- False:跳过验证(不安全)
- 用于自定义证书的 CA 捆绑包的路径
streaming_callback:用于流式响应的回调函数。
WatsonxChatGenerator.to_dict
def to_dict() -> dict[str, Any]
将组件序列化为字典。
返回值:
序列化后的组件(字典格式)。
WatsonxChatGenerator.from_dict
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "WatsonxChatGenerator"
从字典反序列化此组件。
参数:
data:此组件的字典表示。
返回值:
反序列化的组件实例。
WatsonxChatGenerator.run
@component.output_types(replies=list[ChatMessage])
def run(
*,
messages: list[ChatMessage],
generation_kwargs: dict[str, Any] | None = None,
streaming_callback: StreamingCallbackT | None = None
) -> dict[str, list[ChatMessage]]
同步生成聊天补全。
参数:
messages: 一个 ChatMessage 实例列表,表示输入消息。generation_kwargs:用于文本生成的附加关键字参数。这些参数可能会覆盖在streaming_callback。streaming_callback:当从流接收到新 token 时调用的回调函数。如果提供,此函数将覆盖__init__方法中设置的streaming_callback。
返回值:
一个字典,其中包含以下键
replies:包含生成响应作为 ChatMessage 实例的列表。
WatsonxChatGenerator.run_async
@component.output_types(replies=list[ChatMessage])
async def run_async(
*,
messages: list[ChatMessage],
generation_kwargs: dict[str, Any] | None = None,
streaming_callback: StreamingCallbackT | None = None
) -> dict[str, list[ChatMessage]]
异步生成聊天补全。
参数:
messages: 一个 ChatMessage 实例列表,表示输入消息。generation_kwargs:用于文本生成的附加关键字参数。这些参数可能会覆盖在streaming_callback。streaming_callback:当从流接收到新 token 时调用的回调函数。如果提供,此函数将覆盖__init__方法中设置的streaming_callback。
返回值:
一个字典,其中包含以下键
replies:包含生成响应作为 ChatMessage 实例的列表。
模块 haystack_integrations.components.embedders.watsonx.document_embedder
WatsonxDocumentEmbedder
使用 IBM watsonx.ai 模型计算文档嵌入。
使用示例
from haystack import Document
from haystack_integrations.components.embedders.watsonx.document_embedder import WatsonxDocumentEmbedder
documents = [
Document(content="I love pizza!"),
Document(content="Pasta is great too"),
]
document_embedder = WatsonxDocumentEmbedder(
model="ibm/slate-30m-english-rtrvr",
api_key=Secret.from_env_var("WATSONX_API_KEY"),
api_base_url="https://us-south.ml.cloud.ibm.com",
project_id=Secret.from_env_var("WATSONX_PROJECT_ID"),
)
result = document_embedder.run(documents=documents)
print(result["documents"][0].embedding)
# [0.017020374536514282, -0.023255806416273117, ...]
WatsonxDocumentEmbedder.__init__
def __init__(*,
model: str = "ibm/slate-30m-english-rtrvr",
api_key: Secret = Secret.from_env_var("WATSONX_API_KEY"),
api_base_url: str = "https://us-south.ml.cloud.ibm.com",
project_id: Secret = Secret.from_env_var("WATSONX_PROJECT_ID"),
truncate_input_tokens: int | None = None,
prefix: str = "",
suffix: str = "",
batch_size: int = 1000,
concurrency_limit: int = 5,
timeout: float | None = None,
max_retries: int | None = None,
meta_fields_to_embed: list[str] | None = None,
embedding_separator: str = "\n")
创建 WatsonxDocumentEmbedder 组件。
参数:
model:用于计算嵌入的模型名称。默认为 "ibm/slate-30m-english-rtrvr"。api_key:WATSONX API 密钥。可以通过环境变量 WATSONX_API_KEY 设置。api_base_url:watsonx.ai 服务的 WATSONX URL。默认为 "https://us-south.ml.cloud.ibm.com"。project_id:Watson Studio 项目的 ID。可以通过环境变量 WATSONX_PROJECT_ID 设置。truncate_input_tokens:从输入文本使用的最大 token 数。如果设置为None(或未提供),则使用完整的输入文本,最多达到模型的最大 token 限制。prefix: 添加到每个文本开头的字符串。suffix: 添加到每个文本末尾的字符串。batch_size:一次 API 调用中嵌入的文档数量。默认为 1000。concurrency_limit:要发起的并行请求数量。默认为 5。timeout:API 请求的超时时间(秒)。max_retries:API 请求的最大重试次数。
WatsonxDocumentEmbedder.to_dict
def to_dict() -> dict[str, Any]
将组件序列化为字典。
返回值:
序列化后的组件(字典格式)。
WatsonxDocumentEmbedder.from_dict
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "WatsonxDocumentEmbedder"
从字典反序列化组件。
参数:
data:此组件的字典表示。
返回值:
反序列化的组件实例。
WatsonxDocumentEmbedder.run
@component.output_types(documents=list[Document], meta=dict[str, Any])
def run(documents: list[Document]
) -> dict[str, list[Document] | dict[str, Any]]
嵌入一系列文档。
参数:
documents:要嵌入的文档列表。
返回值:
一个字典,包含
- 'documents':带有嵌入的 Document 列表
- 'meta':有关模型使用情况的信息
模块 haystack_integrations.components.embedders.watsonx.text_embedder
WatsonxTextEmbedder
使用 IBM watsonx.ai 基础模型嵌入字符串。
您可以使用它来嵌入用户查询并将查询发送到嵌入检索器。
使用示例
from haystack_integrations.components.embedders.watsonx.text_embedder import WatsonxTextEmbedder
text_to_embed = "I love pizza!"
text_embedder = WatsonxTextEmbedder(
model="ibm/slate-30m-english-rtrvr",
api_key=Secret.from_env_var("WATSONX_API_KEY"),
api_base_url="https://us-south.ml.cloud.ibm.com",
project_id=Secret.from_env_var("WATSONX_PROJECT_ID"),
)
print(text_embedder.run(text_to_embed))
# {'embedding': [0.017020374536514282, -0.023255806416273117, ...],
# 'meta': {'model': 'ibm/slate-30m-english-rtrvr',
# 'truncated_input_tokens': 3}}
WatsonxTextEmbedder.__init__
def __init__(*,
model: str = "ibm/slate-30m-english-rtrvr",
api_key: Secret = Secret.from_env_var("WATSONX_API_KEY"),
api_base_url: str = "https://us-south.ml.cloud.ibm.com",
project_id: Secret = Secret.from_env_var("WATSONX_PROJECT_ID"),
truncate_input_tokens: int | None = None,
prefix: str = "",
suffix: str = "",
timeout: float | None = None,
max_retries: int | None = None)
创建 WatsonxTextEmbedder 组件。
参数:
model:用于计算嵌入的 IBM watsonx 模型名称。默认为 "ibm/slate-30m-english-rtrvr"。api_key:WATSONX API 密钥。可以通过环境变量 WATSONX_API_KEY 设置。api_base_url:watsonx.ai 服务的 WATSONX URL。默认为 "https://us-south.ml.cloud.ibm.com"。project_id:Watson Studio 项目的 ID。可以通过环境变量 WATSONX_PROJECT_ID 设置。truncate_input_tokens:从输入文本使用的最大 token 数。如果设置为None(或未提供),则使用完整的输入文本,最多达到模型的最大 token 限制。prefix:添加到每个待嵌入文本开头的字符串。suffix:添加到每个待嵌入文本末尾的字符串。timeout:API 请求的超时时间(秒)。max_retries:API 请求的最大重试次数。
WatsonxTextEmbedder.to_dict
def to_dict() -> dict[str, Any]
将组件序列化为字典。
返回值:
序列化后的组件(字典格式)。
WatsonxTextEmbedder.from_dict
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "WatsonxTextEmbedder"
从字典反序列化组件。
参数:
data:此组件的字典表示。
返回值:
反序列化的组件实例。
WatsonxTextEmbedder.run
@component.output_types(embedding=list[float], meta=dict[str, Any])
def run(text: str) -> dict[str, list[float] | dict[str, Any]]
嵌入单个字符串。
参数:
text:要嵌入的文本。
返回值:
一个字典,包含
- 'embedding':输入文本的嵌入
- 'meta':有关模型使用情况的信息
