@小匠头像

Agent/RAG开发:如何判断处理逻辑是封装在Tool工具里还是封装在Middleware中间件里

Tool与Middleware的区别

在 LangChain 1.0 的 Agent 体系中,「Tool」与「Middleware」虽然都可扩展 Agent 的能力,但它们适用的场景完全不同,当我们需要对一些业务逻辑进行扩展和封装时,那么就需要判断是封装在Tool工具里还是封装在Middleware中间件里。判断标准核心在于:

是否需要让 LLM 通过决策(reasoning → act)来显式调用这段逻辑?

维度Tool(工具)Middleware(中间件)
作用对象封装具体业务功能(RAG检索、API调用)封装执行流程控制(日志、重试、限流)
调用方式由LLM自主决策调用(通过function calling)在Agent执行固定节点自动触发(before/after模型调用)
设计目的扩展Agent的能力边界增强Agent的可靠性、安全性、可观测性
状态访问接收参数,返回结果可直接读写AgentState,控制执行流(如jump_to=“end”)
执行概率0% ~ 100% (不确定)100% (确定)

请在设计功能判断封装场景时,问自己以下三个问题:

  1. 谁来决定“做不做”?(Who decides?)
  • 需要 LLM 根据上下文判断是否执行 → Tool
    • 例子:搜索互联网、查询天气、计算器。因为用户可能只是打招呼,不需要搜索。
  • 业务流程规定必须执行 → Middleware / Node
    • 例子:权限校验、敏感词过滤、日志记录、固定的知识库召回(如客服系统)。
  1. 参数从哪里来?(Where do args come from?)
  • 参数需要从用户的自然语言中提取 → Tool
    • 例子:用户说“帮我查下特斯拉的股价”,Tool 需要提取“特斯拉”作为参数。
  • 参数是系统上下文或环境变量 → Middleware / Node
    • 例子:用户的 UserID、当前的 SessionID、数据库连接配置。这些不需要 LLM 去“猜”。
  1. 失败了怎么办?(Error Handling)
  • 失败了需要 LLM 换个方式重试 → Tool
    • 例子:搜索不到结果,LLM 可以尝试换个关键词再次调用 Tool。
  • 失败了直接抛异常或走系统降级 → Middleware / Node
    • 例子:数据库连接断开、API 鉴权失败。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_45629145/article/details/169933132

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--