跳至主要内容

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 支持包下载包最新版本
ChatBedrocklangchain-aws测试版PyPI - DownloadsPyPI - Version

模型功能

工具调用结构化输出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.",
}
)
API 参考:ChatPromptTemplate
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="|")
API 参考:StrOutputParser
|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


此页面对您有帮助吗?


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