LangChain 和 Deep Agents 提供了针对常见使用场景的预置中间件。每个中间件都是生产就绪的,并且可以为您的特定需求进行配置。

与提供商无关的中间件

以下中间件适用于任何 LLM 提供商:

摘要

在接近 token 限制时自动总结对话历史,保留最近的消息,同时压缩较旧的上下文。摘要适用于以下场景:
  • 超出上下文窗口的长时运行对话。
  • 具有大量历史记录的多轮对话。
  • 需要保留完整对话上下文的应用程序。
摘要是面向文本的上下文压缩。它不会调整大小、降采样或以其他方式压缩图像/音频/视频有效载荷。由 keep 保留的最近消息仍然包含其原始的多模态块,而被总结的较旧多模态消息仅由生成的文本摘要表示。对于图像密集型应用,请将媒体存储在文件系统或对象存储中,并通过消息历史传递 URL 或文件引用。
API 参考: SummarizationMiddleware
如果使用 langchain>=1.1,trigger 和 keep 的 fraction 条件(如下所示)依赖于聊天模型的配置文件数据。如果数据不可用,请使用其他条件或手动指定:
string | BaseChatModel
required
用于生成摘要的模型。可以是模型标识符字符串(例如 'openai:gpt-5.4-mini')或 BaseChatModel 实例。有关更多信息,请参见 init_chat_model。
ContextSize | TriggerClause | list[ContextSize | TriggerClause] | None
触发摘要的条件。可以是:
  • 单个 ContextSize 元组(必须满足指定的阈值)
  • 单个 TriggerClause 字典(必须满足所有指定的阈值 - AND 逻辑)
  • 混合两种形式的列表(必须满足任一项 - OR 逻辑)
支持的阈值包括:
  • fraction (float): 模型上下文大小的比例(0-1)
  • tokens (int): 绝对的 token 计数
  • messages (int): 消息计数
一个 ContextSize 元组精确表达一个阈值。一个 TriggerClause 字典可以包含一个或多个阈值,例如 {"tokens": 4000, "messages": 10},并且字典中的所有阈值都必须满足(AND)。每个 TriggerClause 字典必须至少指定一个阈值。如果未提供 trigger,摘要将不会自动触发。有关更多信息,请参见 ContextSize 和 TriggerClause 的 API 参考。
ContextSize
default:"('messages', 20)"
摘要后保留多少上下文。请指定以下之一:
  • fraction (float): 要保留的模型上下文大小的比例(0-1)
  • tokens (int): 要保留的绝对 token 计数
  • messages (int): 要保留的最近消息数量
有关更多信息,请参见 ContextSize 的 API 参考。
function
自定义的 token 计数函数。默认为基于字符的计数。
string
用于摘要的自定义提示模板。如果未指定,则使用内置模板。模板应包含 {messages} 占位符,对话历史将插入此处。
number
default:"4000"
生成摘要时要包含的最大 token 数量。在摘要之前,消息将被修剪以适应此限制。
string
deprecated
已弃用: 请使用 summary_prompt 来提供完整的提示。
number
deprecated
已弃用: 请使用 trigger: ("tokens", value)。触发摘要的 token 阈值。
number
deprecated
已弃用: 请使用 keep: ("messages", value)。要保留的最近消息。
摘要中间件监控消息的 token 计数,并在达到阈值时自动摘要旧消息。触发条件 控制何时运行摘要:
  • 当满足单个阈值时触发。
  • 带有多个阈值的触发子句仅在满足所有阈值时触发(AND 逻辑)。
  • 触发条件列表在满足任一条件时触发(OR 逻辑)。
  • 每个阈值可以使用 fraction(模型上下文大小的比例)、tokens(绝对计数)或 messages(消息计数)。
保留条件 控制保留多少上下文(请精确指定以下之一):
  • fraction - 要保留的模型上下文大小的比例。
  • tokens - 要保留的绝对 token 计数。
  • messages - 要保留的最近消息数量。

人在环中

在工具调用执行前暂停智能体的执行,以等待人工批准、编辑或拒绝。人在环中适用于以下场景:
  • 需要人工批准的高风险操作(例如数据库写入、金融交易)。
  • 强制要求人工监督的合规工作流程。
  • 人工反馈指导智能体进行的长时运行对话。
API 参考: HumanInTheLoopMiddleware
人在环中中间件需要一个检查点器来在中断期间维护状态。
有关完整的示例、配置选项和集成模式,请参见人在环中文档。
观看此视频指南演示人在环中中间件的行为。

