ChatBedrock
本文档将帮助您开始使用 AWS Bedrock 聊天模型(chat models)。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 尚不支持自定义模型。您可以在此处查看所有受支持的模型列表(models that are supported here)。
我们建议不使用自定义模型的用户使用 Converse API。可以通过 ChatBedrockConverse 进行访问。
有关所有 Bedrock 功能和配置的详细文档,请参阅 API 参考。
概述
集成详情
| 类名 | 包 | 本地化 | 可序列化 | JS 支持 | 包下载次数 | 包最新版本 |
|---|---|---|---|---|---|---|
| ChatBedrock | langchain-aws | ❌ | beta | ✅ | ||
| ChatBedrockConverse | langchain-aws | ❌ | beta | ✅ |
模型特性
以下适用于 ChatBedrock 和 ChatBedrockConverse。
| 工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | Token级流式输出 | 原生异步 | Token使用量跟踪 | 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 ChatBedrockConverse
llm = ChatBedrockConverse(
model_id="anthropic.claude-3-5-sonnet-20240620-v1:0",
# temperature=...,
# max_tokens=...,
# 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="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.||||
Prompt Caching
Bedrock 支持缓存您的 Prompt 中的元素,包括消息和工具。这允许您重新使用大型文档、说明、少量样本文件及其他数据,以降低延迟和成本。
并非所有模型都支持 Prompt Caching。支持的模型请参见此处。
要为 Prompt 的某个元素启用缓存,请使用 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}")
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.",
}
)
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.com/api_reference/aws/chat_models/langchain_aws.chat_models.bedrock.ChatBedrock.html
有关所有 ChatBedrockConverse 功能和配置的详细文档,请访问 API 参考:https://python.langchain.com/api_reference/aws/chat_models/langchain_aws.chat_models.bedrock_converse.ChatBedrockConverse.html
Related
- Chat model conceptual guide
- Chat model how-to guides