公司动态

RAG知识库系统全链路搭建与优化:从文档入库到混合检索重排

📅 2026/8/31 10:07:04
RAG知识库系统全链路搭建与优化:从文档入库到混合检索重排
先说结论RAG检索增强生成是目前把大模型真正落地到企业内部知识库性价比最高的方案没有之一。这次我们要拆解的不是某个单一工具而是一套完整的 RAG 知识库系统教程内容从文档加载、切片、向量化、检索、召回、重排到最后的生成回答和工程化部署覆盖一条完整链路。如果你正在做企业级知识库、内部智能问答、文档助手这类项目这篇文章可以直接收藏。RAG 的思路其实不复杂大模型不懂你公司的内部资料那就先把资料切成片段、转成向量存进数据库用户提问时先检索出最相关的片段再把这些片段拼进提示词交给大模型生成回答。难点从来不是“能跑通”而是“检索得准、召得全、排得对、答得稳”。这也是为什么同样搭 RAG有人做出来像搜索引擎有人做出来像资深顾问。这篇文章会按“架构选型 - 环境准备 - 启动部署 - 文档入库 - 检索召回 - 重排优化 - 接口 API - 批量任务 - 性能观察 - 问题排查”的顺序展开全程都是可以直接落地的操作和判断标准。关于显存、依赖版本这些参数我会明确标注哪些来自材料、哪些需要按实际环境测试不编数字。1. RAG 知识库系统核心能力速览先把这套系统的能力边界和门槛放在前面方便快速判断值不值得往下看。能力项说明系统类型企业级 RAG 知识库问答系统覆盖检索、召回、重排、生成全链路核心能力多格式文档解析、文本切片、向量化入库、混合检索、向量召回、重排模型精排、LLM 生成回答、引用溯源主要模型组件Embedding 模型向量化、LLM生成、Rerank 模型重排向量数据库Milvus、Elasticsearch、Faiss、Chroma 等按场景选型启动方式本地命令行启动 / Docker 启动 / WebUI / API 服务是否支持 API支持问答和知识库管理均可通过 HTTP 接口调用是否支持批量任务支持批量文档入库、批量切片、批量问答评测硬件门槛低配可跑CPU 推理高配效果更好GPU 用于 Embedding 和 Rerank 加速显存占用取决于模型规模需按实际部署环境测试适合读者后端开发、算法工程师、架构师、想要搭建内部知识库的技术负责人从材料看这套教程强调的是“RAG 全链路优化”而不是只教你怎么调一个现成的聊天框。换句话说你要掌握的不仅是“会用 Dify 或 RAGFlow”而是理解每一环为什么这么设计、如何在生产环境调整参数。2. 适用场景与使用边界2.1 适合谁用RAG 知识库系统最适合这几类场景企业内部文档问答制度文件、产品手册、技术文档、合同条款员工用自然语言提问系统给出答案和出处。客服知识库把常见问题、售后政策、操作指南灌进去客服人员或终端用户直接问。研发知识库把内部 API 文档、代码规范、架构设计文档做成可检索的智能问答。垂直行业资料查询法律、医疗、金融、教育等行业的专业资料管理。从技术岗位角度后端开发可以用它做内部工具算法工程师可以用它验证检索和重排策略技术负责人可以用它做部门级知识管理。2.2 不擅长什么RAG 不是万能明确边界能少走弯路不适合实时性要求极高的场景知识库里的数据是离线索引好的新数据需要重新入库或增量更新。不适合需要深度逻辑推理的复杂问题RAG 的优势是“有据可答”不是“从头推导”多跳推理、数值计算、跨文档综合归纳会暴露短板。不适合直接替代模型微调RAG 解决的是“知识实时性和私有域知识注入”问题如果希望模型改变语气、学习特定任务格式微调是另一条路线。不适合完全没有资料的情况仓库里没有文档检索就是无源之水必须先建设资料库。2.3 合规与安全边界涉及企业知识库、内部资料处理时必须关注文档授权只有你有权使用的资料才能入库涉及保密文件要在权限体系内控制访问。隐私保护不要上传包含身份证号、手机号、银行账号等敏感信息的真实数据去做无防护测试。数据隔离企业内部知识库应部署在内网或私有云避免把核心知识发送到外部 API除非有明确的数据协议。生成内容复核大模型生成内容可能包含幻觉生产环境需要给出引用来源重要结论要人工复核。3. RAG 系统整体架构与技术选型3.1 全链路架构拆解一套完整的 RAG 知识库系统链路如下文档加载读取 PDF、Word、Markdown、TXT、HTML 等格式。文档解析提取正文、表格、图片说明去除页眉页脚和噪声。文本切片按段落、标题层级、固定窗口切分成适合检索的文本块。向量化用 Embedding 模型把切片转成向量。向量入库写入向量数据库同时保留元数据文档名、章节、页码。查询理解用户提问经过改写、意图识别补齐上下文。检索召回用向量相似度召回 TopK 候选片段通常同时做关键词检索。重排精排用 Rerank 模型对召回结果重新打分把最相关片段排到前面。提示词组装把精排后的片段与用户问题拼接成 Prompt。生成回答交给 LLM 生成带引用来源的回答。多数人搭 RAG 只用到了第 4、5、7、10 步效果不稳定问题往往出在缺失的第 2、3、6、8 步上。这也是“RAG 全链路优化”的核心价值。3.2 技术选型参考组件可选方案选择建议文档解析Unstructured、PyMuPDF、Tika、自研解析服务通用文档用 Unstructured复杂版式需要自研或商业解析切片策略固定窗口、递归字符切分、Markdown 标题切分、语义切分每个切片保持在 200-500 字带有保留标题上下文Embedding 模型BAAI/bge-large-zh、m3e、text2vec、OpenAI Embedding中文场景优先 bge 系列本地部署用开源模型向量数据库Milvus、Elasticsearch、Faiss、Chroma、Qdrant小规模测试用 Chroma/Faiss企业级检索推荐 Milvus 或带向量能力的 Elasticsearch关键词检索Elasticsearch、BM25、SQL LIKE与向量检索做混合召回提高精确匹配能力重排模型BAAI/bge-reranker-base、bge-reranker-large、Cohere Rerank本地部署用 bge-reranker效果与开销平衡LLMQwen、DeepSeek、ChatGLM、GPT、Claude 等私有化选开源模型效果优先选云端模型但注意数据合规框架LangChain、LlamaIndex、Dify、RAGFlow快速搭建用 Dify/RAGFlow深度定制用 LangChain/LlamaIndex材料中频繁出现“混合检索跟重排”“langchain4j milvus java 混合检索跟重排”“dify 知识库流水线”“ragflow 知识库搭建全流程”说明当前社区的主流方向是混合检索 Rerank 工程化平台。具体选型不必迷信某一个框架关键是理解每一层的作用。3.3 环境准备与前置条件不管是本地测试还是企业私有化部署先检查以下项目操作系统Linux推荐 Ubuntu Server、Windows、macOS 均可生产环境建议 Linux。Python 版本建议 3.10 或 3.11多数 RAG 框架已适配。包管理工具pip、conda 或 uv。基础依赖langchain、elasticsearch、pymilvus、transformers、sentence-transformers、fastapi、uvicorn。模型文件Embedding 模型、Rerank 模型、LLM 模型按部署方式下载或通过 API 访问。GPU 环境CUDA、cuDNN、PyTorch如果使用 GPU 推理。资源预估Embedding 和 Rerank 模型用小尺寸版本时 CPU 也能跑但批量入库会慢很多LLM 本地部署按模型规模要求显存云端 API 则没有显存压力。端口规划服务端口、WebUI 端口、向量数据库端口避免冲突。具体资源参数这里不给死数字因为不同模型、不同切片数、不同并发下差异很大。更稳妥的做法是先小数据集跑通再逐步加压观察内存、显存、CPU 和磁盘占用。4. 本地部署与启动方式4.1 一键平台方案Dify / RAGFlow如果你需要快速搭建一套可用的企业知识库优先考虑 Dify 或 RAGFlow。这类平台自带 WebUI支持文档上传、切片、检索测试和应用发布适合先做原型验证。以通用 Dify 部署流程为例# 使用 Docker Compose 启动 Dify具体版本和文件路径以官方仓库为准 git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d启动后访问 WebUI配置模型供应商LLM Embedding然后创建知识库、上传文档系统会自动完成切片和向量化。这个过程适合验证“开箱即用”的效果但很多细节参数被平台封装了深度调优时仍需要了解底层逻辑。RAGFlow 同样提供 Docker 部署# RAGFlow 一键启动示例具体命令以官方文档为准 docker compose -f docker/docker-compose.yml up -d这类平台的优势是可视化切片、知识库管理、Agent 流程编排一应俱全适合企业快速落地。缺点是如果要针对特定业务优化检索策略受平台封装限制可能需要自己写插件或直接使用 LangChain 定制。4.2 自研链路方案LangChain 定制如果目标是深入学习 RAG 全链路或业务需要深度定制建议直接用 LangChain 向量数据库搭一套最小系统。下面是通用骨架# 示例使用 LangChain 构建 RAG 最小链路 # 实际代码需根据所选框架版本和模型路径进行调整 from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader # 1. 加载文档 loader TextLoader(./data/sample.txt) documents loader.load() # 2. 切片 text_splitter RecursiveCharacterTextSplitter( chunk_size300, chunk_overlap50 ) docs text_splitter.split_documents(documents) # 3. 向量化 embedding_model HuggingFaceEmbeddings( model_nameBAAI/bge-large-zh-v1.5 ) # 4. 入库 vectorstore Chroma.from_documents( documentsdocs, embeddingembedding_model, persist_directory./chroma_db )这里的核心是切片大小和重叠窗口直接影响召回质量。企业文档结构复杂时不要直接用固定长度切先解析出标题层级按 Markdown 或 HTML 结构切。4.3 启动 API 服务RAG 系统最终要对外提供服务建议把问答接口封装成 FastAPI 服务# 启动 FastAPI 服务示例 uvicorn app:app --host 0.0.0.0 --port 8000# 简单的 FastAPI 问答服务骨架 from fastapi import FastAPI from pydantic import BaseModel app FastAPI() class QueryRequest(BaseModel): question: str top_k: int 5 class QueryResponse(BaseModel): answer: str sources: list app.post(/api/query, response_modelQueryResponse) async def query(request: QueryRequest): # 这里接检索、重排、生成链路 return QueryResponse( answer测试回答, sources[] )实际生产环境还需要考虑用户鉴权、接口限流、日志记录、错误码规范。4.4 启动后验证服务启动后先做三个基础检查服务健康检查访问/health或/docs确认进程在运行。文档入库传一个测试文档确认切片数量和向量化耗时。问答连通提一个能直接从文档找到答案的问题确认生成回答包含引用来源。如果这三步都通过说明基础链路已经通了接下来进入优化阶段。5. 文档入库与检索链路测试5.1 文档解析测试测试目的确认 PDF、Word、Markdown 能被正确提取正文表格和标题不乱码。操作步骤准备三类测试文档纯文本 PDF、带表格的 PDF、带多级标题的 Markdown。分别调用文档解析模块。查看解析输出文本检查页眉页脚是否混入、表格是否保留逻辑结构。预期结果正文提取完整标题层级保留表格内容可读。判断标准解析输出直接决定后续切片质量。如果这一步就乱后面全乱。常见问题扫描版 PDF 需要 OCR复杂表格解析会丢失行列关系页眉页码干扰切片。5.2 切片策略测试测试目的找到适合你文档的最优切片大小和重叠大小。操作步骤固定使用同一份文档分别设置 200、300、500、800 字切片。对同一组问题做检索比较召回结果。检查相邻切片之间是否存在信息断裂。判断标准每个切片语义完整检索命中后能直接作为回答依据。切片太小会导致上下文不全太大则引入噪声、降低相关性。实用经验保留切片所在章节标题作为前缀让检索模型更容易判断上下文。例如“第三章 报销流程 3.2 发票要求 切片正文”。5.3 向量化入库测试测试目的确认 Embedding 模型能正确生成向量并写入向量数据库。操作步骤选择 Embedding 模型建议中文场景从 bge-large-zh 开始测试。批量入库测试文档记录耗时。查询向量数据库确认向量数量和元数据字段。预期结果文档数量与向量数量对应查询能返回相似片段。判断标准入库后能在毫秒级完成单次向量检索。如果检索延迟过高优先看向量数据库索引类型和服务器资源。5.4 检索测试测试目的验证不同检索方式的召回效果。操作步骤准备 20-50 个与业务相关的问题。仅使用向量检索记录 Top5 命中情况。仅使用关键词检索BM25/ES记录 Top5 命中情况。使用混合检索合并两种结果记录 Top5 命中情况。判断标准混合检索通常比单一检索命中率高原因在于向量检索能处理语义相似、字面不同的表达。关键词检索能精确匹配产品型号、合同编号、专业术语。两者合并后互相补充减少漏召回。如果某个问题在两种检索方式下都召不回优先检查切片是否包含答案、Embedding 模型是否适合该领域。5.5 重排测试测试目的验证 Rerank 模型能否把真正相关的片段排到前面。操作步骤从检索阶段获取 Top20 候选片段。使用 Rerank 模型重新打分排序。对比 Top5 结果在重排前后的命中率变化。预期结果重排后 Top5 命中率提升排序靠前的片段与问题相关性明显增强。判断标准Rerank 的核心价值是“精排”它计算的是查询与候选片段的交互相关性比 Embedding 余弦相似度更准确但计算成本更高。所以工程上常见的做法是召回阶段多取比如 20-50 个重排阶段精排取 Top3-5兼顾效果和延迟。如果不能明显提升检查是否用了质量太差的重排模型或者候选片段本身相关性就不高。6. 检索优化召回、重排与参数调整6.1 混合检索的工程实现搜索引擎里常用的“混合检索跟重排”方案在 RAG 里同样适用。文本检索的BM25擅长精确匹配向量检索擅长语义匹配工程实现可以将两者分数加权融合。以 Elasticsearch 为例可以用带向量字段的索引同时做关键词查询和向量查询再用脚本分数合并{ query: { bool: { should: [ { match: { content: 报销流程 } }, { knn: { content_vector: { vector: [0.1, 0.2, 0.3], k: 10 } } } ] } } }这里的核心是平衡权重。不同业务对精确匹配和语义匹配的依赖不一样需要基于测试问题集调权重。更通用的做法是先做两路召回各取 Top50合并去重后再交给 Rerank 精排。关于 Java 技术栈社区里“langchain4j milvus java 混合检索跟重排”的组合也在逐渐成熟。如果你是企业 Java 后端可以考虑 langchain4j 作为集成层Milvus 作为向量数据库Rerank 服务单独部署成一个 HTTP 服务这样不绑架技术栈。6.2 重排模型的接入方式Rerank 模型一般通过 sentence-transformers 或单独的 API 服务使用。以 bge-reranker 为例通用调用思路如下from sentence_transformers import CrossEncoder # 加载本地重排模型 model CrossEncoder(BAAI/bge-reranker-base) query 报销需要什么材料 candidates [ 报销需要提供发票和审批单。, 公司差旅制度规定出差需要提前申请。, 发票抬头需要填写公司全称。 ] # 模型会输出每个候选的相关性分数 scores model.predict([(query, doc) for doc in candidates]) print(scores)重排后的排序直接决定送入 LLM 的上下文质量。需要提醒的是重排模型收费或占资源最好只对召回阶段的前 20-50 个候选做精排不要对全量知识库做重排。6.3 RAG 知识库指标怎么理解热词里有“rag 知识库指标有哪些如何理解各指标”这确实是衡量 RAG 系统好坏的关键。建议关注以下指标指标含义关注点命中率 / RecallK正确答案是否出现在前 K 个召回结果中召回阶段是否漏掉了关键片段准确率 / PrecisionK前 K 个结果中真正相关的比例召回结果是否包含大量噪声MRR第一个正确答案出现的位置答案排序是否靠前NDCG考虑排序位置的加权相关性综合评估排序质量生成回答正确率最终 LLM 回答是否正确且有依据端到端效果建一个固定评测集50-200 个业务问题 标准答案 对应文档片段每次改动后跑一遍用指标对比而不是凭感觉判断“效果变好了”。6.4 检索不准时的排查方向如果“知识库检索如何能更准”按顺序排查文档解析是否完整表格和标题是否丢失。切片是否保留上下文是否按标题层级切分。Embedding 模型是否适合中文和垂直领域。召回阶段是否做了关键词和向量混合。重排模型是否生效TopK 设置是否合理。用户问题是否需要改写比如“它怎么用”需要补全为“这个系统怎么用”。Prompt 模板是否让 LLM 正确引用了片段。大多数“答非所问”的问题出在前 3 项而不是 LLM 本身。7. 接口 API 与批量任务7.1 API 设计一套企业级 RAG 系统至少需要这些接口创建知识库上传文档文档解析与入库查询问答检索调试查看中间结果异步任务状态查询以问答接口为例通用请求体如下{ knowledge_base: company_policy, question: 年假可以累计到下一年吗, top_k: 10, rerank_top_k: 3, use_hybrid_search: true }返回体中应包含回答、引用片段、来源文档、置信度{ answer: 根据公司制度年假原则上应在当年休完特殊情况下可经审批延长至次年 3 月。, sources: [ { document: 员工考勤管理制度.pdf, page: 12, content: 员工年假应在自然年度内安排休完确有特殊情况的可申请延期至次年 3 月 31 日。, score: 0.92 } ] }之所以要返回引用片段是因为企业场景必须有据可查。材料里强调“RAG 检索增强生成”增强的不仅是答案更是答案的可信度。7.2 Python 调用示例import requests url http://127.0.0.1:8000/api/query payload { knowledge_base: company_policy, question: 年假可以累计到下一年吗, top_k: 10, rerank_top_k: 3, use_hybrid_search: True } response requests.post(url, jsonpayload, timeout60) data response.json() print(回答, data[answer]) for src in data[sources]: print(f来源{src[document]} 第{src[page]}页相关度{src[score]:.2f})curl 方式curl -X POST http://127.0.0.1:8000/api/query \ -H Content-Type: application/json \ -d {knowledge_base:company_policy,question:年假可以累计到下一年吗,top_k:10,rerank_top_k:3,use_hybrid_search:true}7.3 批量任务设计企业知识库不可能只有几个文档批量入库是必选项。建议设计成异步任务队列上传文档后创建任务返回任务 ID。后台 worker 从队列取任务执行解析、切片、向量化、入库。任务状态通过数据库字段或 Redis 维护pending / processing / completed / failed。任务完成后写日志失败自动重试 1-2 次。示例任务状态表{ task_id: task_20250101_001, status: processing, total_docs: 120, processed_docs: 45, failed_docs: 2, created_at: 2025-01-01T10:00:00Z, updated_at: 2025-01-01T10:05:32Z }批量任务最容易踩的坑是单条文档解析异常导致整个队列卡住。正确做法是单文档失败只记录日志不中断队列重试策略要设置最大重试次数超过后标记 failed 并人工介入。7.4 接口稳定性上线前重点验证并发请求多个用户同时问答时延迟是否可接受。超时机制LLM 生成慢时接口是否设置了合理的 timeout。限流防止内部接口被刷爆。权限控制知识库接口要区分管理员和普通用户。日志每个请求要能追踪到检索了哪些片段、调用了哪个模型、用了多长时间。8. 资源占用与性能观察8.1 观察方法RAG 系统的资源占用分三段文档入库阶段CPU 和内存开销集中在解析和向量化GPU 用于 Embedding 模型推理。检索阶段主要消耗在向量数据库查询CPU 和内存为主延迟通常毫秒级。生成阶段LLM 推理是最大的资源消耗点本地部署时显存占用随模型规模和并发数上升。观察工具nvidia-smi看显存。htop或top看 CPU 和内存。向量数据库自带监控面板看 QPS 和查询延迟。调用链日志里记录每阶段耗时。8.2 性能瓶颈分析从实际经验看最容易出现瓶颈的地方文档解析PDF 解析慢且不稳定扫描件 OCR 更慢。Embedding 批量入库大量文档向量化耗时远超预期。混合检索多路召回 去重合并查询复杂度上升。Rerank对候选项逐条打分候选越多越慢。LLM 生成并发高时排队严重。8.3 降低资源占用的策略Embedding 和 Rerank 本地跑不动就换小模型或对 CPU 推理做批处理。入库高峰期控速避免一次灌入大量文档导致内存溢出。LLM 优先考虑量化版本或云端 API。切片入库前先做清洗剔除无意义内容减少向量数量。向量数据库按业务分区检索时只查相关分区降低扫描量。重排只对 Top20-50 做不对全量做。8.4 显存占用判断标准关于显存材料没有给出固定数字这里说明判断方法本地部署 LLM 时模型参数量乘以对应精度大致估算显存需求Embedding 和 Rerank 模型通常显存占用远小于 LLM但也不能忽视。生产环境建议先在小规模测试机上跑通用nvidia-smi监控实测峰值再决定需要多少 GPU。9. 常见问题与排查方法问题现象可能原因排查方式解决方案回答完全无关检索没召回正确片段打开检索调试接口看中间结果检查切片质量、Embedding 模型、是否做混合检索答案有依据但不准确重排后 TopK 片段仍包含噪声检查重排分数分布增大召回候选数、换更强的重排模型、调整 Prompt检索速度慢向量数据库没有索引或数据量过大查看查询耗时和索引状态建 HNSW/IVF 索引按业务分区入库后查询不到切片和向量化链路中断查看任务日志、检查向量数量单独跑一条文档链路确认入库成功接口超时LLM 生成太慢或并发过高查看日志中生成耗时加超时、限流、队列或换更快的模型显存不足模型太大或并发过高运行nvidia-smi查看显存换小模型、开启量化、降低 batch size中文效果差Embedding 模型不适合中文跑几个典型问题对比换 bge-large-zh 等中文模型CPU 入库特别慢没有 GPU 加速观察 CPU 使用率批量入库减少单条等待文档解析乱码PDF 是扫描版或格式复杂查看解析后的纯文本接入 OCR 或换解析方案召回结果有数据但答案引用错误元数据丢失或切片错位检查返回 sources入库时保留文档名、页码、章节字段排查 RAG 问题有一个核心原则先定位是哪一层出了问题。开放检索调试接口让测试时能看到“检索召回 Top20、重排 Top5、最终 Prompt 内容”问题立刻清晰。10. 最佳实践与使用建议10.1 从最小可运行配置开始第一次搭建 RAG 系统不要急着追求企业级架构。建议先跑通“单文档 本地小模型 单接口”的最小链路确认每一层输出都正确再逐步加入混合检索、重排、批量任务这些能力。最小可运行配置保留好作为后续修改的基线。10.2 建立评测集把业务中最典型的 50 个问题整理成评测集每个问题标注标准答案和唯一答案文档位置。每次修改切片参数、换模型、调整 Prompt都跑一遍评测集用指标说话。这是 RAG 优化里最关键但最容易被跳过的一步。10.3 分目录管理建议目录结构rag_project/ ├── docs/ # 原始文档 ├── parsed/ # 解析后的纯文本 ├── chunks/ # 切片结果 ├── models/ # 本地模型文件 ├── vector_db/ # 向量数据库持久化文件 ├── logs/ # 运行日志 ├── eval/ # 评测集和评测脚本 └── output/ # 生成结果模型文件、输入素材、输出结果、日志分开管理避免污染。10.4 批量任务的工程建议入库任务加状态字段和重试机制单文档失败不阻塞队列。处理前记录原始文档哈希重复上传可以跳过。增量更新时先删除旧向量再写入新切片。日志记录每批任务的耗时、文档数、失败原因。批量任务结束后发送通知方便人工确认。10.5 跨语言检索如果你的知识库同时包含中英文文档不要把两种语言的切片混在一个 Embedding 空间。先用语言检测分类再用对应语言的 Embedding 模型处理检索阶段按语言路由。这样能显著提高召回准确率。10.6 企业落地注意事项企业级知识库一旦开放给员工使用就要考虑权限继承、数据保密、服务稳定性。知识库中的文档可能跨越不同密级接口层要能按用户身份过滤检索结果而不是所有用户看到全部内容。发布前至少做一轮敏感信息扫描配合人工审核。11. 总结与下一步一套完整的企业级 RAG 知识库系统真正的难点不在“调用大模型”而在文档解析、切片、混合召回、重排这些容易被忽视的细节。这篇文章给出的链路是文档加载 - 解析 - 切片 - 向量化 - 混合检索 - 重排 - 生成 - 引用溯源 - 工程化部署。建议你拿到这篇教程后先验证三件事用一套自己的业务文档跑通基础链路确认检索能命中正确片段。建一个 50 题左右的评测集量化当前效果。接入混合检索和重排模型对比优化前后的指标变化。最容易踩的坑是直接跳到 Prompt 优化而忽略前方检索质量。请记住RAG 的上限由检索决定LLM 只是把检索到的内容组织成答案。后续可以继续扩展的方向基于 Agent 的多工具调用 RAG、图数据库与知识图谱增强的 RAG、多模态表格理解、以及面向特定行业法律/医疗/金融的领域优化。建议先把基础链路打磨到稳定再逐步引入这些高级能力。