模型调用限制

限制模型调用次数以防止无限循环或成本过高。模型调用限制适用于以下场景:
  • 防止失控的智能体发起过多的 API 调用。
  • 在生产部署上实施成本控制。
  • 在特定的调用预算内测试智能体行为。
API 参考: ModelCallLimitMiddleware
观看此视频指南演示模型调用限制中间件的行为。
number
在一个线程(会话)中所有运行的最大模型调用次数。默认为无限制。
number
每次单次调用的最大模型调用次数。默认为无限制。
string
default:"end"
达到限制时的行为。选项:'end'(优雅终止)或 'error'(引发异常)

工具调用限制

通过限制工具调用次数来控制智能体执行,可以是全局的(针对所有工具)或针对特定工具。工具调用限制适用于以下场景:
  • 防止对昂贵的外部 API 进行过多调用。
  • 限制 Web 搜索或数据库查询。
  • 对特定工具的使用实施速率限制。
  • 防止智能体陷入失控循环。
API 参考: ToolCallLimitMiddleware
观看此视频指南演示工具调用限制中间件的行为。
string
要限制的特定工具的名称。如果未提供,则限制适用于所有工具(全局)。
number
在一个线程(会话)中所有运行的最大工具调用次数。在具有相同线程 ID 的多次调用中持续存在。需要检查点器来维护状态。None 表示无线程限制。
number
每次单次调用(一个用户消息 → 响应周期)的最大工具调用次数。每次有新的用户消息时重置。None 表示无运行限制。注意: 必须至少指定 thread_limit 或 run_limit 之一。
string
default:"continue"
达到限制时的行为:
  • 'continue'(默认)- 使用错误消息阻止超出的工具调用,让其他工具和模型继续。模型根据错误消息决定何时结束。
  • 'error' - 引发 ToolCallLimitExceededError 异常,立即停止执行。
  • 'end' - 立即停止执行,并为超出的工具调用发送 ToolMessage 和 AI 消息。仅在限制单个工具时有效;如果其他工具有待处理的调用,则引发 NotImplementedError。
通过以下方式指定限制:
  • 线程限制 - 会话中所有运行的最大调用次数(需要检查点器)。
  • 运行限制 - 每次单次调用的最大调用次数(每轮重置)。
退出行为:
  • 'continue'(默认)- 使用错误消息阻止超出的调用,智能体继续。
  • 'error' - 立即引发异常。
  • 'end' - 使用 ToolMessage + AI 消息停止(仅适用于单工具场景)。

模型回退

当主模型失败时,自动回退到替代模型。模型回退适用于以下场景:
  • 构建能够处理模型故障的弹性智能体。
  • 通过回退到更便宜的模型来优化成本。
  • 跨 OpenAI、Anthropic 等提供商的冗余。
API 参考: ModelFallbackMiddleware
观看此视频指南演示模型回退中间件的行为。
string | BaseChatModel
required
当主模型失败时尝试的第一个回退模型。可以是模型标识符字符串(例如 'openai:gpt-5.4-mini')或 BaseChatModel 实例。
string | BaseChatModel
如果之前的模型失败,按顺序尝试的额外回退模型。

PII 检测

使用可配置的策略检测并处理对话中的个人身份信息 (PII)。PII 检测适用于以下场景:
  • 具有合规性要求的医疗保健和金融应用程序。
  • 需要清理日志的客户服务智能体。
  • 任何处理敏感用户数据的应用程序。
当 apply_to_output=True 时,PIIMiddleware 也会通过注册的流转换器重新编辑流式传输的输出文本——文本增量、工具调用参数、工具输出和状态快照。需要 langchain>=1.3.2。请参见在中间件上注册转换器。
API 参考: PIIMiddleware

自定义 PII 类型

您可以通过提供 detector 参数来创建自定义 PII 类型。这使您能够检测超出内置类型范围的特定于您使用场景的模式。 创建自定义检测器的三种方式:
  1. 正则表达式模式字符串 - 简单的模式匹配。
  2. 自定义函数 - 具有验证功能的复杂检测逻辑。
自定义检测器函数签名: 检测器函数必须接受一个字符串(内容)并返回匹配项: 返回一个字典列表,包含 text、start 和 end 键:
对于自定义检测器:
  • 对于简单模式,使用正则表达式字符串。
  • 当您需要标志(例如不区分大小写匹配)时,使用 RegExp 对象。
  • 当您需要超出模式匹配的验证逻辑时,使用自定义函数。
  • 自定义函数为您提供对检测逻辑的完全控制,并可以实现复杂的验证规则。
