前言
不知道你有没有这种需求:公司内部文档几百页,每次找东西都 Ctrl+F 翻半天。要是 AI 能读过这些文档,直接问它就好了。
不知道你有没有这种需求:公司内部文档几百页,每次找东西都 Ctrl+F 翻半天。要是 AI 能"读"过这些文档,直接问它就好了。
这就是 RAG(Retrieval-Augmented Generation,检索增强生成)做的事。它让 AI 在回答你的问题之前,先去知识库里搜索相关信息,基于搜到的内容回答。
RAG 是怎么工作的
流程:
用户提问 → 转成向量 → 向量数据库搜索 → 找最相似的内容
↓
用户得到回答 ← AI 综合回答 ← 把搜到的内容+问题发给 AI
整个过程分三步:
文档切碎:把长篇文档切成小块 向量化存储:每块转成向量,存入向量数据库 检索生成:提问时搜索最相关的内容块,拼进 prompt
你需要什么工具
要搭一个本地知识库,需要三样东西:
| 组件 | 推荐选择 | 作用 |
|---|---|---|
| 向量数据库 | Chroma / Milvus / Qdrant | 存储和搜索向量 |
| Embedding 模型 | BGE-small / text-embedding-3-small | 把文本转成向量 |
| LLM | 任意大模型 | 基于检索结果生成回答 |
最简单方案:本地搭 Chroma
Chroma 是最容易上手的向量数据库。
pip install chromadb sentence-transformers
写一个简单的 Python 脚本:
import chromadb
from chromadb.utils import embedding_functions
# 初始化
client = chromadb.Client()
collection = client.create_collection("my-docs")
# 存入文档
documents = [
"OpenClaw 是一个 AI Agent 框架",
"它支持 QQ、Telegram、Discord 等渠道",
"配置在 openclaw.json 中管理"
]
ids = ["doc1", "doc2", "doc3"]
collection.add(documents=documents, ids=ids)
# 搜索
results = collection.query(
query_texts=["OpenClaw 支持哪些平台"],
n_results=2
)
print(results['documents'])
# 输出: "它支持 QQ、Telegram、Discord 等渠道"
就这么几行,本地知识库就跑起来了。
进阶:接入 OpenClaw
OpenClaw 内置了 memory search 功能,可以搜索本地文件内容。在配置里开启:
{
"agents": {
"defaults": {
"memorySearch": {
"provider": "openai",
"maxResults": 5,
"minScore": 0.5
}
}
}
}
把文档放在工作区的 memory/ 目录下,AI 就能搜到。
文档切碎技巧
文档怎么切,直接影响检索效果:
❌ 一整篇不切
"AI 的发展历程……" → 搜"强化学习"搜不到,因为藏在文档中间
✅ 按段落切
"强化学习的核心是奖励机制……" → 直接命中
推荐切碎策略:
# 按标题切(Markdown 格式)
def split_by_heading(text):
chunks = []
current = []
for line in text.split('\n'):
if line.startswith('## '):
if current:
chunks.append('\n'.join(current))
current = [line]
else:
current.append(line)
if current:
chunks.append('\n'.join(current))
return chunks
深度思考
技术的价值不在于它有多新,在于它解决了什么问题。不花哨但管用,往往是最好的方案。
踩坑记录
⚠️ 小模型做 Embedding 效果差
Embedding 模型决定检索质量。免费的小模型(如 all-MiniLM)在中文上效果一般,建议用 BGE-small 或 OpenAI 的 text-embedding-3-small。
⚠️ 文档格式影响检索
PDF 里的表格、图片中的文字,直接切碎后会丢失上下文。最好先转成 Markdown 再导入。
总结
RAG 让 AI 能回答"私有知识"相关的问题 Chroma + sentence-transformers 是最简单的本地方案 文档切碎质量 > 模型选择 > 数据库选择 100 页以下文档,本地知识库完全够用
有没有在搭知识库?用什么方案?你们公司搭了RAG知识库吗?
觉得有用?点个「在看」👇
夜雨聆风