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 |
|
youpaishidifu
|
503de361c5
|
修复KB搜索质量差+增加OCR病句过滤
1. 改进内容相关性检查:高匹配度(≥10.0)但无共同词时拒绝匹配
- 用户问PVP击杀播报,KB返回json格式说明(匹配度9.53)→ 拒绝
- 增加body内容检查,防止TF-IDF误匹配
2. 增加OCR病句过滤:
- 病句1:句子以动词结尾但缺少宾语(如'将其修正后重三')
- 病句2:句子以'三'结尾(OCR误读'试'为'三')
- 病句3:句子缺少主语且无标点
- 病句直接过滤,不触发查库
|
2026-07-29 22:11:08 +08:00 |
|
youpaishidifu
|
db64918761
|
改进内容相关性检查:增加body内容匹配,增强日志诊断
- _has_content_relevance 增加 content/body 检查,防止TF-IDF匹配到heading无关但body相关的section
- 增加 score 参数传递,用于日志记录
- 日志增加 doc_body 预览,便于诊断匹配失败原因
|
2026-07-29 21:56:14 +08:00 |
|
youpaishidifu
|
659f667d74
|
OCR过滤:加多/cmd指令列表碎片检测 + 内容相关性检查防偶然匹配
|
2026-07-29 15:29:42 +08:00 |
|
youpaishidifu
|
8894124b0a
|
fix(kb): section级搜索+意图排序+分词级匹配修复短查询与跨section排序
1. knowledge_base.py:
- 文档按 ## 标题切分为独立 section 后索引,每个 section 独立 TF-IDF
- 分词级匹配(避免"定义"子串匹配"自定义"的假阳性)
- 文档级优先排序:先按文档聚合,取最高 section 分决定最佳文档
- 定义类查询(版号/版本号/定义):自动降权无定义类 section 的文档
- 动作类查询(怎么/如何/用法):按优先级找"参数/指令/使用"→"方法"→"安装" heading
- 预计算 heading/body 分词集合,避免每次搜索重复 jieba
- 修复 SYNONYMS 重复 key
2. auto_reply.py:
- 精简答案提取:section 级搜索后 doc['content'] 即最相关片段
- 移除冗余的 _extract_relevant_snippet(重复 jieba 分词+section 切分)
3. monitor.py:
- 增加微信/QQ UI 噪声过滤(通讯录、发现、朋友圈等)
|
2026-07-27 14:17:51 +08:00 |
|
youpaishidifu
|
1441278082
|
fix(kb): 混合评分策略修复短查询匹配失败
TF-IDF 余弦相似度单独使用对短中文查询过于严格(3-5 个词 vs 数百个词的长文档)。
改为混合评分:0.4×TF-IDF + 0.6×关键词命中率,让短查询只要命中关键词就能返回结果。
同时降低 auto_reply_min_score 从 0.35→0.30,适配混合评分的数值范围。
|
2026-07-27 12:30:31 +08:00 |
|
youpaishidifu
|
8963a34b6a
|
修复OCR乱码+KB全文返回: 裁剪48%+&提前清理+全角:转换+纯时间戳过滤+KB回复限200字
1. cap_left 38%→48%(完全避开会话列表~30-55%)
38%仍捕获到左侧KB预览文字(问题1/2…)混入OCR
48%只捕获消息面板正文,KB预览不再出现
2. &清理移到时间戳分割前+全角:→半角:
原来&在分割后才清理,"13:5&07"无法被时间戳正则捕获
分割前清理→"13:5 07"可匹配时间戳→分割出独立段
全角:统一半角,后续正则只匹配半角
3. 时间戳段用\d{1,2}(允许单数字分钟)
分割后"07""15"等纯数字段被^[\d:\s]+$过滤
之前"13:5 07 14:2 15"整段因含空格,^\d{1,2}[::]\d{2}不匹配
4. auto_reply非Q&A文档回复限200字(之前500仍过多)
子串匹配触发的全文返回只回复前200字符
5. KB行级预览过滤移除(与用户消息混行时误杀)
段级别^问题\d+过滤器已足够,配合新裁剪基本不会触发
|
2026-07-26 16:37:41 +08:00 |
|
youpaishidifu
|
7bdc7ad637
|
修复2问题: KB误匹配+返回全文 / Ctrl+C无法停止
1. KB匹配与返回全文
- _poll中过滤纯时间/日期格式文本(OCR时间戳分割残留)->不入KB搜索
- knowledge_base.py子串fallback要求query>=4字符,避免"19:15"等短时间戳误匹配
- auto_reply._get_answer: 非Q&A文档只返回content前500字符,不返回整篇文件
- 时间戳文本不进入KB + 短query不子串匹配 + 非Q&A截取 = 三层兜底
2. Ctrl+C无法停止
- ThreadPoolExecutor创建非daemon线程->进程无法退出->必须杀CMD
改用daemon thread + Event.wait(timeout): daemon线程不阻塞进程退出
- main.py注册signal.signal(SIGINT) handler: 收到Ctrl+C后stop监控+quit窗口
- 移除from concurrent.futures导入,替换为import signal
|
2026-07-26 15:30:55 +08:00 |
|
youpaishidifu
|
e9d9551e3d
|
修复2个问题:退回裁剪+知识库只回复匹配句\n\n1. 裁剪退回c9acd7e版(cap_left=0.25)\n 0.35只截到时间戳,用户消息被切;0.25覆盖消息文字区域\n\n2. 知识库返回全文→只返回匹配问答段\n 原问题:名字.txt含2个Q&A,TF-IDF整文件匹配后返回全文\n 该方案:knowledge_base._parse_qa_segments解析文件为独立问答段\n 每段作为独立doc,auto_reply._get_answer优先返回doc.answer\n 用户问一句话,只回复对应答句,不塞全部内容
|
2026-07-26 13:38:04 +08:00 |
|
youpaishidifu
|
a0e54805fd
|
修复QQ读不出/读旧数据/auto-reply错发平台
问题1: QQ读不出消息 — daemon线程SetForegroundWindow频繁失败
-> _run_loop添加PeekMessage创建Windows消息队列
-> _attach_set_foreground内部异常全部捕获,不抛给调用者
问题2: QQ读旧剪贴板数据 — PostMessage键盘 Electron不响应
-> 移除前台跳过检查(降频已足够,20s一次不频繁)
-> _click_message_area PostMessage->SendMessage(Electron响应同步消息)
-> 移除_force_scroll_bottom(PostMessage对Electron无效)
问题3: WeChat消息错发给QQ — auto-reply daemon线程SetForegroundWindow失败
-> auto_reply.on_kb_match不再直接调用_paste_and_send
-> 改为get_reply_data返回{platform,answer,sender}给主线程
-> gui.py添加_reply_queue + _flush_reply_queue(主线程after轮询)
-> _execute_reply在主线程执行_search_contact和_paste_and_send
(SetForegroundWindow从主线程调用永远可靠)
|
2026-07-25 13:06:36 +08:00 |
|
youpaishidifu
|
7111f84a6d
|
添加自动回复功能: KB匹配命中后发答案回对应消息窗口
- monitor.py: 添加原始剪贴板存储 + _parse_last_sender提取发送者
+ _search_contact搜索框定位联系人 + _paste_and_send粘贴发送
- auto_reply.py(新): AutoReply编排类,含防重复/阈值过滤/线程锁
- gui.py: UI添加自动回复开关+阈值滑块,搜索命中回调触发回复
- config.py: 添加auto_reply_enabled/auto_reply_min_score配置项
|
2026-07-25 11:01:02 +08:00 |
|