Appearance
核心组件
RAG系统由多个核心组件组成,每个组件都承担着重要的功能。了解这些组件的工作原理,对于构建高性能的RAG系统至关重要。
1. 数据处理模块
文本分块
将长文本分割成合适大小的片段,是RAG系统的第一步。
分块策略
- 固定长度分块:按固定字符数或句子数分割
- 语义分块:基于段落、章节等语义边界分割
- 递归分块:先大后小的分层分块策略
分块大小选择
| 分块大小 | 适用场景 | 优缺点 |
|---|---|---|
| 小(100-500 tokens) | 精准检索 | 上下文不完整 |
| 中(500-1000 tokens) | 平衡方案 | 通用性强 |
| 大(1000+ tokens) | 上下文丰富 | 检索精度降低 |
文本清洗
- 去除噪声和无关信息
- 标准化文本格式
- 处理特殊字符和格式
2. 嵌入模块
嵌入模型
将文本转换为向量表示,用于后续的相似度计算。
主流模型
- OpenAI Embeddings:性能优异,API调用
- Sentence-BERT:开源,适合本地部署
- Hugging Face模型:种类丰富,可定制
嵌入维度
- 768维:平衡性能和精度
- 1024维:更高精度,计算成本增加
- 384维:轻量级,适合资源受限场景
3. 检索模块
检索算法
- 稀疏检索:基于关键词匹配(如TF-IDF、BM25)
- 密集检索:基于向量相似度(如余弦相似度)
- 混合检索:结合稀疏和密集检索的优势
检索策略
- Top-K检索:返回最相似的K个结果
- 阈值检索:返回相似度超过阈值的结果
- 多路召回:使用多种检索方法并行检索
4. 生成模块
大语言模型
- OpenAI GPT:GPT-3.5、GPT-4等
- 开源模型:LLaMA、ChatGLM等
- 本地部署:适合数据敏感场景
提示工程
- 系统提示:定义模型角色和行为
- 上下文构建:将检索结果组织成上下文
- 输出格式:指定回答的格式和风格
5. 评估模块
评估指标
- 检索准确性:Precision、Recall、MRR
- 生成质量:BLEU、ROUGE、人工评估
- 端到端性能:回答准确性、响应时间
评估方法
- 离线评估:使用标注数据集评估
- 在线评估:A/B测试、用户反馈
- 持续监控:生产环境性能监控
组件交互流程
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 文档输入 │────>│ 数据处理 │────>│ 文本分块 │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 向量存储 │<────│ 嵌入模块 │<────│ 文本块 │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 检索结果 │────>│ 上下文构建 │────>│ LLM生成 │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 最终回答 │
└─────────────┘技术选型建议
轻量级方案
- 嵌入模型:all-MiniLM-L6-v2
- 向量数据库:Chroma
- LLM:GPT-3.5-turbo
企业级方案
- 嵌入模型:text-embedding-ada-002
- 向量数据库:Pinecone/Weaviate
- LLM:GPT-4
开源方案
- 嵌入模型:Sentence-BERT
- 向量数据库:Milvus
- LLM:LLaMA-2/ChatGLM