← 工程化与 LLMOps

LangChain、LlamaIndex 和自研编排层应该怎么选?

高频 中等 应用分层与框架选型 · 第 2 / 4 问 更新于 2026/09/29
LLMOpsLangChainLlamaIndex应用编排
本题落地项目AI Agentic RAG高级企业知识库平台

简化版

LangChain 更偏通用链路编排和 Agent 生态,LlamaIndex 更偏数据连接、索引和 RAG 工作流,自研编排层更适合稳定业务流程和强可控生产系统。选择时看团队成熟度、RAG 复杂度、工具链稳定性、可观测和长期维护成本。

详细版

  • 框架能加速原型,但也会引入抽象层和版本变动成本。
  • RAG 以数据连接、索引、检索、重排为主时,LlamaIndex 往往更顺手。
  • 多工具、多 Agent、多步骤编排时,LangChain 生态更丰富。
  • 生产系统常把核心链路固化为自研轻量编排,只保留框架里的局部能力。
  • 面试回答要能说明“用框架”和“不用框架”的边界。

完整版教学

易错点:框架不是 LLMOps 本身,框架只是帮你组织调用;质量、权限、监控和评测仍要自己负责。

一、选型首先看需要掌控哪些边界

框架选型看的是控制面边界:是否容易替换模型与存储、能否观察每个步骤、异常语义是否清楚,以及升级会不会破坏核心链路。LangChain 偏通用编排,LlamaIndex 偏数据与检索,自研提供控制但需要承担全部治理成本。

这些生态的能力会随版本快速变化,不能把某个组件清单当永久结论。更稳的比较方法是拿同一条业务链路做原型,检查契约、性能、可观测性和退出成本。

二、核心原理和工程边界

LLM 编排框架解决的是“如何把模型、检索、工具、状态和回调串起来”的问题。它们提供标准组件和生态插件,但生产应用的核心风险在于业务边界、版本锁定、异常恢复和可观测。如果业务路径很稳定,自研有限状态机或 DAG 往往更透明。

三、带数字的工程算例

一个知识库问答 demo 可能 2 天用框架搭好;但如果线上有 30 个工具、5 种用户角色、3 个模型供应商和严格审计要求,框架默认抽象可能遮住关键控制点,自研编排反而更容易定位问题。

选择收益 = 原型速度 + 生态能力 - 抽象成本 - 版本风险 - 调试成本
RAG 重数据管道 => LlamaIndex 倾向更强
多工具工作流 => LangChain 倾向更强;稳定核心链路 => 自研更强

四、典型链路怎么跑

可以把这类问题拆成下面的链路来理解:

需求拆解
   |
是否以 RAG 数据管道为核心?
   | yes -> 评估 LlamaIndex
   | no
是否多 Agent/多工具快速实验?
   | yes -> 评估 LangChain
   | no -> 轻量自研编排

五、方案对比和选择标准

方案优势代价
LangChain生态广、Agent 组件多抽象复杂、版本变化快
LlamaIndex数据连接和索引友好非 RAG 流程不一定轻
自研编排可控、可观测、稳定前期开发成本更高
混合使用吸收生态能力边界设计要清楚

六、上线后最容易出问题的地方

  • 不要让业务核心链路被黑盒 callback 淹没,否则线上排障很痛苦。

  • 框架升级要有回归评测,prompt、retriever 和 parser 的细小变化都可能影响答案。

  • 生产代码要把业务接口与框架对象隔离,避免 Prompt、文档节点或回调类型渗透到领域层。

七、怎样做可退出的 Bake-off

选一条包含检索、一次工具调用、流式输出和失败恢复的代表链路,用候选框架分别实现。固定模型与数据,比较开发时间、额外延迟、Trace 完整性、异常可控性、升级破坏和测试难度。

领域层只依赖自定义接口,例如 Retriever、ModelClient 和 ToolExecutor;框架对象不穿透边界。这样即使最后选择框架,也能用契约测试逐个替换组件,避免被某次版本升级锁死。

