RAG(检索增强生成)的价值,是把可更新的私有知识接到生成模型前面。出问题最多的不是「换更大模型」,而是切分与检索质量。
管线五步
- 加载:Markdown、PDF、网页 → 纯文本。
- 切分:按标题/段落分块,保留元数据(路径、标题、锚点)。
- 嵌入与索引:块 → embedding → 向量库。
- 检索 + 重排:先召回 topK,再交叉编码器或规则重排。
- 生成:只根据检索片段回答,并输出引用。
const chunks = splitByHeading(markdown, { maxTokens: 500, overlap: 80 });
const hits = await index.search(queryEmbedding, { k: 20 });
const reranked = await rerank(query, hits).slice(0, 5);
const answer = await generate({ query, contexts: reranked });切分经验
- 过碎:检索噪声大;过长:相关句被稀释。
- 保留标题路径当 metadata,生成引用时用户才找得到原文。
- overlap 用于避免句子在边界被切断。
一定要评测
准备 20–50 条问答金标:
- 检索是否命中正确块(Recall@K)
- 答案是否引用了正确来源
- 知识不在库内时是否拒答
没有评测集,换模型也只是换一种感觉。
小结
RAG 是系统工程。把「检索是否对」和「生成是否守规矩」拆开优化,进度会快得多。