前言

从第一篇写下“生产级大模型应用架构”开始,LiteRAG 已经走过了一整个完整的开发周期。八篇文章、数万行代码、无数次调试与重构,这个项目终于从一个雄心勃勃的规划蓝图,落地为一个可以自信展示的完整作品。

回顾第一篇,我曾规划了一个“大而全”的架构:Vue3 前端、多模态支持(PDF/Excel/语音)、用户权限管理、实时语音交互……然而在实际开发中,我逐渐意识到:在有限的时间和硬件资源下,聚焦核心链路的深度远比堆砌功能更有价值

这篇终章,我将做三件事:

  1. 对照第一篇的规划,诚实复盘:哪些实现了?哪些放弃了?为什么?

  2. 展示最终系统全貌:从架构图到技术栈,从核心模块到完整依赖清单。

  3. 总结与展望:这八篇文章带给我的成长,以及未来可能的方向。

GitHub链接:WuYMGitHub/LiteRAG: 面向边缘端的高效RAG系统,包含Milvus、Redis、Prometheus监控栈。


一、对照第一篇:初衷与现实的诚实复盘

1.1 最初规划 vs 最终实现

第一篇中的规划 最终实现 取舍原因
Vue3 + FastAPI 前后端分离 Gradio 全栈交互界面 个人精力有限,Gradio 能快速实现多会话管理、自动标题生成等核心交互
多模态支持(PDF/Excel/语音) 纯文本 RAG 6GB 显存不足以支撑多模态模型,且多模态非 RAG 核心链路
用户登录、角色权限管理 未实现 非个人项目的核心需求,实现成本高但展示价值有限
实时语音交互 未实现 与核心检索链路无关,属于前端体验层
LangChain 编排 FastAPI 直连,仅在文档分块等有限场景使用 LangChain 抽象层过重,调试困难,直接调用更灵活
Qwen-2.5 本地部署 Qwen3.5-Flash 云端 API 6GB 显存无法同时容纳本地 LLM + Embedding + Reranker
MinIO 对象存储 Milvus 内置 MinIO 即可 独立 MinIO 是过度设计
BGE-Small-EN Embedding BGE-M3(多语言,1024维) 中英文混杂场景下,多语言模型语义匹配准确率大幅提升
BGE-Reranker-Base BGE-Reranker-V2-M3(多语言) 与 Embedding 同步升级,保证精排阶段跨语言评分准确

1.2 超出预期的部分

有些东西是第一篇中没有规划,却在开发过程中自然而然生长出来的:

  • 加权 RRF 融合:原计划只是简单的 RRF 融合,但在诊断中发现 BM25 噪音严重干扰向量检索信号,于是自研了可配置权重的加权 RRF 算法,向量检索贡献设为 BM25 的 3 倍。

  • RAGAS 自动化评估闭环:从“感觉系统答得不错”到“Context Recall 0.50 → 0.80”,建立了数据驱动的优化方法论。

  • SQLite 零依赖会话持久化:在不引入 MySQL/PostgreSQL 的前提下,用 Python 标准库自带的 SQLite 实现了会话的双写持久化。

  • 全链路可观测性:Prometheus + Grafana 的开箱即用仪表板,让系统状态一目了然。

1.3 为什么“做减法”比“堆功能”更需要勇气

作为一个正在找实习的研一学生,时间是最稀缺的资源。如果把精力分散在 Vue3 前端、多模态解析、权限系统这些“看起来很厉害”的功能上,最终很可能得到一个“什么都有但什么都不精”的半成品。相比之下,聚焦在 RAG 核心链路的深度优化上——从检索算法到模型选型,从评估闭环到系统可靠性——虽然功能列表看起来“少”了,但每一个功能都经得起面试官的深挖。


二、最终系统全貌

2.1 架构总览