八、常见误区与追问

  • 误区:用了 LangChain 就等于有了 Agent 能力。 框架只提供组件与编排抽象,是否让模型动态决策取决于应用代码和权限边界。
  • 误区:LlamaIndex 只能做简单向量检索。 它还包含摄取、索引、路由、结构化数据与检索后处理等能力,但仍需按版本核对具体实现。
  • 误区:自研一定比框架更可靠。 自研减少黑盒却增加测试、观测、兼容和维护负担,可靠性来自工程能力而非所有权。
  • 追问:生产中为什么常做框架瘦身? 减少隐式重试和多层回调,只保留稳定组件,使链路、延迟和故障归因更清楚。
  • 追问:如何迁移掉框架里的某个组件? 先定义独立接口和契约测试,用影子流量对比新旧实现,再按路由逐步切换。
  • 追问:框架选型要看哪些非功能指标? 看可观测性、版本兼容、扩展点、异步与流式支持、序列化安全、社区维护和退出成本。

九、加强记忆

把选型记成“三问”:是不是重 RAG,是否要快速试多工具,核心链路是否要求强可控。框架帮你快,自研帮你稳,成熟系统常常两者混用。

项目实战落地

项目里怎么做的

《AI Agentic RAG高级企业知识库平台》的技术主线是 LangChain 1.x + LangGraph,但不是每一环都交给框架,按「框架覆盖得好不好」逐项决定:

环节用什么原因
对话模型、向量模型langchain-openai 的 ChatOpenAI、OpenAIEmbeddings百炼兼容 OpenAI 协议,换 base_url 和 api_key 就能用,不需要专门的 SDK
Agentic 链路LangGraph 状态图检索、相关性判断、改写和兜底之间有条件边和环,由状态决定下一步
重排httpx 调 DashScope 原生接口,再包装成 LangChain 组件百炼的重排不在 OpenAI 兼容模式下,官方也没有 LangChain 集成
评测指标自己实现,四个指标不到两百行主流评测库没有迁移到 LangChain 1.x,装上去 import 都过不了

ai_model_config 表里的 protocol 字段决定调用走哪条路径:「OpenAI兼容」走 langchain-openai,「DashScope原生」走 httpx。重排组件怎么包装,见「RAG 中为什么需要 Reranker?Bi-Encoder 和 Cross-Encoder 有什么区别?」。

《AI Agent智能会议纪要辅助系统》也是同样的分法:纪要生成、说话人匹配、纪要自检三处文本模型调用统一走 LangChain 的 ChatOpenAI;音视频转写是「上传音频、提交异步任务、轮询结果」的专用接口,LangChain 不覆盖,直接用 HTTPX 发请求。

为什么这样取舍

  • 评测自己写。 除了装不上,项目教程还给了两条理由:自己实现的代码只依赖对话模型接口,不会因为评测库改 API 而跑不通;每个分数怎么算出来的都看得见。
  • 不为一个库降级整套栈。 LangChain 1.x + LangGraph 是整个项目的主线,评测库不兼容时换掉的是评测库,而不是把主线降级。
  • 覆盖不到的接口直接调 HTTP。 转写和重排都是服务商的专用接口,框架没有现成封装,就按服务商的接口直接发请求;重排要接进检索链路,所以再包一层 LangChain 的标准组件,转写只在自己的服务里用,不需要这一层。

面试官还会追问

  • 重排组件继承的抽象基类要求实现同步方法,项目里的同步方法为什么直接抛 NotImplementedError?
  • 批量评测为什么默认只跑 20 条用例?一轮评测的 Token 主要花在哪里?

学完《AI Agentic RAG高级企业知识库平台》,上面这些追问你都会迎刃而解。

本题落地项目地狱锤炼AI Agentic RAG高级企业知识库平台基于企业知识库、PGVector 向量检索、Agentic RAG、FastAPI + LangGraph、Function Calling,实现向量 + BM25 混合检索与 RRF 融合、Rerank 重排、HyDE 与多查询改写、父子分块召回、LangGraph 状态图自适应检索、Agent 执行时间线和 LLM-as-judge 四指标评测,覆盖从基础 RAG 到高级 RAG 调优的完整闭环。FastAPILangChainLangGraphRAGPGVector源码+SQL喂饭学习教程配套面试文档环境安装文档项目运行文档 学习这个项目 也可以学AI Agent智能会议纪要辅助系统地狱锤炼 查看项目