fix(rag): 修复多意图检索 Chunk 归属丢失 - #105
Conversation
|
供参考: 核心思路(用真实召回归属替代「把 chunks 广播给每个候选意图」)是对的, 1. 全局兜底作用域下,意图的自定义 promptTemplate 会静默失效
改前全局路径下 snippet 被抑制是有意为之( 在 merge base 和 PR HEAD 上各跑一遍同样输入(单个 KB 意图,score 0.65,带 snippet 与 promptTemplate,证据走全局路径):
证据还在,规则和人设没了,没有日志也没有异 触发条件不窄。默认 要定的是:全局兜底时该不该保留意图人设。我「不敢把检索范围收窄到这几个库」,不等于「这 2. 关键词 / 图谱通道也做意图收窄,但不
后果是某意图只被关键词命中、向量没命中时,,snippet 和模板一起丢。当前 3. RetrievedChunkKey 的位置
4. 分支落后 main 15 个提交
建议 rebase 到 main 再验一次。 一处可以顺手简化
|
94e0b62 to
6e535e5
Compare
|
不好意思,昨天没看到咱的提交。我重构了向量、关键字和图的检索相关代码, 看先来有冲突,辛苦合并下看看 |
6e535e5 to
7937eee
Compare
|
已合并最新 main,冲突已经解决,相关测试也重新跑过了,麻烦再看一下。 |
|
PR已合并, 同时检测出一些其他优化项,请问是否有兴趣跟进修复? 归因缺失导致的两个遗留问题PR 解决了「按意图选提示词」的核心问题,但引入了一个静默的行为回退,以及暴露了一个关键词/图谱通道的已有缺陷。两个问题根因相同,修法不同,建议分开跟进。 问题 A:关键词/图谱通道交不出归因影响面:仅开启 ES 或图谱的部署,默认配置碰不到。 向量通道按意图逐个查,chunk 天生带归属。关键词通道把所有库并成一次 ES 查询( 这会导致一个结果:同一个 chunk,向量通道捞出来就有归因、关键词通道捞出来就没有。同一个问题的行为取决于哪条通道先出货,从用户视角看是随机的。 极端情况下向量通道两个意图都空、只有 ES 出货,
问题 B:「没查过」被当成「查了没查到」(行为回退)影响面:默认配置就会踩。这是唯一的行为回退,优先级最高。 当意图最高分落在 问题出在空集合的语义。
但代码里两者都是 更麻烦的是,两层消费代码对这个空集合的读法是反的:
结果就是同一个意图、同一次请求,人设模板生效了、规则 snippet 没了。改前两条都生效,所以这是一次回退。 实证:同场景在 main 和本分支分别跑 PR 自己的两个测试其实各钉了一颗钉子: 根因是同一个三种真实状态(查了有结果 / 查了没结果 / 没查过)挤进了两个格子(在集合里 / 不在集合里)。issue 要治的是第二种,第三种被顺带误伤。 A 在生产侧让「没查过」这种状态出现得更频繁(关键词通道永远交白卷),B 在消费侧误读了这种状态。修法完全不同:B 是消费侧判断逻辑,几行能改;A 要动 ES 查询结构,是独立的工作量。 其他小项
|
|
@Niooooo 请问上述内容咱是否有兴趣提交PR? |
|
有兴趣,我准备先试着处理问题B,解决完了很乐意提PR |
|
@Niooooo 好的。今明两天我应该会重构一部分代码,咱改动前记得勤拉下代码。 |
说明
Issue #87 的多意图检索会在并行汇总后丢失 Chunk 与召回意图的对应关系,导致未命中的意图参与 Prompt 规划。
改动
promptTemplateRetrievedChunkKey放到 framework 层,去重、融合和归因共用同一身份规则RetrievalScope、补充检索配额和单子问题调用结构边界
精确意图归属目前由向量定向检索提供。Keyword、Graph 和全局检索没有足够信息建立精确归属,因此保持为空,不根据 Collection、文档名或内容反推。排序、RRF、Rerank、Score、TopK 和 Prompt 模板资源不变。
验证
git diff --check origin/main...7937eee:passed127.0.0.1:6379拒绝连接而无法加载上下文JdbcConversationMemorySummaryServiceTest的 Mockito 严格桩检查Closes #87