RAG(Retrieval-Augmented Generation)是一种将外部知识库与大语言模型结合的技术架构。它将文档切分为小块(Chunk),向量化存入数据库,在用户提问时检索相关Chunk,再将其拼入Prompt供LLM生成答案。
| 策略 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 固定字数 | 按固定字符数硬切 | 实现简单,切片均匀 | 可能切断句子/段落,语义不完整 | 快速原型验证 |
| 按句子 | 以句号等标点为边界 | 语义完整,保留句子结构 | 句子长短不一,切片大小不均 | 新闻、文章、FAQ |
| 按段落 | 以空行/换行为边界 | 主题完整,保留段落逻辑 | 段落可能过长或过短 | 技术文档、书籍章节 |
| 滑动窗口 | 固定窗口+重叠步进 | 保留跨边界上下文,召回率高 | 存储量增加,有重复内容 | 合同、需要上下文的文档 |
| 场景 | 推荐大小 | 说明 |
|---|---|---|
| 问答系统 | 200~500字符 | 粒度小,精准匹配 |
| 文档摘要 | 500~1000字符 | 保留足够上下文 |
| 长文分析 | 1000~2000字符 | 章节级别切分 |
| 代码文件 | 按函数/类切分 | 保留代码语义单元 |
滑动窗口中的重叠区域确保处于切片边界的关键信息不会丢失。通常重叠设置为窗口大小的10%~20%。过大的重叠会显著增加存储和检索成本。
切片完成后,每个Chunk会通过Embedding模型(如text-embedding-ada-002、BGE、M3E等)转换为高维向量,存入向量数据库(如Milvus、Pinecone、Chroma、FAISS)。检索时计算查询向量与存储向量的余弦相似度,返回Top-K最相关的Chunk。