ChatBedrock
本文档将帮助您开始使用 AWS Bedrock 聊天模型。Amazon Bedrock 是一项完全托管的服务,它通过单个 API 提供来自领先 AI 公司(如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon)的选择性高性能基础模型 (FM),以及构建安全、隐私和负责任的 AI 生成的应用程序所需的一系列广泛功能。使用 Amazon Bedrock,您可以轻松地试验和评估适合您的用例的顶级 FM,使用微调和检索增强生成 (RAG) 等技术私下使用您的数据对其进行自定义,并构建使用您的企业系统和数据源执行任务的代理。由于 Amazon Bedrock 是无服务器的,因此您无需管理任何基础设施,并且可以使用您已熟悉的 AWS 服务将生成式 AI 功能安全地集成和部署到您的应用程序中。
有关可通过 Bedrock 访问的模型的更多信息,请访问 AWS 文档。
有关所有 ChatBedrock 功能和配置的详细文档,请访问 API 参考。
概述
集成详细信息
类 | 包 | 本地 | 可序列化 | JS 支持 | 包下载 | 包最新版本 |
---|---|---|---|---|---|---|
ChatBedrock | langchain-aws | ❌ | 测试版 | ✅ |
模型功能
工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | 令牌级流 | 原生异步 | 令牌使用情况 | Logprobs |
---|---|---|---|---|---|---|---|---|---|
✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
设置
要访问 Bedrock 模型,您需要创建一个 AWS 帐户,设置 Bedrock API 服务,获取访问密钥 ID 和密钥,并安装 langchain-aws
集成包。
凭据
访问 AWS 文档 注册 AWS 并设置您的凭据。您还需要为您的帐户开启模型访问权限,您可以按照 这些说明 进行操作。
如果您希望自动跟踪您的模型调用,您还可以通过取消下方注释设置您的 LangSmith API 密钥
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
安装
LangChain Bedrock 集成位于 langchain-aws
包中
%pip install -qU langchain-aws
实例化
现在我们可以实例化我们的模型对象并生成聊天完成内容
from langchain_aws import ChatBedrock
llm = ChatBedrock(
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
model_kwargs=dict(temperature=0),
# other params...
)
调用
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
ai_msg
AIMessage(content="Voici la traduction en français :\n\nJ'aime la programmation.", additional_kwargs={'usage': {'prompt_tokens': 29, 'completion_tokens': 21, 'total_tokens': 50}, 'stop_reason': 'end_turn', 'model_id': 'anthropic.claude-3-sonnet-20240229-v1:0'}, response_metadata={'usage': {'prompt_tokens': 29, 'completion_tokens': 21, 'total_tokens': 50}, 'stop_reason': 'end_turn', 'model_id': 'anthropic.claude-3-sonnet-20240229-v1:0'}, id='run-fdb07dc3-ff72-430d-b22b-e7824b15c766-0', usage_metadata={'input_tokens': 29, 'output_tokens': 21, 'total_tokens': 50})
print(ai_msg.content)
Voici la traduction en français :
J'aime la programmation.
链式操作
我们可以将我们的模型与提示模板进行 链式操作,如下所示
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant that translates {input_language} to {output_language}.",
),
("human", "{input}"),
]
)
chain = prompt | llm
chain.invoke(
{
"input_language": "English",
"output_language": "German",
"input": "I love programming.",
}
)
AIMessage(content='Ich liebe Programmieren.', additional_kwargs={'usage': {'prompt_tokens': 23, 'completion_tokens': 11, 'total_tokens': 34}, 'stop_reason': 'end_turn', 'model_id': 'anthropic.claude-3-sonnet-20240229-v1:0'}, response_metadata={'usage': {'prompt_tokens': 23, 'completion_tokens': 11, 'total_tokens': 34}, 'stop_reason': 'end_turn', 'model_id': 'anthropic.claude-3-sonnet-20240229-v1:0'}, id='run-5ad005ce-9f31-4670-baa0-9373d418698a-0', usage_metadata={'input_tokens': 23, 'output_tokens': 11, 'total_tokens': 34})
Bedrock Converse API
AWS 最近发布了 Bedrock Converse API,该 API 为 Bedrock 模型提供了统一的对话界面。此 API 尚未支持自定义模型。您可以查看 此处 的所有支持模型的列表。为了提高可靠性,ChatBedrock 集成将在 Bedrock Converse API 与现有 Bedrock API 功能相同后立即切换到使用 Bedrock Converse API。在此之前,已发布了单独的 ChatBedrockConverse 集成。
我们建议使用 ChatBedrockConverse
针对不需要使用自定义模型的用户。
您可以像这样使用它
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(
model="anthropic.claude-3-sonnet-20240229-v1:0",
temperature=0,
max_tokens=None,
# other params...
)
llm.invoke(messages)
AIMessage(content="Voici la traduction en français :\n\nJ'aime la programmation.", response_metadata={'ResponseMetadata': {'RequestId': '4fcbfbe9-f916-4df2-b0bd-ea1147b550aa', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Wed, 21 Aug 2024 17:23:49 GMT', 'content-type': 'application/json', 'content-length': '243', 'connection': 'keep-alive', 'x-amzn-requestid': '4fcbfbe9-f916-4df2-b0bd-ea1147b550aa'}, 'RetryAttempts': 0}, 'stopReason': 'end_turn', 'metrics': {'latencyMs': 672}}, id='run-77ee9810-e32b-45dc-9ccb-6692253b1f45-0', usage_metadata={'input_tokens': 29, 'output_tokens': 21, 'total_tokens': 50})
流式传输
请注意,ChatBedrockConverse
在流式传输时会发出内容块
for chunk in llm.stream(messages):
print(chunk)
content=[] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'Vo', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'ici', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' la', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' tra', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'duction', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' en', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' français', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' :', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': '\n\nJ', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': "'", 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'a', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'ime', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' la', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': ' programm', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': 'ation', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'type': 'text', 'text': '.', 'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[{'index': 0}] id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[] response_metadata={'stopReason': 'end_turn'} id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8'
content=[] response_metadata={'metrics': {'latencyMs': 713}} id='run-2c92c5af-d771-4cc2-98d9-c11bbd30a1d8' usage_metadata={'input_tokens': 29, 'output_tokens': 21, 'total_tokens': 50}
如果需要,可以使用输出解析器来过滤到文本
from langchain_core.output_parsers import StrOutputParser
chain = llm | StrOutputParser()
for chunk in chain.stream(messages):
print(chunk, end="|")
|Vo|ici| la| tra|duction| en| français| :|
J|'|a|ime| la| programm|ation|.||||
API 参考
有关所有 ChatBedrock 功能和配置的详细文档,请访问 API 参考:https://python.langchain.ac.cn/api_reference/aws/chat_models/langchain_aws.chat_models.bedrock.ChatBedrock.html
有关所有 ChatBedrockConverse 功能和配置的详细文档,请访问 API 参考:https://python.langchain.ac.cn/api_reference/aws/chat_models/langchain_aws.chat_models.bedrock_converse.ChatBedrockConverse.html