教程中心进阶
进阶

用 RAG + 向量数据库搭企业知识库 Agent

2026.07.23· 7 个步骤 · 约 19 分钟阅读· 📚 RAG

大模型「一本正经胡说」的根本原因是:它不知道你的私有数据。RAG(检索增强生成) 的解法是——先建一个向量数据库把你的文档存好,用户提问时先检索最相关的片段,再让模型「带着资料回答」。这是企业知识库 Agent 的底层技术。本教程从 0 搭一个 RAG 管线。

📚 本教程适合:开发者 / 算法同学,想给企业文档做一个「基于事实、不乱编」的问答后端。需要基础 Python。

Step 1:选向量数据库

1 选向量数据库

轻量本地用 Chroma;大规模用 Milvus / Qdrant;已在用 Postgres 就直接上 pgvector。本教程以 Chroma 演示。

Step 2:文档切分(Chunking)

2 文档切分(Chunking)

文档不能整篇塞进去,要切成语义完整的块。太大检索不准,太小丢上下文。

from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

Step 3:向量化(Embedding)

3 向量化(Embedding)

用嵌入模型把每段文本变成向量。中文场景可选 bge / bge-m3 / OpenAI text-embedding。

from langchain_openai import OpenAIEmbeddings
emb = OpenAIEmbeddings(model="text-embedding-3-small")
vectors = emb.embed_documents([c.page_content for c in chunks])

Step 4:入库与建索引

4 入库与建索引

把向量和原文一起写入库,建立相似度索引。

import chromadb
client = chromadb.Client()
col = client.create_collection("kb")
col.add(ids=[str(i) for i in range(len(chunks))],
        documents=[c.page_content for c in chunks],
        embeddings=vectors)

Step 5:检索增强生成

5 检索增强生成

用户提问 → 向量化问题 → 检索 Top-K 片段 → 拼进提示词让模型回答。

hits = col.query(query_embeddings=[qvec], n_results=3)
context = "
".join(hits["documents"][0])
prompt = f"仅依据以下资料回答:
{context}
问题:{question}"

必须「仅依据资料」。提示词里明确限制,否则模型仍会用自己的「记忆」补窟窿,导致幻觉。

Step 6:重排(Rerank)提升精度

6 重排(Rerank)提升精度

向量检索召回的 Top-K 不一定最相关。加一层 Cross-Encoder Rerank,把最相关的提到最前,回答质量明显提升。

Step 7:封装为 API 服务

7 封装为 API 服务

把「检索 + 生成」包成一个 HTTP 接口(FastAPI / Worker),前端或企微机器人直接调用,就是个知识库 Agent 了。

常见问题速查

你遇到的现象大概率原因 & 解决
答非所问chunk 太大/太小,调 size 与 overlap
还是幻觉提示词未限制「仅依据资料」,加强约束
检索不准换更好的 embedding + 加 rerank
中文效果差用中文优化嵌入模型(bge-m3 等)