乐于分享
好东西不私藏

让AI读懂公司文档:从零搭建RAG知识库

让AI读懂公司文档:从零搭建RAG知识库

前言

不知道你有没有这种需求:公司内部文档几百页,每次找东西都 Ctrl+F 翻半天。要是 AI 能读过这些文档,直接问它就好了。

不知道你有没有这种需求:公司内部文档几百页,每次找东西都 Ctrl+F 翻半天。要是 AI 能"读"过这些文档,直接问它就好了。

这就是 RAG(Retrieval-Augmented Generation,检索增强生成)做的事。它让 AI 在回答你的问题之前,先去知识库里搜索相关信息,基于搜到的内容回答。

RAG 是怎么工作的

流程:

用户提问 → 转成向量 → 向量数据库搜索 → 找最相似的内容
                                            ↓
用户得到回答 ← AI 综合回答 ← 把搜到的内容+问题发给 AI

整个过程分三步:

  1. 文档切碎:把长篇文档切成小块
  2. 向量化存储:每块转成向量,存入向量数据库
  3. 检索生成:提问时搜索最相关的内容块,拼进 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知识库吗?

觉得有用?点个「在看」👇