跳到正文

Chain/Agent/Tool 怎么分工?

Chain、Agent、Tool 三大抽象如何支撑模块化大模型应用开发

原题:LangChain框架的核心设计原理是什么?它是如何通过模块化组件支持大模型应用开发的?请说明其关键抽象如Chain、Agent、Tool等的作用。

评估与监控 · 快手真题

回答与解析

核心定位

LangChain本质是大模型应用的"编排框架"——它不训练模型,而是解决"如何把模型能力串起来"的问题,位于模型层(OpenAI/HuggingFace)与应用层之间。

三大关键抽象

1. Chain(链)

  • 最基础的组合单元,将多个计算步骤封装为可复用的管道
  • 典型形式:PromptTemplate → LLM → OutputParser
  • 支持顺序链(SequentialChain)、分支链(RouterChain)等复杂拓扑

2. Tool(工具)

  • 模型与外部世界的接口抽象,统一为 (name, description, func) 三元组
  • 内置工具:搜索、计算器、数据库查询等
  • 关键设计:通过描述文本让模型自主决策何时调用哪个工具

3. Agent(智能体)

  • 运行时的决策引擎,核心循环:Thought → Action → Observation
  • 实现ReAct模式:模型生成推理轨迹(Thought),决定调用工具(Action),观察结果(Observation),循环直至完成任务
  • 与Chain的区别:Chain是静态管道,Agent是动态决策

模块化设计价值

层面 具体体现
模型无关 统一接口支持OpenAI、Anthropic、本地模型等
组件可插拔 换模型、换向量库、换工具只需改配置
记忆管理 ConversationBufferMemory等抽象简化上下文维护
生态集成 一键接入数百种文档加载器、向量存储

局限与权衡

  • 过度抽象:简单场景引入不必要的复杂度
  • 调试困难:链式调用堆栈深,错误定位难
  • 性能损耗:运行时反射和序列化开销

实际选型建议:快速原型选LangChain,生产环境复杂系统可考虑自研轻量框架或LlamaIndex等替代方案。

学习建议

建议系统学习该知识点

口语版讲法(约4分钟)

  • 一句话定位:编排框架,解决模型能力串起来的问题
  • Chain是静态管道,Agent是动态决策,Tool是外部接口
  • 业务例子:客服退款场景,Chain处理流程,Agent做复杂决策
  • 风险:过度抽象,调试困难,性能损耗
  • 工程师取舍:快速原型用LangChain,生产环境谨慎评估

这道题其实问的是,LangChain到底解决了什么问题。我的理解是,它本质是一个编排框架,不训练模型,而是把模型的能力串起来,让开发者不用从零搭积木。它位于模型层和应用层之间,核心抽象有三个:Chain、Agent、Tool。

先说Chain,就是链。你可以把它理解成静态管道,把几个步骤串起来,比如先写提示模板,再调模型,最后解析输出。这种适合流程固定的场景,比如客服退款的第一步,先识别用户意图,再查订单状态,最后生成话术。Chain的好处是可复用,换个模型改个配置就行。

再就是Agent,智能体。它跟Chain的区别是,Chain是提前定好的路线,Agent是运行时动态决策。它走的是ReAct模式,就是思考、行动、观察循环,直到完成任务。比如用户说“帮我查订单,但订单号我忘了”,Agent会先调用工具查用户信息,再根据结果调订单接口,最后返回。这个循环让模型能应对复杂任务。

然后是Tool,工具。它是模型跟外部世界的接口,抽象成名字、描述、函数三个东西。关键是描述文本,模型靠它自主决定啥时候调哪个工具。比如客服系统里,工具可以是查订单API、计算运费、或者查知识库。

举个例子,一个客服退款场景。用户说“我买的东西坏了,要退款”。如果流程固定,比如先验证订单,再判断退款条件,然后生成退款单,我会用Chain串联。但如果用户说“东西坏了,但我没订单号,而且我想换货”,这就复杂了,我会用Agent让它自己决策,先查用户信息,再调换货工具,最后确认。实际落地往往是Chain和Agent混用,Chain处理标准流程,Agent兜底复杂情况。

这里有个坑,就是LangChain的抽象层级太高,简单场景会引入不必要的复杂度。比如就调一次模型,用Chain反而绕。另外调试很困难,链式调用堆栈深,错误定位麻烦。还有性能损耗,运行时反射和序列化开销不小。所以我的取舍是,快速原型或者POC用LangChain没问题,但生产环境,尤其是高并发低延迟的场景,我会更倾向自研轻量框架或者用LlamaIndex这样更聚焦的工具。

还有一个点是,LangChain的Agent依赖模型本身的推理能力,如果模型不够强,比如小模型,Agent的ReAct循环容易跑偏,这时候我会考虑用更结构化的Function Calling来约束,或者干脆退化成Chain。

所以整体上,我会把LangChain看成是快速验证想法的好帮手,但真要上线,得想清楚复杂度是否值得。如果面试官感兴趣,我可以再聊聊它跟LlamaIndex在检索增强生成场景下的具体对比。

关键一句:LangChain的Agent依赖模型推理能力,模型弱时容易跑偏,可考虑用Function Calling或退化为Chain

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个智能客服,用户问“帮我查一下订单”,然后又说“退货流程怎么走”,这两个请求应该是独立的还是串起来?如果串起来,你会怎么设计这个流程——是用一个固定的处理链,还是让模型自己决定下一步调什么工具?

  2. 问法 2 · 层层追问

    你用过LangChain吧?它那个Chain、Agent、Tool这些概念,你觉得核心解决了什么问题?……如果我要让模型能自己决定用计算器还是查数据库,该用哪个抽象?……那再细一点,Tool的返回值怎么被模型理解?整个循环是怎么跑的?

  3. 问法 3 · 直球架构

    LangChain的核心设计原理是什么?它怎么通过Chain、Agent、Tool这些模块化组件来编排大模型应用?请分别说明这三个抽象的关键作用和它们之间的区别。

同模块相关题目