news 2026/4/7 9:47:09

爆肝整理!RAG技术从入门到精通,附LangChain/LlamaIndex/Haystack实战代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
爆肝整理!RAG技术从入门到精通,附LangChain/LlamaIndex/Haystack实战代码

检索增强生成(RAG)正成为连接大模型与实时知识的关键桥梁。本文深入解析RAG技术架构,剖析主流开源项目,并揭示多跳推理、混合检索等高级方法,助你构建更强大的AI应用。

一、RAG技术概述

检索增强生成(RAG)是一种结合信息检索生成式AI的创新技术。它通过外部知识库增强大模型的回答能力,有效解决了知识滞后幻觉问题领域专业知识不足等挑战。

RAG的核心思想是在生成回答前,先从专门构建的知识库中检索相关信息,然后将这些检索结果与用户问题一起输入给大模型,生成更加准确、可靠的回答。

与传统微调方法相比,RAG具有无需重新训练知识实时更新计算成本更低等显著优势,已成为企业级AI应用的首选架构。

二、RAG核心技术原理

RAG系统通常由文档加载器文本分割器嵌入模型向量数据库生成模型五个核心组件组成。

文档加载器负责将各种格式(如PDF、Word、HTML)的文档转换为纯文本。文本分割器将长文档分割成适合处理的片段。嵌入模型将文本转换为向量表示,存储在向量数据库中。当用户提问时,系统先将其转换为向量,在向量空间中检索最相关的文档片段,最后将这些片段与原始问题一起输入给生成模型,产生最终回答。

一个典型的RAG流程包括:索引构建检索生成两个阶段。索引构建阶段处理文档并构建向量索引;检索生成阶段则处理用户查询并生成回答。

三、主流开源RAG项目实战

LangChain:RAG应用开发框架

LangChain是目前最受欢迎的RAG开源框架之一,提供了模块化的组件和便捷的接口。

# 安装LangChainpip install langchain langchain-community langchain-core# 基础RAG实现示例fromlangchain_community.llmsimportOpenAIfromlangchain_community.embeddingsimportOpenAIEmbeddingsfromlangchain_community.vectorstoresimportFAISSfromlangchain_community.document_loadersimportTextLoaderfromlangchain.text_splitterimportCharacterTextSplitterfromlangchain.chainsimportRetrievalQA# 加载文档loader=TextLoader("your_document.txt")documents=loader.load()# 文本分割text_splitter=CharacterTextSplitter(chunk_size=1000,chunk_overlap=0)docs=text_splitter.split_documents(documents)# 创建向量存储embeddings=OpenAIEmbeddings()db=FAISS.from_documents(docs,embeddings)# 创建检索链llm=OpenAI()qa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=db.as_retriever())# 提问query="什么是RAG技术?"response=qa_chain.run(query)print(response)

LlamaIndex:优化的RAG系统

LlamaIndex专注于提供更高效的数据索引和查询能力,特别适合处理大规模知识库。

# 安装LlamaIndexpip install llama-index# LlamaIndex RAG实现fromllama_index.coreimportVectorStoreIndex,SimpleDirectoryReaderfromllama_index.core.query_engineimportRetrieverQueryEnginefromllama_index.core.retrieversimportVectorIndexRetrieverfromllama_index.core.response_synthesizersimportget_response_synthesizer# 加载文档documents=SimpleDirectoryReader("data").load_data()# 创建索引index=VectorStoreIndex.from_documents(documents)# 配置检索器retriever=VectorIndexRetriever(index=index,similarity_top_k=5)# 配置响应合成器response_synthesizer=get_response_synthesizer()# 创建查询引擎query_engine=RetrieverQueryEngine(retriever=retriever,response_synthesizer=response_synthesizer)# 提问response=query_engine.query("什么是RAG的高级方法?")print(response)

Haystack:企业级RAG解决方案

Haystack是一个功能全面的RAG框架,支持多种数据源和检索策略,适合构建复杂的企业级应用。

