OpenClaw RAG Pipeline 搭建指南
从文档到答案 — 检索增强生成的完整实战路径
世界上有一种技术叫RAG,它就像给AI配了一个图书馆管理员——每次你要回答问题,这位管理员会先帮你从书架上找最相关的那本书,翻到最对味的那一页,递到你手里。你不用背下整座图书馆,但你永远能找到对的内容。
RAG Pipeline 全景
📄 文档输入
→
✂️ 分块
→
🔢 向量嵌入
→
💾 向量库
→
🔍 语义检索
→
📝 上下文注入
→
🤖 LLM生成
第一步:文档准备与分块
支持的数据源
OpenClaw 支持多种文档输入格式:
- 文本文件 — .txt, .md, .html, .csv
- 办公文档 — .pdf, .docx, .pptx, .xlsx
- 网页内容 — 通过 web_fetch 抓取
- 代码仓库 — GitHub repo 直接索引
- 飞书文档 — 通过 feishu_wiki / feishu_doc 接入
- 数据库 — SQL查询结果作为知识
分块策略
# 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重排
✅ 回答标注来源和引用
✅ 设置相似度阈值过滤噪声
✅ 定期更新知识库
✅ 监控检索质量和幻觉率
✅ 文档分块有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秒就需要优化索引策略(分区、分层检索)。