text

                  ┌──────────────────────────────────────┐
                  │            Gradio (UI)               │
                  │    多会话管理 / 自动标题 / 侧边栏    │
                  └────────────────┬─────────────────────┘
                                   │
                  ┌────────────────▼─────────────────────┐
                  │         FastAPI Chat API              │
                  │  /chat  /health  /metrics             │
                  └────────┬──────────────┬──────────────┘
                           │              │
              ┌────────────▼──────┐  ┌────▼─────────────────┐
              │   Query Rewriter  │  │  Session Manager     │
              │ (多轮指代消解)     │  │ (Redis + SQLite 双写) │
              │   Qwen3.5-Flash   │  └──────────────────────┘
              └────────────┬──────┘
                           │
              ┌────────────▼──────────────────────────────┐
              │       Hybrid Search (加权 RRF)             │
              │  ┌─────────────┐   ┌──────────────────────┐│
              │  │ Vector 检索  │   │  BM25 关键词检索     ││
              │  │   BGE-M3     │   │  Jieba + 12个领域词  ││
              │  │  (1024维)    │   │                      ││
              │  └──────┬───────┘   └──────┬───────────────┘│
              └─────────┼──────────────────┼────────────────┘
                        │                  │
              ┌─────────▼──────────────────▼────────────────┐
              │       Reranker: BGE-Reranker-V2-M3          │
              │       显存不足 → 自动 CPU 回退               │
              └──────────────────────┬──────────────────────┘
                                     │
              ┌──────────────────────▼──────────────────────┐
              │                LLM Service                   │
              │     Qwen3.5-Flash (阿里百炼 API)             │
              └─────────────────────────────────────────────┘

          旁路监控:
          FastAPI /metrics → Prometheus → Grafana (LiteRAG Overview)
          仪表板自动加载:docker compose up 即可用

2.2 完整技术栈

层级 技术选型 说明
API 框架 FastAPI + Uvicorn 异步高性能,自带 Swagger 文档
向量数据库 Milvus 2.4.23 (Standalone) IVF_FLAT 索引,COSINE 相似度
Embedding 模型 BGE-M3 (1024维) 多语言,本地部署,HuggingFace 离线模式
Reranker 模型 BGE-Reranker-V2-M3 多语言 Cross-Encoder,显存不足自动 CPU 回退
LLM Qwen3.5-Flash (阿里百炼 API) OpenAI 兼容接口,按量付费
分词 Jieba + 12 个领域自定义词 防止专业术语被错误切分
L1 缓存 Redis 7 (redis-stack-server) 精确匹配缓存,TTL 3600s
L2 缓存 Milvus (Semantic Cache Collection) 语义相似度缓存,阈值 0.92
会话存储 Redis (热缓存) + SQLite (冷持久化) 零额外依赖,双写保证
监控 Prometheus + Grafana 预置 LiteRAG Overview 仪表板,自动加载
容器化 Docker Compose 一键启动全部基础服务
前端 Gradio 6.x 多会话管理、自动标题生成、侧边栏
爬虫 Crawl4AI + AsyncWebCrawler 异步并发抓取,自动转 Markdown
评估 RAGAS Faithfulness/Answer Relevancy/Context Precision/Context Recall
压测 Locust 自定义 RAGUser 模拟真实用户行为

2.3 核心功能清单

功能 状态 说明
多轮对话 查询改写(多轮指代消解)+ LLM 层 history 传入
混合检索 向量检索 + BM25 + 加权 RRF 融合
Reranker 精排 BGE-Reranker-V2-M3,GPU/CPU 自适应
双层缓存 L1 Redis + L2 Milvus 语义缓存
会话持久化 SQLite + Redis 双写,刷新/重启不丢失
全链路监控 Prometheus + Grafana 自动加载仪表板
自动化评估 RAGAS 5 样本评估管线
知识库管理 Crawl4AI 爬虫 + ingest.py 灌入脚本
压测脚本 Locust 多用户并发模拟
健康检查 /health 端点 + Prometheus up 指标

三、核心模块代码说明

本节列出项目的关键文件及其职责,帮助读者快速定位代码。

文件 职责 关键技术点
app/main.py FastAPI 入口 路由注册、Prometheus 指标暴露、健康检查
app/api/v1/endpoints/chat.py 核心问答端点 查询改写按需启用、缓存 Key 会话隔离、加权 RRF 参数传递、LLM 调用时传入 history、问答结束后同步会话历史
app/core/retrieval/hybrid_search.py 混合检索引擎 Jieba 自定义词表(12个领域词)、加权 RRF 融合(dense_weight=3.0)、BM25 索引缓存、Reranker 可选精排
app/core/reranker.py 重排序服务 BGE-Reranker-V2-M3 加载、显存检测与 CPU 回退、动态模型加载/释放
app/core/embedding.py 向量编码 BGE-M3(1024维)、强制离线模式、本地模型路径
app/core/query_rewriter.py 查询改写 单轮改写 + 多轮结合历史改写,异常回退原始查询
app/core/session_manager.py 会话管理 Redis+SQLite 双写、两级查询(Redis优先→SQLite回退→回写Redis)、get_all_sessions、delete_session
app/core/db.py 数据库初始化 SQLite 建表、WAL 模式、自动创建目录
app/core/semantic_cache.py L2 语义缓存 Milvus Collection 自动创建/重建、1024 维向量相似度匹配、0.92 阈值
app/ui/gradio_app.py 前端界面 多会话管理、自动标题生成、侧边栏动态渲染、demo.load 持久化恢复
scripts/ingest.py 数据灌入 文档分块(chunk_size=512)、BGE-M3 向量化、Milvus 批量插入
scripts/evaluate_full_fixed.py RAGAS 评估 5 样本全量评估、LLM+Embedding 评估器
scripts/locustfile.py 压力测试 RAGUser 模拟多用户并发请求
scripts/fetch_articles_*.py 爬虫脚本 Crawl4AI 异步抓取、自动保存 Markdown
monitoring/prometheus.yml Prometheus 配置 15s 抓取间隔,FastAPI + Milvus 双 target
monitoring/dashboard.yml Grafana 自动加载 Provisioning 配置,路径指向仪表板目录
docker-compose.yml 容器编排 Milvus+Etcd+MinIO+Redis+Prometheus+Grafana 全套服务

四、关键性能指标

4.1 RAGAS 评估结果

指标 优化前 优化后 提升
Context Recall (召回率) 0.50 0.80 ↑ 60%
Context Precision (精准率) 0.87 0.97 ↑ 12.3%
Faithfulness (忠实度) 0.70 0.81 ↑ 15.6%
Answer Relevancy (相关性) 0.84 0.86 ↑ 1.6%

4.2 优化手段回顾

优化方向 具体手段 效果
P0 缺陷修复 启用查询改写、删除错误降级逻辑、缓存 Key 加入 session 隔离 多轮对话可用、缓存不污染
知识库补盲 爬虫补充 8 篇混合检索、Reranker 等基础概念文档 评估样本 3、4 从无到有
Embedding 升级 BGE-Small-EN (384维) → BGE-M3 (1024维) 中英文跨语言语义匹配大幅提升
Reranker 升级 BGE-Reranker-Base → BGE-Reranker-V2-M3 精排阶段不再误杀英文文档
分词强化 Jieba 添加 12 个领域专用词 BM25 关键词检索恢复精准
加权 RRF 向量检索权重设为 BM25 的 3 倍 正确信号不再被噪音淹没

五、完整依赖清单

以下是项目的核心依赖及其用途(完整列表见 requirements.txt):

