技术博客引力科技2026-07-14·5 分钟阅读

RAG 落地实践:从文档到可问答的知识库

什么是 RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大模型基于外部知识回答问题的架构。它解决了大模型的两个核心局限:知识时效性差、容易产生幻觉(编造事实)。

简单说:RAG = 搜索引擎 + 大模型。先从你的文档库里检索相关片段,再让大模型基于这些片段回答。

完整流水线

一条生产级 RAG 流水线包含五个阶段:

  1. 文档处理:解析 PDF/Word/网页,清洗文本
  2. 切分:把长文档切成适合检索的小块(chunk)
  3. 向量化:用 embedding 模型把文本块转成向量
  4. 检索:用查询向量做相似度搜索,召回 top-k 候选
  5. 重排序 + 生成:精排候选片段,拼进 Prompt 喂给大模型

文档切分策略

切分是影响检索质量最关键的一步。切太大召回不精准,切太小丢失上下文。

策略粒度适用场景
固定长度500 字符快速验证
按段落自然段结构化文档
按语义300-500 字 + 50 字重叠推荐,生产环境

向量化代码示例

用 Python + sentence-transformers 把文本转向量:

from sentence_transformers import SentenceTransformer

# 加载中文 embedding 模型
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")

# 单个文本块向量化
chunk = "AI 数字员工能自动处理客服询价、生成报价单。"
embedding = model.encode(chunk)

print(f"向量维度: {embedding.shape}")  # (512,)
print(f"前5个值: {embedding[:5]}")

批量处理多个文档块:

chunks = [
    "AI 数字员工能自动处理客服询价。",
    "智能跟单系统自动提醒未成交商机。",
    "打通 ERP 实时查询库存与价格。",
]

embeddings = model.encode(chunks, normalize_embeddings=True)

# 计算查询与每个块的相似度
query = "怎么自动回复客户询价"
query_embedding = model.encode([query], normalize_embeddings=True)

similarities = model.similarity(query_embedding, embeddings)
print(f"相似度: {similarities}")

检索与重排序

单纯靠向量相似度检索,准确率通常只有 60-70%。加一层重排序(reranker)能显著提升。

关键结论:重排序比单纯增加 top-k 更有效。先召回 20 条(top-k=20),再精排取前 5 条,比直接召回 5 条准确率高得多。

Prompt 工程

最后一步是把检索到的片段拼进 Prompt。结构化 Prompt 能减少幻觉:

你是一个企业知识库助手。请仅基于以下参考资料回答问题。
如果参考资料中没有相关信息,请明确说"知识库中未找到相关内容",不要编造。

## 参考资料
{检索到的文档片段}

## 问题
{用户问题}

踩坑记录

实际落地中常遇到的几个坑:

  • PDF 表格丢失:表格解析后变成乱序文本,检索召回率暴跌。建议用专门的表格提取工具(如 camelot)
  • 中英文混合切分:中文字符数 ≠ token 数,固定字符切分会把英文单词劈成两半
  • 冷启动数据不足:文档少于 50 篇时,向量检索效果不稳定,建议先用关键词检索兜底

小结

RAG 不是银弹,但它是当前企业落地大模型性价比最高的架构。关键不在模型多强,而在文档处理和检索质量——这两块占整个工程量的 70%。

想了解这个方案如何落地到你的业务?

免费获取定制方案,2-4 周试点验证 ROI。

获取定制方案