本页还没有译文
本页 68 段还没译成简体中文,下面显示的是英文原文。ChatBedrock integration
还没翻译译自英文(docs.langchain.com)本页 68 段都还没译
This doc will help you get started with AWS Bedrock chat models. Amazon Bedrock is a fully managed service that offers a choice of high-performing foundation models (FMs) from leading AI companies like AI21 Labs, Anthropic, Cohere, Meta, Stability AI, and Amazon via a single API, along with a broad set of capabilities you need to build generative AI applications with security, privacy, and responsible AI. Using Amazon Bedrock, you can easily experiment with and evaluate top FMs for your use case, privately customize them with your data using techniques such as fine-tuning and Retrieval Augmented Generation (RAG), and build agents that execute tasks using your enterprise systems and data sources. Since Amazon Bedrock is serverless, you don't have to manage any infrastructure, and you can securely integrate and deploy generative AI capabilities into your applications using the AWS services you are already familiar with.
AWS Bedrock maintains a Converse API which provides a unified conversational interface for Bedrock models. This API does not yet support custom models. You can see a list of all models that are supported here.
Info
We recommend the Converse API for users who do not need to use custom models. It can be accessed using ChatBedrockConverse.
Info
Anthropic models on Bedrock
For Anthropic models specifically, you can use ChatAnthropicBedrock which extends ChatAnthropic and provides the same API while running on AWS Bedrock. See the ChatAnthropicBedrock section below for details.
For detailed documentation of all Bedrock features and configurations head to the API reference.
Overview
Integration details
| Class | Package | Serializable | JS support | Downloads | Version |
|---|---|---|---|---|---|
ChatBedrock | langchain-aws | beta | ✅ | ||
ChatBedrockConverse | langchain-aws | beta | ✅ |
Model features
The below apply to both ChatBedrock and ChatBedrockConverse.
| Tool calling | Structured output | Image input | Audio input | Video input | Token-level streaming | Native async | Token usage | Logprobs |
|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
Setup
To access Bedrock models you'll need to create an AWS account, set up the Bedrock API service, get an access key ID and secret key, and install the langchain-aws integration package.
Credentials
Head to the AWS docs to sign up to AWS and setup your credentials.
Alternatively, ChatBedrockConverse will read from the following environment variables by default:
# os.environ["AWS_ACCESS_KEY_ID"] = "..."
# os.environ["AWS_SECRET_ACCESS_KEY"] = "..."
# Not required unless using temporary credentials.
# os.environ["AWS_SESSION_TOKEN"] = "..."You'll also need to turn on model access for your account, which you can do by following these instructions.
To enable automated tracing of your model calls, set your LangSmith API key:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"Installation
The LangChain Bedrock integration lives in the langchain-aws package:
pip install -qU langchain-awsInstantiation
Now we can instantiate our model object and generate chat completions:
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(
model_id="us.anthropic.claude-sonnet-4-6",
# region_name=...,
# aws_access_key_id=...,
# aws_secret_access_key=...,
# aws_session_token=...,
# temperature=...,
# max_tokens=...,
# other params...
)Invocation
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_msgAIMessage(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': 'us.anthropic.claude-sonnet-4-6'}, 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.Streaming
Use stream_events to stream tokens directly:
stream = llm.stream_events(messages, version="v3")
for token in stream.text:
print(token, end="|")J|'adore la| programmation.|Streaming tool calls and structured output
When using tool calling or structured output with Anthropic models, tool call arguments stream as partial JSON chunks by default.
To reduce latency and get more evenly distributed chunks, you can enable Anthropic's fine-grained tool streaming beta:
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(
model_id="us.anthropic.claude-sonnet-4-5-20250514-v1:0",
additional_model_request_fields={
"anthropic_beta": ["fine-grained-tool-streaming-2025-05-14"]
}
)Note
Fine-grained tool streaming is supported on Claude 4.5+ models. See the Claude documentation for more details.
Warning
When using fine-grained tool streaming, you may receive invalid or partial JSON inputs. Make sure to account for these edge cases in your code.
Extended thinking
This guide focuses on implementing Extended Thinking using AWS Bedrock with LangChain's ChatBedrockConverse integration.
Supported models
Extended Thinking is available for the following Claude models on AWS Bedrock:
| Model | Model ID |
|---|---|
| Claude Opus 4 | anthropic.claude-opus-4-20250514-v1:0 |
| Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 |
| Claude 3.7 Sonnet | us.anthropic.claude-3-7-sonnet-20250219-v1:0 |
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(
model_id="us.anthropic.claude-sonnet-4-20250514-v1:0",
region_name="us-west-2",
max_tokens=4096,
additional_model_request_fields={
"thinking": {"type": "enabled", "budget_tokens": 1024},
},
)
ai_msg = llm.invoke(messages)
ai_msg.content_blocks[{'type': 'reasoning',
'reasoning': 'The user wants me to translate "I love programming" from English to French.\n\n"I love" translates to "J\'aime" in French.\n"Programming" translates to "la programmation" in French.\n\nSo the full translation would be "J\'aime la programmation."',
'extras': {'signature': 'EpkDCkgIBxABGAIqQGI0KGz8LoVaFwqSAYPN7N+FecI1ZGtb0zpfPr5F8Sb1yxtQHQlmbKUS8JByenWCFGpRKigNaQh1+rLZ59GEX/sSDB+6gxZAT24DJrq4pxoMySVhzwALI6FEC+1UIjDcozOIznjRTYlDWPcYUNYvpt8rwF9IHE38Ha2uqVY8ROJa1tjOMk3OEnbSoV13Pa8q/gETsz+1UwxNX5tgxOa+38jLEryhdFyyAk2JDLrmluZBM6TMrtyzALQvVbZqjpkKAXdtcVCrsz8zUo/LZT1B/92Ukux2dE0O1ZOdcW3tORK+NFLSBaWuqigcFUTDH9XNQoHd2WpQNhl+ypnCItbL2wDRscN/tEBkgGMQugvPmL0LAuLKBmsRKStKRi/RMYGJb3Ft2yEDsRnYNJBJ6TtgxXFvjDwqc/UaI9cIcTxdoVVlsPFsYccpVwirzwAOiz6CSQ1oOQTYJVT90eQ71QW74n1ubbFIZAvDBKk0KG8jK1FGx4FpuuZyFhBpXtfrgOCdrlVSAO/EE9fKCbP9FlhPbRgB'}},
{'type': 'text', 'text': "J'aime la programmation."}]How extended thinking works
When extended thinking is turned on, Claude creates thinking content blocks where it outputs its internal reasoning. Claude incorporates insights from this reasoning before crafting a final response. The API response will include thinking content blocks, followed by text content blocks.
next_messages = messages + [("ai", ai_msg.content), ("human", "I love AI")]
ai_msg = llm.invoke(next_messages)
ai_msg.content_blocks[{'type': 'reasoning',
'reasoning': 'The user wants me to translate "I love AI" from English to French. \n\n"I love" translates to "J\'aime" in French.\n"AI" stands for "Artificial Intelligence" which in French is "Intelligence Artificielle" or "IA" (the French abbreviation).\n\nSo the translation would be "J\'aime l\'IA" or "J\'aime l\'intelligence artificielle".\n\nI think using the abbreviation "IA" would be more natural and concise, similar to how the user used "AI" in English.',
'extras': {'signature': 'EuAECkgIBxABGAIqQLWbkzJ8RzfxhVN1BhfRj5+On8/M9Utt0yH9kvj9P2zlQkO5xloq6I/AiEeArwwdJeqJVcLRjqLtinh6HIBbSDwSDFwt0GL409TqjSZNBhoMPQtJdZmx/uiPrLHUIjCJXyyjgSK3vzbcSEnsvo7pdpoo+waUFrAPDCGL/CIN5u7c8ueLCuCn8W0qGGc+BNgqxQO6UbV11RnMdnUyFmVgTPJErfzBr6U6KyUHd5dJmFWIUVpbbxT2C9vawpbKMPThaRW3BhItEafWGUpPqztzFhqJpSegXtXehIn5iY4yHzTUZ5FPdkNIuAmTsFNNGxiKr9H/gqknvQ2B7I4ushRHLg+drU4cH18EGZlAo5Tu1O9yH5GbweIEew4Uv7oWje+R8TIku0OFVhrbnQqqqukBicMV2JRifUYuz6dYM1UDYS8SfxQ1MmcVY5t1L9LDpoL4F/CtpL8/6YDsB/FosU37Qc1qm+D+pKEPTYnyxaP5tRXqTBfqUIiNJGqr9Egl17Akoy6NIv234rPfuf8HjTcu5scZoPGhOreG5rWxJ7AbTCIXgGWqpcf2TqDtniOac3jW4OtnlID9fsloKNq6Y5twgXHDR47c4Jh6vWmucZiIlL6hkklQzt5To6vOnqcTOGUtuCis8Y2wRzlNGeR2d8A+ocYm7mBvR/Y5DvDgstJwB/vCLoQlIL+jm6+h8k6EX/24GqOsh5hxsS5IsNIob/p8tr4TBbc9noCoUSYkMhbQPi2xpRrNML9GUIo7Skbh1ni67uqeShj1xuUrFG+cN6x4yzDaRb59LCAYAQ=='}},
{'type': 'text', 'text': "J'aime l'IA."}]Reasoning effort
Note
reasoning_effort requires langchain-aws>=1.7.0.
ChatBedrockConverse supports the standard reasoning_effort parameter for models with configurable reasoning, including Claude (Opus 5, Sonnet 5), Amazon Nova 2, and OpenAI gpt-oss and Moonshot Kimi K2 models on Bedrock. Like temperature, it can be set at model construction or per invocation, and it is translated into the request format for the underlying model family:
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(
model="us.anthropic.claude-sonnet-5",
region_name="us-west-2",
reasoning_effort="high",
)
response = llm.invoke("What is the cube root of 50.653?")Supported effort levels vary by model. Check a model's profile for the levels it supports:
llm.profile["reasoning_effort_levels"] # e.g. ['low', 'medium', 'high', 'xhigh', 'max']An explicit additional_model_request_fields value takes precedence over the fields derived from reasoning_effort. Models without a known translation ignore reasoning_effort and emit a warning.
Prompt caching
Bedrock supports caching of elements of your prompts, including messages and tools. This allows you to reuse large documents, instructions, few-shot documents, and other data to reduce latency and costs.
Note
Not all models support prompt caching. See Bedrock prompt caching supported models.
Note
For LangChain agents, use BedrockPromptCachingMiddleware to let LangChain optimize stable system prompt and tool content. For direct model calls, use manual cachePoint blocks or invocation-level cache_control, depending on the model and API.
To enable caching on an element of a prompt, mark its associated content block using the cachePoint key. See example below:
import requests
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(model="us.anthropic.claude-sonnet-4-6")
# Pull LangChain readme
get_response = requests.get(
"https://raw.githubusercontent.com/langchain-ai/langchain/b476fdb54aa6e6f5f0b24a68c2f4a94e43b369f9/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}Citations
Citations can be generated if they are enabled on input documents. Documents can be specified in Bedrock's native format or LangChain's standard types:
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(model="us.anthropic.claude-sonnet-4-20250514-v1:0")
pdf_path = "path/to/your/file.pdf"
with open(pdf_path, "rb") as f:
pdf_bytes = f.read()
document = {
"document": {
"format": "pdf",
"source": {"bytes": pdf_bytes},
"name": "my-pdf",
"citations": {"enabled": True}, # [!code highlight]
},
}
response = llm.invoke(
[
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this document."},
document,
]
},
]
)
response.content_blocksimport base64
from langchain_aws import ChatBedrockConverse
llm = ChatBedrockConverse(model="us.anthropic.claude-sonnet-4-20250514-v1:0")
pdf_path = "path/to/your/file.pdf"
with open(pdf_path, "rb") as f:
pdf_base64 = base64.b64encode(f.read()).decode("utf-8")
document = {
"type": "file",
"mime_type": "application/pdf",
"base64": pdf_base64,
"name": "my-pdf", # Converse requires a filename
"citations": {"enabled": True}, # [!code highlight]
}
response = llm.invoke(
[
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this document."},
document,
]
},
]
)
response.content_blocksChatAnthropicBedrock
For AWS Bedrock users specifically interested in Anthropic models, langchain-aws provides ChatAnthropicBedrock. This class extends ChatAnthropic and provides the same interface while running on AWS Bedrock infrastructure. This takes advantage of the Anthropic SDK's Bedrock clients.
Installation
Install langchain-aws with the anthropic extra to get the required dependencies:
pip install --upgrade "langchain-aws[anthropic]"uv add "langchain-aws[anthropic]"Usage
ChatAnthropicBedrock supports the same features and parameters as ChatAnthropic. You can initialize it with AWS-specific parameters:
from langchain_aws import ChatAnthropicBedrock
model = ChatAnthropicBedrock(
model="us.anthropic.claude-haiku-4-5-20251001-v1:0",
region_name="us-west-2",
aws_access_key_id="...",
aws_secret_access_key="...",
aws_session_token="...",
)AWS credentials can also be read from environment variables or discovered automatically by boto3:
# Set environment variables
# os.environ["AWS_ACCESS_KEY_ID"] = "..."
# os.environ["AWS_SECRET_ACCESS_KEY"] = "..."
# os.environ["AWS_REGION"] = "..."
from langchain_aws import ChatAnthropicBedrock
model = ChatAnthropicBedrock(model="us.anthropic.claude-haiku-4-5-20251001-v1:0")For detailed documentation on available parameters and features, refer to the ChatAnthropic integration page.
API reference
For detailed documentation of all ChatBedrock, ChatBedrockConverse, and ChatAnthropicBedrock features and configurations head to the API reference.