AWS Bedrock 和 Gemini 企业智能体平台请注意,某些 Anthropic 模型也可以通过 AWS Bedrock 和 Gemini 企业智能体平台访问。查看
ChatBedrock 和 ChatVertexAI 集成,以通过这些服务使用 Anthropic 模型。对于 AWS Bedrock 上的 Anthropic 模型(与 ChatAnthropic 相同的 API),请使用 langchain-aws 的 ChatAnthropicBedrock。概述
集成细节
模型特性
安装
要访问 Anthropic (Claude) 模型,您需要安装langchain-anthropic 集成包并获取一个 Claude API 密钥。
安装
凭证
前往 Claude 控制台 注册并生成一个 Claude API 密钥。完成此操作后,设置ANTHROPIC_API_KEY 环境变量:
实例化
现在我们可以实例化我们的模型对象并生成对话补全:ChatAnthropic] API 参考。
推理地域要控制模型推理运行的位置(数据驻留),在创建 @[
ChatAnthropic] 时传递 inference_geo。有关支持值,请参阅 Anthropic 文档。采样参数
较新的 Claude 模型会拒绝非默认的采样参数。在claude-opus-5、claude-fable-5、claude-opus-4-8、claude-opus-4-7 或 claude-sonnet-5 上将 temperature、top_p 或 top_k 设置为非默认值会返回 400 错误:
调用
调用
调用
流式输出
流式输出
异步
异步
内容块
在使用工具时,扩展思考和其他功能,来自单个 Anthropic @[AIMessage] 的内容可以是单个字符串,也可以是 Anthropic 内容块的列表。
例如,当 Anthropic 模型调用工具时,工具调用是消息内容的一部分(同时也会在标准化的 @[AIMessage.tool_calls] 中暴露):
content_blocks 将以 LangChain 的标准格式渲染内容,该格式在跨其他模型提供者时保持一致。了解更多关于 内容块 的信息。
tool_calls 属性以标准格式访问特定的工具调用:
工具
Anthropic 的工具使用功能允许您定义 Claude 在对话期间可以调用的外部函数。这支持动态信息检索、计算以及与外部系统的交互。 有关如何将工具绑定到您的模型实例的详细信息,请参见 @[ChatAnthropic.bind_tools]。
有关 Claude 的内置工具(代码执行、网络浏览、文件 API 等)的信息,请参阅 内置工具。
严格工具使用
严格工具使用需要
langchain-anthropic>=1.1.0。有关受支持的模型,请参阅 Claude 文档。- 类型不匹配:
passengers: "2"而不是passengers: 2 - 缺少必需字段:遗漏您的函数期望的字段
- 无效的枚举值:超出允许范围的值
- 模式违规:嵌套对象不符合预期结构
- 工具输入严格遵循您的
input_schema - 保证字段类型和必需字段
- 消除对格式错误输入的错误处理
- 使用的工具
name始终来自提供的工具
要启用严格工具使用,请在调用 @[
bind_tools][ChatAnthropic.bind_tools] 时指定 strict=True。
示例:类型安全的预订系统
示例:类型安全的预订系统
考虑一个
passengers 必须是整数的预订系统:输入示例
对于复杂的工具,您可以提供使用示例以帮助 Claude 正确理解如何使用它们。这是通过在工具的extras 参数中设置 input_examples 实现的。
extras 参数还支持:
defer_loading(bool): 按需加载工具,用于 工具搜索 或 会话中期的工具变更cache_control(dict): 为该工具启用 提示词缓存eager_input_streaming(bool): 为该工具启用 细粒度工具流式输出
细粒度工具流式输出
Anthropic 支持 细粒度工具流式输出,在流式传输具有大参数的工具调用时可以减少延迟。 细粒度流式输出在参数数据可用时立即发送,而不是在传输前缓存整个参数值。对于大型工具参数,这可以将初始延迟从 15 秒减少到约 3 秒。 要为应增量流式传输工具参数的工具启用细粒度工具流式输出,请在工具上设置extras={"eager_input_streaming": True}。该值会通过工具定义传递给 Anthropic API。
input_json_delta 块的形式到达 chunk.content。您可以累积这些块来构建完整的工具参数:
程序化工具调用
程序化工具调用需要
langchain-anthropic>=1.3.0。请参阅 Claude 文档 了解支持的模型。- 在您的工具集中包含 代码执行 内置工具
- 在您希望程序化调用的工具上指定
extras={"allowed_callers": ["code_execution_20250825"]}
create_agent 的完整示例。
多模态
Claude 支持图像和 PDF 输入作为内容块,既支持 Anthropic 的原生格式(参见文档中关于 vision 和 PDF 支持 的说明),也支持 LangChain 的 标准格式。支持的输入方法
图像输入
使用 @[HumanMessage] 并以列表内容格式提供文本和图像输入。
PDF 输入
提供文本和 PDF 文件输入。扩展思考
某些 Claude 模型支持 扩展思考 功能,该功能会输出其最终答案所依据的逐步推理过程。 在 Claude 文档 中查看兼容的模型。 要使用扩展思考,在初始化 @[ChatAnthropic] 时指定 thinking 参数。如有需要,它也可以在调用过程中作为参数传递。
对于 Claude Sonnet 及更早版本模型,需要指定一个 Token 预算。对于 Claude Opus 4.6+,可以使用自适应思考功能,该功能会自动确定预算。
努力程度
某些 Claude 模型支持一个 努力程度 功能,该功能控制 Claude 在响应时使用的 Token 数量。这对于在响应质量、延迟和成本之间取得平衡非常有用。模型支持努力程度通常在 Claude Opus 4.6 和 Claude Opus 4.5 上可用。
max 努力程度级别仅在 Claude Opus 4.6 上受支持。xhigh 努力程度级别在 Claude Opus 4.7 上受支持。Anthropic 可能会随着时间的推移添加或调整模型支持——请使用 Claude 努力程度文档 作为事实来源。将
effort 设置为 "high" 与完全省略该参数的行为完全相同。effort 是标准 reasoning_effort 参数的别名,在构建和调用时都适用。如果两者都设置,effort 会优先。
reasoning_effort 需要 langchain-anthropic>=1.5.3。任务预算
Claude Opus 4.7 及更高版本支持 任务预算,这是针对智能体循环(思考、工具调用、工具结果和最终输出)的建议性 Token 目标。模型会看到正在运行的倒计时,并利用它来优先处理工作并优雅地完成。与max_tokens 不同,任务预算不是硬性上限。
任务预算需要
langchain-anthropic>=1.4.1,目前处于 Beta 测试阶段。引用
Anthropic 支持一个 引用 功能,允许 Claude 根据用户提供的源文档将其上下文附加到答案中。 当 文档 或search_result 内容块包含 "citations": {"enabled": True} 时,Claude 可能会在其响应中生成引用。
简单示例
在这个示例中,我们传递了一个 纯文本文档。在后台,Claude 自动分块 输入文本为句子,这些句子用于生成引用。在工具结果中(智能体 RAG)
Claude 支持一个 搜索结果 内容块,表示对知识库或其他自定义源的查询的可引用结果。这些内容块可以以顶部行(如上述示例)和工具结果内的形式传递给 Claude。这允许 Claude 使用工具调用的结果来引用其响应的元素。 为了在工具调用响应中传递搜索结果,定义一个返回search_result 内容块列表的工具,这些内容块以 Anthropic 的原生格式返回。例如:
End to end example with LangGraph
End to end example with LangGraph
这里我们展示了一个端到端的示例,其中我们将样本文档填充到 LangChain 向量存储 中,并给 Claude 配备了一个查询这些文档的工具。此工具接受一个搜索查询和一个
category 字符串字面量,但任何有效的工具签名都可以使用。此示例需要 langchain-openai 和 numpy 已安装:与文本分割器一起使用
Anthropic 还允许您使用 自定义文档 类型指定自己的分割。LangChain 文本分割器 可以用于生成此目的的具有意义的分割。参见以下示例,其中我们分割了 LangChainREADME.md(一个 markdown 文档),并将其作为上下文传递给 Claude:
此示例需要 @[langchain-text-splitters] 已安装:
提示词缓存
Anthropic 支持 缓存 您的提示词中的元素,包括消息、工具定义、工具结果、图像和文档。这允许您重用大型文档、指令、少量样本文档 和其他数据,以减少延迟和成本。 在直接模型调用中启用提示词缓存有两种方法:- 自动缓存:在调用时传递
cache_control(model.invoke(..., cache_control=...))。这是提供者/API 级别的缓存:Anthropic API 将缓存断点应用于最后一个可缓存块,并在对话增长时将其向前移动。 - 显式缓存断点:将
cache_control直接放置在单个内容块上,以实现对缓存内容进行细粒度、直接断点控制。
对于 LangChain 智能体,如果您希望 LangChain 优化稳定的系统提示词和工具内容,请优先使用
AnthropicPromptCachingMiddleware。中间件是 LangChain 智能体/容器的优化,与下面显示的调用级 cache_control 不同,后者镜像 Anthropic API 的行为。自动缓存
自动缓存需要
langchain-anthropic>=1.4.0。cache_control 作为调用参数传递,可自动缓存所有内容,包括最后一个可缓存块。对于具有相同前缀的后续请求,将自动重用缓存内容。随着对话的增长,缓存断点会向前移动,因此无需管理单个 cache_control 标记。
ttl 字段:
显式缓存断点
为了实现细粒度控制,请用cache_control 标记单个内容块。当您需要缓存以不同频率变化的多个部分时,这很有用。
消息
缓存工具
对话应用中的增量缓存
提示词缓存可用于 多轮对话 以维持早期消息的上下文,而无需冗余处理。 我们可以通过用cache_control 标记最终消息来启用增量缓存。Claude 将自动为后续消息使用之前缓存的最长前缀。
下面,我们实现了一个包含此功能的简单聊天机器人。我们遵循 LangChain 的 聊天机器人教程,但添加了一个自定义的 reducer,该 reducer 会自动将每个用户消息中的最后一个内容块标记为 cache_control:
Chatbot with incremental prompt caching
Chatbot with incremental prompt caching
Token 计数
在将消息发送到模型之前,您可以使用 @[get_num_tokens_from_messages()][ChatAnthropic.get_num_tokens_from_messages] 对消息中的 Token 进行计数。这使用了 Anthropic 官方的 Token 计数 API。
消息 Token 计数
消息 Token 计数
工具 Token 计数
工具 Token 计数
您也可以在使用工具时进行 Token 计数:
对话中系统消息
对话中系统消息需要
langchain-anthropic>=1.7.3。SystemMessage] 开头的消息始终放在顶层 system 字段中。ChatAnthropic 在满足以下两个条件时,会在对话中自己的位置发送一个稍后的 SystemMessage:
- 模型支持对话中系统消息。Claude 文档列出了哪些模型支持。
- 消息紧随人类或工具消息之后,且是最后一条消息或后跟 AI 消息。
ChatAnthropic 将消息移入顶层 system 字段并附带警告,该消息适用于整个对话。如果顶层系统消息已填满该字段,ChatAnthropic 会引发 ValueError。
对话中更改工具
对话中工具更改需要
langchain-anthropic>=1.7.4。SystemMessage 还可以添加或删除 Anthropic 的 tool_addition 和 tool_removal 内容块。编辑请求中的 tools 会使整个对话的提示词缓存失效。这些块不会改变 tools,因此缓存的 prefix 仍然匹配。
上述 放置和模型规则 适用。当 ChatAnthropic 无法在适当位置发送消息时,它会带有警告地丢弃工具更改块。
ChatAnthropic 添加了所需的 beta 头部,因此您无需设置 betas。
要在对话中途添加工具,使用 extras={"defer_loading": True} 绑定它,以便 Claude 最初看不到它。然后在 tool_addition 块中按名称引用它:
defer_loading 的工具。
要撤回工具,在 tool_removal 块中引用它。稍后的 tool_addition 可以再次提供它。
tool_definition 内联定义。内联定义处于 beta 版本,仅在 Claude API 上可用。
non_standard 块中,这就是 content_blocks 返回它们的方式。ChatAnthropic 对这两种形式发送相同的请求。
上下文管理
Anthropic 支持上下文管理功能,可自动管理模型的上下文窗口以优化性能和成本。 请参阅 Claude 文档 了解更多详细信息和配置选项。清除工具使用
将工具结果从上下文中清除以减少 Token 使用,同时保留对话流程。上下文管理自
langchain-anthropic>=0.3.21 起得到支持您必须指定 context-management-2025-06-27 beta 标头才能将上下文管理应用于您的模型调用。自动压缩
Claude Opus 4.6 及更高版本支持自动 服务器端压缩,当上下文窗口接近其限制时,会智能地压缩对话历史。这允许更长的对话而无需手动上下文管理。自动压缩要求:
- Claude Opus 4.6 或更高版本
langchain-anthropic>=1.3.0compact-2026-01-12beta 标头
ChatAnthropic 将返回 压缩块,表示提示的状态。这些应在多轮应用程序中将消息历史传递回模型时保留。
结构化输出
结构化输出需要
langchain-anthropic>=1.1.0。请参阅 Claude 文档以了解支持的模型。Individual model calls
Individual model calls
使用
with_structured_output 方法生成结构化模型响应。指定 method="json_schema" 以启用 Anthropic 的原生结构化输出功能;否则,该方法默认使用函数调用。Agent response format
Agent response format
内置工具
Anthropic 支持多种内置的客户端和服务器端 工具。 服务器端工具(例如 web search)会被传递给模型并由 Anthropic 执行。客户端工具(例如 bash tool)需要您在应用程序中实现回调执行逻辑,并将结果返回给模型。 无论哪种情况,您都可以通过在模型实例上使用 @[bind_tools][ChatAnthropic.bind_tools] 来使您的聊天模型访问工具。
重要的是,客户端工具需要您实现执行逻辑。请参考下文的相关章节获取示例。
中间件与工具对于客户端工具(例如 bash、text editor、memory),您可以选择使用 middleware,它们提供生产就绪的实现,包含内置的执行、状态管理和安全策略。当您需要一个即插即用的解决方案时,请使用中间件;当您需要自定义执行逻辑或直接使用 @[
bind_tools][ChatAnthropic.bind_tools] 时,请使用工具(下文有详细说明)。Beta 工具如果将 Beta 工具绑定到您的聊天模型,LangChain 将会自动为您添加所需的 Beta 头部信息。
Bash 工具
Claude 支持一个客户端的 bash 工具,允许它在持久的 bash 会话中执行 shell 命令。这使其能够进行系统操作、脚本执行和命令行自动化。重要提示:你必须提供执行环境LangChain 处理 API 集成(发送/接收工具调用),但 你负责:
- 设置沙盒化的计算环境(Docker、VM 等)
- 实现命令执行和输出捕获
- 在智能体循环中将结果传回 Claude
要求:
- Claude 4 模型或 Claude Sonnet 3.7
- Anthropic type
- create_agent
- Dict
command(必需):要执行的 bash 命令restart(可选):设置为true以重启 bash 会话
代码执行
Claude 可以使用服务器端的 代码执行工具 在沙盒环境中执行代码。自
langchain-anthropic>=1.0.3 起支持 Anthropic 的 2025-08-25 代码执行工具。自 langchain-anthropic>=0.3.14 起支持旧版 2025-05-22 工具。代码沙盒没有互联网访问权限,因此您只能使用环境中预安装的包。有关更多信息,请参阅 Claude 文档。
- Anthropic type
- create_agent
- Dict
Use with Files API
Use with Files API
使用 Files API,Claude 可以编写代码以访问文件进行数据分析和其他用途。示例如下:注意,Claude 可能会在代码执行过程中生成文件。您可以使用 Files API 访问这些文件:
可用工具版本:
code_execution_20250522(旧版)code_execution_20250825(推荐)
计算机使用
Claude 支持客户端 计算机使用 功能,允许它通过截图、鼠标控制和键盘输入与桌面环境交互。重要提示:您必须提供执行环境LangChain 处理 API 集成(发送/接收工具调用),但 您负责:
- 设置沙盒化计算环境(Linux 虚拟机、Docker 容器等)
- 实现虚拟显示(例如,Xvfb)
- 执行 Claude 的工具调用(截图、鼠标点击、键盘输入)
- 在智能体循环中将结果传递回 Claude
要求:
- Claude Opus 4.5、Claude 4 或 Claude Sonnet 3.7
- Anthropic type
- create_agent
- Dict
可用工具版本:
computer_20250124(适用于 Claude 4 和 Claude Sonnet 3.7)computer_20251124(适用于 Claude Opus 4.5)
远程 MCP
Claude 可以使用服务器端的 MCP 连接器工具来处理模型生成的远程 MCP 服务器调用。远程 MCP 自
langchain-anthropic>=0.3.14 起得到支持- Anthropic type
- create_agent
- Dict
文本编辑器
Claude 支持一个客户端文本编辑器工具,可用于查看和修改本地文本文件。详情请参阅 文本编辑器工具文档。- Anthropic type
- create_agent
- Dict
可用工具版本:
text_editor_20250124(遗留版)text_editor_20250728(推荐版)
网络抓取
Claude 可以使用服务器端的 网络抓取工具 从指定的网页和 PDF 文档中检索完整内容,并以其响应为引用进行支撑。- Anthropic type
- create_agent
- Dict
网络搜索
Claude 可以使用服务器端的 网络搜索工具 来执行搜索,并为其响应提供引用依据。网络搜索工具自
langchain-anthropic>=0.3.13 起得到支持- Anthropic type
- create_agent
- Dict
记忆工具
Claude 支持一个记忆工具,用于在对话线程之间进行客户端存储和检索上下文。详情请参阅 记忆工具文档。Anthropic 的内置记忆工具自
langchain-anthropic>=0.3.21 起得到支持- Anthropic type
- create_agent
- Dict
工具搜索
Claude 支持服务器端的 工具搜索 功能,能够实现动态工具发现和加载。Claude 不需要将所有工具定义提前加载到上下文窗口中,而是可以搜索您的工具目录并仅加载所需的工具。 这在以下情况下很有用:- 您的系统中有 10+ 个工具
- 工具定义消耗了大量的 Token
- 您在使用大型工具集时遇到工具选择准确性问题
- 正则表达式 (
tool_search_tool_regex_20251119):Claude 构建正则表达式来搜索工具 - BM25 (
tool_search_tool_bm25_20251119):Claude 使用自然语言查询来搜索工具
extras 参数来指定 defer_loading 在 LangChain 工具上:
- Anthropic type
- create_agent
- Dict
- 只有当 Claude 通过搜索发现时,
defer_loading: True标记的工具才会被加载 - 将您 3-5 个最常用的工具作为非延迟加载,以获得最佳性能
- 两种变体都会搜索工具名称、描述、参数名称和参数描述
响应元数据
Token 使用元数据
stream_usage=False 或在初始化 ChatAnthropic 时禁用这些功能。
API 参考
有关所有功能和配置选项的详细文档,请访问 @[ChatAnthropic] API 参考。
官方原文:src/oss/python/integrations/chat/anthropic.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。