依赖 用途
fastapi + uvicorn API 框架 + ASGI 服务器
pymilvus Milvus 向量数据库客户端
redis Redis 缓存客户端
sentence-transformers BGE-M3 / BGE-Reranker-V2-M3 模型加载
transformers + torch HuggingFace 模型推理
openai LLM API 调用(兼容阿里百炼)
jieba 中文分词
rank-bm25 BM25 关键词检索
langchain + langchain-community 文档分块(RecursiveCharacterTextSplitter, SemanticChunker)
crawl4ai AI 爬虫框架
prometheus_fastapi_instrumentator FastAPI 指标暴露
locust 性能压测
gradio 前端交互界面
datasets + ragas RAGAS 自动化评估
python-dotenv 环境变量管理
loguru 日志输出

六、部署与运行

6.1 前提条件

  • Python 3.10+ 及虚拟环境

  • Docker 及 Docker Compose

  • 阿里百炼 API Key(或其他 OpenAI 兼容 API)

6.2 一键启动

bash

# 1. 克隆项目
git clone https://github.com/yourname/LiteRAG.git
cd LiteRAG

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填入 LLM_API_KEY 等信息

# 3. 启动基础设施
docker compose up -d

# 4. 安装依赖并灌入知识库
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python scripts/ingest.py

# 5. 启动 API
uvicorn app.main:app --host 0.0.0.0 --port 8000

# 6. 启动前端(另开终端)
python app/ui/gradio_app.py

6.3 访问地址

服务 地址
对话界面 http://localhost:7860
API 文档 http://localhost:8000/docs
健康检查 http://localhost:8000/health
Prometheus http://localhost:9090
Grafana http://localhost:3000 (admin/admin)

七、总结与展望

7.1 八篇文章的完整回顾

篇序 主题 核心收获
环境准备与 Milvus 部署 WSL2 + Docker GPU 穿透、Milvus 单机部署
Redis、Prometheus、Grafana 整合 监控基础设施搭建
文档向量化与 AI 爬虫 知识库构建、Crawl4AI 实战
混合检索、Reranker、双层缓存 检索链路打通
多轮对话、查询改写、Gradio 前端 交互体验闭环
性能突围:0.50 → 0.80 P0 修复 + Embedding/Reranker 升级 + 加权 RRF
监控闭环 + 会话持久化 系统可靠性最后两块拼图
全栈整合与回顾 对照初心、展示最终形态

7.2 个人收获

  • RAG 系统的全链路认知:从文档切分、向量化、检索、精排到生成,每个环节的工程细节都有了深入理解。

  • 评估驱动的优化方法论:不靠感觉,用 RAGAS 数据说话,精准定位瓶颈再下手。

  • 多语言模型选型经验:中英文混杂场景下 Embedding 和 Reranker 必须选多语言版本。

  • 架构取舍能力:知道什么该做,更知道什么不该做。在时间和资源受限下,聚焦核心链路的深度比堆砌功能更有价值。

  • 工程化意识:监控、持久化、容器化、文档——这些都是让一个 Demo 变成产品不可或缺的部分。

7.3 后续方向

  • Agent 能力:让系统能调用外部工具,完成多步推理任务。

  • 前端优化:用 Vue3 重写一个更专业的 UI。

  • 知识图谱增强:结合 GraphRAG,提升长文档推理能力。

  • 多租户与权限隔离:支持企业级场景。

  • 更轻量的本地 Embedding:探索 ONNX 量化部署,进一步降低显存占用。


写在最后

八篇文章,从“雄心蓝图”到“工程落地”,LiteRAG 见证了我从一个只会“跑 Demo”的学生,成长为一个能独立设计、优化、监控和评估一个完整系统的开发者。

如果说有什么最想分享给读者的心得,那就是:一个项目的价值,不在于你往里面塞了多少功能,而在于你为它解决的那些问题付出了多少思考。

感谢每一位阅读这个系列的朋友。如果你也在入门 RAG 的方向,希望你也能找到一个自己感兴趣的项目,把它做到极致。如果你对我的项目有任何疑问或建议,欢迎在评论区留言,或者在 GitHub 上 Star 和 Fork。


⭐ 如果这个系列对你有帮助,欢迎到我的 GitHub 仓库给个 Star!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