string
required
要检测的 PII 类型。可以是内置类型(email、credit_card、ip、mac_address、url)或自定义类型名称。
string
default:"redact"
如何处理检测到的 PII。选项:
  • 'block' - 检测到时引发异常。
  • 'redact' - 替换为 [REDACTED_{PII_TYPE}]。
  • 'mask' - 部分掩码(例如 ****-****-****-1234)。
  • 'hash' - 替换为确定性哈希。
function | regex
自定义检测器函数或正则表达式模式。如果未提供,则使用针对该 PII 类型的内置检测器。
boolean
default:"True"
在模型调用前检查用户消息。
boolean
default:"False"
在模型调用后检查 AI 消息。在 langchain>=1.3.2 版本中,也会通过注册的流转换器重新编辑流式传输的输出(文本增量、工具调用参数、工具输出、状态快照)。请参见事件流。
boolean
default:"False"
在执行后检查工具结果消息。

待办事项列表

为智能体提供任务规划和跟踪能力,用于复杂的多步骤任务。待办事项列表适用于以下场景:
  • 需要跨多个工具协调的复杂多步骤任务。
  • 进度可见性很重要的长时运行操作。
此中间件自动为智能体提供一个 write_todos 工具和系统提示,以指导有效的任务规划。
API 参考: TodoListMiddleware
观看此视频指南演示待办事项列表中间件的行为。
string
用于指导待办事项使用的自定义系统提示。如果未指定,则使用内置提示。
string
write_todos 工具的自定义描述。如果未指定,则使用内置描述。

LLM 工具选择器

在调用主模型之前,使用 LLM 智能地选择相关工具。LLM 工具选择器适用于以下场景:
  • 拥有许多工具(10+)且大多数查询不相关的智能体。
  • 通过过滤不相关的工具来减少 token 使用量。
  • 提高模型的专注度和准确性。
此中间件使用结构化输出来询问 LLM 哪些工具对当前查询最相关。结构化输出的模式定义了可用的工具名称和描述。模型提供商通常会在后台将此结构化输出信息添加到系统提示中。 API 参考: LLMToolSelectorMiddleware
string | BaseChatModel
用于工具选择的模型。可以是模型标识符字符串(例如 'openai:gpt-5.4-mini')或 BaseChatModel 实例。有关更多信息,请参见 init_chat_model。默认为智能体的主模型。
string
给选择模型的指令。如果未指定,则使用内置提示。
number
要选择的最大工具数量。如果模型选择了更多,则仅使用前 max_tools 个。如果未指定,则无限制。
list[string]
无论选择如何,总是包含的工具名称。这些不计入 max_tools 限制。

工具错误

捕获在工具执行期间引发的异常,并将其转换为模型可以看到并从中恢复的错误 ToolMessage,而不是停止智能体运行。工具错误适用于以下场景:
  • 让模型使用更正的参数重试失败的工具调用。
  • 呈现受控、净化的错误消息,而不是原始的异常详情。
  • 防止意外的工具异常导致智能体崩溃。
工具错误中间件不会自动重试失败的调用。要进行重试,请与工具重试中间件组合使用,将其放在 内部(在 middleware 列表中较早位置)并配置 on_failure="error",以便异常能够到达工具错误中间件。请参见下面的完整示例。
API 参考: ToolErrorMiddleware
ToolErrorMiddleware 需要 langchain>=1.3.14。
Callable[[Exception, ToolCallRequest], str | list[ContentBlock] | None]
为工具执行引发的每个异常调用的同步处理程序。返回内容(str 或内容块列表)以将异常转换为 ToolMessage(status="error")。返回 None 或省略返回语句将使异常传播。用于同步路径,除非给出 aon_error,否则也用于异步路径。
Callable[[Exception, ToolCallRequest], Awaitable[str | list[ContentBlock] | None]]
可选的异步处理程序,用于异步执行路径。未提供时回退到 on_error。
list[BaseTool | str]
可选的工具或工具名称列表,用于应用错误处理。如果为 None,则适用于所有工具。
on_error 处理程序接收异常和 ToolCallRequest(其中包含带有名称、参数和调用 ID 的工具调用字典)。对于您不想处理的异常,返回 None,它们将正常传播。

异步模式:仅传递 aon_error(不要传递 on_error)