# 安装Haystackpip install farm-haystack# Haystack RAG管道fromhaystack.document_storesimportFAISSDocumentStorefromhaystack.nodesimportBM25Retriever,EmbeddingRetriever,FARMReaderfromhaystack.pipelinesimportExtractiveQAPipelinefromhaystack.utilsimportfetch_archive_from_http# 初始化文档存储document_store=FAISSDocumentStore(faiss_index_factory_str="Flat",embedding_dim=768)# 加载文档doc_dir="data/"document_store.add_documents(get_documents_from_dir(doc_dir))# 配置检索器bm25_retriever=BM25Retriever(document_store=document_store)embedding_retriever=EmbeddingRetriever(document_store=document_store)# 配置阅读器reader=FARMReader(model_name_or_path="deepset/roberta-base-squad2")# 创建管道pipeline=ExtractiveQAPipeline(reader=reader,retriever=bm25_retriever)# 运行查询prediction=pipeline.run(query="什么是RAG技术的多跳推理?")print(prediction)

四、RAG高级方法

多跳推理

多跳推理通过迭代检索推理,解决需要综合多个信息源才能回答的复杂问题。这种方法模拟人类的思考过程,先检索相关信息,再基于这些信息进行推理,可能需要多次迭代才能得到最终答案。

# 多跳推理实现示例defmulti_hop_rag(query,max_hops=2):context=""forhopinrange(max_hops):# 构建包含上下文的提示prompt=f""" 问题:{query}已知信息:{context}请基于以上信息回答问题,如果有需要进一步了解的信息,请提出后续问题。 """# 获取模型回答response=llm(prompt)# 提取后续问题或最终答案ifhop<max_hops-1:follow_up_question=extract_question(response)# 检索相关信息new_context=retrieve_documents(follow_up_question)context+=new_contextelse:returnresponsereturnresponse

混合检索

混合检索结合关键词检索(如BM25)和语义检索(如向量相似度),充分利用两种检索方法的优势。关键词检索擅长精确匹配,语义检索擅长理解上下文,两者结合可以显著提高检索质量。

# 混合检索实现fromhaystack.nodesimportBM25Retriever,EmbeddingRetriever# 初始化两种检索器bm25_retriever=BM25Retriever(document_store=document_store)embedding_retriever=EmbeddingRetriever(document_store=document_store)# 混合检索函数defhybrid_retriever(query,bm25_weight=0.5,embedding_weight=0.5):# 获取两种检索结果bm25_results=bm25_retriever.retrieve(query,top_k=10)embedding_results=embedding_retriever.retrieve(query,top_k=10)# 合并结果combined_results=combine_results(bm25_results,embedding_results,bm25_weight=bm25_weight,embedding_weight=embedding_weight)returncombined_results

查询改写与扩展

查询改写通过同义词扩展语义转换等技术,丰富查询表达,提高召回率。这种方法特别适用于用户查询表达不明确或知识库中使用了不同术语的情况。

# 查询改写示例defrewrite_query(original_query):# 使用LLM进行查询改写prompt=f""" 原始查询:{original_query}请提供3-5个与原始查询意思相同或相近的表达方式。 """response=llm(prompt)rewritten_queries=extract_queries(response)# 添加原始查询rewritten_queries.insert(0,original_query)returnrewritten_queries# 使用改写后的查询进行检索defretrieve_with_rewrite(query):rewritten_queries=rewrite_query(query)all_results=[]forqinrewritten_queries:results=retriever.retrieve(q,top_k=5)all_results.extend(results)# 去重和重排序unique_results=deduplicate_and_rerank(all_results)returnunique_results

知识图谱增强RAG

知识图谱增强RAG通过结构化知识补充非结构化文本,提供更精确的检索和推理能力。这种方法特别适合需要精确关系和属性的领域。

