面试官问[[Agent]]框架对比,我觉得本质上不是考你背几个框架名字,而是看你面对真实业务场景时有没有选型能力。说白了,框架只是工具,关键是你知道什么场景该用哪个,以及它们怎么配合。
我先说两个最主流的。LangChain和LlamaIndex,很多人把它们放一起比,但我更倾向于把它们看成上下游关系。LangChain的定位是通用编排框架,它擅长的是把LLM调用、工具调用、记忆管理这些东西串成一条工作流。比如[[ReAct]]模式、Plan-and-Execute,LangChain都给你封装好了,你直接用就行。但它的检索能力其实不强,它依赖外部[[向量库]],自己只做高层封装,比如RetrievalQA这些。
LlamaIndex正好反过来,它的核心就是数据检索。它支持100多种数据源加载,索引类型特别丰富,有向量索引、树索引、关键词索引,还能组合索引。它的检索策略也很深,比如[[Hybrid Search]]、[[Rerank]]、子问题分解这些。所以纯[[RAG]]场景,LlamaIndex是首选,检索精度和效率都优化得很到位。但它的Agent能力相对轻量,虽然也有OpenAIAgent,但复杂决策还是得靠LangChain。
那真实业务里怎么用呢?我举个例子,企业智能客服。比如用户问“我买的商品降价了,能退差价吗?”这个场景,你会需要两个能力:一个是检索产品手册里的退换货政策,另一个是调用订单API查用户订单状态。LlamaIndex负责建索引,把产品手册切分成段落,同时用关键词索引和向量索引做混合检索,这样用户说“降价”能匹配到政策,说“退差价”也能匹配。然后LangChain Agent来做决策,它判断用户意图:如果直接能回答,就从LlamaIndex检索结果里取;如果需要查订单,就调订单API;如果问题复杂,再转人工。这样两个框架配合,一个管数据,一个管流程,各司其职。
这里有个坑,就是落地时你得注意前提。LlamaIndex检索质量好不好,取决于你的[[Chunk]]策略和[[Embedding]]模型。如果文档结构复杂,比如条款里有很多例外情况,简单切分就会漏信息。我一般会用[[Parent Document]]的方式,先把大块文档索引起来,检索时先找小片段,再回溯到父文档,这样上下文完整。另外,[[Hallucination]]风险也很高,Agent如果调错API或者检索结果不相关,就会乱回答。所以上线前我会做一套回放测试,拿历史对话去测,看召回率和回答准确率,不达标就调参数。
还有一个点值得注意,就是多Agent协作。比如客服场景里,可能需要一个Agent专门处理退款,另一个处理物流查询,它们之间怎么通信、怎么避免冲突,这个LangChain和AutoGen都在做,但还没有特别成熟的方案。我自己试过用LangGraph定义状态机来协调,但复杂度上来了,维护成本也高。
所以总结一下我的选型倾向。如果项目是纯RAG,比如知识库问答,我直接上LlamaIndex,检索做深一点,Agent用简单的ReAct就行。如果要做复杂工作流,比如多步推理、多工具调用,我会用LangChain做编排,但检索层还是会交给LlamaIndex或者自己封一个检索模块。我更倾向把检索和编排解耦,这样出了问题好排查,也方便换组件。最后再补一句,框架变化很快,别死记API,理解它们的设计哲学和适用边界更重要。