搭建知识库 agentic rag

接入与开发

面向企业知识库场景,讲清 Agentic RAG 的落地步骤、检索与工具循环的配合方式,以及上线前要验的几件事。

你可能已经有了一套能跑的普通 RAG,但用户问「上季度那笔退款怎么走的流程」这种要多跳一步、要查两张表的问题,它就答不上来。Agentic RAG 想解决的就是这类多步问答。这篇不铺概念,只给一条从数据准备到上线验收的推进顺序,以及每一步该盯什么指标、什么情况下这套方案根本不划算。

你可能已经有一套能跑的普通 RAG,日常问答还行,但用户一问「上季度那笔退款怎么走的流程」「这个客户签的合同和后来补的附件对不对得上」,它就开始含糊。这类问题要多跳一步:先定位是哪笔业务,再去查两张表,最后才拼出答案。Agentic RAG 就是冲这类多步问答去的。

这篇不铺概念,只给一条从数据准备到上线验收的推进顺序,每一步该盯什么指标、什么情况下这套方案根本不划算。看完你应该能判断自己该不该上,以及第一版从哪动手。

先判断:你的场景真需要 Agentic 吗

判断口径很朴素:统计一下线上真实提问里,有多少比例需要「先问一句再问第二句」。如果绝大多数答案就落在一两个切片里,普通 RAG 把分块和重排调好就够了,加 Agent 只会更慢更贵,还多出一堆调试成本。

场景信号更适合的路线
答案基本在一个切片内、一次检索命中普通 RAG 加好分块与重排
要先查元数据再取正文、跨多份文档推理Agentic RAG
答案要现场算或查实时数据Agentic RAG + 工具调用
知识库极少更新且答案固定直接做结构化问答或规则映射
延迟卡在秒级、团队没人维护提示词先别上 Agent
  • 典型适配:跨文档多步推理、先查元数据再取正文、答案需要现场计算或查实时数据。
  • 不适用的情形:知识库更新极慢且答案固定、延迟要求卡在秒级以内、团队没有人能持续维护提示词和工具描述。
  • 成本上先做一版对照实验:同一批真实问题分别走普通 RAG 和 Agentic 路径,比对准确率提升幅度与调用次数涨幅。
  • 结论往哪边偏不重要,重要的是先量化那个涨幅,再决定要不要继续投入。

数据进料与索引:Agent 的地基

Agent 再聪明,也救不回脏数据。先把非结构化来源跑一遍清洗:扫描件做 OCR、表格单独抽成结构化行、多栏 PDF 按栏切而不是按页切。这一步偷懒,后面检索出来的片段就是半截话,模型只能靠猜。

切片粒度按「能不能独立回答一个小问题」来定,并在每个切片上带足元数据——来源、文档层级、时间、权限标签。这些字段决定了后面 Agent 有没有条件做筛选,而不是纯凭语义相似度瞎撞。

  • 对多步问答,除向量库外再留一份结构化索引或字段过滤能力,让 Agent 先缩小范围再检索。
  • 同一份文档的不同版本要打时间戳并明确哪份是当前有效,否则 Agent 会把过期条款当现行规定引用。
  • 权限标签在入料阶段就写进元数据,不要等到检索时再补,那时候已经晚了。
  • 数据源和向量库的选型条目、各家限制,到站内目录页核对当时的清单。

把检索做成工具:让 Agent 自己决定查几次

这是 Agentic RAG 和普通 RAG 真正分叉的地方。检索不要写死在流程第一步,而是注册成一组工具,由模型判断调哪个、调几次。常见的是「按关键词搜」「按文档 ID 取全文」「按条件列清单」这几类。

  1. 定义工具边界每个工具的输入输出、适用场景写清楚。描述含糊是 Agent 乱调工具的最大来源,宁可写长一点。
  2. 设硬上限给单次会话的工具调用次数、总步数和总开销各设一道闸,防止一次提问把检索跑成几十轮。
  3. 处理多轮结果多轮检索之间要有合并与去重逻辑,否则同一段内容被反复塞进上下文,既占位置又干扰判断。
  4. 记录调用轨迹每轮调了哪个工具、传了什么参数、返回了什么,都落日志。排查问题时这是唯一的线索。
# 伪代码示意,不是可运行命令;重点是步数与开销双闸
max_steps: 6
max_tool_calls_per_turn: 5
on_budget_exceeded: fallback_to_plain_rag

答案落地与评测:验什么、怎么验

回答必须带可点的引用切片,模型没检索到就明确说不知道,别让它拿参数记忆硬编。这句话说起来简单,做起来要在提示词和输出解析两头卡死——只要正文里出现没有引用支撑的断言,就应该被下游规则拦下。

评测集不用大,几十条真实问题就够,但覆盖面要够:单跳、多跳、知识库里根本没有的(专门考它会不会瞎编)。每次改提示词、改切片、换模型,都跑同一套用例,看的是趋势不是单次结果。

要验的事验证方式
有没有瞎编塞入知识库里不存在的问题,看它是否拒答
引用是否真实抽查回答里的引用切片,确认原文支持该断言
多轮是否重复统计一次会话里重复进上下文的切片比例
哪段最慢记录每轮工具耗时,定位瓶颈在检索还是在生成
权限是否越界用低权限账号提问,看会不会捞出无权文档

上线前的检查清单

  • 权限:检索必须带用户身份过滤,别让 A 部门的切片出现在 B 部门的回答里。
  • 超时与降级:单轮检索超时就退回普通 RAG 路径,别让整个会话卡死。
  • 灰度:先切一小部分流量或一小部分问题类型,对比人工抽检结果再放量。
  • 观测:把调用次数、命中率、无答案比例挂在看板上,异常时第一时间知道是哪段退化了。
  • 回滚:保留上一版提示词和切片配置,出问题能一键切回去。

这几项里权限和降级最容易被跳过,也最容易在真出事时变成大麻烦。灰度阶段建议人工抽检逐条看,别只看自动指标好看就放量。

下一步把你手上待选的中转或自建方案拉出来,按稳定性、延迟、权限控制这几项对照着看一遍,再决定第一版怎么搭。

常见问题

Agentic RAG 和普通 RAG 到底差在哪,改造成本大吗?

主要差别在检索是「流程的第一步」还是「模型随时可调的工具」。改造重点通常不在向量库,而在把检索封装成工具、加循环上限、补评测集这三件事,代码量未必大,但提示词和评测要反复调,人力上不能按一次性工程估。

知识库问答里 Agent 一直反复检索、回答很慢怎么办?

先看是不是工具描述太宽泛,模型分不清该用哪个;再查有没有步数上限,没有就加上。另一个常见原因是检索结果没做去重合并,模型看到重复内容以为没查到,就又查一遍。按这三步排一遍,多数情况能压下来。

这套东西什么时候算能上线了?

不是看它答对了多少,而是看它答错时你会不会知道。评测集里那批「知识库里根本没有」的问题,它能明确说不知道而不是编,同时线上能记下每轮的调用与命中情况,这两条满足了再谈放量,否则先小流量灰度。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。