三、如何上手 RAG?

三、如何上手 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-zhm3e-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,导致噪声过高。

RAG MVP 流程

MVP 验收标准:

  1. 能基于知识库回答明确问题。
  2. 能返回引用来源或文档片段。
  3. 对证据不足的问题,能够拒答或明确说明依据不足。
  4. 能通过一组简单测试问题,观察到可重复的效果变化。

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 后,都要回归评测,避免”优化一个点、伤到一大片”。