>WatsonxLLM 是 IBM 的封装 watsonx.ai 基础模型。
此示例展示如何与 watsonx.ai 模型通信,使用 LangChain.
概述
集成详情
| 类 | 包 | 本地 | 可序列化 | JS 支持 | 下载量 | 版本 |
|---|---|---|---|---|---|---|
WatsonxLLM | langchain-ibm | ❌ | ❌ | ✅ | !PyPI - 下载量 | !PyPI - 版本 |
设置
要访问 IBM watsonx.ai 模型,您需要创建一个 IBM watsonx.ai 账户,获取 API 密钥,并安装 langchain-ibm 集成包。
凭证
下面的单元格定义了使用 watsonx 基础模型推理所需的凭证。
Action: 提供 IBM Cloud 用户 API 密钥。详情请参阅 管理用户 API 密钥.
from getpass import getpass
watsonx_api_key = getpass()
os.environ["WATSONX_APIKEY"] = watsonx_api_key
此外,您还可以通过环境变量传递额外的密钥。
os.environ["WATSONX_URL"] = "your service instance url"
os.environ["WATSONX_TOKEN"] = "your token for accessing the CLOUD or 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 package:
!pip install -qU langchain-ibm
实例化
您可能需要调整模型 parameters 参数以适应不同的模型或任务。详情请参阅 文档.
parameters = {
"decoding_method": "sample",
"max_new_tokens": 100,
"min_new_tokens": 1,
"temperature": 0.5,
"top_k": 50,
"top_p": 1,
}
使用之前设置的参数初始化 WatsonxLLM 类。
注意:
- - 要为 API 调用提供上下文,您必须添加
project_idorspace_id。更多信息请参阅 文档. - - 根据您配置的服务实例所在的区域,使用 Watsonx Python SDK 云设置指南.
在此示例中,我们将使用 project_id 和达拉斯 URL。
您需要指定 model_id 将用于推理。所有可用模型请参阅 文档.
from langchain_ibm import WatsonxLLM
watsonx_llm = WatsonxLLM(
model_id="ibm/granite-13b-instruct-v2",
url="https://us-south.ml.cloud.ibm.com",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)
您也可以使用 Cloud Pak for Data 凭证。详情请参阅 文档.
watsonx_llm = WatsonxLLM(
model_id="ibm/granite-13b-instruct-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 之前调优模型的 ID。完整的模型调优工作流程请参阅 使用 TuneExperiment 和 PromptTuner.
watsonx_llm = WatsonxLLM(
deployment_id="PASTE YOUR DEPLOYMENT_ID HERE",
url="https://us-south.ml.cloud.ibm.com",
project_id="PASTE YOUR PROJECT_ID HERE",
params=parameters,
)
对于某些需求,可以将 IBM 的 APIClient 对象传入 WatsonxLLM class.
from ibm_watsonx_ai import APIClient
api_client = APIClient(...)
watsonx_llm = WatsonxLLM(
model_id="ibm/granite-13b-instruct-v2",
watsonx_client=api_client,
)
您还可以将 IBM 的 ModelInference 对象传入 WatsonxLLM class.
from ibm_watsonx_ai.foundation_models import ModelInference
model = ModelInference(...)
watsonx_llm = WatsonxLLM(watsonx_model=model)
调用
要获取补全结果,您可以直接使用字符串提示调用模型。
# Calling a single prompt
watsonx_llm.invoke("Who is man's best friend?")
"Man's best friend is his dog. Dogs are man's best friend because they are always there for you, they never judge you, and they love you unconditionally. Dogs are also great companions and can help reduce stress levels. "
# Calling multiple prompts
watsonx_llm.generate(
[
"The fastest dog in the world?",
"Describe your chosen dog breed",
]
)
LLMResult(generations=[[Generation(text='The fastest dog in the world is the greyhound. Greyhounds can run up to 45 mph, which is about the same speed as a Usain Bolt.', generation_info={'finish_reason': 'eos_token'})], [Generation(text='The Labrador Retriever is a breed of retriever that was bred for hunting. They are a very smart breed and are very easy to train. They are also very loyal and will make great companions. ', generation_info={'finish_reason': 'eos_token'})]], llm_output={'token_usage': {'generated_token_count': 82, 'input_token_count': 13}, 'model_id': 'ibm/granite-13b-instruct-v2', 'deployment_id': None}, run=[RunInfo(run_id=UUID('750b8a0f-8846-456d-93d0-e039e95b1276')), RunInfo(run_id=UUID('aa4c2a1c-5b08-4fcf-87aa-50228de46db5'))], type='LLMResult')
流式传输模型输出
您可以流式传输模型输出。
stream = watsonx_llm.stream_events(
"Describe your favorite breed of dog and why it is your favorite.",
version="v3",
)
for token in stream.text:
print(token, end="")
My favorite breed of dog is a Labrador Retriever. They are my favorite breed because they are my favorite color, yellow. They are also very smart and easy to train.
链接
创建 PromptTemplate 负责创建随机问题的对象。
from langchain_core.prompts import PromptTemplate
template = "Generate a random question about {topic}: Question: "
prompt = PromptTemplate.from_template(template)
提供主题并运行链。
llm_chain = prompt | watsonx_llm
topic = "dog"
llm_chain.invoke(topic)
'What is the origin of the name "Pomeranian"?'
API 参考
有关所有 WatsonxLLM 功能和配置的详细文档,请访问 API 参考.