ChatWatsonx
ChatWatsonx 是 IBM watsonx.ai 基础模型的包装器。
这些示例的目的是展示如何使用 LangChain
LLM API 与 watsonx.ai
模型进行通信。
概述
集成详情
类 | 包 | 本地 | 可序列化 | JS 支持 | 包下载 | 包最新版本 |
---|---|---|---|---|---|---|
ChatWatsonx | ❌ | ❌ | ❌ |
模型特性
工具调用 | 结构化输出 | 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_id
或space_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)])
提供输入并运行链。
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}]