跳转到内容

RAG检索增强生成

RAG(Retrieval-Augmented Generation)是一种让大模型基于你的私有知识回答问题的技术。这一章,我们来学习如何配置RAG。

什么是RAG

问题背景:

大模型有两个固有限制:

  1. 知识截止:训练数据有时间截止点,不知道最新信息
  2. 私有知识缺失:不知道你的公司文档、个人笔记等私有信息

RAG解决方案:

用户提问

┌─────────────────────────────────────┐
│  1. 检索:从知识库中找到相关文档     │
│  2. 增强:将相关文档作为上下文       │
│  3. 生成:基于上下文生成回答         │
└─────────────────────────────────────┘

准确回答(基于你的私有知识)

RAG vs 微调:

对比项RAG微调
成本
时效性实时更新需要重新训练
适用场景知识密集型行为风格调整
可解释性高(可追溯来源)

配置向量知识库

OpenClaw支持多种向量数据库。

支持的向量数据库:

数据库特点适用场景
Chroma轻量级,易部署个人使用,小规模
Milvus高性能,可扩展企业级,大规模
Pinecone云服务,免维护不想自己部署
Qdrant开源,功能丰富中等规模

安装向量数据库:

bash
# 使用Chroma(推荐入门)
pip install chromadb

# 或使用Docker部署Milvus
docker run -d --name milvus \
  -p 19530:19530 \
  -p 9091:9091 \
  milvusdb/milvus:latest

配置RAG:

yaml
# ~/.openclaw/config.yaml

rag:
  enabled: true
  
  # 向量数据库配置
  vector_db:
    type: chroma  # chroma, milvus, pinecone, qdrant
    path: ~/.openclaw/vectordb/
    
    # 嵌入模型配置
    embedding:
      provider: alibaba
      model: text-embedding-v2
      dimension: 1536
  
  # 检索配置
  retrieval:
    # 返回的文档数量
    top_k: 5
    
    # 相似度阈值
    similarity_threshold: 0.7
    
    # 检索策略
    strategy: hybrid  # semantic, keyword, hybrid

文档上传与索引构建

上传文档:

bash
# 上传单个文件
openclaw rag upload ~/Documents/report.pdf

# 上传目录
openclaw rag upload ~/Documents/knowledge/ --recursive

# 从URL上传
openclaw rag upload --url https://example.com/article

文档处理流程:

上传文档

┌─────────────────────────────────────┐
│  1. 文档解析:提取文本内容           │
│  2. 文本分块:切分成合适大小的块     │
│  3. 向量化:将文本块转换为向量       │
│  4. 存储:保存到向量数据库           │
└─────────────────────────────────────┘

索引构建完成

配置分块策略:

yaml
# ~/.openclaw/config.yaml

rag:
  chunking:
    # 分块大小(字符数)
    chunk_size: 500
    
    # 重叠大小(字符数)
    chunk_overlap: 50
    
    # 分块策略
    strategy: semantic  # fixed, semantic, recursive
    
    # 分隔符(fixed策略)
    separators:
      - "\n\n"  # 段落
      - "\n"    # 行
      - "。"    # 句子
      - " "     # 词

查看索引状态:

bash
openclaw rag status

输出示例:

RAG 知识库状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

向量数据库:Chroma
存储路径:~/.openclaw/vectordb/

文档统计:
  总文档数:156
  总文本块:2,345
  总向量数:2,345

存储大小:234MB
索引更新时间:2026-03-28 10:30:00

嵌入模型:text-embedding-v2
向量维度:1536

基于知识库的回答

启用RAG的对话:

bash
# 启用RAG模式
openclaw chat --rag

# 或在配置中默认启用
# ~/.openclaw/config.yaml
rag:
  enabled: true
  auto_search: true

对话示例:

用户:公司的报销流程是什么?

OpenClaw:[RAG检索]
  → 检索知识库...
  → 找到3个相关文档
  → 生成回答

根据《公司财务管理制度》第5章,报销流程如下:

1. **提交申请**
   - 登录OA系统,填写报销申请单
   - 上传发票原件照片
   - 选择报销类型和项目

2. **审批流程**
   - 直属领导审批(1-2个工作日)
   - 财务部门审核(1个工作日)
   - 超过5000元需总经理审批

3. **款项发放**
   - 审批通过后3个工作日内打款
   - 款项打入工资卡

**参考来源:**
- 《公司财务管理制度》第5章
- 《报销流程指南》

需要我详细解释某个环节吗?

RAG回答的特点:

  1. 有据可查:回答基于你的文档,可追溯来源
  2. 准确可靠:不会编造不存在的信息
  3. 实时更新:文档更新后,回答自动更新

配置检索参数:

yaml
# ~/.openclaw/config.yaml

rag:
  retrieval:
    # 检索模式
    mode: auto  # auto, always, never
    
    # 检索触发条件
    trigger:
      # 关键词触发
      keywords:
        - "公司"
        - "流程"
        - "规定"
        - "制度"
      
      # 问题类型触发
      question_types:
        - "what"  # 是什么
        - "how"   # 怎么做
        - "where" # 在哪里
    
    # 返回结果配置
    result:
      # 是否显示来源
      show_sources: true
      
      # 最大来源数量
      max_sources: 3
      
      # 来源格式
      source_format: citation  # citation, footnote, inline

知识库管理

查看知识库内容:

bash
# 列出所有文档
openclaw rag list

# 搜索文档内容
openclaw rag search "报销"

# 查看文档详情
openclaw rag show doc_123

更新知识库:

bash
# 更新单个文档
openclaw rag update doc_123 --file ~/Documents/report_v2.pdf

# 重新索引所有文档
openclaw rag reindex

# 删除文档
openclaw rag delete doc_123

知识库分类:

yaml
# ~/.openclaw/config.yaml

rag:
  collections:
    - name: company_docs
      description: 公司文档
      path: ~/Documents/company/
    
    - name: personal_notes
      description: 个人笔记
      path: ~/Notes/
    
    - name: tech_docs
      description: 技术文档
      path: ~/Projects/docs/

按分类检索:

bash
# 指定分类检索
openclaw rag search "报销" --collection company_docs

# 对话时指定分类
用户:@company_docs 公司的请假制度是什么?

RAG效果优化

优化检索质量:

yaml
# ~/.openclaw/config.yaml

rag:
  optimization:
    # 查询重写
    query_rewrite: true
    
    # 重排序
    rerank: true
    rerank_model: bge-reranker
    
    # 混合检索权重
    hybrid_weights:
      semantic: 0.7  # 语义检索权重
      keyword: 0.3   # 关键词检索权重
    
    # 上下文窗口
    context_window:
      max_tokens: 4000
      include_neighbors: true  # 包含相邻文本块

评估RAG效果:

bash
# 运行评估
openclaw rag evaluate --test-set ~/test_questions.json

# 输出评估报告
openclaw rag report

输出示例:

RAG 效果评估报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

测试集:100个问题

检索质量:
  召回率@5:92.3%
  精确率@5:78.5%
  MRR:0.85

回答质量:
  准确性:89.2%
  相关性:91.5%
  完整性:85.7%

常见问题:
  1. 部分文档分块过大,导致检索不精确
  2. 专业术语的语义理解有待提升

优化建议:
  1. 减小chunk_size到300
  2. 添加专业术语词典

通过RAG,OpenClaw可以基于你的私有知识回答问题,成为真正懂你业务的AI助手。下一章,我们来学习上下文记忆配置。

基于 MIT 许可发布