async_agent = create_agent( model=“gpt-5.5”, tools=[api_tool], middleware=[ToolErrorMiddleware(aon_error=aon_error)], )
number
default:"2"
初始调用后的最大重试次数(默认为 2,总共 3 次尝试)
list[BaseTool | str]
可选的工具列表或工具名称,用于应用重试逻辑。如果为 None,则应用于所有工具。
tuple[type[Exception], ...] | callable
default:"(Exception,)"
要么是一个需要重试的异常类型元组,要么是一个可调用对象,该对象接收一个异常并在应重试时返回 True。默认情况下,所有异常都会重试。不匹配的异常会立即传播,不由 on_failure 处理。
string | callable
default:"continue"
当所有重试都用尽时的行为。选项:
  • 'continue'(默认) - 返回包含错误详情的 ToolMessage,允许 LLM 处理失败
  • 'error' - 重新引发异常,停止代理执行
  • 自定义可调用对象 - 接收异常并返回 ToolMessage 内容字符串的函数
已弃用的值: 'return_message'(请改用 'continue')和 'raise'(请改用 'error')。
number
default:"2.0"
指数退避的乘数。每次重试等待 initial_delay * (backoff_factor ** retry_number) 秒。设为 0.0 表示固定延迟。
number
default:"1.0"
第一次重试前的初始延迟(秒)
number
default:"60.0"
重试之间的最大延迟(秒),用于限制指数退避增长
boolean
default:"true"
是否在延迟中添加随机抖动 (±25%) 以避免惊群效应
该中间件通过指数退避自动重试失败的工具调用。关键配置:
  • max_retries - 重试次数(默认:2)
  • backoff_factor - 指数退避乘数(默认:2.0)
  • initial_delay - 初始延迟秒数(默认:1.0)
  • max_delay - 延迟增长上限(默认:60.0)
  • jitter - 添加随机变化(默认:True)
故障处理:
  • on_failure='continue'(默认) - 返回错误消息
  • on_failure='error' - 重新引发异常
  • 自定义函数 - 返回错误消息的函数

模型重试

自动重试失败的模型调用,支持可配置的指数退避。模型重试在以下场景中很有用:
  • 处理模型 API 调用中的瞬态故障。
  • 提高依赖网络的模型请求的可靠性。
  • 构建能优雅处理临时模型错误的弹性代理。
API 参考: @[ModelRetryMiddleware]
number
default:"2"
初始调用后的最大重试次数(默认为 2,总共 3 次尝试)
tuple[type[Exception], ...] | callable
default:"(Exception,)"
要么是一个需要重试的异常类型元组,要么是一个可调用对象,该对象接收一个异常并在应重试时返回 True。
string | callable
default:"continue"
当所有重试都用尽时的行为。选项:
  • 'continue'(默认) - 返回包含错误详情的 AIMessage,允许代理优雅地处理失败
  • 'error' - 重新引发异常(停止代理执行)
  • 自定义可调用对象 - 接收异常并返回 AIMessage 内容字符串的函数
number
default:"2.0"
指数退避的乘数。每次重试等待 initial_delay * (backoff_factor ** retry_number) 秒。设为 0.0 表示固定延迟。
number
default:"1.0"
第一次重试前的初始延迟(秒)
number
default:"60.0"
重试之间的最大延迟(秒),用于限制指数退避增长
boolean
default:"true"
是否在延迟中添加随机抖动 (±25%) 以避免惊群效应
该中间件通过指数退避自动重试失败的模型调用。

LLM 工具模拟器

使用 LLM 模拟工具执行,用于测试目的,用 AI 生成的响应替换实际的工具调用。LLM 工具模拟器在以下场景中很有用:
  • 在不执行真实工具的情况下测试代理行为。
  • 在外部工具不可用或成本高昂时开发代理。
  • 在实现实际工具之前对代理工作流进行原型设计。
API 参考: @[LLMToolEmulator]
list[str | BaseTool]
要模拟的工具名称(str)或 BaseTool 实例列表。如果为 None(默认),则模拟所有工具。如果为空列表 [],则不模拟任何工具。如果为包含工具名称/实例的数组,则仅模拟这些工具。
string | BaseChatModel
用于生成模拟工具响应的模型。可以是模型标识符字符串(例如 'google_genai:gemini-3.6-flash')或 BaseChatModel 实例。如果未指定,则默认为代理的模型。有关更多信息,请参阅 @[init_chat_model][init_chat_model(model)]。
该中间件使用 LLM 为工具调用生成可信的响应,而不是执行实际的工具。

上下文编辑

