OpenClaw RAG Pipeline 搭建指南

从文档到答案 — 检索增强生成的完整实战路径

世界上有一种技术叫RAG,它就像给AI配了一个图书馆管理员——每次你要回答问题,这位管理员会先帮你从书架上找最相关的那本书,翻到最对味的那一页,递到你手里。你不用背下整座图书馆,但你永远能找到对的内容。

RAG Pipeline 全景

📄 文档输入 ✂️ 分块 🔢 向量嵌入 💾 向量库 🔍 语义检索 📝 上下文注入 🤖 LLM生成

第一步:文档准备与分块

支持的数据源

OpenClaw 支持多种文档输入格式:

分块策略

# chunking_config.yaml

# 策略一:固定大小分块(最简单)
fixed_size:
  chunk_size: 512       # 每块512 tokens
  overlap: 64           # 块间重叠64 tokens
  separator: "\n\n"     # 优先在段落边界切割

# 策略二:语义分块(推荐)
semantic:
  max_chunk_size: 800
  min_chunk_size: 100
  similarity_threshold: 0.75  # 相似度低于此值则切分
  embedding_model: "text-embedding-3-small"

# 策略三:结构分块(针对Markdown/HTML)
structural:
  heading_level: 2      # 按H2标题分块
  include_heading: true # 块内包含标题
  max_subchunk: 600     # 超长段落二次分块
✂️ 分块黄金法则:每块包含一个完整的语义单元。太大→检索不精准,太小→丢失上下文。512-800 tokens是大多数场景的甜区。别忘了overlap,它能防止关键信息被切断。

第二步:向量嵌入

选择嵌入模型

# OpenClaw 支持的嵌入模型

# OpenAI(推荐通用场景)
embedding:
  model: "text-embedding-3-small"  # $0.02/1M tokens
  dimensions: 1536

# 高质量场景
embedding:
  model: "text-embedding-3-large"  # $0.13/1M tokens
  dimensions: 3072

# 本地部署(隐私优先)
embedding:
  model: "bge-large-zh-v1.5"      # 免费,本地运行
  dimensions: 1024
  provider: "huggingface"

# DeepSeek(中文优化)
embedding:
  model: "deepseek-embedding"     # 中文效果好
  dimensions: 1024

执行嵌入

# 批量嵌入文档
openclaw rag embed \
  --source /data/knowledge/ \
  --output /data/embeddings/ \
  --model text-embedding-3-small \
  --batch-size 100

# 增量嵌入(只处理新增/修改的文档)
openclaw rag embed --incremental

第三步:向量存储

选择向量数据库

# 方案一:Chroma(轻量本地,开发推荐)
vector_store:
  type: chroma
  path: ~/.openclaw/chroma/
  collection: knowledge_base

# 方案二:Pinecone(托管服务,生产推荐)
vector_store:
  type: pinecone
  api_key: $PINECONE_API_KEY
  index: openclaw-knowledge
  dimension: 1536

# 方案三:PostgreSQL + pgvector(已有PG的团队)
vector_store:
  type: pgvector
  connection: postgresql://localhost/openclaw
  table: embeddings

# 方案四:Qdrant(高性能自托管)
vector_store:
  type: qdrant
  host: localhost
  port: 6333
  collection: knowledge

第四步:语义检索

基础检索

# 在OpenClaw Agent中使用RAG检索
# 通过 web_search 或 MCP工具调用

# 方式一:直接查询向量库
openclaw rag query \
  --question "OpenClaw怎么配置定时任务?" \
  --top-k 5 \
  --similarity-threshold 0.7

# 方式二:在Agent中集成
# AGENTS.md 配置
## RAG配置
- 知识库路径:~/.openclaw/chroma/knowledge_base
- 检索Top-K:5
- 相似度阈值:0.7
- 自动注入:用户提问时先检索知识库

混合检索(推荐)

# 结合向量检索 + 关键词检索
# 向量检索擅长语义匹配
# 关键词检索擅长精确匹配

hybrid_search:
  vector_weight: 0.7      # 向量检索权重
  keyword_weight: 0.3     # 关键词检索权重
  rerank: true            # 使用Reranker重排
  rerank_model: "cohere-rerank-v3"

第五步:上下文注入与生成

Prompt模板

# RAG Prompt模板
# 将检索到的上下文注入到Prompt中

system: |
  你是一个知识库助手。根据以下参考资料回答用户问题。
  如果参考资料中没有答案,请明确说明。
  不要编造信息。

  参考资料如下:
  {context}

user: |
  {question}

# OpenClaw 自动将检索结果填入 {context}
# 格式:
# [文档1] (来源: xxx.md, 相关度: 0.92)
# 内容...
# [文档2] (来源: yyy.md, 相关度: 0.87)
# 内容...

上下文窗口管理

# 防止检索结果撑爆上下文窗口
context_management:
  max_context_tokens: 4000    # 检索结果最大token数
  max_documents: 5            # 最多注入5个文档片段
  truncate_strategy: "score"  # 按相关度截断,保留最相关的
  citation: true              # 自动标注来源

Agentic RAG 进阶

传统RAG是"一问一搜",Agentic RAG是"反复思考、动态检索":

# Agentic RAG 工作流
# Agent自主决定何时检索、检索什么、是否需要再检索

1. 收到问题 → 初步分析
2. 生成检索query → 第一次检索
3. 评估结果 → 信息够了吗?
4. 不够 → 改写query → 第二次检索
5. 够了 → 综合回答
6. 自我验证 → 答案有依据吗?
7. 有依据 → 输出回答 + 引用
8. 无依据 → 标注不确定性

# OpenClaw 实现
# 在 SOUL.md 中配置 Agentic RAG 策略
## RAG策略
- 默认检索Top-5,如果不够,自动扩展到Top-10
- 检索不到相关内容时,改写查询再试一次
- 回答中标注来源文档和相似度分数
- 不确定时明确说明"知识库中未找到确切答案"
🚀 生产级RAG检查清单:
✅ 文档分块有overlap
✅ 使用混合检索(向量+关键词)
✅ 检索结果有Reranker重排
✅ 回答标注来源和引用
✅ 设置相似度阈值过滤噪声
✅ 定期更新知识库
✅ 监控检索质量和幻觉率

常见问题

Q: RAG和微调哪个更好?

不是二选一。RAG适合知识频繁更新的场景(如文档、新闻),微调适合固定能力的场景(如代码风格、专业术语)。大多数Agent场景用RAG就够了——毕竟你不想每次文档更新都重新微调一遍模型。

Q: 中文RAG需要注意什么?

三个要点:1) 用中文优化的嵌入模型(bge-large-zh或DeepSeek embedding)2) 分块时考虑中文标点(句号、问号为切割点)3) 混合检索的中文分词质量直接影响关键词检索效果。

Q: 知识库多大算大?什么时候需要优化?

10万条以下用Chroma本地就够了。超过100万条建议上Pinecone/Qdrant分布式方案。检索延迟P95超过2秒就需要优化索引策略(分区、分层检索)。

相关教程