最近帮公司搭了一套基于OpenClaw的RAG知识库系统,把内部几千份文档都接进来了,效果超出预期。分享一下完整流程。
为什么选OpenClaw + RAG
之前用过很多知识库方案,要么太贵要么不够灵活。OpenClaw的优势在于:
- 本地部署,数据不出内网
- Skill机制天然支持RAG流程
- 支持多种向量数据库后端
技术方案
1. 文档处理流水线
原始文档 → 格式转换 → 分块(chunk) → 向量化 → 存入向量库
我用的技术栈:
- 文档解析:
unstructured库,支持PDF/Word/PPT - 分块策略:按段落分块,每块512 token,重叠64 token
- 向量模型:
bge-large-zh-v1.5,中文效果最好 - 向量库:
Milvus,支持分布式
2. 检索增强
# 伪代码示意
query_embedding = model.encode(user_query)
results = milvus.search(query_embedding, top_k=5)
context = "\n".join([r.text for r in results])
prompt = f"基于以下资料回答问题:\n{context}\n\n问题:{user_query}"
3. 与OpenClaw集成
通过自定义Skill把RAG流程封装起来,用户只需要对话即可查询。
踩坑记录
- 分块太大导致检索不精确:最初用1024 token,后来改成512效果好很多
- 中文分词问题:用
jieba预处理后再分块,避免语义断裂 - 向量模型选型:试过OpenAI的embedding,中文场景不如BGE
- 缓存很重要:高频问题的结果做缓存,减少重复检索
效果
- 平均响应时间:2-3秒
- 回答准确率:约85%(人工评估)
- 比之前的关键词搜索体验好了一个量级
有做知识库的同学可以交流一下经验。