检索增强生成 RAG

方案 一句话概括 更新成本 实时性 适合场景
微调 把私域数据重新训一遍 知识库稳定、文风要求极高
RAG 临时把相关知识塞给模型 知识高频迭代、客服/法规/医疗
RAG+微调 先微调打底,再 RAG 补新 极高 头部企业才玩得起

一、LLM 的「专业盲区」

复制代码
flowchart LR
    A[索引阶段] --> B[检索阶段]
    A1[加载文档] --> A2[文本分段] --> A3[Embedding] --> A4[写向量库]
    B1[用户提问] --> B2[转向量] --> B3[TopK 召回] --> B4[拼接上下文 --> LLM]

二、RAG 的 2 个阶段

如何让大模型听懂你的专业黑话------RAG 与向量搜索全景解析

2.1 索引阶段(离线)

  1. 文档加载

    LangChain4j 内置 10+ DocumentLoader:本地、S3、GitHub、网页抓取...

  2. 分段

    按段落 / 句子 / token 切,重叠 20% 保语义连贯;每段 ≤ 模型最大窗口的 1/2。

  3. 向量化

    调用嵌入模型(text-embedding-v3、ada-002 等)→ 1024/1536 维向量。

  4. 写库

    向量数据库:Pinecone、Weaviate、Qdrant、ES8.x、MongoDB Atlas 等。

2.2 检索阶段(在线)

  1. 用户问题 → 同一嵌入模型 → 向量。

  2. 余弦相似度取 TopK(K=4~10)。

  3. 原始文本片段当上下文,连同问题一起喂给 LLM。

  4. LLM 生成带出处、带时间戳的最终答案。


三、向量搜索的 4 种相似度度量

| 名称 | 公式 | 特点 |
|-----------|-------------------------|---------------|---|------------|
| 余弦相似度 | cosθ = A·B / (‖A‖*‖B‖) | 只关注方向,最常用 |
| 欧氏距离 | √Σ(ai-bi)² | 方向+绝对距离 |
| 点积 | Σ(ai*bi) | 未归一化,受模长影响大 |
| 曼哈顿距离 | Σ | ai-bi | | 计算快,适合高维稀疏 |

生产经验:余弦 0.8 以上的片段再送 LLM,可过滤 60% 噪声。


四、LangChain4j 一站式实现(Java 代码)

4.1 加依赖

复制代码
<!--大模型-->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
<!--PDF 解析-->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-document-parser-apache-pdfbox</artifactId>
</dependency>
<!--向量存储-->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-pinecone</artifactId>
</dependency>

4.2 写配置

复制代码
langchain4j:
  open-ai:
    chat-model:
      api-key: ${OPENAI_API_KEY}
      model-name: gpt-4o-mini
  community:
    dashscope:
      embedding-model:
        api-key: ${DASH_SCOPE_API_KEY}
        model-name: text-embedding-v3   # 1024 维

4.3 索引管道(一次运行,永久生效)

复制代码
@Component
public class Indexer {
    @Autowired EmbeddingModel embeddingModel;

    public void build() {
        List<Document> docs = FileSystemDocumentLoader.loadDocumentsRecursively(
                "E:/knowledge",               // 放 PDF/MD/TXT
                new ApachePdfBoxDocumentParser()
        );

        PineconeEmbeddingStore store = PineconeEmbeddingStore.builder()
                .apiKey(System.getenv("PINECONE_API_KEY"))
                .index("hospital-index")
                .nameSpace("outpatient")
                .createIndex(PineconeServerlessIndexConfig.builder()
                        .cloud("AWS")
                        .region("us-east-1")
                        .dimension(1024)
                        .build())
                .build();

        EmbeddingStoreIngestor.ingest(docs, store); // 一键分段+向量化+写库
    }
}

4.4 检索 + 问答(在线)

复制代码
@AiService(wiringMode = EXPLICIT,
           chatModel = "qwenChatModel",
           contentRetriever = "hospitalRetriever")
public interface MedicalAgent {
    String chat(@UserMessage String question);
}

@Configuration
public class RagConfig {
    @Bean
    ContentRetriever hospitalRetriever(EmbeddingModel em,
                                       EmbeddingStore<TextSegment> store) {
        return EmbeddingStoreContentRetriever.builder()
                .embeddingModel(em)
                .embeddingStore(store)
                .maxResults(4)      // Top4 片段
                .minScore(0.8)      // 余弦阈值
                .build();
    }
}

五、效果 & 调优秘籍

参数 推荐值 备注
分段大小 300~600 token 看模型窗口,留 50% 余量
重叠 30~50 token 平衡连贯 vs 冗余
TopK 4~10 过多 >10 易超 token 上限
余弦阈值 0.75~0.85 医疗/法律建议 ≥0.8
嵌入模型 text-embedding-v3 / ada-002 中文用阿里,英文用 OpenAI

六、常见坑 & 排查清单

  1. PDF 是扫描图 → 先用 OCR(Tesseract/腾讯云 OCR)再丢给解析器。

  2. Table 表格丢失 → 用 ApacheTikaDocumentParserCamelot 先抽表。

  3. 召回为空 → 检查分段是否过碎 / 向量维度是否不一致 / 索引空间写错。

  4. 答案幻觉 → 把 minScore 调高 + 在提示词里加"若上下文无法回答,请明确拒绝"。


七、一句话总结

把私域数据切成块 → 变成向量 → 放数据库 → 用户问题实时找最像的块 → 塞给 LLM → 秒级生成专业答案。
RAG 不是银弹,却是 90% 企业让大模型"说人话、说行话"的最短路径。

相关推荐
NAGNIP9 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab10 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab10 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP14 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年14 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼14 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS14 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区16 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈16 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang16 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx