第二章:RAG系统技术架构设计

导读:在第一章中,我们了解了RAG的基本概念和优势。本章将进入实战前的准备工作------设计RAG系统的技术架构。我们将详细拆解系统的两大流程(离线数据处理与在线问答),并介绍本教程所选用的技术栈及其选型理由。通过本章,你将清楚知道整个系统由哪些组件构成,以及它们之间如何协作。


2.1 系统整体架构

一个典型的RAG系统包含两个主要阶段:离线数据处理 (索引构建)和在线问答流程(检索+生成)。下图展示了完整的数据流向:

离线数据处理流程

text

复制代码
[私有文档] 
   (PDF/TXT)
     ↓
[文本加载器] 
   (读取文件内容)
     ↓
[文本分割器] 
   (将长文档切分为语义完整的短片段)
     ↓
[嵌入模型] 
   (将每个片段转换为向量)
     ↓
[向量数据库] 
   (存储向量及原始文本,构建索引)

步骤详解

  1. 文档加载:从本地或云存储读取企业私有文档,支持常见格式如PDF、TXT、Markdown、Word等。加载器负责提取纯文本内容,忽略格式噪声。
  2. 文本分割:大模型对上下文长度有限制(通常为8K-128K token),且检索系统需要细粒度的片段。因此需将长文档切分为语义完整的短段落或句子,一般每段控制在200-500个词(或按token数分割)。分割策略需避免切断关键信息。
  3. 向量化:将每个文本片段通过嵌入模型转换为固定长度的向量(如384维或768维)。向量应能捕捉文本的语义信息,使语义相似的文本在向量空间中接近。
  4. 存入向量数据库:将向量及其对应的原始文本、文档来源、片段序号等元数据存入向量数据库。数据库会为向量建立索引,以便快速进行近似最近邻搜索。

在线问答流程

text

复制代码
[用户提问]
     ↓
[嵌入模型] (将问题转为向量)
     ↓
[向量检索] (在向量数据库中搜索最相似的Top-K片段)
     ↓
[获取Top-K相关片段]
     ↓
[构建Prompt] (将问题与检索到的片段组合成提示模板)
     ↓
[大语言模型] (DeepSeek LLM 根据Prompt生成答案)
     ↓
[最终回答] (可附带引用来源)

步骤详解

  1. 问题向量化:用户输入问题后,使用与离线阶段相同的嵌入模型将问题转换为向量。
  2. 向量检索:以问题向量为查询,在向量数据库中执行相似性搜索,召回最相关的K个文本片段(通常K取3~5)。这一步快速定位可能包含答案的文档片段。
  3. Prompt构建:将召回片段作为上下文,与用户问题按照特定模板组合,形成完整的Prompt。模板示例:
  4. text
  5. 请基于以下资料回答问题。如果资料中找不到答案,请直接说"无法回答"。 资料: [1] {片段1} [2] {片段2} ... 问题:{用户问题}
  6. 答案生成:将Prompt发送给大语言模型(如DeepSeek-V3),模型根据上下文生成准确、简洁的回答。若模型认为资料不足以回答,则遵循指令拒绝回答。
  7. 输出与引用:最终答案可附带来源索引(如[1][2]),增强可信度和可追溯性。

2.2 技术栈选型

为了实现上述架构,我们需要选择合适的技术组件。本教程的选型原则是:轻量、高效、易上手,同时兼顾工业级应用的可能。以下是具体选型及理由。

