youpaishidifu
|
c78c5a1636
|
Task #1607 修复:纯下载意图匹配错误 + OCR错误年份降级
1. auto_reply.py: '哪儿下载?'等无核心词查询不应直接放行,
改为全文回退检查(beibao.md全文不含'登录'等插件词→拒绝)
修复 '在哪儿下载?' 误答背包插件问题
2. monitor.py: OCR错误年份(12026年)时增加本地时间戳辅助判断,
时间戳新鲜(≤300s)则放行,否则丢弃
修复历史消息中带今天时间戳时因OCR年份错误被全量丢弃
|
2026-08-25 17:41:32 +08:00 |
|
youpaishidifu
|
12f269acaf
|
修复下载类查询匹配错误:相关性检查阶段应用同义词映射(Task #1604)
|
2026-08-25 15:44:48 +08:00 |
|
youpaishidifu
|
0af8c68a73
|
修复两个OCR过滤bug
1. auto_reply.py: has_meaningful_hit子串回退永远拒绝
- 根因:q_mean是多字符token集合,set(heading_clean)是单字符集合
- q_mean & set(heading_clean) 永远为空 → 子串回退永远拒绝
- 修复:改为 any(kw in full for kw in q_mean) 子串匹配
- 影响:sdf1_login下载查询(22.18分)被误拒
2. monitor.py: 过去日期时间戳过期整段丢弃
- 根因:_ocr_text_has_fresh_timestamp返回False时(过期时间戳)
- 调用方对含中文文本无条件放行 → 昨日旧消息被当作新消息
- 修复:新增_has_past_date_timestamp方法检测过去日期
- 调用方:过去日期+时间戳过期 → 整段丢弃
- 场景:OCR抓到昨天(2026/8/23)的整屏内容被错误放行
|
2026-08-24 10:16:40 +08:00 |
|
youpaishidifu
|
434a9609bf
|
修复下载类查询牛头不对马嘴复发:文档无下载token时拒绝
问题:用户问在哪儿能下到那个登录插件,bot回复了protect文档的操作方式表格,
因为该文档heading含登录插件但body是操作方式,与下载无关。
修复:在_has_content_relevance方法中新增下载类查询额外防御——
当查询含下载意图词(下载/下到/哪下/在哪下/怎么下)时,
若文档全文(heading+title+body前800字)不含下载token,
直接拒绝该文档,防止牛头不对马嘴。
同时保留原有下载意图检查(heading含下载时放行),确保sdf1_login等下载文档正常匹配。
Task #1582
|
2026-08-23 22:39:18 +08:00 |
|
youpaishidifu
|
e1a1078873
|
fix: 表格兜底通过时跳过核心词覆盖检查
问题:'领地系统有哪两种操作模式?'查询命中protect.md的'温馨提示'
section(含操作方式表格),表格兜底放行后仍被多关键词覆盖检查拦截。
根因:表格兜底设置has_body=True,但核心词覆盖检查是独立逻辑,
要求5个核心词命中≥3个,而表格中只有'系统''操作'命中(2/5)。
修复:表格兜底通过时设置_table_fallback_used标记,核心词覆盖检查
跳过该检查,避免表格型答案被误杀。
验证:
- '领地系统有哪两种操作模式?' → 返回操作方式表格 ✓
- 其他查询的核心词检查逻辑不变
|
2026-08-19 16:49:16 +08:00 |
|
youpaishidifu
|
dd21327806
|
修复单核心词查询正文覆盖死锁:max(2,...)对1词永远失败
根因:'端0(基岩版)'→q_mean={'基岩'}, body_hits=1, 阈值=max(2,min(1,...))=2
1<2 → 必然返回False → 回复被拒,入库残片后后续轮询不回复
修复:max(2,...)→max(1,...),单核心词时阈值=1即可通过
多核心词查询(q_count≥2):max(1,...)≥2不变,防御强度不下降
|
2026-08-19 15:56:58 +08:00 |
|
youpaishidifu
|
c6b6a73970
|
修复[相关检查]:纯停用词查询模糊子串回退,容忍OCR/输入噪声
- 问题:查询"关于我们儿"匹配到index.md"关于我们"(匹配度8.66)却未通过内容相关性检查,跳过回复。
- 根因:q_mean为空(关于/我们均为停用词)落入纯停用词分支,整串精确子串匹配"关于我们儿" in full失败即拒,多一个"儿"字符无法容忍。
- 修复:精确匹配失败后增加模糊子串回退——按stripped长度从大到小在full中查找连续片段,命中长度≥max(3, len*0.75)放行。
- 测试:单测4/4(案例+回归),真实KB端到端:index 8.66→True,beibao 2.24/sdf1 0.60→False。
|
2026-08-19 14:20:14 +08:00 |
|
youpaishidifu
|
f8366798f6
|
refactor: md checkbox 一刀切,不再枚举符号
用户从不手打 markdown,短方括号结构才是稳定特征:
- [√] [x] [ ] [⚠] [✔] [V] 及 OCR 变体 [ √ ]、全角【√】全部覆盖
- 不再枚举具体勾选符号——OCR 偏差永远撞不全符号
- 多字词方括号([钻石] [VIP])绝不命中,保护用户正文
- \s*.?\s* = 空或单字符,md checkbox 的本质特征
改动点:
1. monitor.py _MD_TAIL_PATTERNS: checkbox 模式改一刀切 + 补全角【】
2. monitor.py _is_markdown_document: checkbox 检测同步放宽
3. monitor.py OCR 过滤链: checkbox残片/多checkbox/计数/行首菜单 4处同步
4. auto_reply.py _clean_markdown: checkbox 移除改一刀切,(?!\() 保护链接
策略(用户定):md在头→整段跳过;在中间→看语义(C#负向前瞻已挡);在尾→一刀切
|
2026-08-17 21:55:28 +08:00 |
|
youpaishidifu
|
4005369492
|
fix: 跨轮语义去重+checkbox清理
Task #1548: 跨轮语义去重增强
- 三层策略: Jaccard≥0.75 → 核心词重叠≥0.80 → 子集检测≥0.90
- 新增 _extract_content_keywords 提取CJK bigram关键词
- 修复登录插件去哪儿下载等变体查询未被拦截问题
Task #1549: Markdown小尾巴清理
- _clean_markdown 新增 checkbox 标记移除
- 支持 [√] [✗] [X] [x] [V] [v] [ ] [⚠] [!] 格式
- 修复 bot回复末尾残留 [√] GitHub(稳定版) 问题
|
2026-08-17 21:23:31 +08:00 |
|
youpaishidifu
|
5455d3560b
|
fix: OCR口语词/碎片词污染核心词+下载全文回退+动作表格兜底
1. non_core_kw新增: 有人(@OCR误读)/一嘴/那家/那价
2. core_kw过滤纯ASCII<=2碎片词(ij等OCR噪声)
3. 下载意图新增全文回退: section无'登录'但整文档是登录插件(全文17次)则放行
4. 动作查询表格兜底: 查询'操作模式'vs表'操作方式'词级匹配失败时, 表格+action词命中放行
|
2026-08-17 14:16:36 +08:00 |
|
youpaishidifu
|
bd35975d2e
|
fix: 口语填充词+下载/表格加权,修复三个匹配错误
1. auto_reply.py: non_core_kw新增'一句/问一句/再问'
- 用户说'我再问一句'中的'一句'是填充词,不应作为核心词
2. knowledge_base.py: 下载意图加权从2.5→4.0
- 强化heading含'下载'的section优先级
- 修复sdf1_login.md的'2.1 下载'被protect.md的'温馨提示'压过
3. knowledge_base.py: 表格内容奖励从3.0→5.0
- 强化含'操作'等关键词的表格section优先级
- 修复'操作方式'表格被'领地列表'描述压过
|
2026-08-17 13:42:50 +08:00 |
|
youpaishidifu
|
174b606721
|
fix: 跨轮语义去重+KB核心名词加权,修复公告信息匹配到基本信息
1. monitor.py: 新增跨轮语义去重(5分钟TTL, Jaccard≥30%)
- _recent_user_queries列表 + _is_semantically_duplicate()
- _poll候选构建阶段检查,回复后写入记录
2. auto_reply.py: non_core_kw新增通用信息类名词
- '信息','内容','详情','情况','介绍'不应作为核心词
- 原因:公告信息核心词应是{公告}而非{公告,信息}
3. knowledge_base.py: core_nouns新增公告/更新
- 查询含核心名词时,section含该名词→2倍加分,不含→0.3倍惩罚
- 修复近期公告(2.93)被基本信息(6.56)压过的问题
|
2026-08-17 12:09:23 +08:00 |
|
youpaishidifu
|
0fe4f018ba
|
fix: 核心词零命中硬拒绝,彻底修复登录插件匹配到背包的牛头不对马嘴
根因:_has_content_relevance 中,'下载'被排除出 core_kw(core_kw={'登录'}),
但 has_ht=True(heading '下载地址' 命中 q_mean 中的'下载'),
导致跳过多关键词覆盖检查和正文覆盖检查,直接 return True。
即使下载意图检查拒绝了 beibao(核心词'登录'未命中),函数仍然返回 True。
修复:下载意图拒绝后、多关键词覆盖检查前,新增核心词零命中硬拒绝:
当 core_kw 非空但 core_hits=0 时无条件 return False。
|
2026-08-17 10:47:25 +08:00 |
|
youpaishidifu
|
f9c5ab2142
|
fix: 新增'知道'/'想知道'为口语填充词,不作为核心词
问题:
- 用户问"俺想知道登录插件在哪儿下载"时,核心词提取为{'知道', '登录', '下载'}
- "知道"是口语填充词,不应参与核心词匹配
- 导致核心词覆盖检查失败:core_hits=1/3, missing=['登录', '知道']
- sdf1_login.md被错误拒绝
修复:
- 将'知道'和'想知道'加入non_core_kw停用词列表
- 预期效果:核心词变为{'登录', '下载'},覆盖检查通过
测试预期:
- '俺想知道登录插件在哪儿下载' → core_kw={'登录', '下载'} → sdf1_login通过
|
2026-08-17 09:40:58 +08:00 |
|
youpaishidifu
|
ecadaaa9ae
|
fix: 修复下载类查询被URL路径误匹配的问题
问题:
- 用户问"那个登录插件去哪下载",beibao.md(背包插件)被错误选中
- 下载意图检查正确拒绝了beibao(因为不含"登录"核心词)
- 但子串回退逻辑却放行了:因为"插件"出现在URL路径 /plugin/ 中
根因:
子串回退检查phrase in full时,没有排除URL路径中的匹配
导致通用词"插件"在URL中出现就误判为相关文档
修复:
1. 下载类查询要求:核心名词短语(如"登录")必须在文档正文中出现
不能只是"插件"这种通用词在URL路径中命中
2. 如果核心名词未命中,直接拒绝子串回退
3. 额外检查:如果phrase只在URL中出现,也拒绝
测试预期:
- '那个登录插件去哪下载' → beibao拒绝(不含"登录"),sdf1_login通过(含"登录")
- '哪个插件下载' → beibao可能通过(只有"插件"通用词)
|
2026-08-17 09:22:08 +08:00 |
|
youpaishidifu
|
8b116ff824
|
fix: 修复下载意图匹配过于宽松导致牛头不对马嘴问题
问题:用户问'登录插件下载地址'时,bot错误匹配到beibao.md(背包插件)而不是sdf1_login.md(登录插件)
根因:下载意图检查只要求标题包含'下载'就放行,没有验证其他核心关键词(如'登录'、'插件')是否匹配文档
修复:
- 如果查询只有'下载'一个核心词 → 放宽检查(普通下载类查询)
- 如果查询有多个核心词(如'登录插件下载地址')→ 要求至少一个其他核心词命中文档
- 未命中时记录debug日志便于排查
测试:预期'登录插件下载地址'现在应匹配sdf1_login.md而非beibao.md
|
2026-08-16 22:45:03 +08:00 |
|
youpaishidifu
|
3bfdbff40c
|
fix: 下载类回复保留Markdown链接格式
问题:
- _clean_markdown()把[文本](URL)转换成纯文本,丢失URL
- 用户问"登录插件下载地址"时,回复变成"官方下载 bbsmc分流"
- 实际应该是"[官方下载](https://...) [bbsmc分流](https://...)"
修复:
- 新增 _clean_markdown(keep_links=False) 参数
- 检测下载意图(含下载/地址关键词 + 含URL)
- 下载类回复保留原始Markdown链接格式
效果:
- 非下载类:仍清理Markdown(普通问答)
- 下载类:保留[文本](URL)格式(含可点击链接)
相关issue: #1542
|
2026-08-16 22:37:07 +08:00 |
|
youpaishidifu
|
43484b65dd
|
fix: 下载意图检查提前 + 语义去重防双回复
问题1: 核心词覆盖检查在下载意图检查之前执行
- 查询'那个登录插件是在哪个地方下载?'含3个核心词{登录,插件,下载}
- sdf1_login.md的'## 下载地址'只含'下载'(1/3),不满足阈值>=2
- 直接return False,下载意图检查从未执行
- 修复:将下载意图检查移到核心词检查之前,提前放行
问题2: 相同意图不同表达导致双回复
- hash('{platform}:{msg}:{answer[:80]}')要求完全一致
- OCR噪声导致同义重复(如'在哪下载'vs'下载地址')
- 修复:添加Jaccard相似度(CJK bigram)语义去重
- TTL=30秒,阈值>=0.3视为重复,缓存上限50条
commit 8d7c9e2 (2026-08-16)
|
2026-08-16 16:17:34 +08:00 |
|
youpaishidifu
|
dec97d1687
|
修复:口语填充词导致关键词覆盖率误判 + OCR早期昵称剥离
【问题1】关键词覆盖率虚高
查询"有个问题。他们常用的登录插件是在哪里下载的?":
- 修复前:core_kw含{'有个','问题','常用','登录','下载'}共5词
- sdf1_login heading"### 2.1 下载"仅命中1词
- 阈值=max(1,(5+1)//2)=3 → 1<3 → 误拒绝
- 修复后:'有个','问题','常用'加入non_core_kw
- core_kw只剩{'登录','下载'}共2词,阈值=1
- heading含"下载" → 1/2 ≥ 1 → 通过 ✓
【问题2】昵称污染早期处理链路
昵称"草原探险服务器备用号"在OCR原始文本中会污染:
- _ocr_text_has_fresh_timestamp时间戳检测
- 行合并逻辑
- _split_and_denoise_segments分段
修复:在_process_ocr_output开头(垃圾检测之前)调用_strip_qq_nickname
确保所有后续步骤都不受昵称字符干扰
新增non_core_kw词条:'有个','问题','常用','他们','各位','大家','小伙伴'
|
2026-08-16 11:35:21 +08:00 |
|
youpaishidifu
|
4df8f04f43
|
@fix(auto_reply): 新增口语语气词到non_core_kw,修复下载查询选中保护页头部的问题
|
2026-08-16 10:53:59 +08:00 |
|
youpaishidifu
|
1e3bc9325f
|
修复YAML误杀+核心词优化
1. YAML过滤器放宽:允许gitcode:等域名格式的消息
- 添加正则排除gitcode:ypshidifu等已知域名
- 修复公告查询被误杀问题
2. 核心词提取优化:
- 将'相关联','相关','有关'加入non_core_kw
- 添加'那么'到_STOPWORDS
- 正确识别查询['公告', '消息']为核心词
3. 保持重复回复检测逻辑不变
|
2026-08-15 23:35:53 +08:00 |
|
youpaishidifu
|
3a19483ad4
|
fix(auto_reply): 添加'他们'到停用词列表
- jieba分词会将'他们'识别为有效token
- 在query='嘿嗯。那个登录插件他们是在哪里下载的呀?'时,'他们'会进入q_mean
- 导致core_hits阈值过高(需要覆盖2/3核心词)
- sdf1_login.md的'## 4. 下载地址'只含'下载',被错误拒绝
- 修复:将'他们'加入_STOPWORDS
|
2026-08-15 20:13:56 +08:00 |
|
youpaishidifu
|
1398f37835
|
fix(auto_reply): 添加'咱们'到停用词列表
- 用户问'咱们应该去哪儿下载...'时,'咱们'被当作有效关键词
- beibao.md '## 下载地址'只含'下载',core_hits=1,阈值=2,被错误拒绝
- 补充'咱们'到_STOPWORDS,使q_mean只剩{'下载'},核心词阈值降为1
- 修复多关键词覆盖不足导致正确文档被拒绝的问题
|
2026-08-15 18:42:37 +08:00 |
|
youpaishidifu
|
35e42ab3e9
|
fix(auto_reply): 添加连词/副词到停用词列表
- 新增"所以""应该""但是""如果"等连词到_STOPWORDS
- 新增"哪里""呢"等疑问词到停用词
- 修复'所以那登录插件应该去哪里下载呢?'被误过滤问题
- 核心词从5个降到2个(登录、下载),核心词覆盖阈值从3降到1
|
2026-08-15 11:23:31 +08:00 |
|
youpaishidifu
|
4631571019
|
fix(auto_reply): 强化复合标题检测 - 无主体命中直接拒绝
之前仅重置 has_ht 为标题主体命中,但 body 仍可能含核心词导致通过核心词覆盖检查。
新增:标题主体部分不含任何 q_mean 中的词时直接 return False。
|
2026-08-15 10:43:02 +08:00 |
|
youpaishidifu
|
694d26bb12
|
fix(auto_reply): 修复复合标题误匹配问题
- 方言语气词过滤:_STOPWORDS 新增"那搁""搁哪儿""哪儿"等东北话
- 复合标题检测:检测 heading 含 <br> 或列表标记时,只检查标题主体部分(<br>之前)的 meaningful tokens
- 防止 protect.md 的"温馨提示"body 含"登录"+"下载"被误选
- 修复'那搁哪儿下载那个登录插件啊?'返回错误文档的问题
|
2026-08-15 10:39:46 +08:00 |
|
youpaishidifu
|
ae27ee91cd
|
fix: 修复KB搜索回复内容不对和历史消息重复处理问题
问题1:回复内容不对
- protect.md的section heading包含整个section内容(含<br>和列表标记),导致下载意图加权检查误匹配
- 修复:增加检查,如果heading含<br>或列表标记,说明是复合标题,需检查下载是否出现在标题主体部分
问题2:历史消息重复处理
- 基线轮处理后seen.discard(item)从持久化集合中移除,但未重新加入_seen_messages
- 修复:基线轮处理后增加self._seen_messages.add(item),确保下次轮询不再处理此消息
|
2026-08-15 10:13:55 +08:00 |
|
youpaishidifu
|
90e7280f51
|
fix(auto_reply): 修正核心词覆盖阈值计算
问题:当只有1个核心词时,min_core_hits = max(2, 1) = 2
要求覆盖≥2个核心词,导致'公告'类单词查询被误拒绝
根因:max(2,...)硬编码最低2个,但当core_kw只有1个元素时
无法覆盖2个,永远失败
修复:改为max(1,...),确保阈值合理
- core_kw={公告}(1个) → min=1 → 通过
- core_kw={草原,近期,公告}(3个) → min=2 → 仍需覆盖≥2个
关联:之前添加'最近'到non_core_kw使'公告'类查询核心词只剩1个,
暴露了这个隐藏bug
|
2026-08-14 12:01:37 +08:00 |
|
youpaishidifu
|
4df2edd1a1
|
fix(auto_reply): 添加时间/程度副词到非核心词列表
问题:查询'服务器最近有哪些公告啊?'命中'近期公告'文档,但被相关性检查拒绝。
根因:
- '最近'未被列为非核心词,参与核心词覆盖检查
- 文档heading为'近期公告',不含'最近'(只含'近期')
- 核心词{'最近', '公告'}只命中1个,低于阈值2个
修复:
- 在non_core_kw中添加时间/程度副词:最近、近期、刚才、现在等
- 这些词通用性强,不应作为核心区分词
测试结果:
- 核心词变为{'公告'}(1个)
- core_hits=1 >= min(2, 1)=1 → 通过
|
2026-08-14 12:00:39 +08:00 |
|
youpaishidifu
|
3e416c024b
|
fix(monitor): 放宽偏旁过滤 + 修复表格提取逻辑
1. 偏旁字符过滤放宽(monitor.py)
- 从"包含偏旁字符就丢弃"改为"偏旁字符占比>10%才丢弃"
- 修复 OCR 误识别(默讠/亻尔)导致有效消息被丢弃的问题
- 纯偏旁碎片(如⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊)仍会被丢弃
2. 表格提取逻辑修复(auto_reply.py)
- 放宽表格行检测:不要求行尾必须有|
- 原因:Markdown表格可能未闭合或OCR识别不完整
- 修复公告表格只显示第一行的问题
|
2026-08-14 10:08:41 +08:00 |
|
youpaishidifu
|
f8f9515170
|
fix(kb): 修复'管理员端'查询被误判为beibao.md的问题
问题:查询'那pHP的那个管理员端的密码,默认是多少?'时,
beibao.md的'## 使用方法-管理员'(score=66.56)被错误选中,
而非phpadmin.md的'## php管理员后端'(score=63.69)。
根因:原规则只检查query是否含'后端',但用户实际使用了'管理员端'。
beibao.md heading含'管理员',通过了'php密码查询'检查,
而规则没有区分'管理员'和'管理员端'的语义差异。
修复:将规则从'后端'扩展到'后端'或'管理员端',
要求heading必须含'php'或'后端'才能通过。
beibao.md不含'php'也不含'后端'→ 拒绝。
测试:3/3用例通过,原有7/7测试继续通过。
|
2026-08-13 23:11:34 +08:00 |
|
youpaishidifu
|
a0ace5ec13
|
fix(kb): 多关键词全覆盖防御 + 语义意图验证增强
1. auto_reply.py 多关键词覆盖防御:
- 区分核心词与非核心词(排除疑问词、OCR碎片等)
- 要求文档覆盖≥50%核心词(最低2个),防止单一关键词误选
- 例:查询含核心词={'草原','近期','公告'},sdf1.md只含'草原'(1/3)→拒绝
2. auto_reply.py 语义意图验证增强:
- php查询:heading需含'php'或'管理'或'后端'(放宽规则支持'php用户管理')
- php密码查询:heading必须含'管理员'或'后端'(区分玩家端vs管理端)
- 新增php后端查询规则:query含'后端'但heading不含时拒绝
3. gui.py 搜索范围扩展:
- top_k从3增至5,确保正确结果不被截断
修复问题:
- '服务器近期的一些公告有哪些' → 返回index.md的'近期公告'
- 'PHP默认的那管理后台管理密码是多少' → 返回phpadmin.md的'ypshidifu2026'
- '那pHP后端的那管理员默认密码是多少' → 返回phpadmin.md(拒绝beibao.md)
|
2026-08-13 21:24:32 +08:00 |
|
youpaishidifu
|
2a5f16ae1f
|
fix(kb+filter): 修复管理员密码查询返回玩家端问题 + 问句豁免公共子串跳过
1. auto_reply.py: 管理员密码查询(含php)要求heading含"管理员",防止php.md玩家端被误选
2. monitor.py: Poll阶段回复公共子串跳过增加问句豁免,含疑问词的消息不再被误判为旧回复片段
|
2026-08-13 17:17:28 +08:00 |
|
youpaishidifu
|
8d0670ce81
|
fix(kb): 修正语义意图验证,php查询要求heading含php
之前规则:'php'+'管理'时允许heading含'管理'→ beibao通过
修正:'php'查询时heading必须含'php'→ 正确返回phpadmin
|
2026-08-13 16:05:34 +08:00 |
|
youpaishidifu
|
256935d70c
|
fix(kb): 添加语义意图验证,防止OCR错字导致错误匹配
问题:查询'那录插件的pHp后端那管理员默认密码是多少?'(OCR将'登'识别为'录'),
beibao.md的'使用方法-管理员'(score=79)压过phpadmin.md的'php管理员后端'(score=64)。
修复:增加语义意图验证规则:
1. 查询含'php'+'后端/管理'时,heading必须含'php'或'管理'
2. 查询含'管理员密码'时,heading必须含'密码/管理/php'
效果:php管理密码查询现在正确返回phpadmin.md的'## php管理员后端'
|
2026-08-13 16:03:01 +08:00 |
|
youpaishidifu
|
d0e3950d6c
|
fix(kb): 子串回退要求至少一个meaningful_token命中,防止通用词泛匹配
问题:添加'服务器'停用词后,player.md的heading/body仍含'服务器'三字,
子串回退检查到'服务器的'(4字子串)命中文档→错误通过相关性检查。
修复:子串回退增加前置条件——必须至少有一个meaningful_token命中文档。
'服务器的'命中但'近期'/'公告'均未命中→拒绝。
'近期公告'命中且含meaningful_token'近期'/'公告'→通过。
效果:查询'服务器的近期公告有哪些?'现在正确匹配到index.md的'## 🔈近期公告'。
|
2026-08-13 13:56:52 +08:00 |
|
youpaishidifu
|
3e7ecf79a0
|
fix(kb): 将通用名词加入停用词列表,防止牛头不对马嘴误匹配
问题:查询'服务器的近期公告有哪些?'被匹配到player.md的'运营方权利'段落。
原因:'服务器'出现在太多文档中,导致TF-IDF分数虚高,且相关性检查认为有heading命中。
修复:将'服务器','玩家','游戏','世界','地图'等通用名词加入_STOPWORDS,
使相关性检查忽略这些词,只关注'公告','近期'等核心查询词。
结果:查询现在会正确匹配到index.md的'## 🔈近期公告'section。
|
2026-08-13 13:53:37 +08:00 |
|
youpaishidifu
|
7720172167
|
fix(kb): 修复牛头不对马嘴——动作查询正文无共同词时直接拒绝
问题:领地系统有哪些权限级别? 误匹配 sdf1_login(feature list 含领地系统)
而正确答案 protect(权限级别表格)因 TF-IDF 分数较低被跳过。
修复:
1. 动作/配置类查询(怎么/如何/使用/操作/安装…)扩展为:
- 正文不含非动作关键词 → 直接拒绝(无论 heading 是否命中)
- 排除 action_kw 参与 body 覆盖统计,避免 verb '使用' 误命中
2. 新增正文覆盖不足防御:
- has_ht=False + has_body=True 时,要求 body 覆盖 ≥60% 查询词(最低2词)
- 防止散点命中(如仅命中'领地''系统'两个词)通过
覆盖测试:10/10 通过
- BUG_FIX: 权限级别 vs sdf1_login → False ✅
- BUG_FIX: 权限级别 vs protect → True ✅
- Action: 操作模式 vs sdf1_login → False ✅
- Action: 操作模式 vs protect → True ✅
- Normal queries still work ✅
|
2026-08-12 17:50:08 +08:00 |
|
youpaishidifu
|
c0025a6f12
|
修复OCR重复回复+KB后台密码匹配+QQ UI过滤'有人@我'
|
2026-08-12 12:39:44 +08:00 |
|
youpaishidifu
|
091cac6781
|
修复KB搜索牛头不对马嘴:动作查询要求标题和正文都含核心词
|
2026-08-12 12:00:21 +08:00 |
|
youpaishidifu
|
0a7b330532
|
fix: 自动回复清理Markdown格式,防止返回MD格式内容
新增_clean_markdown函数,清理答案中的Markdown格式(标题、链接、列表、加粗等),
返回纯文本。修复KB搜索返回Markdown格式内容(如下载地址链接)的问题。
同步dist副本。
|
2026-08-11 16:27:52 +08:00 |
|
youpaishidifu
|
dc40196ce9
|
修复知识库搜索垃圾回复:登录插件下载查询返回指令碎片
- 列表项切分保护从'全部短'放宽为'≥70%短',防止sdf1_login指令列表被切成单行碎片
- 新增match_heading字段:合并的短列表项文本参与heading匹配,恢复'注册账号'等查询的命中强度
- 下载意图查询(下载/下到/哪下/怎么下)跳过has_action重排与guide合并,修复'登录插件怎么下载'返回安装说明
- guide合并步骤统计只认###级子标题,防止##章节编号误判为教程步骤
- 下载加权/优先逻辑排除皮肤类heading,防止skin.md'下载皮肤文件'误放大
- gui.py新增DB查重,防止同一消息重复回复
|
2026-08-10 22:26:13 +08:00 |
|
youpaishidifu
|
9ab2da404f
|
修复bot多段回复与表格全文回调:强化相关性+表格只取上下文
- Fix A: auto_reply._get_answer 含表格正文不再返回整段section,改为
提取表格+紧邻上文(最多2行),丢弃表格后无关图文,截断到800字符
- Fix A: 清理答案中的HTML <br> 标签,避免原形显示
- Fix B: 强化 _has_content_relevance,要求查询与文档共享有区分度核心词
(去停用词),动作类查询额外要求正文命中,防牛头不对马嘴
- Fix B: gui._search_and_log 从 top_k 结果中选取首个通过相关性校验的文档
发送,不再永远取 results[0],保证一条消息只回复一段精准内容
|
2026-08-10 17:59:18 +08:00 |
|
youpaishidifu
|
8de03180ee
|
fix: 表格内容动态截断长度,多退少补
表格内容不再固定截断到1000字符,而是动态计算实际长度:
- 表格长度≤4000字符:不截断,保留完整表格
- 表格长度>4000字符:截断到4000字符(QQ单条约4500字符限制)
- 普通文本保持300字符截断
解决长表格回复截断问题,同时避免base64等长字符超出限制
|
2026-08-09 22:26:02 +08:00 |
|
youpaishidifu
|
438ba08365
|
fix: 修复历史消息二次处理和回复截断问题
1. 历史消息二次处理 (Task #1490):
- 启动时从消息历史数据库加载最近50条bot回复到_replied_texts
- 降低查库过滤器重合率阈值0.9→0.7
- 防止重启后旧回复被OCR重新识别处理
2. 回复截断 (Task #1491):
- 表格内容截断长度300→1000字符
- 普通文本保持300字符
- 避免长表格回复被截断
|
2026-08-09 22:20:27 +08:00 |
|
youpaishidifu
|
7fc737d80f
|
fix: #1448 相关性短查询放行 + #1449 严格300s报废
#1448 auto_reply: _has_content_relevance() 不再对≤2token短查询无条件放行
- 短查询必须整个query作为子串出现在文档中才放行
- 修复下载→前置依赖误匹配(无任何共同token/token交集)
#1449 monitor: 严格300s报废策略
- stage splitting: 继承时间戳>300s一律丢弃,移除新鲜内容/提问豁免
- 区块级: 硬截止从1800s→300s,移除CJK内容/新鲜特征bypass
- 修复16:07消息在21:08仍被处理的问题
|
2026-08-07 22:42:14 +08:00 |
|
youpaishidifu
|
5627a2b88a
|
修复三个OCR过滤问题:
1. Task #1440: 时间戳过滤器加强到5分钟窗口
- 继承时间戳超过5分钟(300s)的消息直接丢弃
- 修复:12:09的消息能通过13:49的过滤器(差100分钟)
2. Task #1441: bot自身消息查库过滤
- 新增get_recent_bot_replies方法查询数据库
- 检查OCR读到的内容与数据库中bot回复重合率≥90%则丢弃
- 修复:bot回复的消息被OCR读到后直接回复用户的问题
3. Task #1442: 数据库时间戳混乱修复
- 修改record_bot_reply和record_user_message使用本地时间
- SQLite的CURRENT_TIMESTAMP返回UTC时间导致时间戳混乱
- 修复:部分消息created_at在凌晨但实际测试不在凌晨
同时包含Task #1436的链接文本清理修复
|
2026-08-07 14:09:29 +08:00 |
|
youpaishidifu
|
59505fdafd
|
修复知识库搜索两个bug:
1. 否定式查询惩罚: 查询'是否X'时不含核心名词section×0.3,在reranking后执行
2. 子串回退: token交集失败时用2-6字子串匹配(解决jieba碎片token问题)
|
2026-08-06 18:59:36 +08:00 |
|
youpaishidifu
|
0405e42a90
|
修复OCR回复牛头不对马嘴+残留消息+EasyOCR崩溃捕获+360误报
1. knowledge_base.py: 检索排序惩罚标题-only/短正文段,降低heading bonus,奖励正文命中,避免纯标题/免责声明段排第一
2. auto_reply.py: 动作类查询要求正文命中才放行;拒绝纯标题/免责声明答案
3. monitor.py: 调试截图改存%LOCALAPPDATA%/windowmsgbot/ocr_debug避开源码目录(360); 收紧残留消息fresh gate(600s硬门); 启动即崩溃/请求崩溃时读取easyocr_crash.log写入主日志
4. easyocr_worker.py: 加faulthandler+sys.excepthook全局捕获,崩溃traceback落盘%LOCALAPPDATA%/windowmsgbot/easyocr_crash.log
|
2026-08-01 21:21:05 +08:00 |
|
youpaishidifu
|
a076353ee4
|
修复三个问题:病句过滤、KB回复内容、截图保存日志
1. 病句过滤改进(monitor.py):
- ≤5字短句:必须包含疑问词(什么/怎么/如何/为什么/吗/呢等)才放行
- 无疑问词的短句直接过滤(如'自行修?')
- 5-50字病句:增加'过'字匹配(如'修正过后')
2. KB回复内容改进(auto_reply.py + knowledge_base.py):
- _get_answer 改为返回 body(纯正文),不含 heading
- KB搜索增加heading包含查询关键词的bonus
- 文档头部(# 文档名)增加penalty,避免返回错误section
3. 截图保存日志改进(monitor.py):
- QQ/微信截图保存失败日志从 debug 升级为 warning
- 增加保存路径提示,便于定位问题
|
2026-07-29 22:43:32 +08:00 |
|