进阶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 关闭,仅依赖向量相似度,可能有噪音
启用混合检索
混合检索开启,兼顾语义和字面匹配