智能体面试准备(八):LangChain / LlamaIndex / CrewAI 深度对比——架

发布时间:2026/7/28 11:56:03
智能体面试准备(八):LangChain / LlamaIndex / CrewAI 深度对比——架 智能体面试准备八LangChain / LlamaIndex / CrewAI 深度对比——架构哲学、代码范式与选型答题框架系列第二篇曾从宏观视角对比过 LangChain/AutoGPT/MetaGPT/AutoGen 四个框架的定位。这一篇往深处走聚焦当前生产环境使用率最高的三个技术栈——LangChain含 LangGraph、LlamaIndex、CrewAI从架构哲学、核心抽象、代码范式三个层面拆解并给出面试选型题的标准答题框架。这类题在面试里的真实形态往往不是介绍一下 LangChain而是你为什么用 X 不用 Y或让你搭一个 XX 系统你选什么框架——考的是技术判断不是文档背诵。一、三个框架的出身决定了架构哲学理解框架先看它为解决什么问题而生这决定了它的核心抽象和能力边界。LangChain为编排而生。2022 年底诞生最初的核心抽象是 Chain链——把提示词、模型调用、输出解析串成可复用的流水线后来发展出 LCEL管道式声明语法。它想当 LLM 应用的全家桶胶水层模型接入、提示词管理、工具、记忆、检索全都有封装。2024 年起重心转向LangGraph——用状态机/图来建模 Agent 工作流节点是计算步骤边是流转条件共享一个显式 State。LangGraph 解决了老版 AgentExecutor 黑盒循环不可控的痛点支持循环、分支、人工审批中断、状态持久化checkpoint是三者中控制粒度最细的。LlamaIndex为数据而生。前身叫 GPT Index出发点是怎么把私有数据喂给 LLM。核心抽象全是数据侧的Document/Node文档与切块、Index索引结构、Retriever检索器、Query Engine查询引擎。它在 RAG 这条线上的深度无出其右几十种索引结构向量、树状、关键词、知识图谱、层级检索、句子窗口检索、自动合并检索等高级策略开箱即用。Agent 能力ReActAgent、FunctionAgent、AgentWorkflow是后来补的定位偏向以数据查询为中心的 Agent。CrewAI为角色协作而生。2023 年底出现抽象直接映射人类团队Agent带 role/goal/backstory 的角色、Task任务、Crew团队、Process协作流程顺序/层级。它赌的是多 Agent 协作会成为主流形态把角色分工范式做到了极致的易用——几十行代码就能跑起一个研究员写手团队。底层不依赖 LangChain自研核心近年补上了 Flows事件驱动的确定性编排来对标 LangGraph 的精细控制。一句话总结哲学差异LangChain/LangGraph 把 Agent 建模为图上的状态流转LlamaIndex 把 Agent 建模为数据查询的智能路由CrewAI 把 Agent 建模为团队里的角色。二、核心维度对比表维度LangChain LangGraphLlamaIndexCrewAI核心抽象Graph / Node / Edge / StateIndex / Retriever / QueryEngineAgent / Task / Crew / Process架构哲学显式状态机控制流优先数据管道优先查询为中心角色协作优先拟人化分工RAG 能力有但偏基础组件拼装最强高级检索策略最全弱常内嵌 LlamaIndex 补足多 Agent 支持LangGraph 手工搭灵活但代码多AgentWorkflow较新开箱即用顺序/层级流程控制粒度最细每条边可编程、可中断中粗高抽象深度定制要下钻状态持久化Checkpoint 机制成熟断点续跑/时间旅行有基础支持Flows 提供部分能力学习曲线陡概念多、版本变动快中RAG 场景内平缓最平缓半天可出 demo可观测性LangSmith生态最成熟回调体系第三方集成内置日志第三方集成适合场景复杂工作流、需人工审批、状态机类业务知识库问答、文档密集型应用内容生产、调研报告等角色分工任务主要风险抽象层厚、调试心智负担大Agent 编排能力相对年轻高抽象牺牲灵活性、复杂场景易顶到天花板面试画这张表时重点强调三行RAG 能力、多 Agent 支持、控制粒度——这三行基本决定选型。三、同一任务三种写法代码范式对比看代码范式最能体现框架气质。任务检索资料并生成摘要报告。LangGraph 风格——显式状态机伪代码骨架突出图结构from typing import TypedDict class State(TypedDict): query: str; docs: list; report: str; approved: bool def retrieve(state): return {docs: search(state[query])} def write(state): return {report: llm_write(state[docs])} def review(state): return {approved: llm_review(state[report])} # graph.add_node(retrieve, retrieve) ... add_conditional_edges( # review, lambda s: write if not s[approved] else END) # 特点流程即图每步可断点、可回放、可插人工审批CrewAI 风格——角色声明研究员 Agent 写手 AgentCrew 按顺序流程执行开发者不写控制流框架内部调度。LlamaIndex 风格——查询引擎先VectorStoreIndex.from_documents(docs)建索引再index.as_query_engine().query(...)Agent 只是包在查询引擎外面的一层路由。下面给一段可直接运行的代码——不依赖任何框架实现三个框架共同的底层机制工具路由 状态流转用来向面试官证明你理解框架在替你做什么这也是框架黑盒论的最好回应import json class MiniGraph: LangGraph 核心机制的极简复刻节点条件边共享状态 def __init__(self): self.nodes, self.edges {}, {} def add_node(self, name, fn): self.nodes[name] fn def add_edge(self, src, router): router: state - 下一个节点名 或 END self.edges[src] router def run(self, entry, state, max_steps20): cur, trace entry, [] for _ in range(max_steps): state.update(self.nodes[cur](state) or {}) trace.append(cur) nxt self.edges[cur](state) if nxt END: state[__trace__] -.join(trace [END]) return state cur nxt raise RuntimeError(超过最大步数疑似死循环) # ---- 用 MiniGraph 搭检索-写作-审查-不过关则重写工作流 ---- def retrieve(s): return {docs: [f关于「{s[query]}」的资料{i} for i in range(3)]} def write(s): version s.get(version, 0) 1 return {report: f[v{version}] 基于{len(s[docs])}份资料的报告, version: version} def review(s): return {approved: s[version] 2} # 模拟第一版打回第二版通过 g MiniGraph() g.add_node(retrieve, retrieve) g.add_node(write, write) g.add_node(review, review) g.add_edge(retrieve, lambda s: write) g.add_edge(write, lambda s: review) g.add_edge(review, lambda s: END if s[approved] else write) result g.run(retrieve, {query: Agent框架选型}) print(json.dumps(result, ensure_asciiFalse, indent2)) # __trace__: retrieve-write-review-write-review-END这 40 行代码就是 LangGraph 的心智模型状态字典 节点函数 条件路由。运行输出的__trace__展示了审查不通过→回到写作节点的循环——这正是老式线性 Chain 做不到、而 Agent 工作流必需的能力。面试时给出这个实现再说LangGraph 在此之上加了持久化 checkpoint、并行分支、人工中断和 tracing理解深度立刻和背文档的候选人拉开差距。四、选型答题框架四问定位法面试官问你会选哪个框架用四个问题定位展示的是决策方法而不是站队第一问任务的核心复杂度在哪复杂度在数据侧异构文档、检索质量决定成败→ LlamaIndex复杂度在流程侧多步骤、条件分支、需要人工审批→ LangGraph复杂度在分工侧多角色产出内容→ CrewAI。第二问对控制粒度的要求金融、医疗等强合规场景要求每一步可审计、可中断、可回放 → LangGraph 的 checkpoint 和 human-in-the-loop 是刚需内部工具或 demo → CrewAI 的高抽象反而是生产力。第三问团队工程能力与项目周期一周出原型验证价值 → CrewAI/LlamaIndex 高层 API长期演进的核心系统 → 宁可用 LangGraph 甚至自研薄框架避免被厚抽象锁死。第四问要不要框架这是最加分的一问。主动说框架不是必选项。OpenAI 的 Swarm/Agents SDK 与 Anthropic 的工程实践都提倡能用简单可组合模式就不上重框架。自研薄层几百行LLM 调用 工具注册 状态机 tracing换来完全可控和零升级绑架代价是要自己造持久化、重试、观测的轮子。判断标准当框架文档阅读时间超过自己实现核心循环的时间且业务对可控性敏感就该考虑自研——上面那个 MiniGraph 就是证明成本没那么高的论据。回答模板30 秒版我会先看复杂度落点数据密集选 LlamaIndex流程密集选 LangGraph角色分工型选 CrewAI再看合规与控制粒度要求核心长期系统我会评估自研薄框架。我在 XX 项目里选了 XX因为 XX——踩过的坑是 XX。最后这句项目落点必须有否则前面全是纸上谈兵。五、高频追问与避坑LangChain 被很多人骂抽象过度你怎么看——承认批评有依据早期 AgentExecutor 黑盒、版本破坏性变更频繁但要指出 LangGraph 已转向显式控制流且 LangSmith 生态是生产可观测性的现实优势。辩证回答不跟风踩。CrewAI 和 AutoGen 的多 Agent 有什么区别——CrewAI 是角色任务的结构化分工流程可预定义AutoGen 是对话驱动的自由协作Agent 间聊天推进任务前者可控性强后者灵活但终止条件难控。LlamaIndex 和 LangChain 能一起用吗——能且常见LlamaIndex 做检索层Query Engine 封装成工具LangGraph 做编排层。框架不是排他的按层组合是生产常态。框架升级导致代码崩过吗——诚实答并给出防御手段锁版本、把框架 API 收敛到自己的适配层adapter里业务代码不直接 import 框架符号。下一篇进入工作流编排DAG 与状态机的工程实现。