跳至主要内容

ChatWatsonx

ChatWatsonx 是 IBM watsonx.ai 基础模型的包装器。

这些示例的目的是展示如何使用 LangChain LLM API 与 watsonx.ai 模型进行通信。

概述

集成详情

本地可序列化JS 支持包下载包最新版本
ChatWatsonxPyPI - DownloadsPyPI - Version

模型特性

工具调用结构化输出JSON 模式图像输入音频输入视频输入令牌级流式传输原生异步令牌使用情况Logprobs

设置

要访问 IBM watsonx.ai 模型,您需要创建一个 IBM watsonx.ai 帐户,获取 API 密钥,并安装 langchain-ibm 集成包。

凭据

下面的单元格定义了使用 watsonx 基础模型推理所需的凭据。

**操作:**提供 IBM Cloud 用户 API 密钥。有关详细信息,请参阅 管理用户 API 密钥

import os
from getpass import getpass

watsonx_api_key = getpass()
os.environ["WATSONX_APIKEY"] = watsonx_api_key

此外,您还可以将其他机密作为环境变量传递。

import os

os.environ["WATSONX_URL"] = "your service instance url"
os.environ["WATSONX_TOKEN"] = "your token for accessing the CPD cluster"
os.environ["WATSONX_PASSWORD"] = "your password for accessing the CPD cluster"
os.environ["WATSONX_USERNAME"] = "your username for accessing the CPD cluster"
os.environ["WATSONX_INSTANCE_ID"] = "your instance_id for accessing the CPD cluster"

安装

LangChain IBM 集成位于 langchain-ibm 包中。

!pip install -qU langchain-ibm

实例化

您可能需要针对不同的模型或任务调整模型 parameters。有关详细信息,请参阅 可用 MetaNames

parameters = {
"decoding_method": "sample",
"max_new_tokens": 100,
"min_new_tokens": 1,
"stop_sequences": ["."],
}

使用先前设置的参数初始化 WatsonxLLM 类。

注意:

  • 要为 API 调用提供上下文,您必须传递 project_idspace_id。要获取您的项目或空间 ID,请打开您的项目或空间,转到“管理”选项卡,然后单击“常规”。有关更多信息,请参阅:项目文档部署空间文档
  • 根据您已配置的服务实例的区域,使用 watsonx.ai API 身份验证 中列出的 URL 之一。

在此示例中,我们将使用 project_id 和达拉斯 URL。

您需要指定将用于推理的 model_id。您可以在 受支持的基础模型 中找到所有可用模型的列表。

from langchain_ibm import ChatWatsonx

chat = ChatWatsonx(
model_id="ibm/granite-13b-chat-v2",
url="https://us-south.ml.cloud.ibm.com",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)

或者,您可以使用 Cloud Pak for Data 凭据。有关详细信息,请参阅 watsonx.ai 软件设置

chat = ChatWatsonx(
model_id="ibm/granite-13b-chat-v2",
url="PASTE YOUR URL HERE",
username="PASTE YOUR USERNAME HERE",
password="PASTE YOUR PASSWORD HERE",
instance_id="openshift",
version="4.8",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)

除了 model_id 之外,您还可以传递先前调整的模型的 deployment_id。整个模型调整工作流程在 使用 TuneExperiment 和 PromptTuner 中进行了描述。

chat = ChatWatsonx(
deployment_id="PASTE YOUR DEPLOYMENT_ID HERE",
url="https://us-south.ml.cloud.ibm.com",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)

调用

要获取补全,您可以使用字符串提示直接调用模型。

# Invocation

messages = [
("system", "You are a helpful assistant that translates English to French."),
(
"human",
"I love you for listening to Rock.",
),
]

chat.invoke(messages)
AIMessage(content="Je t'aime pour écouter la Rock.", response_metadata={'token_usage': {'generated_token_count': 12, 'input_token_count': 28}, 'model_name': 'ibm/granite-13b-chat-v2', 'system_fingerprint': '', 'finish_reason': 'stop_sequence'}, id='run-05b305ce-5401-4a10-b557-41a4b15c7f6f-0')
# Invocation multiple chat
from langchain_core.messages import (
HumanMessage,
SystemMessage,
)

system_message = SystemMessage(
content="You are a helpful assistant which telling short-info about provided topic."
)
human_message = HumanMessage(content="horse")

chat.invoke([system_message, human_message])
AIMessage(content='Sure, I can help you with that! Horses are large, powerful mammals that belong to the family Equidae.', response_metadata={'token_usage': {'generated_token_count': 24, 'input_token_count': 24}, 'model_name': 'ibm/granite-13b-chat-v2', 'system_fingerprint': '', 'finish_reason': 'stop_sequence'}, id='run-391776ff-3b38-4768-91e8-ff64177149e5-0')

