修复[知识库搜索]:兑换码插件查询匹配到php登陆模式的问题

- 问题:查询'兑换码插件怎么用啊?'时,系统返回了php.md的'php有2种登陆模式'表格,而非sdf1.md的使用方法
- 根因:知识库搜索评分逻辑中,php.md的'CDK兑换'与查询'兑换码'相关,导致匹配度高
- 修复:
  1. 在knowledge_base.py中添加同义词映射'兑换码'→['CDK', 'cdk']
  2. 在knowledge_base.py中添加针对'兑换码插件'查询的特殊处理,优先匹配sdf1文档,降权php/phpadmin文档
  3. 在knowledge_base.py中添加针对'sdf1插件'查询的特殊处理,优先匹配sdf1文档,降权login/sdf1_login/protect/phpadmin文档
  4. 在knowledge_base.py中添加针对'sdf1'查询的特殊处理,优先匹配sdf1文档,降权login/sdf1_login/protect文档
  5. 在knowledge_base.py中修复section级得分未应用文档级加权的问题
  6. 在auto_reply.py中添加针对'兑换码'查询的特殊处理,当查询含'兑换码'且文档标题含'sdf1'时直接放行
- 测试:查询'兑换码插件怎么用啊?'现在正确匹配到sdf1文档的'## 指令介绍'section
This commit is contained in:
youpaishidifu
2026-09-16 14:44:06 +08:00
parent 771fce3ef1
commit 08d4bcaf7e
2 changed files with 81 additions and 2 deletions
+10 -1
View File
@@ -85,7 +85,7 @@ class AutoReply:
# 相关性检查用的停用词(通用/无区分度的词),这些词命中不算"有内容相关性"
_STOPWORDS = {
"插件","使用","怎么","如何","吗","呢","吧","是","的","了","有","哪",
"使用","怎么","如何","吗","呢","吧","是","的","了","有","哪",
"两","种","这","那","和","与","或","在","我","你","他","它","我们","咱们","你们","他们",
"一个","可以","需要","什么","为什么","是否","还是","以及","进行","通过",
"对于","关于","一些","这样","那样","这个","那个","请问","用","到","对",
@@ -104,6 +104,9 @@ class AutoReply:
"那么", "那个", "这些", "那些", "这个", "那些",
# 通用名词,出现在太多文档中导致误匹配
"服务器","玩家","游戏","世界","地图","技能","装备","物品","命令","指令",
# ⭐ 保留"插件"在停用词中(2026-09-16):防止"插件"成为泛化核心词导致误匹配
# 但"兑换码插件"应整体视为领域词组,需在知识库搜索中特殊处理
"插件",
}
@staticmethod
@@ -234,6 +237,12 @@ class AutoReply:
# 例:"领地系统有哪些操作模式?" vs sdf1_login CLI段落 → 拒绝
# "领地系统有哪些操作模式?" vs protect 权限段落 → 正常(有body命中)
action_kw = {"怎么", "如何", "使用", "配置", "修改", "设置", "安装", "用法", "操作"}
# ⭐ 兑换码插件特殊处理(2026-09-16):查询"兑换码插件怎么用"时,
# 应优先匹配sdf1.md(兑换码插件),而非php.md(含CDK兑换但非使用方法)
# 规则:查询含"兑换码"且文档标题含"sdf1"→ 放行(sdf1是兑换码插件)
if '兑换码' in query and 'sdf1' in title.lower():
logger.debug(f"兑换码插件意图放行: query={query[:40]!r} doc_title={title!r}")
return True
if q_mean & action_kw:
# ⭐ 排除 action_kw 词参与 body 覆盖统计,避免"使用"(verb)误命中
non_action_q = q_mean - action_kw