三、如何上手 RAG?
上手 RAG 最常见的误区,是一开始就追求”复杂编排””多模型协同”或”高级 Agent 化”。对大多数团队来说,更稳妥的路径是:先做出一个能够稳定回答问题、可观察、可评估的最小可行系统(MVP),再逐步优化召回、排序和生成质量。
3.1 基础工具链选择(Java 技术栈)
开发框架
| 方案 | 特点 | 适用场景 |
|---|---|---|
LangChain4j |
Java 版 LangChain,RAG 组件较全,社区活跃 | 想快速搭建 RAG 链路、验证方案 |
Spring AI |
Spring 官方 AI 框架,与 Spring Boot 集成自然 | 已有 Spring 体系项目,强调工程整合 |
| 原生开发 | 直接基于向量数据库 SDK + LLM API 组合实现 | 对链路可控性、性能和定制化要求较高 |
向量数据库
| 方案 | 特点 | 适用场景 |
|---|---|---|
Milvus |
高性能分布式向量数据库 | 大规模生产环境 |
Elasticsearch |
同时支持全文检索与向量检索 | 需要混合检索、已有 ES 体系 |
FAISS |
轻量、适合本地快速验证 | 本地实验、小规模检索 |
pgvector |
PostgreSQL 向量扩展,维护成本低 | 团队已有 PostgreSQL 技术栈 |
嵌入模型
| 方案 | 特点 | 适用场景 |
|---|---|---|
OpenAI text-embedding-3 |
效果稳定、使用简单 | 预算充足,优先效果 |
| Hugging Face 开源模型 | 如 bge-large-zh、m3e-base,可私有化部署 |
数据敏感或希望控制成本 |
| 国内 Embedding API | 如智谱 AI、通义千问 | 需要更便捷的国内服务接入 |
评估工具
| 方案 | 特点 |
|---|---|
RAGAS |
常见开源 RAG 评估框架,适合离线评测 |
| 自定义评估 | 更贴近业务目标,可结合人工标注、点击率、采纳率等指标 |
选型建议:
- 已有
Spring Boot项目,优先考虑Spring AI。- 想快速拼装一条可运行的 RAG 链路,优先考虑
LangChain4j。- 需要更强的可控性、精细优化能力或和现有基础设施深度整合,可考虑原生开发。
3.2 Java 实战:四步构建最小可行系统(MVP)
第一步:数据准备与清洗
RAG 的上限,很大程度上取决于知识库的质量。第一步不是”接模型”,而是先把数据整理干净。
技术要点:
- 使用
Apache Tika解析 PDF、Word、Excel 等多格式文档。 - 使用
Jsoup清理 HTML 标签、样式噪声和特殊字符。 - 对扫描版 PDF、图片类文档补充 OCR 处理,否则很多内容根本进不了索引。
- 统一文档编码、标题层级、换行格式与元数据字段,降低脏数据对检索的影响。
分块建议:
- 优先按语义段落、标题层级或业务字段切分,而不是机械地按固定字符数切块。
- 建议每块控制在
500~1000 tokens。 - 相邻块保留
50~100 tokens的重叠区间,以减少上下文断裂。 - 为每个块保留来源、页码、标题、版本号、更新时间等元数据,方便后续溯源和过滤。
第二步:索引构建
技术要点:
- 将切分后的文本通过 Embedding 模型转化为向量。
- 向量入库时同步写入元数据,如来源文档、页码、创建时间、权限标识等。
- 建立增量索引机制,支持新增、更新、删除文档后的快速同步。
- 对高价值文档优先保证索引质量,而不是一开始就追求”全量接入”。
第三步:检索策略优化
技术要点:
- 不要只依赖单一向量检索,优先采用”向量检索 + 关键词检索”的混合检索方案。
- 使用
Rerank模型对召回结果进行二次排序,提升真正相关内容的排名。 - 针对业务问题加入查询改写、同义词扩展、术语映射等能力,提升召回率。
- 对结果进行权限过滤、版本过滤和时间过滤,避免”召回到了但不能用”。
第四步:生成与提示工程
技术要点:
- 设计清晰的 Prompt 模板,引导 LLM 基于检索上下文作答。
- 明确约束模型”找不到证据就直接说明不知道”,尽量减少幻觉。
- 要求答案附带引用来源,提升可追溯性与可信度。
- 控制注入上下文的数量,避免把大量低相关内容塞进 Prompt,导致噪声过高。
MVP 验收标准:
- 能基于知识库回答明确问题。
- 能返回引用来源或文档片段。
- 对证据不足的问题,能够拒答或明确说明依据不足。
- 能通过一组简单测试问题,观察到可重复的效果变化。
3.3 Java 开发者的两条上手路径
路径一:低代码快速验证(适合业务方)
Dify/FastGPT:可视化知识库平台,适合快速上传文档、验证问答效果。MaxKB:国产开源知识库问答系统,支持较快部署,适合内部 PoC。
路径二:工程化开发(适合技术团队)
LangChain4j:适合快速搭建、调试和扩展 RAG 链路。Spring AI:适合深度集成到现有 Java / Spring 业务系统中。
如果目标是”先验证业务价值”,优先走低代码路径;如果目标是”接入现有 Java 系统,并纳入权限、审计、监控和治理”,优先走工程化开发路径。
3.4 落地过程中常见的难点与优化方向
| 难点 | 典型表现 | 优化建议 |
|---|---|---|
| 文档解析复杂 | PDF、PPT、扫描件、图表类内容提取不完整;流程图、架构图多以形状元素呈现,只提文字会丢失大量潜藏信息 | 引入 OCR、版面分析能力,对高价值文档进行人工抽检;对重要图表提取描述与结构化信息 |
| 分块策略不合理 | 块太大导致召回粗糙,块太小导致语义破碎;固定 top_k 可能漏掉必要信息 | 按章节/段落切分,保留重叠区间,并按文档类型定制策略;根据块密度动态调整召回数量 |
| 专有名词召回差 | 缩写、内部术语、产品名难以命中;向量查询对专有名词不友好 | 引入术语词典、同义词映射、查询改写和混合检索 |
| 新旧版本并存 | 回答引用了过期文档或冲突内容;技术报告周期更新导致召回多个版本 | 增加版本号、生效时间、状态字段,并在排序时优先最新有效版本;明确标注版本来源 |
| 仅靠向量检索不稳定 | 短问题、精确关键词问题效果不佳;向量相似度无法完全反映真实语义匹配 | 采用向量检索 + BM25/全文检索 + Rerank |
| 复杂逻辑推理困难 | 需要跨文档、多步骤推理才能得出答案;无法在单段落中直接找到答案 | 将任务拆成多个子问题,必要时引入工作流或规则引擎 |
| 公式计算类问题难 | 金融、统计等场景需要严格套用公式 | 将”检索”和”计算”拆开,交给外部计算模块处理 |
| 长文本与多轮问答 | 上下文过长、历史对话污染当前问题 | 做上下文裁剪、会话摘要、分轮检索和轮次隔离 |
这些问题说明:RAG 不是”接上向量库就结束”,真正决定效果的往往是数据治理、检索策略和评估闭环。
3.5 常见问题与应对方式
分块策略与 top-k 选择
- 问题:固定分块大小和固定 top_k 往往难以适应不同文档类型和查询场景。
- 应对:
- 根据文本长度和结构动态调整分块策略,避免信息破碎或召回粗糙。
- 采用可变 top_k 或按相关性阈值召回,而非固定数字。
- 引入 Rerank 对召回结果做二次排序。
世界知识缺失
- 问题:RAG 知识库可能和常识或真实世界知识脱节。例如,基于《西游记》数据构建问答,问”人有几个头”,系统可能给出错误答案。
- 应对:
- 在 Prompt 中提示模型优先依赖常识,只在必要时引用知识库。
- 对明显违背常识的检索结果进行过滤或人工干预。
- 对特定领域知识明确声明边界,避免模型”胡乱发挥”。
多跳问题与推理能力
- 问题:单次检索无法回答需要多步推理的问题,例如”谁能把 A 介绍给 B(排除 C)”。
- 应对:
- 将复杂问题拆解为多个子问题,分别检索再综合答案。
- 引入 ReACT 等复杂 Prompt 工程框架,让模型”先规划、再检索、再生成”。
- 在需要强推理的场景,结合外部图数据库或规则引擎辅助。
信息丢失与检索链路噪声
- 问题:在分块 → 向量化 → 检索 → 重排 → 生成的链路中,每个环节都可能出现信息丢失或噪声累积。
- 应对:
- 在分块时保留重叠区间,减少上下文断裂。
- 在检索后对结果进行去重、去噪和相关性过滤。
- 在生成前对上下文长度和质量做二次校验。
这些问题说明:RAG 的效果不仅取决于”接了什么模型”,更取决于数据质量、检索策略、评估与调优的工程闭环。
3.6 如何评估一个 RAG 系统?
文档召回率(Document Recall)
文档召回率衡量的是:对于一个问题,所有真正相关的文档中,有多少被系统成功检索出来了。
计算方式如下:
文档召回率 = 成功检索到的相关文档数量 / 所有相关文档数量
如果召回率过低,后面的生成模型再强,也只能”基于错误或不完整的信息认真回答”。因此,RAG 的第一优先级通常不是把答案写得多漂亮,而是先确保该找回来的内容能找回来。
常用评估指标
| 指标 | 含义 | 关注重点 |
|---|---|---|
Context Precision 上下文精确度 |
检索结果中,真正相关的上下文是否排在前面 | 排序质量 |
Context Recall 上下文召回率 |
检索结果是否覆盖了回答问题所需的信息 | 检索完整性 |
Faithfulness 忠实度 |
生成答案是否忠于给定上下文,是否出现幻觉 | 事实一致性 |
Answer Relevance 答案相关性 |
最终答案是否真正回答了用户问题 | 回答相关性 |
实践建议:
- 准备一批高质量问答集作为离线评测样本。
- 同时看”检索指标”和”答案指标”,不要只看最终回答是否流畅。
- 对线上场景补充人工反馈、点击率、采纳率、追问率等业务指标。
- 每次改动分块、检索或 Prompt 后,都要回归评测,避免”优化一个点、伤到一大片”。