# 知识图谱增强RAG示例fromrdflibimportGraph,URIRef,Literal# 构建简单知识图谱kg=Graph()kg.add((URIRef("RAG"),URIRef("type"),Literal("技术")))kg.add((URIRef("RAG"),URIRef("enhances"),URIRef("LLM")))kg.add((URIRef("LLM"),URIRef("type"),Literal("大语言模型")))# 知识图谱检索defkg_retriever(query):# 将查询转换为SPARQLsparql_query=generate_sparql(query)# 执行查询results=kg.query(sparql_query)# 转换为文档格式documents=convert_to_documents(results)returndocuments# 结合文本和知识图谱的混合检索defhybrid_rag_with_kg(query):# 文本检索text_results=retriever.retrieve(query,top_k=10)# 知识图谱检索kg_results=kg_retriever(query)# 合并结果combined_results=combine_text_and_kg_results(text_results,kg_results)returncombined_results

RAG应用场景

企业知识库问答

RAG可用于构建企业内部知识库问答系统,帮助员工快速获取公司政策、流程文档等信息。这种应用可以显著提高工作效率,减少信息检索时间。

智能客服与支持

结合公司产品知识和FAQ,RAG可以构建智能客服系统,提供准确的产品信息和解决方案,提高客户满意度,同时减轻人工客服压力。

法律与医疗专业助手

在法律和医疗等专业领域,RAG可以结合专业文献和法规数据库,为专业人士提供精准的参考信息和案例分析,辅助决策过程。

教育与培训个性化

RAG可以基于教材和学习资料,构建个性化教育助手,根据学生的问题提供定制化的解释和补充材料,提升学习效果。

金融分析与投资决策

结合市场数据、公司财报和行业研究报告,RAG可以帮助分析师快速获取相关信息,辅助投资决策和风险评估。

未来发展趋势

RAG技术正在向多模态扩展,支持图像、音频等非文本信息的检索和生成。自适应检索技术也在发展中,系统能根据问题类型动态调整检索策略。

边缘RAG是一个重要趋势,将RAG能力部署到终端设备,减少对云端的依赖,提高响应速度和数据隐私保护。

RAG与Agent结合正在成为新方向,通过将RAG与自主代理能力结合,构建能够持续学习和进化的智能系统。

随着大模型能力的不断提升,RAG系统也将更加智能化专业化,在更多垂直领域展现价值。

五、关键字

检索增强生成, RAG, LangChain, LlamaIndex, Haystack, 多跳推理, 混合检索, 知识图谱增强, 开源AI

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 18:15:35

用VibeVoice-TTS-Web-UI做了个播客节目,效果堪比真人

用VibeVoice-TTS-Web-UI做了个播客节目&#xff0c;效果堪比真人 你有没有试过——把一段写好的双人对话脚本&#xff0c;粘贴进网页&#xff0c;点下“生成”&#xff0c;三分钟后&#xff0c;耳机里传来两个声音自然交替、有停顿、有语气起伏、甚至带点呼吸感的音频&#xf…

作者头像 李华
网站建设 2026/4/5 14:14:49

SenseVoice Small日常办公神器:会议录音→文字稿全自动转换流程

SenseVoice Small日常办公神器&#xff1a;会议录音→文字稿全自动转换流程 1. 为什么你需要一个“听得懂人话”的语音转写工具 你有没有过这样的经历&#xff1a;开完一场两小时的项目会议&#xff0c;回工位第一件事不是喝口水&#xff0c;而是打开录音笔&#xff0c;盯着音…

作者头像 李华
网站建设 2026/3/25 16:39:57

想做有声书?试试VibeVoice-TTS,长文本合成无压力

想做有声书&#xff1f;试试VibeVoice-TTS&#xff0c;长文本合成无压力 你是不是也试过用AI生成有声书&#xff0c;结果卡在第三分钟——声音开始发虚、角色突然变调、停顿像机器人打嗝&#xff1f;或者刚导出15分钟音频&#xff0c;发现主角语气从“沉稳教授”悄悄滑向“疲惫…

作者头像 李华