AI自动回复机器人 RAG 系统搭建指南

📅 2026/7/12 11:10:17
AI自动回复机器人 RAG 系统搭建指南
AI自动回复机器人 RAG 系统搭建指南目录1. 项目概览解决什么问题核心功能2. 架构设计系统架构总览RAG 查询处理流程5 步技术选型对比3. 硬件要求4. 快速部署 (5 步走)前置条件Step 1: 安装 OllamaStep 2: 拉取模型Step 3: 安装 Python 依赖Step 4: 准备文档Step 5: 启动服务5. 代码架构详解项目文件结构核心模块说明kb_manager.py — 多类别知识库管理器evaluator.py — RAG 评估器6. 多知识库管理Web 界面 — 知识库管理标签页跨类别检索原理7. RAG 评估体系评估流程评估数据集格式 (eval.json)Web 界面 — 评估标签页8. 实测评估结果测试环境汇总指标逐题详细结果9. 常见问题与优化Q1: 生成太慢怎么办Q2: 检索不准确怎么办Q3: 关键词召回率低怎么办Q4: 内存不足怎么办10. 扩展方向短期1-2 周中期1 个月长期3 个月附录 A一键启动脚本附录 B相关概念​一句话定位本地部署的企业文档 RAG 问答机器人支持多知识库管理 自动化评估。技术栈Ollama Qwen2.5 BGE-m3 LangChain Chroma Gradio目录1. 项目概览2. 架构设计3. 硬件要求4. 快速部署 (5 步走)5. 代码架构详解6. 多知识库管理7. RAG 评估体系8. 实测评估结果9. 常见问题与优化10. 扩展方向1. 项目概览解决什么问题企业有大量的内部文档产品介绍、员工手册、技术文档员工/客户问问题时人工回复效率低回答不一致文档更新后没人知道RAG 方案让 AI 先查文档再基于文档内容回答。保证回答有据可依、不编造。核心功能| 功能 | 说明 ||------|------|| 智能问答 | 基于企业文档的 RAG 问答回答附带引用来源 || 多知识库 | 按类别管理不同知识库公司 info / HR 政策 / 技术文档 || 评估系统 | 自动评估检索质量和回答质量 || Web 界面 | Gradio 构建三标签页一站式管理 || 命令行版 | 纯终端也可用适合自动化脚本 |2. 架构设计系统架构总览​​​​三层架构┌─────────────────────────────────────────────────┐ │ 用户层 (Presentation) │ │ Web UI (Gradio, port 7860) 命令行 rag_bot.py │ └──────────────────┬──────────────────────────────┘ │ 用户提问 ┌──────────────────▼──────────────────────────────┐ │ RAG 处理层 (Pipeline) │ │ 1. 向量检索 2. 检索评估 3. Prompt组装 4. LLM │ └──────────────────┬──────────────────────────────┘ │ 跨类别检索 ┌──────────────────▼──────────────────────────────┐ │ 数据存储层 (Storage) │ │ company_info / hr_policies / tech_docs (各独立) │ │ Chroma 向量库 原始文档 │ └──────────────────┬──────────────────────────────┘ │ ┌──────────────────▼──────────────────────────────┐ │ 基础设施层 (Infrastructure) │ │ Ollama (LLMEmbedding) Chroma LangChain │ └─────────────────────────────────────────────────┘RAG 查询处理流程5 步1. 用户提问 ──→ 产品怎么收费 ↓ 2. 向量检索 ──→ bge-m3 将问题编码 → Chroma 相似度匹配 ↓ 3. 组装 Prompt ──→ {context: 检索到的文档} {question} → 模板 ↓ 4. LLM 生成 ──→ qwen2.5:7b 基于文档生成回答流式输出 ↓ 5. 返回回答 ──→ 回答 引用来源技术选型对比| 组件 | 选择 | 替代方案 | 选择理由 ||------|------|----------|----------|| LLM 推理 | Ollama | llama.cpp, vLLM | 一键安装OpenAI API 兼容 || 对话模型 | Qwen2.5-7B | DeepSeek-V3, Llama-3.2 | 中文能力最强体积小 || 嵌入模型 | BGE-m3 | text-embedding-3-large | 中文多语言能力好 || RAG 框架 | LangChain | LlamaIndex | 生态成熟文档丰富 || 向量库 | Chroma | FAISS, pgvector | 轻量无需配置文件存储 || Web UI | Gradio | Streamlit, FastAPIVue | 快速原型开箱即用 |3. 硬件要求| 配置 | 最低要求 | 推荐配置 | 本项目实际 ||------|----------|----------|-----------|| 内存 | 16 GB | 32 GB | ✅ 32 GB DDR5 || 显卡 | 无 (纯 CPU) | NVIDIA RTX 4060 | Intel Arc 140T (辅助) || 硬盘 | 30 GB 可用 | 100 GB | ✅ 400 GB 可用 || CPU | 4 核 | 8 核 | ✅ Ultra 7 255H (带 NPU) |实际表现Qwen2.5-7B, CPU 模式检索耗时~0.37s生成耗时~7.78s流式输出感知快综合通过率90%4. 快速部署 (5 步走)前置条件Windows 10/11Python 3.10Ollama 已安装Step 1: 安装 Ollama# Windows: 下载 https://ollama.com/download 并安装# 或wingetinstallOllama.OllamaStep 2: 拉取模型ollama pull qwen2.5:7b# 对话模型ollama pull bge-m3# 嵌入模型Step 3: 安装 Python 依赖pipinstalllangchain langchain-ollama langchain-chroma\langchain-text-splitters langchain-community\chromadb pypdf python-docx gradioStep 4: 准备文档# 创建项目目录mkdirD:\Personal\RAG-RobotcdD:\Personal\RAG-Robot# 创建知识库分类mkdirdocs\company_infomkdirdocs\hr_policiesmkdirdocs\tech_docs# 放入文档支持 .pdf / .docx / .txt / .mdcopy公司介绍.pdfdocs\company_info\copy员工手册.docxdocs\hr_policies\Step 5: 启动服务python web_ui.py# 浏览器访问 http://127.0.0.1:78605. 代码架构详解项目文件结构D:\Personal\RAG-Robot\ ├── web_ui.py # Web 界面入口 (Gradio, 三标签页) ├── rag_bot.py # 命令行版 RAG 问答 ├── kb_manager.py # 多类别知识库管理器 ├── evaluator.py # RAG 评估器 ├── eval_data\ │ └── eval.json # 评估数据集 ├── docs\ │ ├── company_info\ # 公司知识库 (3 文件) │ ├── hr_policies\ # HR 政策 (1 文件) │ └── tech_docs\ # 技术文档 (1 文件) └── .rag_db\ # 向量库缓存自动生成 ├── company_info\ ├── hr_policies\ └── tech_docs\核心模块说明kb_manager.py— 多类别知识库管理器# 核心能力classKBManager:get_categories()# 列出所有知识库类别create_category(name)# 创建新类别delete_category(name)# 删除类别 向量库upload_file(path,cat)# 上传文件 → 自动重建索引remove_file(name,cat)# 移除文件 → 自动重建索引retrieve(query,cats,top_k)# 跨类别检索get_category_info(cat)# 查看类别详情reload_all()# 重建所有索引目录映射规则docs/ company_info/ ← 类别目录手动创建 公司介绍.txt ← 原始文档 产品信息.txt .rag_db/ company_info/ ← 对应向量库自动生成 chroma.sqlite3evaluator.py— RAG 评估器classRAGEvaluator:run_evaluation(eval_dataset,categories,top_k,llm_model,llm_temp)load_eval_dataset(path)# 加载 JSON 评估集save_eval_dataset(data,path)# 保存评估集build_report_text(summary,results)# 生成可读报告评估指标检索召回率 (Retrieval Recall)期望来源是否出现在检索结果中关键词召回率 (Keyword Recall)回答是否包含预期关键词响应延迟 (Latency)检索耗时 生成耗时综合通过率 (Pass Rate)两项召回率均 ≥ 50%6. 多知识库管理Web 界面 — 知识库管理标签页​​​​操作流程1. 创建类别 输入名称 sales_docs → 点击 Create Category 2. 上传文件 选择目标类别 → 拖拽文件到上传区 → 点击 Upload Rebuild Index → 自动构建向量索引 → 显示上传结果 3. 查看状态 点击 Refresh KB Status → 显示所有类别的文件列表和分块数 4. 移除文件 选择类别 → 输入文件名 → 点击 Remove File → 自动重建索引 5. 删除类别 从下拉选择 → 点击 Delete Category → 文档 向量库一起删除跨类别检索原理用户: 员工的工作时间和薪资结构是怎样的 检索分配 (Top K4): hr_policies → 2 个 chunk (k_per_cat 4 // 3 ≈ 1) company_info → 2 个 chunk tech_docs → 2 个 chunk 合并排序 → 返回最相关的 4 个 chunk → 拼接上下文 → LLM 生成跨领域回答7. RAG 评估体系评估流程评估数据集格式 (eval.json)[{id:pricing_1,query:产品怎么收费,expected_keywords:[500元,1500元,基础版,专业版],expected_sources:[产品信息.txt],categories:[company_info]},{id:hr_worktime_1,query:工作时间是几点到几点,expected_keywords:[9:00,18:00,周一至周五],expected_sources:[员工手册.txt],categories:[hr_policies]}]字段说明| 字段 | 必需 | 说明 ||------|------|------||id| ✅ | 测试用例唯一标识 ||query| ✅ | 用户问题 ||expected_keywords| ✅ | 回答中应包含的关键词列表 ||expected_sources| 可选 | 期望检索到的文档文件名 ||categories| 可选 | 限制检索的类别None 则检索全部 |Web 界面 — 评估标签页操作步骤点击 “Use Default eval.json” 或上传自定义评估文件选择要评估的知识库类别默认全部调整 Top K 和 LLM 参数点击 “Run Evaluation”查看汇总结果和详细报告8. 实测评估结果测试环境| 项目 | 配置 ||------|------|| 模型 | qwen2.5:7b || 嵌入 | bge-m3 || 知识库 | 3 类别 / 5 文档 / 6 chunks || 测试集 | 10 个测试用例 || Top K | 4 || Temperature | 0.3 |汇总指标| 指标 | 值 | 说明 ||------|-----|------|| 综合通过率 |90%(9/10) | 两项召回率均 ≥ 50% || 检索召回率 |100%| 所有测试都检索到了期望来源 || 关键词召回率 |88.3%| 平均关键词命中 || 平均检索耗时 |0.37s| Chroma 向量检索 || 平均生成耗时 |7.78s| Qwen2.5-7B CPU 推理 || 平均总耗时 |8.15s| 端到端延迟 |逐题详细结果| ID | 问题 | 检索召回 | 关键词召回 | 总耗时 ||----|------|----------|-----------|--------|| pricing_1 | 产品怎么收费 | 100% | 50% ⚠️ | 17.2s || company_intro_1 | 公司成立于哪一年 | 100% | 100% ✅ | 1.8s || product_feature_1 | AI客服机器人有什么功能 | 100% | 100% ✅ | 5.7s || hr_worktime_1 | 工作时间是几点到几点 | 100% | 100% ✅ | 4.4s || hr_annual_leave_1 | 年假有多少天 | 100% | 100% ✅ | 7.1s || hr_salary_1 | 薪资是怎么组成的 | 100% | 100% ✅ | 7.0s || tech_architecture_1 | 系统使用什么架构 | 100% | 67% ⚠️ | 2.4s || tech_performance_1 | 系统的响应延迟是多少 | 100% | 67% ⚠️ | 2.1s || cross_domain_1 | 工作时间和薪资结构 | N/A | 100% ✅ | 16.1s || cross_domain_2 | 有几个主要产品和功能 | 100% | 100% ✅ | 17.8s |分析✅HR 政策类表现最好5/5 全通过因为文档结构清晰、关键词明确⚠️定价问题关键词召回只有 50%因为模型回答时改变了表述方式⚠️技术文档关键词召回 67%因为术语表述存在同义词差异⚠️跨域问题耗时较长16s因为跨类检索 长上下文9. 常见问题与优化Q1: 生成太慢怎么办方案 A — 换大模型 GPUollama pull qwen2.5:32b# 更聪明但更慢ollama pull deepseek-v3# 推理能力强# 如果有 NVIDIA 显卡pipinstalllangchain-ollama --force-reinstall# 用 nvidia-ml-py 确认 CUDA 可用方案 B — 纯 CPU 优化使用 Q4_K_M 量化版本减少内存占用降低top_k从 4 改为 2减少上下文长度增大chunk_size从 500 改为 1000减少检索文档数Q2: 检索不准确怎么办优化分块增大CHUNK_SIZE到 1000重叠 200增加文档质量确保文档有明确的章节结构使用重排序在检索后加一个 cross-encoder 重排序步骤测试不同嵌入模型ollama pull nomic-embed-textQ3: 关键词召回率低怎么办检查eval.json中的关键词是否过于严格使用同义词扩展关键词列表考虑用 LLM 自动评估基于语义相似度而非精确匹配Q4: 内存不足怎么办删除不用的.rag_db/向量库释放空间使用量化模型Q4_K_M 约 4.7GB vs Q8_0 约 9.4GB一次只加载一个类别的向量库10. 扩展方向短期1-2 周多轮对话基于对话历史的上下文感知文档解析增强支持图片 OCR、表格提取用户认证不同用户访问不同知识库中期1 个月部署到 KatabumpWeb 服务化多设备访问RAG 管道可视化显示检索过程、命中分块A/B 测试对比不同模型/参数组合的效果自动关键词生成用 LLM 从文档自动生成测试用例长期3 个月Agent 工作流多步推理调用工具知识库增量更新文档变更后自动增量更新索引反馈学习用户点赞/踩数据用于优化多模态 RAG图片、PDF 表格、视频字幕附录 A一键启动脚本#!/bin/bash# start_rag.sh - 一键启动 RAG 问答机器人cd/d/Personal/RAG-Robot python web_ui.py# 访问 http://127.0.0.1:7860附录 B相关概念[[wiki/concepts/ai-knowledge-base|AI 知识库]][[wiki/concepts/rag-architecture|RAG 架构原理]][[wiki/concepts/reranker-model|重排序模型]][[llama-cpp|本地模型推理]]​