这道题其实问的是,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在[[检索增强生成]]场景下的具体对比。