RAG 实战:从手写 MVP 链路到生产级优化

发布时间:2026/6/30 11:31:03

RAG 实战:从手写 MVP 链路到生产级优化 摘要从零手写 LangChain RAG 链路解析切片策略、混合检索、重排序Rerank及向量数据库实战指南。01 核心能力要求在 RAG检索增强生成的工程落地中我们不能只停留在“知道概念”的层面。一个合格的 RAG 工程师必须具备以下能力✅基础链路闭环能够手写出完整的文档加载-切片(Chunking)-向量化(Embedding)-存储(Vector DB)-检索-提示词组装-模型生成。✅精细化切片策略不盲目按字数切分掌握语义切分与Markdown 标题层级切分。✅多路召回与重排序理解为什么单一向量检索不够用如何引入Rerank解决精度问题。✅混合检索 (Hybrid Search)能够结合Elasticsearch (BM25)的关键词搜索与Vector的语义搜索。✅向量库实战熟练掌握Chroma或Milvus的 CRUD 及索引配置。02 标准 LangChain MVP 实现(Minimum Viable Product)以下代码展示了一个最基础的 RAG 流程。import os from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_chroma import Chroma from langchain.prompts import ChatPromptTemplate # -------------------------- # 1. 文档加载 (Load) # -------------------------- # 场景加载一份金融研报 PDF loader PyPDFLoader(financial_report_2026.pdf) docs loader.load() # -------------------------- # 2. 切片 (Chunking) # -------------------------- # 策略按字符递归切分保留上下文 text_splitter RecursiveCharacterTextSplitter( chunk_size 500, # 每一块约500字符 chunk_overlap 50, # 重叠50字保证句子不被腰斩 separators [\n\n, \n, 。, !, ?] # 优先按段落切 ) splits text_splitter.split_documents(docs) # -------------------------- # 3. 向量化 存储 (Embedding Vector DB) # -------------------------- # 调用 OpenAI API 将文字转为向量 [0.1, -0.2, ...] vectorstore Chroma.from_documents( documents splits, embedding OpenAIEmbeddings(), persist_directory ./chroma_db # 持久化存储 ) # -------------------------- # 4. 检索 (Retrieval) # -------------------------- # 找出最相似的 Top 3 片段 retriever vectorstore.as_retriever(search_kwargs{k: 3}) question TSLA 2025 Q4的净利润率是多少 retrieved_docs retriever.invoke(question) # -------------------------- # 5. 提示词组装 (Prompt Assembly) # -------------------------- template 你是一个专业的金融分析师。请根据以下研报内容回答问题 {context} 问题{question} prompt ChatPromptTemplate.from_template(template) # -------------------------- # 6. 模型生成 (Generation) # -------------------------- llm ChatOpenAI(modelgpt-3.5-turbo) chain prompt | llm # context 由检索出的 docs 拼接而成 response chain.invoke({ question: question, context: \n\n.join([doc.page_content for doc in retrieved_docs]) }) print(response.content)03 进阶RAG 效果不好怎么办这是面试和实战中最常见的问题。我们通常从以下三点入手优化1. 优化切片策略 (Chunking Strategy) 痛点死板地按 500 字切分容易把“2025年营收”切在上一段而把具体的“100亿”切在下一段。检索时上下文丢失导致大模型幻觉。 解决方案语义切分 (Semantic Chunking)利用 Embedding 计算前后句子的相似度意思连贯时不切突变时才切。Markdown 标题切分按照# 一、财务摘要、## 1.1 营收这种层级切分。检索时内容会带上财务摘要 营收的元数据极大地提高了上下文准确度。2. 混合检索 (Hybrid Search) 痛点向量检索 (Dense)擅长搜概念搜“水果”能召回“苹果”。关键词检索 (Sparse/BM25)擅长搜专有名词搜股票代码“600519”向量可能不准但关键词匹配不仅准而且快。 解决方案如果用户问“600519的代码是多少”这就需要结合 Elasticsearch (BM25) 和 Chroma (Vector) 的结果加权输出。参考公式Final Score 0.7 * Vector_Score 0.3 * BM25_Score3. 重排序 (Rerank) 痛点初步检索出的 Top 5 内容可能混入了只包含关键词但语义无关的噪音。 解决方案采用Two-Stage Retrieval两阶段检索粗排用向量库快速召回 50 条相关片段速度快精度一般。精排使用 Cross-Encoder (如bge-reranker) 对这 50 条进行精细打分选出 Top 5 给大模型。效果虽然增加了约 200ms 耗时但准确率会有质的飞跃。04 向量数据库 (Chroma) 实战速查1. 创建/读取集合import chromadb client chromadb.PersistentClient(path./db) collection client.get_or_create_collection(namefinance_reports)2. Upsert (更新或插入)⚠️注意必须指定唯一的ids否则数据会重复堆积。collection.upsert( documents[苹果公司Q3营收上涨..., 特斯拉销量下跌...], metadatas[{source: report1.pdf}, {source: report2.pdf}], ids[doc1, doc2] )3. Query (查询)results collection.query( query_texts[特斯拉销量怎么样], n_results2 )05 深度 QA工程化避坑指南Q1PDF 里的表格怎么处理直接用 PyPDFLoader 加载表格会变成乱码语义全毁。✅实战解法 使用pdfplumber或Unstructured库。检测到表格结构时将其提取并转化为 Markdown 格式如| 科目 | 金额 |再进行 Embedding。这样向量模型就能理解这是结构化数据而不是乱码。Q2加了 Rerank 速度变慢怎么办Rerank 确实会增加 300ms-500ms 的延迟。✅优化策略限制数量初筛 50 条Rerank 只排前 10 条。流式输出 (Streaming)后端拿到 LLM 第一个 token 就通过 SSE 推送给前端。用户看到字在蹦心理等待感会降低很多。Q3怎么证明 RAG 变准了不能靠感觉要靠数据。✅评估方法 构建一个包含 50 个高频问题的“金标准测试集”。每次优化策略后运行脚本计算“召回率 (Recall)”即 Top 3 结果里是否包含正确答案。只有召回率提升如从 60% - 80%时才上线新代码。Q4怎么解决“上下文断裂”问题比如“茅台营收”这句话一半在 Chunk A 结尾数字在 Chunk B 开头。✅实战配置 利用chunk_overlap切片重叠。配置Chunk Size 500, Overlap 50~100。这样 Chunk B 的开头会重复 Chunk A 的结尾保证关键信息主语数字完整出现在至少一个 Chunk 中。Q5流程这么长怎么优化 Latency如果用户等 10 秒体验就崩了。✅三层优化体验层全链路流式输出 (Streaming/SSE)。架构层向量检索和 BM25 并行执行Rerank 后只选 Top 3 给大模型减少 Input Token。兜底层引入 Redis 语义缓存。如果问题被问过直接返回缓存答案耗时仅需 0.1s。学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%免费】

相关新闻