LangChain 和 Deep Agents 提供了用于常见用例的内置中间件。每个中间件都已达到生产级别,可根据你的特定需求进行配置。Documentation Index
Fetch the complete documentation index at: https://nvd-54.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
与提供商无关的中间件
以下中间件适用于任何 LLM 提供商:| 中间件 | 描述 |
|---|---|
| 摘要生成 | 当接近 Token 限制时自动摘要对话历史。 |
| 人机协作 | 暂停执行以等待人工批准工具调用。 |
| 模型调用限制 | 限制模型调用次数以防止过度开销。 |
| 工具调用限制 | 通过限制调用次数来控制工具执行。 |
| 模型回退 | 当主模型失败时自动回退到备选模型。 |
| PII 检测 | 检测和处理个人身份信息(PII)。 |
| 待办列表 | 为智能体提供任务规划和跟踪能力。 |
| LLM 工具选择器 | 在调用主模型之前使用 LLM 选择相关工具。 |
| 工具重试 | 使用指数退避自动重试失败的工具调用。 |
| 模型重试 | 使用指数退避自动重试失败的模型调用。 |
| LLM 工具模拟器 | 使用 LLM 模拟工具执行,用于测试目的。 |
| 上下文编辑 | 通过裁剪或清除工具使用来管理对话上下文。 |
| Shell 工具 | 为智能体暴露一个持久化 Shell 会话用于命令执行。 |
| 文件搜索 | 提供 Glob 和 Grep 搜索工具来搜索文件系统文件。 |
| 文件系统 | 为智能体提供文件系统,用于存储上下文和长期记忆。 |
| 子智能体 | 添加生成子智能体的能力。 |
摘要生成
当接近 Token 限制时自动摘要对话历史,在压缩旧上下文的同时保留近期消息。摘要生成适用于以下场景:- 超出上下文窗口的长时间对话。
- 具有大量历史记录的多轮对话。
- 需要保留完整对话上下文的应用程序。
SummarizationMiddleware
配置选项
配置选项
用于生成摘要的模型。可以是模型标识符字符串(例如
'openai:gpt-5.4-mini')或 BaseChatModel 实例。更多信息请参阅 init_chat_model。触发摘要生成的条件。可以是:
- 单个
ContextSize元组(必须满足指定条件) ContextSize元组列表(满足任一条件即可 - 或逻辑)
fraction(浮点数):模型上下文大小的比例(0-1)tokens(整数):绝对 Token 数量messages(整数):消息数量
ContextSize 的 API 参考。摘要生成后保留多少上下文。请精确指定以下之一:
fraction(浮点数):保留模型上下文大小的比例(0-1)tokens(整数):保留的绝对 Token 数量messages(整数):保留的近期消息数量
ContextSize 的 API 参考。自定义 Token 计数函数。默认使用基于字符的计数。
自定义摘要生成的提示词模板。如果未指定,使用内置模板。模板应包含
{messages} 占位符,对话历史将插入到此处。生成摘要时包含的最大 Token 数量。消息将被裁剪以适应此限制,然后再进行摘要。
已弃用: 请使用
summary_prompt 来提供完整提示词。已弃用: 请使用
trigger: ("tokens", value) 代替。触发摘要生成的 Token 阈值。已弃用: 请使用
keep: ("messages", value) 代替。要保留的近期消息数量。完整示例
完整示例
摘要生成中间件监控消息的 Token 数量,并在达到阈值时自动对旧消息进行摘要。触发条件控制何时运行摘要生成:
- 单个条件对象(必须满足指定条件)
- 条件数组(满足任一条件即可 - 或逻辑)
- 每个条件可以使用
fraction(模型上下文大小的比例)、tokens(绝对数量)或messages(消息数量)
fraction- 保留模型上下文大小的比例tokens- 保留的绝对 Token 数量messages- 保留的近期消息数量
人机协作
在工具调用执行之前暂停智能体执行,以等待人工批准、编辑或拒绝。人机协作适用于以下场景:- 需要人工批准的高风险操作(例如数据库写入、金融交易)。
- 强制要求人工监督的合规工作流。
- 人工反馈引导智能体的长时间对话。
HumanInTheLoopMiddleware
观看此视频指南,演示人机协作中间件的行为。
模型调用限制
限制模型调用次数以防止无限循环或过度开销。模型调用限制适用于以下场景:- 防止失控的智能体进行过多 API 调用。
- 对生产部署实施成本控制。
- 在特定调用预算内测试智能体行为。
ModelCallLimitMiddleware
观看此视频指南,演示模型调用限制中间件的行为。
配置选项
配置选项
工具调用限制
通过限制工具调用次数来控制智能体执行,可以全局限制所有工具或针对特定工具。工具调用限制适用于以下场景:- 防止对昂贵的外部 API 进行过多调用。
- 限制网页搜索或数据库查询。
- 对特定工具的使用实施速率限制。
- 防止智能体陷入失控循环。
ToolCallLimitMiddleware
观看此视频指南,演示工具调用限制中间件的行为。
配置选项
配置选项
要限制的特定工具名称。如果未提供,限制将全局应用于所有工具。
线程(对话)中所有运行的最大工具调用次数。跨同一线程 ID 的多次调用持久化。需要检查点器来维护状态。
None 表示无线程限制。单次调用(一条用户消息到响应的周期)的最大工具调用次数。每条新用户消息都会重置。
None 表示无运行限制。注意: 必须指定 thread_limit 或 run_limit 中的至少一个。达到限制时的行为:
'continue'(默认)- 用错误消息阻止超出的工具调用,让其他工具和模型继续。模型根据错误消息决定何时结束。'error'- 抛出ToolCallLimitExceededError异常,立即停止执行'end'- 立即停止执行,为超出的工具调用返回ToolMessage和 AI 消息。仅在限制单个工具时有效;如果其他工具有待处理的调用,则抛出NotImplementedError。
完整示例
完整示例
使用以下方式指定限制:
- 线程限制 - 对话中所有运行的最大调用次数(需要检查点器)
- 运行限制 - 单次调用的最大调用次数(每轮重置)
'continue'(默认)- 用错误消息阻止超出的调用,智能体继续'error'- 立即抛出异常'end'- 返回 ToolMessage + AI 消息停止(仅限单工具场景)
模型回退
当主模型失败时自动回退到备选模型。模型回退适用于以下场景:- 构建能处理模型中断的弹性智能体。
- 通过回退到更便宜的模型来优化成本。
- 跨 OpenAI、Anthropic 等提供商的冗余。
ModelFallbackMiddleware
观看此视频指南,演示模型回退中间件的行为。
配置选项
配置选项
PII 检测
使用可配置策略检测和处理对话中的个人身份信息(PII)。PII 检测适用于以下场景:- 有合规要求的医疗和金融应用。
- 需要清理日志的客服智能体。
- 任何处理敏感用户数据的应用。
PIIMiddleware
自定义 PII 类型
你可以通过提供detector 参数来创建自定义 PII 类型。这允许你检测超出内置类型的特定于你用例的模式。
创建自定义检测器的三种方式:
- 正则表达式字符串 - 简单模式匹配
- 自定义函数 - 带验证的复杂检测逻辑
text、start 和 end 键的字典列表:
配置选项
配置选项
要检测的 PII 类型。可以是内置类型(
email、credit_card、ip、mac_address、url)或自定义类型名称。如何处理检测到的 PII。选项:
'block'- 检测到时抛出异常'redact'- 替换为[REDACTED_{PII_TYPE}]'mask'- 部分遮盖(例如****-****-****-1234)'hash'- 替换为确定性哈希
自定义检测器函数或正则表达式模式。如果未提供,使用该 PII 类型的内置检测器。
在模型调用前检查用户消息
在模型调用后检查 AI 消息
在执行后检查工具结果消息
待办列表
为智能体提供任务规划和跟踪能力,用于复杂的多步骤任务。待办列表适用于以下场景:- 需要跨多个工具协调的复杂多步骤任务。
- 进度可见性很重要的长时间运行操作。
此中间件自动为智能体提供
write_todos 工具和系统提示词,以指导有效的任务规划。TodoListMiddleware
观看此视频指南,演示待办列表中间件的行为。
配置选项
配置选项
LLM 工具选择器
使用 LLM 在调用主模型之前智能选择相关工具。LLM 工具选择器适用于以下场景:- 拥有许多工具(10+)且大多数与每个查询无关的智能体。
- 通过过滤无关工具来减少 Token 用量。
- 提高模型的专注度和准确性。
LLMToolSelectorMiddleware
配置选项
配置选项
用于工具选择的模型。可以是模型标识符字符串(例如
'openai:gpt-5.4-mini')或 BaseChatModel 实例。更多信息请参阅 init_chat_model。默认使用智能体的主模型。选择模型的指令。如果未指定,使用内置提示词。
最大选择工具数量。如果模型选择了更多,只使用前 max_tools 个。如果未指定则无限制。
无论选择结果如何都始终包含的工具名称。这些不计入 max_tools 限制。
工具重试
使用可配置的指数退避自动重试失败的工具调用。工具重试适用于以下场景:- 处理外部 API 调用中的瞬态故障。
- 提高依赖网络的工具的可靠性。
- 构建能优雅处理临时错误的弹性智能体。
ToolRetryMiddleware
配置选项
配置选项
初始调用后的最大重试次数(使用默认值时共 3 次尝试)
可选的要应用重试逻辑的工具或工具名称列表。如果为
None,则应用于所有工具。要重试的异常类型元组,或接受异常并返回
True(应重试时)的可调用对象。所有重试耗尽时的行为。选项:
'return_message'- 返回包含错误详情的ToolMessage(允许 LLM 处理失败)'raise'- 重新抛出异常(停止智能体执行)- 自定义可调用对象 - 接受异常并返回字符串作为
ToolMessage内容的函数
指数退避的乘数。每次重试等待
initial_delay * (backoff_factor ** retry_number) 秒。设为 0.0 表示固定延迟。首次重试前的初始延迟(秒)
重试之间的最大延迟(秒)(限制指数退避的增长)
是否添加随机抖动(
±25%)以避免惊群效应完整示例
完整示例
中间件使用指数退避自动重试失败的工具调用。关键配置:
max_retries- 重试次数(默认:2)backoff_factor- 指数退避的乘数(默认:2.0)initial_delay- 起始延迟(秒)(默认:1.0)max_delay- 延迟增长上限(默认:60.0)jitter- 添加随机变化(默认:True)
on_failure='return_message'- 返回错误消息on_failure='raise'- 重新抛出异常- 自定义函数 - 返回错误消息的函数
模型重试
使用可配置的指数退避自动重试失败的模型调用。模型重试适用于以下场景:- 处理模型 API 调用中的瞬态故障。
- 提高依赖网络的模型请求的可靠性。
- 构建能优雅处理临时模型错误的弹性智能体。
ModelRetryMiddleware
配置选项
配置选项
初始调用后的最大重试次数(使用默认值时共 3 次尝试)
要重试的异常类型元组,或接受异常并返回
True(应重试时)的可调用对象。所有重试耗尽时的行为。选项:
'continue'(默认)- 返回包含错误详情的AIMessage,允许智能体可能优雅地处理失败'error'- 重新抛出异常(停止智能体执行)- 自定义可调用对象 - 接受异常并返回字符串作为
AIMessage内容的函数
指数退避的乘数。每次重试等待
initial_delay * (backoff_factor ** retry_number) 秒。设为 0.0 表示固定延迟。首次重试前的初始延迟(秒)
重试之间的最大延迟(秒)(限制指数退避的增长)
是否添加随机抖动(
±25%)以避免惊群效应完整示例
完整示例
中间件使用指数退避自动重试失败的模型调用。
LLM 工具模拟器
使用 LLM 模拟工具执行以用于测试目的,用 AI 生成的响应替代实际的工具调用。LLM 工具模拟器适用于以下场景:- 在不执行真实工具的情况下测试智能体行为。
- 在外部工具不可用或成本高昂时开发智能体。
- 在实现实际工具之前原型化智能体工作流。
LLMToolEmulator
配置选项
配置选项
要模拟的工具名称(字符串)或 BaseTool 实例列表。如果为
None(默认),将模拟所有工具。如果为空列表 [],不模拟任何工具。如果是包含工具名称/实例的数组,只模拟那些工具。用于生成模拟工具响应的模型。可以是模型标识符字符串(例如
'google_genai:gemini-3.1-pro-preview')或 BaseChatModel 实例。如果未指定,默认使用智能体的模型。更多信息请参阅 init_chat_model。完整示例
完整示例
中间件使用 LLM 为工具调用生成合理的响应,而不是执行实际工具。
上下文编辑
通过在达到 Token 限制时清除较旧的工具调用输出来管理对话上下文,同时保留近期结果。这有助于在包含大量工具调用的长时间对话中保持上下文窗口的可管理性。上下文编辑适用于以下场景:- 包含大量工具调用且超出 Token 限制的长时间对话
- 通过移除不再相关的旧工具输出来降低 Token 成本
- 在上下文中仅维护最近 N 个工具结果
ContextEditingMiddleware、ClearToolUsesEdit
配置选项
配置选项
要应用的
ContextEdit 策略列表Token 计数方法。选项:
'approximate' 或 'model'ClearToolUsesEdit 选项:触发编辑的 Token 数量。当对话超过此 Token 数量时,较旧的工具输出将被清除。
编辑运行时要回收的最小 Token 数量。如果设为 0,则尽可能多地清除。
必须保留的最近工具结果数量。这些永远不会被清除。
是否清除 AI 消息上的原始工具调用参数。当为
True 时,工具调用参数将替换为空对象。排除在清除之外的工具名称列表。这些工具的输出永远不会被清除。
为已清除的工具输出插入的占位文本。这将替换原始的工具消息内容。
完整示例
完整示例
中间件在达到 Token 限制时应用上下文编辑策略。最常用的策略是
ClearToolUsesEdit,它在保留近期结果的同时清除较旧的工具结果。工作原理:- 监控对话中的 Token 数量
- 当达到阈值时,清除较旧的工具输出
- 保留最近 N 个工具结果
- 可选地保留工具调用参数以提供上下文
Shell 工具
为智能体暴露一个持久化 Shell 会话用于命令执行。Shell 工具中间件适用于以下场景:- 需要执行系统命令的智能体
- 开发和部署自动化任务
- 测试和验证工作流
- 文件系统操作和脚本执行
限制:持久化 Shell 会话目前不支持中断(人机协作)。我们预计未来会添加对此的支持。
ShellToolMiddleware
配置选项
配置选项
Shell 会话的基目录。如果省略,智能体启动时创建临时目录,结束时移除。
会话启动后顺序执行的可选命令
会话关闭前执行的可选命令
控制超时、输出限制和资源配置的执行策略。选项:
HostExecutionPolicy- 完全主机访问(默认);最适合智能体已在容器或虚拟机内运行的受信环境DockerExecutionPolicy- 为每次智能体运行启动单独的 Docker 容器,提供更强的隔离CodexSandboxExecutionPolicy- 重用 Codex CLI 沙箱以获得额外的系统调用/文件系统限制
可选的脱敏规则,在将命令输出返回给模型之前进行清理。
注册的 Shell 工具描述的可选覆盖
用于启动持久化会话的可选 Shell 可执行文件(字符串)或参数序列。默认为
/bin/bash。提供给 Shell 会话的可选环境变量。值在命令执行前会被转换为字符串。
完整示例
完整示例
中间件提供了一个持久化 Shell 会话,智能体可以使用它来顺序执行命令。执行策略:
HostExecutionPolicy(默认)- 具有完全主机访问权限的原生执行DockerExecutionPolicy- 隔离的 Docker 容器执行CodexSandboxExecutionPolicy- 通过 Codex CLI 的沙箱化执行
文件搜索
提供 Glob 和 Grep 搜索工具来搜索文件系统。文件搜索中间件适用于以下场景:- 代码探索和分析
- 按名称模式查找文件
- 使用正则表达式搜索代码内容
- 需要文件发现的大型代码库
FilesystemFileSearchMiddleware
配置选项
配置选项
完整示例
完整示例
中间件为智能体添加两个搜索工具:Glob 工具 - 快速文件模式匹配:
- 支持
**/*.py、src/**/*.ts等模式 - 返回按修改时间排序的匹配文件路径
- 完整正则表达式语法支持
- 使用
include参数按文件模式过滤 - 三种输出模式:
files_with_matches、content、count
文件系统中间件
上下文工程是构建有效智能体的主要挑战。当使用返回可变长度结果的工具时(例如web_search 和 RAG),这尤其困难,因为长工具结果会快速填满你的上下文窗口。
Deep Agents 的 FilesystemMiddleware 提供了四个工具来与短期和长期记忆交互:
ls:列出文件系统中的文件read_file:读取整个文件或文件中的特定行数write_file:将新文件写入文件系统edit_file:编辑文件系统中的现有文件
短期 vs. 长期文件系统
默认情况下,这些工具写入图状态中的本地”文件系统”。要启用跨线程的持久化存储,请配置一个CompositeBackend,将特定路径(如 /memories/)路由到 StoreBackend。
StoreBackend 的 CompositeBackend 用于 /memories/ 时,任何以 /memories/ 为前缀的文件都会保存到持久化存储中,并在不同线程之间保留。没有此前缀的文件保留在临时状态存储中。
子智能体
将任务交接给子智能体可以隔离上下文,保持主(监督者)智能体的上下文窗口干净,同时仍能深入执行任务。 Deep Agents 的子智能体中间件允许你通过task 工具提供子智能体。
general-purpose(通用)子智能体。此子智能体具有与主智能体相同的指令和它可以访问的所有工具。general-purpose 子智能体的主要目的是上下文隔离——主智能体可以将复杂任务委派给此子智能体,并获取简洁的回答,而不会因中间工具调用而膨胀。
特定提供商的中间件
这些中间件针对特定的 LLM 提供商进行了优化。有关完整详情和示例,请参阅每个提供商的文档。Anthropic
Claude 模型的提示词缓存、bash 工具、文本编辑器、记忆和文件搜索中间件。
AWS
Amazon Bedrock 模型的提示词缓存中间件。
OpenAI
OpenAI 模型的内容审核中间件。
通过 MCP 连接这些文档到 Claude、VSCode 等,获取实时答案。

