问题定义
通用大模型缺乏企业的私有知识:设备手册、工艺卡、维修工单、SOP、报警码表、图纸与专家经验。这些文档量大、更新频繁、且往往只有少数人掌握。检索增强生成(RAG)通过"先检索、再生成"的方式把外部知识注入生成过程,使答案可溯源、可更新,无需为每个领域重新训练模型。
核心问题包括:非结构化文档的解析与切分、检索召回率与准确率、跨文档的全局性问答、权限与时效控制、以及答案可信度评估。
核心技术
RAG 基本流程
离线阶段把文档切分成片段,用嵌入模型编码为向量后写入向量库;在线阶段把用户问题同样编码,检索出最相关的若干片段,与问题一起拼进提示词交给大模型生成。
在线:q = Enc(question) → top-k = argmax_{i∈I} sim(q, d_i) → LLM(question, {chunk_i})
向量检索与近似索引
嵌入模型把文本映射到语义空间,相似度通常用余弦或内积度量。工业场景中设备型号、报警码、参数代号这类字符串对语义模型不友好,需要混合检索兜底。索引结构主流为 HNSW(图索引,查询快、内存占用高)与 IVF 系列(倒排聚类,内存友好)。
HNSW:分层可导航小世界图,查询复杂度近似 O(log N),召回率由 efSearch 控制
混合检索与重排
关键词检索(BM25)擅长精确匹配型号与代号,向量检索擅长语义相近表达。两者结果用 RRF 融合,再交给交叉编码器重排,是工业问答中性价比最高的组合。
重排:cross-encoder(question, chunk) → 精排分数,取 top-n 送入生成
查询改写与多跳问答
用户提问往往不完整。HyDE 先让模型生成一段假设答案,用假设答案去检索,可提升语义匹配度;复杂问题拆成子问题分步检索;Self-RAG 让模型自行判断是否需要检索、检索结果是否相关,减少无效召回。
多跳:q → q_1, ..., q_n → 逐跳检索 → 汇总证据链
GraphRAG:面向跨文档全局问题
传统 RAG 擅长"某一段说了什么",不擅长"整体趋势是什么"。GraphRAG 先从语料抽取实体与关系构建知识图谱,再做社区划分与分层摘要,查询时先在社区摘要层检索,适合"这类故障通常有哪些原因"这类归纳性问题。
查询:全局类问题走社区摘要,局部类问题走实体邻域 + 原文片段
结构化知识与 Text2SQL
报警码表、BOM、工艺参数、点检记录本质是表格数据。这类问题用向量检索效果差、且容易算错,正确做法是让模型生成 SQL 查询数据库,或走确定性接口查询。判断标准:问题答案是"一个值/一组记录",就别走向量。
安全约束:SQL 执行需只读账号 + 结果行数上限 + 白名单表
检索方案对比
| 方案 | 擅长 | 局限 | 典型场景 |
|---|---|---|---|
| 关键词检索(BM25) | 型号、代号、专有名词精确匹配 | 同义表达、口语化提问召回差 | 报警码查询、备件检索 |
| 稠密向量检索 | 语义相近、表述多样 | 对精确字符串与数值不敏感 | 故障现象描述匹配 |
| 混合检索 + 重排 | 兼顾精确与语义 | 链路长、延迟与成本上升 | 通用工业问答(推荐默认) |
| GraphRAG | 跨文档归纳、全局性问题 | 建图成本高、更新复杂 | 故障模式总结、根因分析 |
| Text2SQL / 接口调用 | 统计、聚合、实时值 | 依赖表结构质量与权限控制 | 查询产量、停机时长、报警次数 |
工程实践指南
文档解析(往往是最大瓶颈)
- 先做解析质量评估:随机抽 30~50 页人工核对解析结果,双栏、跨页表格、页眉页脚混入、扫描件是最常见的失败点
- 表格单独处理:不要把表格压成纯文本后再切分,应保留行列结构,必要时转为 Markdown 表格或结构化记录
- 扫描件走 OCR:优先做版面分析再识别,避免标题与正文混排导致语义断裂
切分策略
- 按结构切优于按长度切:优先按章节、条款、段落边界切分,固定长度窗口作为兜底
- 保留标题路径:每个片段携带"文档名 › 章节 › 小节",既提升检索命中,也让答案可溯源
- 控制粒度:片段过短丢失上下文,过长稀释相关性;经验区间为 300~800 字,重叠 10%~15%
检索调优
- 先测召回再看生成:用真实问题集标注"应命中的片段",先把召回率做上去,优化生成是第二步
- 中文场景注意嵌入模型:选用中文或多语言嵌入模型,直接用英文模型处理中文工业术语效果明显下降
- 元数据过滤前置:按设备型号、产线、文档版本先过滤再检索,比事后重排更有效
可信与合规
- 强制引用出处:答案必须标注来源文档与页码,工程师能一键核对,这是工业场景能否落地的前提
- 检索为空就拒答:明确输出"未检索到依据"比编造一个看似合理的处置步骤安全得多
- 权限在检索阶段过滤:文档级 ACL 必须在召回前生效,不能依赖生成阶段约束
- 版本与时效:工艺变更、设备改造后及时重建索引,过期知识比没有知识更危险
效果评测
- 拆分指标:分别评估检索(Context Precision / Recall)与生成(Faithfulness / Answer Relevancy),避免只看整体感觉
- 用真实问题建评测集:从工单、班组问答、交接班记录中收集,比人工编造的问题更有代表性
- 回归机制:每次改动切分、模型或提示词后跑一遍评测集,防止局部优化带来整体退化
开源项目
LlamaIndex
面向 RAG 的数据框架,提供文档解析、切分、索引、检索与评测的完整链路,适合快速搭建工业知识问答原型。
FlagEmbedding (BGE)
智源开源的嵌入与重排模型系列,BGE-M3 支持多语言、多粒度与稠密/稀疏混合检索,中文工业语料上表现稳定。
Milvus
分布式向量数据库,支持多种索引类型与混合检索,适合千万级以上片段规模与高并发查询。
pgvector
PostgreSQL 向量扩展,可与业务数据同库管理与联合过滤,中小规模场景运维成本最低。
RAGAS
RAG 效果评测框架,提供忠实度、答案相关性、上下文精确率与召回率等指标,支持构建自动化回归评测。
GraphRAG
基于知识图谱的检索增强实现,通过实体关系抽取与社区分层摘要,支持跨文档的归纳性问题。
参考文献
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. Lewis et al., 2020
- ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction. Khattab & Zaharia, 2020
- Precise Zero-Shot Dense Retrieval without Relevance Labels (HyDE). Gao et al., 2022
- Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection. Asai et al., 2023
- From Local to Global: A Graph RAG Approach to Query-Focused Summarization. Edge et al., 2024