链接

创建 ChatPromptTemplate 对象,这些对象将负责创建随机问题。

from langchain_core.prompts import ChatPromptTemplate

system = (
"You are a helpful assistant that translates {input_language} to {output_language}."
)
human = "{input}"
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
API 参考:ChatPromptTemplate

提供输入并运行链。

chain = prompt | chat
chain.invoke(
{
"input_language": "English",
"output_language": "German",
"input": "I love Python",
}
)
AIMessage(content='Ich liebe Python.', response_metadata={'token_usage': {'generated_token_count': 5, 'input_token_count': 23}, 'model_name': 'ibm/granite-13b-chat-v2', 'system_fingerprint': '', 'finish_reason': 'stop_sequence'}, id='run-1b1ccf5d-0e33-46f2-a087-e2a136ba1fb7-0')

模型输出流式传输

您可以流式传输模型输出。

system_message = SystemMessage(
content="You are a helpful assistant which telling short-info about provided topic."
)
human_message = HumanMessage(content="moon")

for chunk in chat.stream([system_message, human_message]):
print(chunk.content, end="")
The moon is a natural satellite of the Earth, and it has been a source of fascination for humans for centuries.

批量模型输出

您可以批量处理模型输出。

message_1 = [
SystemMessage(
content="You are a helpful assistant which telling short-info about provided topic."
),
HumanMessage(content="cat"),
]
message_2 = [
SystemMessage(
content="You are a helpful assistant which telling short-info about provided topic."
),
HumanMessage(content="dog"),
]

chat.batch([message_1, message_2])
[AIMessage(content='Cats are domestic animals that belong to the Felidae family.', response_metadata={'token_usage': {'generated_token_count': 13, 'input_token_count': 24}, 'model_name': 'ibm/granite-13b-chat-v2', 'system_fingerprint': '', 'finish_reason': 'stop_sequence'}, id='run-71a8bd7a-a1aa-497b-9bdd-a4d6fe1d471a-0'),
AIMessage(content='Dogs are domesticated mammals of the family Canidae, characterized by their adaptability to various environments and social structures.', response_metadata={'token_usage': {'generated_token_count': 24, 'input_token_count': 24}, 'model_name': 'ibm/granite-13b-chat-v2', 'system_fingerprint': '', 'finish_reason': 'stop_sequence'}, id='run-22b7a0cb-e44a-4b68-9921-872f82dcd82b-0')]

工具调用

ChatWatsonx.bind_tools()

请注意,ChatWatsonx.bind_tools 处于 Beta 阶段,因此目前我们仅支持 mistralai/mixtral-8x7b-instruct-v01 模型。

您还应该重新定义 max_new_tokens 参数以获取整个模型响应。默认情况下,max_new_tokens 设置为 20。

from langchain_ibm import ChatWatsonx

parameters = {"max_new_tokens": 200}

chat = ChatWatsonx(
model_id="mistralai/mixtral-8x7b-instruct-v01",
url="https://us-south.ml.cloud.ibm.com",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)
from pydantic import BaseModel, Field


class GetWeather(BaseModel):
"""Get the current weather in a given location"""

location: str = Field(..., description="The city and state, e.g. San Francisco, CA")


llm_with_tools = chat.bind_tools([GetWeather])
ai_msg = llm_with_tools.invoke(
"Which city is hotter today: LA or NY?",
)
ai_msg
AIMessage(content='', additional_kwargs={'function_call': {'type': 'function'}, 'tool_calls': [{'type': 'function', 'function': {'name': 'GetWeather', 'arguments': '{"location": "Los Angeles"}'}, 'id': None}, {'type': 'function', 'function': {'name': 'GetWeather', 'arguments': '{"location": "New York"}'}, 'id': None}]}, response_metadata={'token_usage': {'generated_token_count': 99, 'input_token_count': 320}, 'model_name': 'mistralai/mixtral-8x7b-instruct-v01', 'system_fingerprint': '', 'finish_reason': 'eos_token'}, id='run-38627104-f2ac-4edb-8390-d5425fb65979-0', tool_calls=[{'name': 'GetWeather', 'args': {'location': 'Los Angeles'}, 'id': None}, {'name': 'GetWeather', 'args': {'location': 'New York'}, 'id': None}])

AIMessage.tool_calls

请注意,AIMessage 具有 tool_calls 属性。它以模型提供商无关的标准化 ToolCall 格式包含在内。

ai_msg.tool_calls
[{'name': 'GetWeather', 'args': {'location': 'Los Angeles'}, 'id': None},
{'name': 'GetWeather', 'args': {'location': 'New York'}, 'id': None}]

此页面是否有帮助?


您还可以留下详细的反馈 在 GitHub 上.