Skip to content

从 0 到 1 构建企业级 RAG 系统

作者:张君豪
日期:2024-05-20
标签:AI, RAG, Vector DB


背景

随着大语言模型(LLM)的兴起,企业对于私有知识库问答的需求日益增长。通用的 LLM 缺乏特定领域的知识,且存在幻觉问题。检索增强生成(RAG)技术成为了解决这一问题的关键。

核心架构

我们的 RAG 系统主要包含以下几个模块:

  1. 数据处理流水线 (ETL)
    • 支持 PDF, Word, Markdown 等多种格式的文档解析。
    • 使用 LangChain 的 RecursiveCharacterTextSplitter 进行文本分块,确保语义完整性。
  2. 向量存储 (Vector Store)
    • 选型:我们对比了 Milvus, Qdrant 和 pgvector,最终选择了 Qdrant,因为它轻量、高性能且支持 Rust。
    • Embedding 模型:使用了 BGE-Large-zh-v1.5,在中文语义匹配上表现优异。
  3. 检索与生成 (Retrieval & Generation)
    • 混合检索:结合关键词检索(BM25)与向量检索,提升召回率。
    • 重排序 (Rerank):引入 BGE-Reranker 对召回结果进行精排。

遇到的坑与解决方案

1. 文档切分粒度

切分太细会导致语义破碎,切分太粗会包含过多噪声。 解法:采用“父子索引”策略。检索时匹配小块(子文档),生成时召回其所属的大块(父文档)上下文。

2. 表格数据处理

PDF 中的表格直接转文本会丢失结构信息。 解法:使用专门的表格解析模型(如 Table Transformer)提取表格结构,将其转换为 Markdown 格式或 JSON 存入。

总结

构建 RAG 系统不仅仅是调包,更多的是对数据的精细化处理和对业务场景的深刻理解。未来我们将探索 GraphRAG(基于知识图谱的 RAG)以处理更复杂的推理问题。