Commit Graph
16 Commits
Author SHA1 Message Date
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 b55fff8cbb 修复2个bug: 急停后OCR残留 + 知识库奖励配置匹配错误
Bug1 - 急停(ESC×2)后Windows OCR仍在运行输出日志:
  _emergency_stop设_running=False+杀EasyOCR子进程,但Windows OCR
  (RecognizeAsync)是同步阻塞调用,无法被中断。OCR完成后_poll继续
  处理文本→触发回复。
  修复:_poll中在_read_messages返回后+文本过滤后各增加self._running
  检查,OCR完成或文本处理中如已急停则立即return,不再触发回复。

Bug2 - 用户问寻宝奖励配置,bot返回指令参数表格(匹配度15.38):
  知识库sdf1_game.md中'## 寻宝玩法介绍'命令表含'寻宝'高频词,
  TF-IDF得分远高于'## 奖励配置:'段。heading bonus仅2.0/词,
  不足以翻转15分的TF-IDF差距。
  修复:heading bonus从2.0/词提升至5.0/词;新增heading连续短语
  匹配bonus(+8.0),如查询含'奖励配置'且heading含'奖励配置'则
  大幅boost,确保语义匹配的section排到最前。
2026-07-30 13:49:58 +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 afbcd109f0 fix: poll first变量修复 + KB添加安装动词 + 绿色气泡OCR拦截\n\n1. Poll first变量修复: first=True初始化但循环体内从未设为False→\n 所有new_items都被当作第一条处理。加first=False只处理首条。\n2. KB action_verbs_all添加"安装": "云背包插件怎么安装"\n verb+obj提取安装+云背包插件→优先匹配"安装方法"section\n3. 绿色气泡OCR拦截三层:\n - OCR级: |管道符+CJK混合过滤(正常聊天从不混用|和中文)\n - Poll级: 同|管道符+CJK过滤兜底\n - _is_reply_fragment阈值降低: raw 8→6, CJK 6→5\n - OCR line filter阈值同步降低: raw 8→6, CJK 6→5\n 绿色气泡被OCR啃成"GU |进行配置..."的乱码现在pipe过滤\n 即可拦截或SequenceMatcher阈值降低后匹配replied_texts\n- 提交git.ypshidifu.cn 2026-07-29 12:42:23 +08:00
youpaishidifu 718f67804c 修复KB搜索3项:疑问词不当降权 + 文档聚合tiebreaker + section弱匹配不计入 2026-07-29 00:09:22 +08:00
youpaishidifu 4da415f9c5 修复KB匹配:action_verbs_all去掉怎么/如何等疑问词,避免sdf1_login含'怎么办'被惩罚更少反超beibao 2026-07-29 00:01:28 +08:00
youpaishidifu a093528888 修复2个问题:微信OCR hash碰撞(aHash→dHash+5秒强制刷新) + KB搜索动词+对象精准匹配防误召回 2026-07-28 22:28:29 +08:00
youpaishidifu 3a7a05f973 修:OCR全角括号md碎片导致KB死循环
问题:OCR将英文括号识别为全角(()形式,[官方下载](?https...
此类碎片漏过 _is_markdown_document 检测,进入KB匹配触发回复。

修复:
1. _is_markdown_document: 新增 ]( 和 [text]( 检测(全角括号md链接)
2. OCR行级过滤: 新增 ]( 碎片丢弃
3. _extract_user_text_from_md_fragment: 新增全角括号md标记分割
4. KB scoring: 短查询(≤3分词)降权,防碎片得分反超真实消息
2026-07-27 21:48:44 +08:00
youpaishidifu ec06e48926 修复:KB同义词(权力→权利) + 微信"关闭"按钮过滤(NFKC标准化+行尾跳过) 2026-07-27 15:36:14 +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 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 cb170d1160 修复知识库短查询不匹配+QQ消息抓不到
问题1: 你叫啥名字→分词["你","叫","啥","名字"]
  → len(t)>=2过滤只剩["名字"]→len(tokens)<=1直接返回空
  修复: 放宽过滤 len(tokens)<=1→len(tokens)==0且len>=2
  添加子串匹配回退: TF-IDF无结果时检查查询是否包含在文档中

问题2: QQ消息抓不到
  _read_via_clipboard 加重试机制(首次空自动重试1次)
  _read_win32_texts 降低文本长度过滤 4→2 字
  QQ路径加 _click_message_area 确保焦点在消息区
2026-07-25 13:56:09 +08:00
youpaishidifu c8c2f2ccc6 fix: 1)微信QQ统一优先读消息列表(当前对话) 2)知识库min_score=0.30+短文本过滤 2026-07-24 22:39:09 +08:00
youpaishidifu bdfc24a4c7 init: 消息问答助手 — 微信/QQ监控 + 本地知识库搜索 + GUI 2026-07-24 19:36:14 +08:00