📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易
由 deepset 维护

集成:IBM Watsonx

通过 Watsonx SDK 将 IBM 的 watsonx 模型与 Haystack 结合使用。

作者
deepset
Divya

目录

概述

IBM watsonx.ai 提供对 IBM 基础模型的访问权限,用于企业 AI。此集成允许您将 granite-3-2b-instructslate-125m-english-rtrvr 等强大模型与 Haystack 结合用于聊天和嵌入任务。

安装

安装 IBM Watsonx 集成

pip install watsonx-haystack

使用

安装后,您将可以使用 Haystack 组件

  • WatsonxChatGenerator:将此组件与 granite-3-2b-instruct 等 IBM watsonx 模型结合用于聊天生成。
  • WatsonxGenerator:将此组件与 granite-3-2b-instruct 等 IBM watsonx 模型结合用于简单的文本生成任务。
  • WatsonxDocumentEmbedder:将此组件与 slate-125m-english-rtrvr 等 IBM watsonx 模型结合用于生成文档嵌入。
  • WatsonxTextEmbedder:将此组件与 slate-125m-english-rtrvr 等 IBM watsonx 模型结合用于生成文本嵌入和检索。

要使用 Watsonx 集成,您必须通过环境变量或初始化参数提供您的 WATSONX_API_KEYWATSONX_PROJECT_ID。如果两者均未设置,您将无法使用这些组件。

要获取 API 密钥,您可以遵循 watsonx.ai 的注册流程。

使用 granite-3-2b-instruct 进行聊天生成

要将 Watsonx 模型用于聊天生成,请设置 WATSONX_API_KEYWATSONX_PROJECT_ID 环境变量,然后使用 "ibm/granite-3-2b-instruct" 初始化 WatsonxChatGenerator

import os
from haystack.dataclasses import ChatMessage
from haystack.utils import Secret
from haystack_integrations.components.generators.watsonx.chat.chat_generator import WatsonxChatGenerator

os.environ["WATSONX_API_KEY"] = "your_watsonx_api_key"
os.environ["WATSONX_PROJECT_ID"] = "your_watsonx_project_id"

generator = WatsonxChatGenerator(
    model="ibm/granite-3-2b-instruct"
)

messages = [
    ChatMessage.from_system("You are a helpful assistant."),
    ChatMessage.from_user("Explain quantum computing in simple terms.")
]

response = generator.run(messages=messages)
print(response["replies"][0].text)

输出

Quantum computing is a type of computing that uses the principles of quantum mechanics to process information. ...

流式聊天生成

对于实时流式响应,您可以使用流式回调功能

import os
from haystack.dataclasses import ChatMessage, StreamingChunk
from haystack.utils import Secret
from haystack_integrations.components.generators.watsonx.chat.chat_generator import WatsonxChatGenerator

os.environ["WATSONX_API_KEY"] = "your_watsonx_api_key"
os.environ["WATSONX_PROJECT_ID"] = "your_watsonx_project_id"

def print_streaming_chunk(chunk: StreamingChunk):
    print(chunk.content, end="", flush=True)

# Initialize with streaming callback
generator = WatsonxChatGenerator(
    model="ibm/granite-3-2b-instruct",
    streaming_callback=print_streaming_chunk
)

# Generate a streaming response
messages = [ChatMessage.from_user("Write a short poem about artificial intelligence.")]
generator.run(messages=messages)
# Text will stream in real-time via the callback

文档嵌入

要将 Watsonx 模型用于文档嵌入,请设置 WATSONX_API_KEYWATSONX_PROJECT_ID 环境变量,然后使用 "ibm/slate-125m-english-rtrvr" 初始化 WatsonxDocumentEmbedder

import os
from haystack import Document
from haystack.utils import Secret
from haystack_integrations.components.embedders.watsonx.document_embedder import WatsonxDocumentEmbedder

os.environ["WATSONX_API_KEY"] = "your_watsonx_api_key"
os.environ["WATSONX_PROJECT_ID"] = "your_watsonx_project_id"

document_embedder = WatsonxDocumentEmbedder(
    model="ibm/slate-125m-english-rtrvr",
    api_base_url="https://us-south.ml.cloud.ibm.com"
)

documents = [Document(content="Germany has many big cities.")]
docs_with_embeddings = document_embedder.run(documents)["documents"]
print(docs_with_embeddings)

输出

[Document(id=..., content: 'Germany has many big cities.', embedding: vector of size 768)]

文本嵌入

要将 Watsonx 模型用于文本嵌入,请设置 WATSONX_API_KEYWATSONX_PROJECT_ID 环境变量,然后使用 "ibm/slate-125m-english-rtrvr" 初始化 WatsonxTextEmbedder

import os
from haystack.utils import Secret
from haystack_integrations.components.embedders.watsonx.text_embedder import WatsonxTextEmbedder

os.environ["WATSONX_API_KEY"] = "your_watsonx_api_key"
os.environ["WATSONX_PROJECT_ID"] = "your_watsonx_project_id"

text_embedder = WatsonxTextEmbedder(
    model="ibm/slate-125m-english-rtrvr",
    api_base_url="https://us-south.ml.cloud.ibm.com"
)

text = "I love pizza!"
result = text_embedder.run(text=text)
print(result)

输出

{'embedding': [0.123, -0.456, 0.789, ...], 
'meta': {'model': 'ibm/slate-125m-english-rtrvr', 'truncated_input_tokens': None}}