🧠 RAG 技术完整方案

Retrieval-Augmented Generation - 检索增强生成

核心架构 技术选型 实施指南 OpenClaw 集成

📌 什么是 RAG

RAG = Retrieval (检索) + Augmented (增强) + Generation (生成)

核心思想

在 LLM 生成答案之前,先从外部知识库中检索相关文档,将检索结果作为上下文提供给 LLM,让答案基于真实文档而非仅靠训练数据。

优势说明
✅ 减少幻觉答案基于检索到的真实文档,不是模型编造的
✅ 可追溯每个答案都有来源引用(页码/文档链接)
✅ 知识可更新无需重新训练,更新知识库即可
✅ 私有数据本地文档,无需上传到模型厂商
✅ 成本可控本地部署,按需调用 API

🏗️ RAG 完整架构

📥 文档接入层
🔧 索引构建层
💾 向量数据库
⬇ ⬇ ⬇
🔍 查询处理层
✍️ 答案生成层
💬 用户界面层
层级职责技术组件
📥 文档接入层解析 PDF/Word/Excel/PPTPyMuPDF, python-docx, openpyxl
🔧 索引构建层文本分块、生成嵌入LangChain, m3e-base, PageIndex
💾 向量数据库存储向量,支持检索ChromaDB, FAISS, pgvector
🔍 查询处理层问题理解、混合检索BM25, RRF, 路由决策
✍️ 答案生成层LLM 调用、引用标注OpenAI API, 本地模型
💬 用户界面层Web/飞书/APIFastAPI, OpenClaw message

📊 工作流程

索引构建 (离线)

1️⃣ 扫描文档目录
2️⃣ 解析文档内容
3️⃣ 文本分块
4️⃣ 生成向量嵌入
5️⃣ 存储到向量数据库

查询回答 (在线)

1️⃣ 接收用户问题
2️⃣ 向量 + 关键词检索
3️⃣ 混合重排序 (RRF)
4️⃣ 组装上下文
5️⃣ LLM 生成答案
6️⃣ 返回答案 + 引用

🔍 检索策略对比

纯向量检索

✅ 实现简单,语义匹配好

❌ 关键词匹配弱

混合检索 (推荐)

✅ 兼顾语义和关键词

❌ 实现复杂度稍高

推理式检索

✅ 适合长文档,可追溯页码

❌ 仅 PDF,需 OpenAI API

🛠️ 技术选型

场景向量库嵌入模型检索策略
小规模 (<1000 文档)ChromaDBm3e-base混合检索
中等规模 (1000-10000)FAISS/pgvectorbge-large-zh混合+RRF
大规模 (>10000)Pinecone/Milvus自定义微调分层 + 缓存
长文档 (财报/法规)PageIndexGPT-4推理式检索

🔗 OpenClaw 集成

# openclaw/rag_agent.py from openclaw import sessions_spawn, message from rag_engine import RAGEngine rag = RAGEngine(vector_db_path="./vectors", embedding_model="m3e-base") def handle_question(user_id, question): context = rag.retrieve(question, top_k=5) answer = rag.generate(question, context) message(action="send", channel="feishu", to=user_id, message=answer)

📋 实施计划

Phase 1 (第 1-3 天): 基础 RAG

ChromaDB、文档解析、向量检索、LLM 生成

Phase 2 (第 4-5 天): 混合检索

BM25、RRF 重排序、查询改写

Phase 3 (第 6-7 天): PageIndex 集成

长 PDF 树状索引、路由决策

Phase 4 (第 8-10 天): OpenClaw 集成

子 agent、飞书消息、端到端测试

💡 最终建议

RAG 是整个知识问答系统的核心架构,之前讨论的 ChromaDB 和 PageIndex 都是 RAG 的检索组件。

推荐采用 混合架构:短文档用 ChromaDB 向量检索,长 PDF 用 PageIndex 推理式检索,通过路由层统一调度。