通过在达到令牌限制时清除较旧的工具调用输出(同时保留最近的结果)来管理对话上下文。这有助于在包含许多工具调用的长对话中保持上下文窗口可管理。上下文编辑在以下场景中很有用:
  • 超出令牌限制的长对话,包含许多工具调用
  • 通过移除不再相关的较旧工具输出来降低令牌成本
  • 在上下文中仅保留最近的 N 个工具结果
API 参考: @[ContextEditingMiddleware], @[ClearToolUsesEdit]
list[ContextEdit]
default:"[ClearToolUsesEdit()]"
要应用的 @[ContextEdit] 策略列表
string
default:"approximate"
令牌计数方法。选项:'approximate' 或 'model'
@[ClearToolUsesEdit] 选项:
number
default:"100000"
触发编辑的令牌数。当对话超过此令牌数时,较旧的工具输出将被清除。
number
default:"0"
编辑运行时要回收的最小令牌数。如果设为 0,则根据需要清除。
number
default:"3"
必须保留的最近工具结果的数量。这些永远不会被清除。
boolean
default:"False"
是否清除 AI 消息上的原始工具调用参数。当为 True 时,工具调用参数将被替换为空对象。
list[string]
default:"()"
要排除在清除之外的工具名称列表。这些工具的输出永远不会被清除。
string
default:"[cleared]"
为清除的工具输出插入的占位符文本。这会替换原始工具消息内容。
当达到令牌限制时,该中间件应用上下文编辑策略。最常见的策略是 ClearToolUsesEdit,它清除较旧的工具结果同时保留最近的结果。工作原理:
  1. 监控对话中的令牌数
  2. 当达到阈值时,清除较旧的工具输出
  3. 保留最近的 N 个工具结果
  4. 可选择保留工具调用参数以提供上下文

提供程序工具搜索

将所选工具延迟到模型提供程序的服务器端工具搜索之后,以便模型根据需要发现它们,而不是预先接收每个工具的模式。提供程序工具搜索在以下场景中很有用:
  • 在使用许多工具时减少上下文膨胀。
  • 通过仅显示相关工具来提高工具选择准确性。
需要具有服务器端工具搜索支持的模型:Anthropic (Claude Sonnet 4+/Opus 4+/Haiku 4.5+) 或 OpenAI (gpt-5.5+)。其他提供程序会引发 ValueError。
API 参考: @[ProviderToolSearchMiddleware]
list[str | BaseTool]
要延迟到提供程序工具搜索之后的工具,按名称或实例给出。延迟的工具会被隐藏,直到其搜索显示它们。使用 extras={"defer_loading": True} 构造的工具会延迟,无论此选项如何;如果省略 searchable_tools,则只有那些预先标记的工具会被延迟。
该中间件将 searchable_tools 中包含的所有工具选择加入延迟和搜索。工具也可以在构造时通过设置 extras={"defer_loading": True} 来选择加入延迟。

Shell 工具

向代理公开一个持久的 shell 会话以执行命令。Shell 工具中间件在以下场景中很有用:
  • 需要执行系统命令的代理
  • 开发和部署自动化任务
  • 测试和验证工作流
  • 文件系统操作和脚本执行
安全考虑:请使用适当的执行策略(HostExecutionPolicy、DockerExecutionPolicy 或 CodexSandboxExecutionPolicy)以匹配你部署的安全要求。
限制:持久的 shell 会话目前不支持中断(人在环路中)。我们预计将在未来添加对此的支持。
API 参考: @[ShellToolMiddleware]
str | Path | None
Shell 会话的基础目录。如果省略,则在代理启动时创建一个临时目录,并在结束时删除。
tuple[str, ...] | list[str] | str | None
会话启动后顺序执行的可选命令
tuple[str, ...] | list[str] | str | None
会话关闭前执行的可选命令
BaseExecutionPolicy | None
控制超时、输出限制和资源配置的执行策略。选项:
  • HostExecutionPolicy - 完整的主机访问(默认);最适合代理已在容器或 VM 内运行的受信任环境
  • DockerExecutionPolicy - 为每次代理运行启动一个单独的 Docker 容器,提供更强的隔离性
  • CodexSandboxExecutionPolicy - 重用 Codex CLI 沙盒以进行额外的系统调用/文件系统限制
