RAG 技术全解析-github源码开箱即用

发布时间:2026/6/1 22:15:42

RAG 技术全解析-github源码开箱即用 RAG 技术全解析让大模型先「查资料」再回答从零理解检索增强生成Retrieval-Augmented Generation——原理、实现与关键技术点一网打尽标签大语言模型 · 语义检索 · 向量数据库 · LangChain · Python 实战最近有大家说到关于AI引用开发的知识点太零散不适合系统性学习针对大家的反馈我在github上开源了一些AI学习的demo简单易懂里面设计了很多启发性的问题帮助大家理解学习后会持续更新欢迎大家留言交流。地址https://github.com/share-budaozhe/AI-DevelopmentCourseRAG链接https://github.com/share-budaozhe/AI-DevelopmentCourse/tree/master/rag-demo目 录什么是 RAG——先讲一个考试的比喻RAG 的核心原理RAG 完整架构图解完整实现一步步搭建你的第一个 RAG 系统五大关键技术点深度解析RAG vs 微调该选哪个常见坑与优化技巧总结与进阶方向第1章 什么是 RAG——先讲一个考试的比喻想象你参加一场开卷考试。普通学生传统大模型只靠脑子里记住的知识作答如果题目考的内容超出了记忆范围就只能凭感觉猜——这就是大模型的幻觉Hallucination问题。而聪明的学生RAG 系统会在作答前先翻阅参考书先检索相关页面再结合书上内容生成答案。这样的回答既有理有据又能覆盖最新知识。RAGRetrieval-Augmented Generation 检索 增强 生成 在大模型生成回答之前先从外部知识库中检索出最相关的信息把这些信息塞进提示词让模型基于真实材料来回答问题。RAG 解决了哪些问题•️ 知识截止问题大模型训练数据有时间截止点RAG 可以实时接入最新文档• 幻觉问题模型乱编答案RAG 强迫它基于真实来源作答大幅降低幻觉• 私有知识问题企业内部文档、产品手册不在训练集里RAG 轻松接入私有库• 成本问题全量微调模型极其昂贵RAG 只需维护一个知识库即可更新知识• 可追溯性每条回答都能标注来源文档用户可自行核实•⚡ 快速迭代更新知识库即可更新系统无需重新训练模型第2章 RAG 的核心原理RAG 的本质是一个「先检索、再生成」的两阶段流程。整个系统由两大部分组成阶段一离线构建知识库Indexing1.文档加载把 PDF、Word、网页、数据库等各种格式的文档导入系统2.文本切分Chunking把长文档切成若干小段Chunk每段通常 200~500 个 token3.向量化Embedding用嵌入模型把每个文本段转为一个高维向量数字数组4.存入向量数据库把向量和原文一起存入 Faiss / Chroma / Milvus 等数据库阶段二在线问答Retrieval Generation5.用户提问用户输入一个问题6.问题向量化用同一个 Embedding 模型把问题也变成向量7.相似度检索在向量数据库中找到与问题向量最接近的 Top-K 个文本段8.构建提示词把检索到的文本段 原始问题拼接成新的 Prompt9.LLM 生成回答把 Prompt 发给大语言模型生成有据可查的答案 向量之间的距离代表语义相似度向量越接近文本含义越相似。这样即使用户用不同词语提问也能找到语义相关的文档。第3章 RAG 完整架构图解图1RAG 整体架构——左侧为离线知识库构建流程右侧为在线检索生成流程数据流说明RAG 系统中数据的流向如下•【离线阶段】原始文档 → 文本切分 → 向量化Embedding Model→ 存入向量数据库•【在线阶段】用户提问 → 问题向量化 → 在向量数据库中做相似度匹配 → 取出 Top-K 段落•【生成阶段】检索结果 用户问题 → 构造 Prompt → 送入 LLM → 输出最终回答图2向量 Embedding 可视化——语义相似的文本在向量空间中距离更近第4章 完整实现一步步搭建你的第一个 RAG 系统我们用 Python LangChain ChromaDB OpenAI 来演示一个最小可用的 RAG 系统。整个流程分为 5 步 第一步安装依赖pip install langchain langchain-openai chromadb tiktoken pypdf 第二步加载并切分文档from langchain.document_loaders import PyPDFLoader, TextLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitter1. 加载 PDF 文档loader PyPDFLoader(“your_document.pdf”)pages loader.load()2. 递归字符切分——优先按段落、句号切分splitter RecursiveCharacterTextSplitter(chunk\_size500, # 每段最多 500 个字符 chunk\_overlap50, # 相邻段重叠 50 字符避免语义割断 separators[\n\n, \n, 。, ., ])chunks splitter.split_documents(pages)print(f共切分出 {len(chunks)} 个文本段) 第三步向量化并存入数据库from langchain_openai import OpenAIEmbeddingsfrom langchain.vectorstores import Chroma3. 初始化 Embedding 模型也可换成本地模型embeddings OpenAIEmbeddings(model“text-embedding-ada-002”)4. 构建向量数据库自动完成 Embedding 存储vectorstore Chroma.from_documents(documentschunks, embeddingembeddings, persist\_directory./chroma\_db # 持久化到磁盘)vectorstore.persist()print(“知识库构建完成”) 第四步检索 生成核心逻辑from langchain_openai import ChatOpenAIfrom langchain.chains import RetrievalQAfrom langchain.prompts import PromptTemplate5. 加载已有向量库vectorstore Chroma(persist\_directory./chroma\_db, embedding\_functionOpenAIEmbeddings())6. 定义检索器Top-K3retriever vectorstore.as_retriever(search\_typesimilarity, search\_kwargs{k: 3} # 取最相似的 3 段)7. 自定义 Prompt 模板prompt_template “”你是一个专业助手。请根据以下参考资料回答问题。如果资料中没有相关信息请直接说’我不知道’不要编造。参考资料{context}问题{question}回答“”PROMPT PromptTemplate(templateprompt\_template, input\_variables[context, question])8. 构建 RAG Chainllm ChatOpenAI(model“gpt-4o”, temperature0)qa_chain RetrievalQA.from_chain_type(llmllm, retrieverretriever, chain\_type\_kwargs{prompt: PROMPT}, return\_source\_documentsTrue # 返回来源方便追溯)9. 问答result qa_chain.invoke({“query”: “请介绍一下这份文档的主要内容”})print(“回答”, result[“result”])print(“\n来源文档”)for doc in result[“source_documents”]:print(f - {doc.metadata[source]} 第{doc.metadata[page]}页) 不想用 OpenAI把 Embedding 换成 HuggingFaceEmbeddings(model_name‘BAAI/bge-m3’)LLM 换成 Ollama 本地模型即可完全离线运行第5章 五大关键技术点深度解析 关键技术一文本切分策略Chunking切分粒度直接决定检索质量。切太大噪声多切太小上下文不完整。策略适用场景优点缺点固定大小切分均匀文本简单快速可能切断句子递归字符切分推荐通用文档优先按自然边界切段落长度不均语义切分技术文档语义完整性最好计算成本高结构化切分Markdown/HTML保留文档结构依赖格式规范 一般推荐使用递归字符切分设置 chunk_size300500chunk_overlap50100既能保证语义完整又避免切断句子。 关键技术二向量嵌入EmbeddingEmbedding 是把文字变成数字向量的过程是 RAG 的灵魂。质量直接影响检索准确率。示例“苹果是水果” → [0.82, -0.14, 0.37, 0.91, -0.55, 0.23]“香蕉也是水果” → [0.79, -0.18, 0.41, 0.88, -0.51, 0.27]两个向量高度相似余弦相似度 ≈ 0.99因为语义相近模型维度语言特点text-embedding-ada-0021536多语言OpenAI 经典模型性价比高text-embedding-3-large3072多语言OpenAI 最新精度更高BAAI/bge-m31024中英双语开源免费中文效果最佳moka-ai/m3e-base768中文轻量级本地部署首选 关键技术三向量数据库Vector Database向量数据库专门用于存储和高效检索高维向量。核心能力是近似最近邻ANN搜索——在数百万向量中快速找到最相似的几个。数据库特点适用场景Chroma轻量Python 原生开箱即用开发测试、小项目Faiss (Facebook)极速支持 GPU 加速大规模离线检索Milvus分布式企业级亿级向量生产环境Pinecone全托管云服务快速上线无需运维QdrantRust 编写高性能payload 过滤需要元数据过滤场景pgvectorPostgreSQL 扩展已有 PG 环境的团队 关键技术四检索策略优化基础的向量相似度检索并不总是最好的选择有几种进阶策略可以大幅提升效果• 混合检索Hybrid Search向量检索 关键词检索BM25双路并行用 RRF 算法融合排序兼顾语义理解和精确匹配• 重排序Re-ranking先用向量粗检索 Top-20再用 Cross-Encoder 精排找出真正相关的 Top-3准确率提升显著• 父子文档检索Parent-Child小段用于精准检索大段用于完整上下文。检索到小段后自动扩展为其所属的大段送给 LLM•❓ 问题增强Query Expansion用 LLM 把用户的原始问题改写成多个角度的子问题分别检索再合并覆盖更广的知识面 关键技术五Prompt 工程Prompt 是连接检索结果与 LLM 生成的桥梁。好的 Prompt 能让模型严格基于来源回答坏的 Prompt 则可能让模型忽略检索内容。⚠️ 不指定基于资料回答时模型容易混入训练集里的旧知识导致答案偏离文档内容推荐的 Prompt 模板结构你是一个严谨的知识库助手。【规则】只根据「参考资料」中的内容回答问题如果资料中没有答案回答’根据现有资料无法回答该问题’回答时注明来自哪段资料如据第2段所述…【参考资料】{context}【用户问题】{question}【你的回答】第6章 RAG vs 微调该选哪个这是实际项目中最常见的选型困惑。一句话总结知识更新用 RAG行为/风格调整用微调。维度RAG微调Fine-tuning知识更新成本✅ 更新文档即可零训练❌ 需要重新训练费时费钱幻觉控制✅ 有外部来源约束❌ 仍可能产生幻觉私有知识✅ 天然支持⚠️ 需谨慎防止数据泄露回答风格定制⚠️ 靠 Prompt 调整✅ 深度定制语气/格式复杂推理能力⚠️ 受检索质量限制✅ 可训练特定推理能力部署复杂度⚠️ 需要维护向量库✅ 推理时无需额外组件费用 API 向量存储 GPU 训练成本极高 实际生产系统通常选择 RAG 微调组合微调用于塑造模型人格和格式风格RAG 用于注入实时知识。第7章 常见坑与优化技巧❌ 坑1Chunk 切得太大或太小症状检索到的段落要么内容太泛无关要么语义不完整。解法一般设置 chunk_size300500chunk_overlap10%20%。可以实验几组看哪个 Recall 最高。❌ 坑2Embedding 模型与检索语言不匹配症状用英文 Embedding 模型处理中文文档检索准确率极差。解法中文场景优先用 BGE-M3 或 M3E-Base 等专门支持中文的模型。❌ 坑3Top-K 设置不合理症状K太小漏掉关键信息K太大塞满 Context WindowLLM 注意力分散。解法先设 K4~6再根据 Context Window 大小调整。使用 Rerank 进行二次精排。❌ 坑4文档预处理不干净症状PDF 解析出大量乱码、页眉页脚、表格破损。解法使用 pymupdf4llm 或 unstructured 库解析加入清洗规则过滤噪声。❌ 坑5忽略元数据过滤症状用户问今年的政策却检索到5年前的旧文档。解法存储时记录 date、department、doc_type 等元数据检索时加 filter 条件。第8章 总结与进阶方向 核心要点回顾10.RAG 文档切分 → Embedding → 向量存储 → 语义检索 → LLM 生成两阶段流程缺一不可11.切分策略、Embedding 模型、检索方式、Prompt 设计是四大核心变量每一个都影响最终效果12.混合检索向量 BM25 Rerank 是目前业界精度最高的检索方案13.RAG 适合知识密集型问答微调适合行为/风格定制两者结合效果最好 进阶方向方向简介适用场景GraphRAG把知识库构建为知识图谱支持多跳推理强关联关系的复杂问答Agentic RAG让 LLM 自主决定何时检索、检索什么多步骤规划与工具调用Self-RAG模型自我反思检索结果的相关性高精度问答减少无效检索RAG 评估体系用 RAGAS 框架量化 Faithfulness 等指标系统质量监控与优化多模态 RAG支持图片、表格、图表的向量化检索不局限于纯文本的场景流式 RAG检索与生成并行执行减少延迟对响应速度敏感的产品 实践建议从最简单的 LangChain Chroma OpenAI 组合入手先跑通基础流程再逐步引入混合检索、Rerank、元数据过滤等优化手段。RAG 的进步是迭代的不要一开始就追求完美架构。学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%免费】

相关新闻