免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_7.[第1章 RAG基础概念] RAG技术栈选型指南:LlamaIndex、LangChain还是Haystack

【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_7.[第1章 RAG基础概念] RAG技术栈选型指南:LlamaIndex、LangChain还是Haystack 还在纠结用哪个框架选错技术栈你的RAG项目可能从第一天就埋下了“祖传代码”的雷本文一次讲透三大主流框架的底裤让你少踩坑、少加班、早下班。RAG技术栈选型指南1 框架出身与人设2 数据摄取与索引3 查询编排与链式调用4 检索与生成精度5 生态与可维护性6 选型决策树LlamaIndex 数据狂魔LangChain 编排鬼才Haystack 搜索老兵文档解析脏活索引构建策略Chain设计Agent支持向量检索重排序与混合社区与文档版本稳定性场景匹配团队能力文字目录框架出身与人设三大框架的出厂设置与底层基因数据摄取与索引谁能把脏活累活干得更漂亮查询编排与链式调用复杂流程谁搭积木更顺手检索与生成精度核心RAG的最后一公里谁更稳生态与可维护性社区、文档、Debug谁让你不秃头选型决策树对号入座找到你的真命框架嗨大家好呀我是你的老朋友精通代码大仙。接下来我们一起学习 《大模型RAG生成式AI开发实战》7.[第1章 RAG基础概念] RAG技术栈选型指南LlamaIndex、LangChain还是Haystack。俗话说得好框架选得好下班下得早框架选得烂Debug到半夜。你是不是也这样——打开GitHub看着LangChain那好几万的star又瞅见LlamaIndex社区里热火朝天的讨论再翻翻Haystack那专业得像论文的文档心里直打鼓这仨到底该翻谁的牌子选错了项目写到一半发现框架根本hold不住需求重写吧时间没了硬着头皮写吧代码越堆越像意大利面条。这种焦虑我太懂了。今天这篇就是来给你指条的明路。1 框架出身与人设三大框架的出厂设置与底层基因很多新手一上来就对比哪个性能好、哪个star多这就好比你去相亲不问对方是什么性格只问对方工资多少。LlamaIndex、LangChain、Haystack这三个框架的原生家庭完全不同。LangChain诞生于2022年创始人Harrison Chase的目标是解决怎么把大模型串起来的问题。它的核心抽象是Chain、Prompt、Agent、Memory。它本质上是一个LLM应用编排框架RAG只是它支持的众多场景之一。LlamaIndex诞生于2022年底创始人Jerry Liu一开始就是冲着怎么让大模型读懂我的私有数据去的。它的核心抽象是Index、Node、Retriever、QueryEngine。它从一开始就是RAG原生框架。Haystack的资历更老诞生于2019年由Deepset团队开发。它最初是为了解决传统搜索引擎如ElasticSearch如何结合深度学习模型的问题。Pipeline、Component、Document Store是它的核心。它的基因是企业级语义搜索。渲染错误:Mermaid 渲染失败: Parsing failed: Lexer error on line 2, column 5: unexpected character: -L- at offset: 25, skipped 15 characters. Lexer error on line 3, column 5: unexpected character: -L- at offset: 50, skipped 14 characters. Lexer error on line 4, column 5: unexpected character: -H- at offset: 74, skipped 14 characters. Parse error on line 2, column 21: Expecting token of type EOF but found :. Parse error on line 3, column 20: Expecting token of type EOF but found :. Parse error on line 4, column 20: Expecting token of type EOF but found :.新手最容易犯的错误就是拿着锤子找钉子。我见过太多这样的案例了。你接了一个需求做个公司内部知识库问答。你打开GitHub发现LangChain的star最多教程最多于是直接开干。你开始写各种Loader、Splitter、Embedding、VectorStore、RetrievalQA。三天后代码跑起来了但你的代码里已经有几百行配置而且你发现要改个检索策略得翻好几个文件的Chain定义。Meanwhile你的同事用LlamaIndex可能五十行就搞定了。因为LlamaIndex把数据到索引到查询这个链路封成了原子能力。你本来不需要写那么多编排代码但因为你选了LangChain你就得为灵活性支付代码复杂度的代价。反过来也成立。如果你要做的是一个多Agent协作系统需要调用API、查数据库、读文档、然后让GPT-4和Claude分工协作。这时候你用LlamaIndex你会发现它的Agent和Tool抽象虽然能用但不如LangChain的LCEL表达起来那么丝滑。你又会陷入明明我想拼个复杂乐高但手里的积木块接口对不上的窘境。这就是选错舒适区的代价。不是框架不好是你把它用在了不属于它的战场上。我的建议是在你写第一行pip install之前先在纸上画三个圈。第一个圈写我的核心痛点是数据。如果你的项目是各种格式的文档想要快速构建索引、做高级检索、少写代码那你应该先看LlamaIndex。它是数据增强取向。第二个圈写我的核心痛点是流程。如果你的项目需要复杂的业务逻辑、多步骤判断、多模型切换、工具调用、条件路由那你应该先看LangChain。它是流程编排取向。第三个圈写我的核心痛点是搜索。如果你的项目更接近语义搜索比如替代ElasticSearch做更聪明的搜索需要BM25和向量的深度融合那Haystack可能是你的菜。它是搜索流水线取向。记住一句话LlamaIndex是数据狂魔LangChain是编排鬼才Haystack是搜索老兵。认清楚框架的原生基因你才能在正确的战场上用正确的兵器。2 数据摄取与索引谁能把脏活累活干得更漂亮RAG圈子里有一句黑话Garbage in, garbage out。你喂给模型的是乱的、脏的、切得支离破碎的上下文它吐出来的也只能是胡言乱语。很多新手把百分之八十的时间花在调Prompt和换模型上但只有百分之二十的时间处理数据。这其实搞反了。新手对数据摄取的认知往往停留在把文档扔进去。我举个例子。你拿到一份五十页的产品手册PDF格式。你直接用了某框架的PDFLoader加载完直接切分每个chunk一千字符然后嵌入。这看起来没问题对吧但实际跑起来你会发现表格里的内容全乱了。第一行是表头第二行被切到了下一个chunk导致产品型号和价格永远对不上。页眉页脚的水印文字被当成了正文内容检索时经常命中这些无意义文字。文档里的图片和流程图要么被直接忽略要么被OCR成了一堆乱码。代码块和正文混在一起切分的时候把一段完整的代码切成了两段导致检索出来的代码片段无法运行。这就是脏活累活没处理好。更惨的是LangChain虽然Loader生态最广号称三百多种数据源但它的Parser和Splitter是相对原子化的。你经常需要手动组装Loader读进来DocumentTextSplitter切VectorStore存。这个过程中每一步的参数你都得自己调。比如用LangChain的CharacterTextSplitter你需要指定chunk_size和chunk_overlap。这个overlap设多少百分之十百分之二十没有经验的新手只能拍脑袋。拍错了检索效果直接崩盘。再看看三大框架的数据处理能力。LlamaIndex在数据摄取上下了大功夫。它的核心概念是Node。IngestionPipeline允许你把数据转换器串起来Reader、NodeParser、MetadataExtractor、Embedding、VectorStore。而且它的NodeParser策略非常丰富。SentenceSplitter按句子边界切保留语义完整性。TokenTextSplitter按token数切对大模型上下文更友好。HierarchicalNodeParser是父子节点切分检索时先找父节点定位再找子节点精读这是高级RAG的标配。MarkdownNodeParser针对Markdown文档按标题层级切分保留结构。CodeSplitter针对代码文件按函数、类切分。如果你数据源复杂特别是有很多非结构化文档LlamaIndex的数据治理能力通常能让你少写很多代码。Haystack的数据处理能力被低估了。Haystack的Document对象有清晰的content和meta字段。它的Converter层非常成熟PDFToDocument、DOCXToDocument、TextFileToDocument对PDF的表格、HTML标签的清洗能力很强。它的DocumentCleaner和DocumentSplitter是Pipeline中的标准组件可视化程度高。如果你原本就是搜索团队的习惯了ES那套文档预处理Haystack会让你觉得很亲切。LangChain的强项是接入不是处理。它的BaseLoader生态确实无人能敌从Notion到飞书到GitHub到数据库都有Loader。但Load进来之后怎么处理LangChain提供的原子操作比较多需要你自己组装。你可以用UnstructuredPDFLoader做更精细的PDF解析但那不是LangChain原生而是集成了Unstructured库。本质上LangChain在这里更像一个胶水层。所以如果你的数据是五花八门、格式复杂LlamaIndex和Haystack的文档解析和结构化能力通常更省心。如果你的数据是来源广泛、但格式相对规整LangChain的Loader生态能让你最快接进来。别把数据当二等公民选个能把脏活累活干漂亮的框架RAG就成功了一半。3 查询编排与链式调用复杂流程谁搭积木更顺手最简单的RAG是直来直去的用户问一个问题去向量库找相关文档塞进Prompt大模型回答。但真实业务很少这么简单。你可能需要判断用户是在闲聊、问技术问题、还是查订单状态。如果是技术问题是去查产品文档、技术白皮书、还是历史工单检索回来的内容不够怎么办是换关键词再搜还是调用搜索引擎最后生成答案时需不需要让模型先列出引用来源这些流程就是查询编排。新手写复杂RAG很容易写出意大利面条代码。我见过一个小伙他要做这么一个功能用户提问后系统先去本地知识库检索如果置信度低于零点七就去搜百度如果百度也没找到就回答不知道如果找到了就让大模型总结并给出引用。他用原生Python写代码里嵌套了五层if-else还套了两个try-except。每个分支都要手动组装Prompt、调API、解析结果。一周后他自己都看不懂这堆代码了。后来他换成了某框架发现框架的路由抽象和链式调用能帮他把这团面条捋直。但问题在于不同框架的捋顺能力是不一样的。LangChain在这块是目前的王者。它的LCEL真的非常香。你可以把LLM、Prompt、Retriever、Tool、甚至自定义函数都统一成Runnable对象。然后用管道符号把它们串起来。举个例子chainroute|retriever|prompt|llm这看起来像Unix管道非常直观。而且LangChain原生支持RouterRunnable、ParallelRunnable、Map-Reduce等模式。做复杂的Agent、多工具调用、条件分支LangChain的表达力是最强的。LlamaIndex的编排方式走的是高层抽象路线。它提供QueryEngine和Tool的概念。你可以把不同的索引封装成QueryEngine然后用RouterQueryEngine做路由。它也有SubQuestionQueryEngine把大问题拆成小问题和MultiStepQueryEngine多步推理。这些高级能力非常RAG场景化开箱即用。但如果你想做一些非RAG的奇怪流程比如先调Stripe API查账单再查文档再发邮件LlamaIndex的抽象层可能不如LangChain那么灵活。新版LlamaIndex推出了Workflow基于事件驱动的异步编排这是个好方向但生态还在快速演进中部分API可能变动。Haystack的编排是Pipeline-based。你定义好components如Retriever、Reader、Ranker、PromptNode然后用pipeline.connect把它们按DAG连起来。这种设计在搜索流程这个特定领域非常清晰、可观测。你可以在Pipeline里清晰地看到数据流。但Haystack的Pipeline更适合静态流程。如果你需要动态分支、条件循环、或者运行时决定走哪条路Haystack写起来会比较费劲你需要自定义Component。所以我的建议是如果你的RAG流程是检索到生成这种标准DAGHaystack很清晰。如果你的RAG流程是复杂的条件分支、多Agent、多工具调用LangChain目前最顺手。如果你主要是RAG场景但想要一些开箱即用的高级策略如子问题分解、多路召回LlamaIndex的QueryEngine更贴心。编排能力决定了你的RAG天花板别让框架成为你的瓶颈。4 检索与生成精度核心RAG的最后一公里谁更稳很多新手把RAG简单理解为向量搜索加大模型生成。这其实只做了RAG的骨头没有摸到灵魂。真正的RAG高手都在死磕检索环节怎么让检索器找得准、找得全、不找偏。只用基础向量检索你的RAG就是裸奔。假设你做了一个电商客服RAG。用户问你们这款手机的续航怎么样你的向量检索可能返回了三个chunk第一个是手机A的外观设计介绍提到了轻薄第二个是手机B的电池容量说明五千毫安时第三个是手机A的价格信息。为什么因为续航和电池、轻薄在向量空间里可能距离相近。但检索回来的内容只有第二个是真正相关的而且第二个还可能是手机B的信息不是用户问的那款。更可怕的是如果你不做重排序直接把这三个chunk塞给大模型模型可能会把手机B的电池和手机A混淆给出一个错误答案。这只是检索环节的一个坑。还有长文档的上下文分散问题答案在第十页但检索只回了第三页的内容。还有多义词问题苹果是水果还是公司。还有最新信息问题向量库里的文档已经过时了。看看三大框架在检索精度上的家底。LlamaIndex在RAG高级策略上堪称军火库。它几乎把学术界的高级RAG论文都实现了。自动合并检索把文档切成父子节点检索时先匹配子节点返回时把父节点上下文带回来解决上下文断裂。多路召回与重排序原生支持VectorIndexRetriever加BM25Retriever混合再经过CohereRerank或SentenceTransformerRerank精排配置几行代码就能搞定。子问题生成把复杂问题拆成多个子问题分别检索再汇总答案适合多文档对比分析。假设性文档嵌入让模型先根据问题生成一个假设答案再用假设答案去检索提升相关性。还有Metadata过滤与路由通过元数据先缩小检索范围。在LlamaIndex里这些不是第三方插件而是原生API。这对新手极其友好因为你不需要读论文、写算法调个参数就能用上前沿技术。LangChain在检索上的策略是组合式。它提供了MultiQueryRetriever生成多个query去检索ContextualCompressionRetriever上下文压缩EnsembleRetriever多检索器融合。这些能力也很强但你需要自己组装。比如要做重排序你需要额外引入CohereRerank或自己写LangChain本身只提供了接口和少量集成。它的优势在于灵活性劣势在于需要你自己拼乐高。Haystack的检索能力是其祖传手艺。它的Pipeline设计让检索环节的优化非常专业。原生支持BM25Retriever和EmbeddingRetriever的混合检索。SentenceTransformersRanker节点可以无缝接入Pipeline。支持QueryClassifier查询分类把问题路由到不同检索策略。对DocumentStore如ElasticSearch、OpenSearch、Weaviate的集成非常深适合已有搜索基础设施的团队。如果你原本就是搞搜索引擎的Haystack的检索粒度控制会让你感觉如臂使指。LlamaIndex是RAG高级玩法的开箱即用版Haystack是搜索精度的专业调音台LangChain则给了你自己搭舞台的积木。5 生态与可维护性社区、文档、Debug谁让你不秃头代码能跑通是demo代码能维护才是项目。新手选框架往往只关注功能有没有但很少关注出了问题怎么办。RAG项目不是一锤子买卖你要面对的是版本升级、线上bug、新同事接手、需求变更。这时候框架的社区、文档、稳定性就成了你的救命稻草或者催命符。在生态荒漠里Debug是程序员最孤独的时刻。我举一个真实的例子。小钱的团队去年用LangChain搭了一个RAG系统。当时LangChain零点一版本。半年后LangChain升级到零点二版本大量API被标记为legacy或deprecated。PromptTemplate的导入路径变了RetrievalQA链被推荐改用create_retrieval_chain。小钱的团队花了整整两周做迁移改了一百多个文件。更头疼的是LangChain的抽象层级很多。你Debug的时候一个调用链可能要跳七八层User Question到Chain到Runnable到Prompt到LLM到OutputParser到Retriever。当你发现某个结果不对时你很难在中间某一层打断点看数据流。这种黑盒感很折磨人。当然LangChain社区确实大你遇到问题去StackOverflow搜大概率有人问过。但问题在于你搜到的答案可能是零点一版本的而你用的是零点二版本。版本混乱是LangChain生态的一个痛点。再说Haystack。Haystack的文档其实写得很好很工程化。但国内用Haystack的人太少了。你去搜Haystack RAG报错中文结果可能只有个位数。你遇到一个问题可能得去GitHub Discussion里用英文提问。对于英语不好的同学这种孤独感会直接劝退。LlamaIndex的社区增长很快RAG领域的文档是最全面的。但LlamaIndex也在快速迭代从一个Index库扩展成Agent框架、Workflow引擎API的广度在膨胀。新手有时候会被它庞大的概念体系搞得有点晕。如果你是一个人做项目或者团队很小那LangChain的丰富生态能让你快速找到解决方案。但你得做好版本锁定和封装隔离。建议把LangChain的调用封装在自己的Adapter层里不要让它扩散到每个业务文件。这样升级时只需要改Adapter。如果你团队里有搜索背景的老兵Haystack的Pipeline可观测性会很强。每个Component的输入输出都是标准化的Document或Answer对象Debug时你可以很容易地看到Pipeline中间产物。但你需要确保团队能接受英文文档加小众社区的现实。如果你团队是RAG新手想要一个概念清晰、文档友好的框架LlamaIndex是最佳选择。它的核心概念Index存数据QueryEngine查数据非常直观。而且LlamaIndex的文档里RAG的案例是最丰富的从基础到高级手把手教学。另外还要考虑招人这个现实问题。如果你在中国招Python工程师写LangChain和LlamaIndex的简历相对多写Haystack的少。这也是隐形成本。生态是护城河也是绊脚石。选一个让你的团队现在能跑通、未来能维护的框架比选一个功能最全的框架更重要。6 选型决策树对号入座找到你的真命框架说了这么多直接给你一张导航地图按图索骥不迷路。我知道看完上面的对比你可能还是会有点晕。我既要处理复杂PDF又要做多Agent还要保证搜索精度到底该选谁别慌选型不是选美是匹配度测试。选择困难症的根源是既要又要还要。很多新手做选型时列出的需求是要支持各种文档格式、要检索准确、要代码简单、要社区活跃、要方便扩展、要稳定不升级。这世上没有这样的完美框架。如果你抱着找完美框架的心态你会在三个框架之间反复横跳最后每个都只学了皮毛。我画了一张决策图帮你快速定位数据复杂快速RAG流程复杂Agent编排企业搜索ES替换是否是否开始选型核心痛点是什么选 LlamaIndex选 LangChain选 Haystack还需要复杂AgentLlamaIndex为主 LangChain为辅LlamaIndex 一把梭数据格式是否极复杂LangChain为主 LlamaIndex处理数据LangChain 一把梭Haystack Pipeline 稳扎稳打更具体的场景建议场景一个人开发者、创业公司MVP、内部知识库。你的数据是PDF、Word、网页想快速搭一个能用的问答系统。选LlamaIndex。它让你用最少的代码获得最高的RAG数据质量。VectorStoreIndex.from_documents和as_query_engine这两行代码能帮你撑过从零到一。场景二AI应用平台、多模型中间件、复杂Tool调用。你需要对接多个模型GPT-4、Claude、本地模型需要复杂的权限控制、多轮对话、工具调用、多Agent协作。选LangChain。LCEL的编排能力加上它庞大的集成生态是构建复杂LLM应用的瑞士军刀。场景三企业级语义搜索、传统搜索团队转型。你们原本有ElasticSearch团队现在想上语义搜索。你们需要BM25加向量的混合检索需要严格的检索精度控制需要可观测的搜索Pipeline。选Haystack。它的设计哲学和搜索团队的工作流天然契合。场景四团队协作、长期维护。团队有三到五个后端工程师RAG只是系统的一部分。建议LlamaIndex或LangChain取决于RAG的复杂度。如果RAG只是简单检索LlamaIndex概念少维护成本低。如果RAG是核心业务且流程复杂LangChain生态更不容易踩到无人区的坑。场景五什么都不确定只想先跑起来。选LlamaIndex。它的学习曲线在入门阶段是最平缓的。你不需要理解复杂的Chain概念先让数据跑通看到效果建立信心。最后我还想多说一句这三个框架并不是互斥的。很多生产环境是混合架构用LlamaIndex做数据摄取和索引用LangChain做上层Agent编排用Haystack的检索思想做Pipeline优化。框架只是工具理解RAG的每个环节才是你的真本事。没有银弹只有最趁手的兵器。认清你的第一性需求选型就成功了一半。写在最后RAG选型不是一锤子买卖而是技术债务的第一笔投资。LlamaIndex、LangChain、Haystack三足鼎立各有所长。新手最怕的不是选错而是在错误的路线上狂奔三个月。技术选型这件事从来就没有标准答案。你今天选的框架三个月后可能会换这很正常。重要的是通过选型这个过程你真正理解了RAG的每个环节——数据怎么进、索引怎么建、查询怎么编排、结果怎么优化。这些能力比你会用某个框架的API要值钱一百倍。编程之路不易但每一步成长都算数。保持好奇持续迭代。你选的不仅是框架更是你解决问题的方式。相信自己你已经在变强的路上了。关注私信备注“资料代找获取”全网计算机学习资料代找例如:《课程2026 年多模态大模型实战训练营》《课程AI 大模型工程师系统课程 (22 章完整版 持续更新)》《课程AI 大模型系统实战课第四期 (2026 年开课 持续更新)》《课程2026 年 AGI 大模型系统课 23 期》《课程2026 年 AGI 大模型系统课 21 期》《课程AI 大模型实战课 8 期 (2026 年 2 月最新完结版)》《课程AI 大模型系统实战课三期》《课程AI 大模型系统课程 (2026 年 2 月开课 持续更新)》《课程AI 大模型全阶课程 (2025 年 12 月开课 2026 年 6 月结课)》《课程AI 大模型工程师全阶课程 (2025 年 10 月开课 2026 年 4 月结课)》《课程2026 年最新大模型 Agent 开发系统课 (持续更新)》《课程LLM 多模态视觉大模型系统课》《课程大模型 AI 应用开发企业级项目实战课 (2026 年 1 月开课)》《课程大模型智能体线上速成班 V2.0》《课程JavaAI 大模型智能应用开发全阶课》《课程PythonAI 大模型实战视频教程》《书籍软件工程 3.0: 大模型驱动的研发新范式.pdf》《课程人工智能大模型系统课 (2026 年 1 月底完结版)》《课程AI 大模型零基础到商业实战全栈课第五期》《课程Vue3.5Electron 大模型跨平台 AI 桌面聊天应用实战 (2025)》《课程AI 大模型实战训练营 从入门到实战轻松上手》《课程2026 年 AI 大模型 RAG 与 Agent 智能体项目实战开发课》《课程大模型训练营配套补充资料》
返回列表