首页/案例库/RAG 检索增强生成
进阶AI 智能体

RAG 检索增强生成

让 LLM 基于你的私有知识库回答问题

LLM 的知识截止于训练数据,无法回答「公司最新的报销政策是什么」这类私有问题。RAG(Retrieval-Augmented Generation)的解决方案:先用向量搜索从你的文档库中检索相关片段,再将这些片段作为上下文注入 prompt,让 LLM 基于检索到的内容生成回答。核心流程是 Embed → Store → Retrieve → Generate。文档预处理(分块策略、元数据提取)和检索质量(相似度算法、重排序)直接决定 RAG 的效果。

RAG向量数据库Embedding语义搜索知识库LLM
STEP_1
分块质量是 RAG 效果的第一道关卡,值得反复调优
将长文档切分为可检索的片段 — PROCESSING
chunking.log
// 递归分块示例
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"

const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 500,      // 每块最大 500 字符
  chunkOverlap: 50,    // 相邻块重叠 50 字符
  separators: [
    "\n\n",   // 先按双换行(段落)分
    "\n",      // 再按单换行分
    "。",       // 再按句号分
    ",",       // 再按逗号分
    " ",        // 最后按空格分
    ""          // 兜底按字符分
  ]
})

const chunks = await splitter.createDocuments(
  [documentText],
  [{ source: "policy-2024.pdf", date: "2024-03-01" }]  // 元数据
)

// 输出示例
// { pageContent: "第三章 报销流程...", metadata: { source: "...", date: "..." } }

文档分块与预处理长文档需要切分为适合嵌入和检索的小���(Chunk)。分块策略影响检索效果:按固定字符数切分简单但可能截断语义;按段落/章节切分保留语义完整性;递归分块先按大单位(章节)再按小单位(段落、句子)逐级细分。Chunk 大小通常 200-1000 tokens,太小丢失上下文,太大稀释相关性。Overlap(重叠)让相邻块共享部分内容,避免边界处信息丢失。元数据(来源、日期、作者)便于后续过滤。

实时沙盒SANDBOX
FAULT_INJECTED
快速场景
手动调节
分块大小
每个文档块的 Token 数
500 tokens
分块大小适中,语义完整且检索精准
检索数量 (Top-K)
返回的相关文档块数量
5
检索数量适中,上下文丰富且聚焦
启用 Reranker 精排
Reranker 关闭,仅依赖向量相似度,可能有噪音
启用混合检索
混合检索开启,兼顾语义和字面匹配