|-----------------|------------------------------------------|-----------------------------------------------------------------------------------------------|
| 组件 | 选型 | 选型理由 |
| 编程语言 | Python 3.8+ | AI领域事实标准,拥有最丰富的库生态,适合快速开发与教学。 |
| 大语言模型 (LLM) | DeepSeek-Chat (V3) | 中文能力出色,性价比极高(API价格仅为GPT-4的1/10),支持私有化部署,符合企业需求。 |
| 向量数据库 | ChromaDB | 轻量级嵌入式数据库,无需单独部署服务,支持内存和持久化存储,非常适合教学和中小型项目。提供简单的Python API,便于理解核心概念。 |
| 嵌入模型 | Sentence-Transformers (all-MiniLM-L6-v2) | 轻量级开源模型,768维输出,速度快,在语义相似度任务上表现良好。完全本地运行,无数据隐私风险。也可替换为OpenAI的text-embedding-3-small,但需付费且依赖网络。 |
| 开发框架 | 原生Python + Requests | 为了深入理解RAG底层原理,本教程将尽量减少对LangChain等高级框架的依赖。我们将直接调用API和库,展示每一步的实现逻辑,让你真正掌握RAG的精髓。 |

补充说明

  • 为什么不用LangChain? LangChain虽然封装了丰富的组件,但隐藏了太多细节,不利于初学者理解RAG的内在机制。在掌握了基础后,你可以轻松迁移到LangChain或LlamaIndex以提高开发效率。
  • 嵌入模型的选择:all-MiniLM-L6-v2是MiniLM系列中速度和效果平衡的模型,适合CPU环境。若追求更高精度,可换用bge-large-zh(中文优化)或OpenAI的嵌入模型。
  • 向量数据库的扩展:ChromaDB适合原型验证,生产环境可平滑迁移至Pinecone、Weaviate或Milvus等专业向量数据库,代码改动极小。

2.3 环境准备与依赖安装

在开始编码前,我们需要安装必要的Python包。创建一个新的虚拟环境,并执行以下命令:

bash

复制代码
pip install chromadb sentence-transformers requests python-dotenv
  • chromadb:向量数据库客户端。
  • sentence-transformers:加载嵌入模型并生成向量。
  • requests:用于调用DeepSeek API(如果需要)。
  • python-dotenv:管理环境变量(如API密钥)。

此外,如果你选择使用DeepSeek API,需要注册获取API Key,并配置环境变量。我们将在后续章节详细说明。


2.4 架构设计的扩展思考

本节的架构设计虽然简洁,但已经涵盖了RAG的核心要素。在实际生产系统中,你可能还需要考虑:

  • 文档解析的鲁棒性:支持更多格式(如扫描件OCR、HTML、Excel)。
  • 分块策略优化:根据文档类型调整分块大小和重叠,避免切断语义。
  • 混合检索:结合关键词检索(BM25)和向量检索,提高召回率。
  • 重排序:对召回片段进行二次排序,将最相关的片段排在前面。
  • 对话记忆:在多轮对话中保留历史,实现上下文连贯。

这些进阶主题将在后续章节中逐步展开。

相关推荐
货拉拉技术1 小时前
文本大模型评测实践
人工智能·深度学习·算法
Hali_Botebie2 小时前
CVPR 2025的最佳论文(VGGT):VGGT: Visual Geometry Grounded Transformer
人工智能·深度学习·transformer
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-02-24
大数据·数据库·人工智能·经验分享·搜索引擎
中山六匹马2 小时前
2026中山B2B网站建设:如何结合GEO优化提升企业竞争力
大数据·网络·人工智能
newbiai2 小时前
2026马年春晚:火山引擎驱动AI新体验?
人工智能·python·火山引擎
志栋智能2 小时前
自动化巡检能给我们带来什么?
人工智能
Rabbit_QL2 小时前
【音频处理】从 AirPods 主动降噪到音频 Source Separation:同一个问题的两种工程解法
前端·人工智能·音视频
智驱力人工智能2 小时前
地铁隧道轨道障碍物实时检测方案 守护城市地下动脉的工程实践 轨道障碍物检测 高铁站区轨道障碍物AI预警 铁路轨道异物识别系统价格
人工智能·算法·yolo·目标检测·计算机视觉·边缘计算
云边云科技_云网融合2 小时前
电子制造出海新基建:网络韧性撑起全球协同生产骨架
网络·人工智能·架构