tuple[RedactionRule, ...] | list[RedactionRule] | None
可选的编辑规则,用于在返回给模型之前清理命令输出。
编辑规则在执行后应用,当使用 HostExecutionPolicy 时,不会防止机密或敏感数据的泄露。
str | None
用于覆盖已注册 shell 工具描述的可选内容
Sequence[str] | str | None
用于启动持久会话的可选 shell 可执行文件(字符串)或参数序列。默认为 /bin/bash。
Mapping[str, Any] | None
可选的环境变量,提供给 shell 会话。在命令执行之前,值会被强制转换为字符串。
该中间件提供一个单一的持久 shell 会话,代理可以使用它来顺序执行命令。执行策略:
  • HostExecutionPolicy(默认) - 原生执行,具有完整的主机访问权限
  • DockerExecutionPolicy - 隔离的 Docker 容器执行
  • CodexSandboxExecutionPolicy - 通过 Codex CLI 进行沙盒化执行

文件搜索

提供基于文件系统的 Glob 和 Grep 搜索工具。文件搜索中间件在以下场景中很有用:
  • 代码探索和分析
  • 按名称模式查找文件
  • 使用正则表达式搜索代码内容
  • 需要文件发现的大型代码库
API 参考: @[FilesystemFileSearchMiddleware]
str
required
要搜索的根目录。所有文件操作都相对于此路径。
bool
default:"True"
是否使用 ripgrep 进行搜索。如果 ripgrep 不可用,则回退到 Python 正则表达式。
int
default:"10"
要搜索的最大文件大小(MB)。大于此大小的文件将被跳过。
该中间件向代理添加了两个搜索工具:Glob 工具 - 快速文件模式匹配:
  • 支持如 **/*.py、src/**/*.ts 这样的模式
  • 返回按修改时间排序的匹配文件路径
Grep 工具 - 使用正则表达式的内容搜索:
  • 完整的正则表达式语法支持
  • 使用 include 参数按文件模式过滤
  • 三种输出模式:files_with_matches、content、count

文件系统中间件

上下文工程是构建有效代理的主要挑战。当使用返回可变长度结果的工具(例如 web_search 和 RAG)时尤其困难,因为冗长的工具结果可能会迅速填满你的上下文窗口。 来自 Deep Agents 的 FilesystemMiddleware 提供了四个用于与短期和长期记忆交互的工具:
  • ls:列出文件系统中的文件
  • read_file:读取整个文件或文件中的特定行数
  • write_file:向文件系统写入新文件
  • edit_file:编辑文件系统中的现有文件

短期与长期文件系统

默认情况下,这些工具写入你图状态中的本地“文件系统”。要启用跨线程的持久存储,请配置一个 CompositeBackend,将特定路径(如 /memories/)路由到 StoreBackend。
当你为 /memories/ 配置带有 StoreBackend 的 CompositeBackend 时,任何以 /memories/ 为前缀的文件都会保存到持久存储中,并且在不同线程之间持续存在。没有此前缀的文件将保留在临时状态存储中。

子代理

将任务移交给子代理可以隔离上下文,保持主(监督)代理的上下文窗口清洁,同时仍然可以深入处理任务。 来自 Deep Agents 的子代理中间件允许你通过 task 工具提供子代理。
一个子代理通过名称、描述、系统提示和工具来定义。你也可以为子代理提供自定义的模型,或者额外的中间件。当你想为子代理提供一个可与主代理共享的额外状态键时,这尤其有用。 对于更复杂的用例,你也可以将自己预先构建的 LangGraph 图作为子代理提供。
除了任何用户定义的子代理外,主代理始终可以访问一个 通用型 子代理。这个子代理拥有与主代理相同的指令以及它可以访问的所有工具。通用型 子代理的主要目的是上下文隔离——主代理可以将一个复杂任务委托给该子代理,并获得一个简洁的答案,而不会受到中间工具调用的干扰。

评分标准

RubricMiddleware 需要 deepagents>=0.6.5。它处于 beta 阶段;API 将来可能会改变。
有些任务对“完成”有明确定义,而代理在第一次尝试时无法可靠地达到。RubricMiddleware 让你将_完成的样子_声明为一个评分标准,并让代理自我评估和迭代,直到满足评分标准或达到最大迭代次数上限。 API 参考: @[RubricMiddleware]
有关完整的配置选项、流式事件和完整的代码生成示例,请参阅评分标准。

针对特定提供商的中间件

这些中间件针对特定的 LLM 提供商进行了优化。请参阅每个提供商的文档以获取完整详情和示例。

Anthropic

适用于 Claude 模型的提示缓存、Bash 工具、文本编辑器、记忆和文件搜索中间件。

AWS

适用于 Amazon Bedrock 模型的提示缓存中间件。

OpenAI

适用于 OpenAI 模型的内容审核中间件。