跳到主要内容

文档问答配置检查与问题改写入口

上一篇讲了开放式问答的快速路由,如果 chatMode 不是 OPEN_CHAT,那就说明要走文档问答链路了。在真正开始检索之前,系统要先做两件事:

  1. 检查 RAG 配置是否正确
  2. 对用户问题做"检索友好型改写"

文档问答模式的配置检查

第一步:检查 RAG 是否开启

// 到这里说明进入的是文档知识问答链路;若 RAG 未开启,则直接报配置错误。
if (!properties.isEnabled()) {
throw new IllegalStateException("当前文档问答模式未启用,请先开启聊天侧 RAG 编排");
}

这段代码很简单,就是检查 properties.isEnabled() 是否为 true。这个 propertiesChatRagProperties 类型的配置对象,里面有个 enabled 字段,用来控制整个 RAG 功能的开关。

为什么要这个检查?

如果用户选择了文档问答模式,但是系统配置里 RAG 功能是关闭的,那后续的检索、路由等操作都无法进行。与其让程序在后面某个环节报错,不如在这里就直接抛出异常,告诉用户"你得先开启 RAG 功能"。

第二步:检查文档范围是否明确

if (chatMode == ChatQueryMode.DOCUMENT && (selectedDocumentId == null || selectedTaskId == null)) {
// 当前文档问答模式必须具备明确文档范围,否则无法继续往下路由。
throw new IllegalArgumentException("当前文档问答模式缺少有效的文档范围");
}

这个检查只针对 DOCUMENT 模式(单文档问答)。在这个模式下,用户必须先选择一个具体的文档,系统才知道去哪里检索。如果 selectedDocumentIdselectedTaskId 为空,说明用户没有选择文档,那就没法继续了。

聊天模式是否需要明确文档范围说明
DOCUMENT✅ 必须单文档问答,必须指定文档 ID 和任务 ID
KNOWLEDGE❌ 不必须知识库问答,可以跨多个文档检索
OPEN_CHAT❌ 不需要开放式问答,不涉及文档检索
注意

KNOWLEDGE 模式不需要这个检查,因为知识库问答可以跨多个文档检索,不需要用户提前指定某个文档。

问题改写的入口

通过了配置检查之后,系统就要开始准备检索了。但是用户的原始问题往往不适合直接拿去检索,原因有这么几个:

  1. 上下文省略 - "它是什么?"、"再详细点",这种问题脱离了上下文就没法理解
  2. 指代不明 - "这个功能怎么用?","这个"指的是什么?
  3. 口语化表达 - "能不能给我讲讲那个啥来着",太随意了
  4. 多问题混在一起 - "A 是什么?B 怎么用?C 和 D 有什么区别?",一次问了好几个问题

所以系统要先把用户问题"整理"一下,变成更适合检索的表达。这个过程就叫问题改写(Query Rewrite)。

付费内容提示

该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放

加入星球后,你可以获得:

  • 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
  • 讲解文档:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的详细文档
  • 讲解视频:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
  • 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
  • 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
  • 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
  • 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
  • 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
  • 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
知识星球二维码

1. 打开微信 -> 扫描左侧二维码 -> 加入「JavaUp项目实战&技术讲解」知识星球

2. 查看星球使用指导,获取完整项目讲解资料索引

👉 点击解锁全部付费内容
🎁优惠