从 0 到 1 构建企业级 RAG 系统
作者:张君豪
日期:2024-05-20
标签:AI, RAG, Vector DB
背景
随着大语言模型(LLM)的兴起,企业对于私有知识库问答的需求日益增长。通用的 LLM 缺乏特定领域的知识,且存在幻觉问题。检索增强生成(RAG)技术成为了解决这一问题的关键。
核心架构
我们的 RAG 系统主要包含以下几个模块:
- 数据处理流水线 (ETL)
- 支持 PDF, Word, Markdown 等多种格式的文档解析。
- 使用 LangChain 的
RecursiveCharacterTextSplitter进行文本分块,确保语义完整性。
- 向量存储 (Vector Store)
- 选型:我们对比了 Milvus, Qdrant 和 pgvector,最终选择了 Qdrant,因为它轻量、高性能且支持 Rust。
- Embedding 模型:使用了 BGE-Large-zh-v1.5,在中文语义匹配上表现优异。
- 检索与生成 (Retrieval & Generation)
- 混合检索:结合关键词检索(BM25)与向量检索,提升召回率。
- 重排序 (Rerank):引入 BGE-Reranker 对召回结果进行精排。
遇到的坑与解决方案
1. 文档切分粒度
切分太细会导致语义破碎,切分太粗会包含过多噪声。 解法:采用“父子索引”策略。检索时匹配小块(子文档),生成时召回其所属的大块(父文档)上下文。
2. 表格数据处理
PDF 中的表格直接转文本会丢失结构信息。 解法:使用专门的表格解析模型(如 Table Transformer)提取表格结构,将其转换为 Markdown 格式或 JSON 存入。
总结
构建 RAG 系统不仅仅是调包,更多的是对数据的精细化处理和对业务场景的深刻理解。未来我们将探索 GraphRAG(基于知识图谱的 RAG)以处理更复杂的推理问题。
