SuperAPI AI 工具集

langchain-middleware

智能体与模型

查看项目

更新于 10-29 07:39

技能介绍

用途

langchain-middleware 是一份面向 LangChain 智能体的技能参考,聚焦三类能力:人在回路(human-in-the-loop)审批、自定义中间件、结构化输出。其核心示例围绕 HumanInTheLoopMiddleware(Python)与 humanInTheLoopMiddleware(JavaScript/TypeScript)展开,用于在智能体调用工具之前暂停,交由人工决策。

主要能力

人在回路审批

通过为智能体添加 HumanInTheLoopMiddleware,并在 interrupt_on 中按工具名指定配置,可让指定工具在调用前中断等待人工处理。示例中 allowed_decisions 可包含 approve(批准)、edit(修改参数)、reject(拒绝)。策略可按工具分别设置,例如 send_email 允许批准/修改/拒绝,delete_email 仅允许批准/拒绝,read_email 设为 False 表示无需审批。

人工决策后的恢复

示例使用 LangGraph 的 Command(resume=...) 恢复执行。批准时传入 decisions 中的 {type: approve};修改时传入 edit 并提供 edited_action(含 name 与 args);拒绝时传入 reject 并附带 feedback 说明原因。

自定义中间件钩子

资料列出六个装饰器钩子,分两类模式:

  • 包裹型钩子(wrap_tool_call、wrap_model_call):签名为 (request, handler),调用 handler(request) 继续执行,或提前返回来短路。
  • 前后型钩子(before_model、after_model、before_agent、after_agent):签名为 (state, runtime),用于查看或修改状态,返回 None 或状态更新字典。

示例展示了重试中间件(wrap_tool_call 中最多尝试三次)和拦截中间件(对危险工具直接返回提示并短路),以及 before_model / after_model 的日志记录。JavaScript 侧通过 createMiddleware 定义 wrapToolCall、beforeModel、afterModel 等。

工具级中间件

资料提到可为特定工具应用中间件,而非全部工具。

使用方式与要求

所有 HITL 工作流都要求配置 checkpointer 与 thread_id 配置。示例使用 MemorySaver 作为 checkpointer,调用时传入 {"configurable": {"thread_id": "session-1"}}。中断结果通过返回中的 interrupt 检测,随后使用 Command 恢复。

注意事项(资料列出的错误示例)

  • 不要在工具执行后中断,中断必须发生在执行前。
  • 不要跳过 checkpointer,HITL 工作流必须配置。
  • 调用时必须传入包含 thread_id 的 config。
  • 恢复执行必须使用 Command(resume=...),而不是直接在输入中传 resume。

适用场景

适合需要在敏感或高风险工具(如发送邮件、删除数据)调用前引入人工审核的 LangChain 智能体,以及需要日志、重试、错误处理与工具拦截等横切逻辑的智能体应用。

限制

资料未说明版本要求、支持的模型范围、部署方式与性能影响;结构化输出仅在描述中提及,未展开示例。