跳到主要内容
Open In ColabOpen on GitHub

ChatBedrock

本文档将帮助您开始使用 AWS Bedrock 聊天模型。Amazon Bedrock 是一项完全托管的服务,通过单一 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型 (FM) 选择,同时提供构建生成式 AI 应用所需的广泛功能,以确保安全性、隐私和负责任的 AI。使用 Amazon Bedrock,您可以轻松地为您的用例实验和评估顶级 FM,使用微调和检索增强生成 (RAG) 等技术使用您的数据私密地定制它们,并构建使用您的企业系统和数据源执行任务的代理。由于 Amazon Bedrock 是无服务器的,您无需管理任何基础设施,并且可以使用您熟悉的 AWS 服务安全地将生成式 AI 功能集成和部署到您的应用中。

AWS Bedrock 维护着一个 Converse API,它为 Bedrock 模型提供统一的对话界面。此 API 尚不支持自定义模型。您可以在此处查看所有支持的模型列表

信息

我们建议不需要使用自定义模型用户使用 Converse API。可以通过 ChatBedrockConverse 访问它。

有关所有 Bedrock 功能和配置的详细文档,请参阅 API 参考

概述

集成详情

类别本地可序列化JS 支持包下载量最新包版本
ChatBedrocklangchain-aws测试版PyPI - DownloadsPyPI - Version
ChatBedrockConverselangchain-aws测试版PyPI - DownloadsPyPI - Version

模型特性

以下内容适用于 ChatBedrockChatBedrockConverse

工具调用结构化输出JSON 模式图片输入音频输入视频输入逐令牌流式传输原生异步令牌使用量对数概率

设置

要访问 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 ChatBedrockConverse

llm = ChatBedrockConverse(
model_id="anthropic.claude-3-5-sonnet-20240620-v1:0",
# temperature=...,
# max_tokens=...,
# other params...
)
API 参考:ChatBedrockConverse

调用

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="J'adore la programmation.", additional_kwargs={}, response_metadata={'ResponseMetadata': {'RequestId': 'b07d1630-06f2-44b1-82bf-e82538dd2215', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Wed, 16 Apr 2025 19:35:34 GMT', 'content-type': 'application/json', 'content-length': '206', 'connection': 'keep-alive', 'x-amzn-requestid': 'b07d1630-06f2-44b1-82bf-e82538dd2215'}, 'RetryAttempts': 0}, 'stopReason': 'end_turn', 'metrics': {'latencyMs': [488]}, 'model_name': 'anthropic.claude-3-5-sonnet-20240620-v1:0'}, id='run-d09ed928-146a-4336-b1fd-b63c9e623494-0', usage_metadata={'input_tokens': 29, 'output_tokens': 11, 'total_tokens': 40, 'input_token_details': {'cache_creation': 0, 'cache_read': 0}})
print(ai_msg.content)
J'adore la programmation.

流式传输

请注意,ChatBedrockConverse 在流式传输时会发出内容块

for chunk in llm.stream(messages):
print(chunk)
content=[] additional_kwargs={} response_metadata={} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[{'type': 'text', 'text': 'J', 'index': 0}] additional_kwargs={} response_metadata={} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[{'type': 'text', 'text': "'adore la", 'index': 0}] additional_kwargs={} response_metadata={} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[{'type': 'text', 'text': ' programmation.', 'index': 0}] additional_kwargs={} response_metadata={} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[{'index': 0}] additional_kwargs={} response_metadata={} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[] additional_kwargs={} response_metadata={'stopReason': 'end_turn'} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd'
content=[] additional_kwargs={} response_metadata={'metrics': {'latencyMs': 600}, 'model_name': 'anthropic.claude-3-5-sonnet-20240620-v1:0'} id='run-d0e0836e-7146-4c3d-97c7-ad23dac6febd' usage_metadata={'input_tokens': 29, 'output_tokens': 11, 'total_tokens': 40, 'input_token_details': {'cache_creation': 0, 'cache_read': 0}}

您可以使用输出上的 .text() 方法筛选为文本

for chunk in llm.stream(messages):
print(chunk.text(), end="|")
|J|'adore la| programmation.||||

提示缓存

Bedrock 支持对提示的元素进行缓存,包括消息和工具。这使您能够重复使用大型文档、指令、少样本文档和其他数据,以降低延迟和成本。

注意

并非所有模型都支持提示缓存。请在此处查看支持的模型:此处

要在提示的元素上启用缓存,请使用 cachePoint 键标记其关联的内容块。请参见下面的示例

import requests
from langchain_aws import ChatBedrockConverse

llm = ChatBedrockConverse(model="us.anthropic.claude-3-7-sonnet-20250219-v1:0")

# Pull LangChain readme
get_response = requests.get(
"https://raw.githubusercontent.com/langchain-ai/langchain/master/README.md"
)
readme = get_response.text

messages = [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What's LangChain, according to its README?",
},
{
"type": "text",
"text": f"{readme}",
},
{
"cachePoint": {"type": "default"},
},
],
},
]

response_1 = llm.invoke(messages)
response_2 = llm.invoke(messages)

usage_1 = response_1.usage_metadata["input_token_details"]
usage_2 = response_2.usage_metadata["input_token_details"]

print(f"First invocation:\n{usage_1}")
print(f"\nSecond:\n{usage_2}")
API 参考:ChatBedrockConverse
First invocation:
{'cache_creation': 1528, 'cache_read': 0}

Second:
{'cache_creation': 0, 'cache_read': 1528}

链式调用

我们可以像这样将模型与提示模板链式连接起来

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="Here's the German translation:\n\nIch liebe das Programmieren.", additional_kwargs={}, response_metadata={'ResponseMetadata': {'RequestId': '1de3d7c0-8062-4f7e-bb8a-8f725b97a8b0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Wed, 16 Apr 2025 19:32:51 GMT', 'content-type': 'application/json', 'content-length': '243', 'connection': 'keep-alive', 'x-amzn-requestid': '1de3d7c0-8062-4f7e-bb8a-8f725b97a8b0'}, 'RetryAttempts': 0}, 'stopReason': 'end_turn', 'metrics': {'latencyMs': [719]}, 'model_name': 'anthropic.claude-3-5-sonnet-20240620-v1:0'}, id='run-7021fcd7-704e-496b-a92e-210139614402-0', usage_metadata={'input_tokens': 23, 'output_tokens': 19, 'total_tokens': 42, 'input_token_details': {'cache_creation': 0, 'cache_read': 0}})

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