youpaishidifu
59d0bb8a87
fix: knowledge_base.py 核心名词匹配使用未定义变量 full_text → full_text_check
...
- NameError: name 'full_text' is not defined at line 581
- 修复: 改为 full_text_check (heading_clean + body)
2026-08-09 21:16:00 +08:00
youpaishidifu
a3cc61bd7d
feat: 添加调试日志追踪KB匹配和OCR连续性问题
...
- gui.py: _search_and_log() 添加KB搜索输入/结果/相关性检查详细日志
- monitor.py: _has_user_colors() 添加像素检测初始化/统计/绿色检测日志
- monitor.py: QQ OCR路径添加截图信息日志
- 目的: 诊断牛头不对马嘴和连续消息OCR中断问题
2026-08-09 21:11:52 +08:00
youpaishidifu
417568f6fa
优化QQ像素检测:降低白色像素阈值(245→230)、增加采样密度(15→30)、放宽邻域要求;添加昵称剥离调试日志
2026-08-09 18:38:45 +08:00
youpaishidifu
1ea458dd51
fix: 放宽QQ像素检测阈值,修复群聊纯文本消息无法被捕捉的问题
2026-08-09 17:53:02 +08:00
youpaishidifu
3473913299
修复[监控]:昵称剥离主循环重构,彻底解决@提及残留
...
- 问题:草原探险服务器备用号被剥后,@游戏专用残留在消息开头,导致查库关键词被压住
- 根因:原设计@检测只在昵称循环前执行一次,昵称循环剥离前缀后暴露的@无法被二次检测
- 修复:重构为主循环结构,每轮按优先级检查(箭头→头衔→排名标记→@提及→裸昵称),
每轮开头清理前导标点,确保@检查在任何昵称剥离后仍能触发
- 新增:_rank_pattern剥离QQ排名标记(旅馆老板);未知@user按格式剥离
- 测试:13个用例全部通过,覆盖嵌套昵称+@+头衔+排名标记组合
2026-08-09 17:41:12 +08:00
youpaishidifu
cdfa44ae07
修复[监控]:增强QQ昵称剥离和UI元素识别
...
- 问题:用户消息被回复不相关内容,昵称剥离未处理@提及格式
- 根因:_strip_qq_nickname函数未处理@前缀,_is_qq_ui_element仅匹配格式
- 修复:1. _strip_qq_nickname新增@提及处理逻辑,剥离@昵称部分;2. _is_qq_ui_element新增独立@username行识别
- 测试:验证@游戏专用在哪儿能下载登录插件?正确剥离为在哪儿能下载登录插件?
2026-08-09 16:58:30 +08:00
youpaishidifu
3cd760699d
feat: QQ昵称剥离功能增强,支持【头衔】用户名格式
...
- 新增QQ群头衔+用户名格式剥离:【头衔】用户名 或 [头衔] 用户名
- 处理OCR将【识别为[、】识别为]的情况
- 保持原有纯文本昵称剥离功能
- 测试用例全部通过
2026-08-09 16:34:54 +08:00
youpaishidifu
eef12a2694
修复QQ系统消息时间戳污染问题
...
1. 添加QQ系统消息过滤规则:邀请加入、退出、撤回等
2. 时间戳分割时跳过系统消息,防止旧时间戳继承到后续真实消息
3. QQ系统消息不更新继承时间戳,防止旧时间戳污染
2026-08-09 16:05:45 +08:00
youpaishidifu
9682ba4112
fix: 修复bot回复一次后不再回复——filter4误杀混合消息
...
- 新增_strip_bot_reply_fragments:在_process_ocr_output的filter4(回复残片)判定前,
先剥离OCR拼接到一起的bot旧回复片段,保留用户真实提问(OCR噪声鲁棒:归一化标点/空格)
- 修复根因:bot回复后,后续截图把'用户新消息+bot旧回复'拼成一行,filter4检测到bot旧
回复文本即把整段(含用户新消息)误判为残片丢弃,导致bot永远不再回复
- _is_reply_fragment改分数阈值:原Latin>=6/CJK>=5过于敏感,用户昵称含'Minecraft'或
问句含服务器名'草原探险服务器'即被误杀;改为需公共子串>=15或(>=8且占较短文本>=60%),
仅当文本'大部分'是bot回复时才判为残片,保留正常用户问句
- 同步修复_group聊天慢于私聊:消息不再被误杀→不再陷入同帧反复OCR死循环,回复延迟回归15~20s
2026-08-09 14:20:36 +08:00
youpaishidifu
9c16d6da0d
fix: 像素检测失败不再设_ocr_unchanged,防止消息永久不入库
...
- QQ/微信像素检测失败时移除 _ocr_unchanged=True
- 像素检测失败≠截图没变化,不应阻止fallback路径
- 修复bot回复后用户新消息永远无法入库的问题
2026-08-09 12:29:52 +08:00
youpaishidifu
1b899b9219
Task #1476 : QQ群聊非消息文本过滤 - 图片引用剥离/表情包碎片检测/UI元素跳过
...
行切割阶段增加3层过滤:
1. 行内图片引用清理: !0(img/xxx.png) 剥离后保留用户消息
2. 表情包文字碎片: CJK<=6且分隔符>=2判定为贴纸OCR残留
3. QQ UI元素跳过: 【头衔】Username / ## @标签 / )username / 纯图片后缀
新增_is_qq_ui_element()静态方法检测5种QQ特有非消息模式。
2026-08-09 10:58:54 +08:00
youpaishidifu
cf59ff4c4d
fix: md行跳过改为单行模式,移除块延续避免误杀用户消息
2026-08-09 01:50:13 +08:00
youpaishidifu
d54fbe493f
fix: 群聊消息被混合乱码检测器误杀导致不回复
2026-08-09 01:21:40 +08:00
youpaishidifu
17f071471f
修复EasyOCR超时和内存泄漏问题
2026-08-09 01:07:23 +08:00
youpaishidifu
87c78dd1e0
fix: OCR文本尾巴垃圾清理,句子结束标点后截断未闭合括号/逗号+短碎片
2026-08-09 00:47:18 +08:00
youpaishidifu
a40be1eccb
fix: 两个消息过滤问题修复
...
1. 添加QQ的'正在加载页面,请稍后'到UI黑名单
2. 无时间戳消息统一放行交给DB查重处理
- 避免连续聊天时时间戳被覆盖误杀用户消息
- 无论消息长短,只要包含中文字符且非噪声,都放行
- DB查重会自动过滤掉已经回复过的消息
2026-08-09 00:23:58 +08:00
youpaishidifu
d793d1c992
fix: 增强噪声压制 - 检测混合文字乱码(Latin+CJK交错)
...
- 在_is_noise_text中新增混合文字乱码检测
- 检测Latin大写字母被CJK分割成多个不连续块的模式
- 如'HHWH尸端自哪内柙登录槟J!'这类OCR垃圾现在会被过滤
- 修复unicode_radicals.md末尾格式错误(缺少补充字符列)
- 从git追踪中移除easyocr_worker_state.json(运行时状态文件)
2026-08-08 22:50:05 +08:00
youpaishidifu
09ea05fc79
fix: EasyOCR启动异常+超时保护+消息搅和隔离
...
1. 修复负冷却时间bug:启动失败时若未设置冷却,现在设置30s冷却
2. EasyOCR worker添加超时保护:readtext()使用concurrent.futures包装,30s超时
3. Windows OCR消息搅和隔离:EasyOCR超时+Windows OCR多时间戳→返回空结果
4. 添加easyocr_worker_state.json到.gitignore
2026-08-08 22:14:02 +08:00
youpaishidifu
c300a1fd18
chore: 添加easyocr_worker_state.json到.gitignore
...
- 状态文件不应提交到仓库
- 避免每次运行时的无意义提交
2026-08-08 20:46:11 +08:00
youpaishidifu
2ac422235b
security: 增强代码签名脚本安全选项
...
- 添加签名描述:WindowMsgBot
- 添加签名URL:https://github.com/ypshidifu/windowmsgbot
- 添加详细输出选项(/v)
- 使用更安全的签名选项
2026-08-08 20:45:42 +08:00
youpaishidifu
86edb4577d
security: 延长自签名证书有效期至10年,添加完整证书信息
...
- 证书有效期从5年延长至10年
- 添加完整证书信息:组织、部门、邮箱
- 增加证书可信度
2026-08-08 20:45:05 +08:00
youpaishidifu
e88a2ec49c
fix: 加强用户协议内容过滤和停止信号优先级
...
- 修复_is_noise_text函数:改用re.search替代re.match,新增_AGREEMENT_KEYWORDS多关键词检测
- 短文本(<80字)中匹配>=2个协议特征词才拦截,提高准确率
- 加强停止信号优先级:在OCR处理各阶段添加_running检查点
- 预分割后、stage splitting循环内、逐行过滤前均检查_running
- OCR返回后立即检查_running,确保急停/手动停止响应时间≤单行处理时间
2026-08-08 20:44:30 +08:00
youpaishidifu
cbc4a9266a
fix: 知识库搜索返回不相干结果
...
1. DOC_TOPIC_TOKENS添加php映射,修复'PHP登录模式'查询不匹配php.md
2. parent-child逻辑增加条件2:parent body是表格+任何child heading含查询词
3. heading token计算改用heading_no_links,防止链接文字误匹配
4. 查询含'登录插件'时,protect文档降权从0.5改为0.2
5. 新增php登录模式查询boost:php文档section额外x10加分
6. 新增下载意图优先:查询含'下载'时优先返回heading含下载的section
2026-08-08 18:30:02 +08:00
youpaishidifu
bc59f0f5ab
@
...
fix: 牛头不对马嘴 + 时间戳过滤强化
问题1 - 牛头不对马嘴:
OCR截屏同时捕获聊天窗口+用户协议文档,协议中的正式法律用语
("玩家应尊重他人的合法权益")被误当成用户消息触发自动回复。
修复: _is_noise_text新增用户协议/服务条款文档内容检测:
- "玩家/用户 应/必须/须/不得 + 尊重/遵守/履行..."
- "运营方/服务提供方 + 有权/有义务/保留"
- "本协议/条款/规定"开头
- 同时含"权利"+"义务"的陈述句(排除疑问句)
问题2 - 时间戳过滤强化:
10:59的消息在12:22仍被处理。非过去日期路径所有时间戳>300s时
仍返回True("放行给DB去重"),导致历史消息重新处理。
修复: _ocr_text_has_fresh_timestamp非过去日期路径改为严格5分钟窗口:
所有时间戳>300s → return False(丢弃),不再放行给DB去重。
@
2026-08-08 12:33:41 +08:00
youpaishidifu
2a2161820f
修复启动卡顿:线程分批启动避免GIL竞争+病句过滤增强
2026-08-08 10:33:48 +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
5c4a17043a
fix: 修复两个OCR问题
...
1. 修复_clean_ocr_prefix误删登录关键词导致答非所问
- 噪声前缀后必须跟标点/空格或字符串结束,不能紧跟中文字符
- 登录插件,哪里可以下载到?不再被清理为插件,哪里可以下载到?
2. 修复EasyOCR静默原生崩溃检测
- 父进程:空stderr+空crash log也计入CUDA崩溃计数,2次后强制CPU
- Worker:添加CUDA驱动DLL预检,加载失败时强制CPU模式
2026-08-07 14:50:29 +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
ad091561fe
修复3个OCR过滤问题:
...
1. 时间戳过滤误判:昨天前缀剥离后裸时间戳被当未来时间拦截,添加skip_future_check传递
2. 纯时间戳触发查库:_on_new_message入口检查中文字符,无中文跳过查库
3. 偏旁库补全:添加U+4E28(丨),启用U+4E3F(丿)过滤
2026-08-07 12:43:36 +08:00
youpaishidifu
4635e2c366
修复OCR混合消息导致知识库答非所问:新增反向包含剥离逻辑
...
问题:OCR截屏把用户新消息和bot旧回复拼成一行,如
登录插件在哪下载?,从未注册过草原,使用全新的邮箱
原剥离逻辑(r in ts)因OCR截断导致精确子串匹配失效,
混合文本传入知识库搜索匹配到invite.md的新用户定义而非正确文档。
修复:在poll过滤阶段新增反向包含剥离——将消息按逗号分段,
检查每段是否为已知bot回复(r)的子串,剥离匹配的bot片段,
保留用户真正提问部分。支持中文逗号和ASCII逗号分隔。
2026-08-07 11:26:39 +08:00
youpaishidifu
87c0bd9f62
fix: 修复时间戳提问豁免无上限+知识库链接文字误匹配
...
Bug1: 提问豁免(_is_question_message)让继承极老时间戳的消息绕过过滤,
如22:07的消息在次日10:43仍通过stage splitting放行。
修复:给提问豁免加24h硬上限,继承时间戳>24h不再豁免。
Bug2: protect.md heading含[sdf1_login登录插件](...)链接,
heading_no_link_text保留链接文字,导致phrase_in_text匹配触发5x加分。
修复:新增full_text_phrase(移除整个链接含文字),
所有短语匹配改为用full_text_phrase,链接文字不再参与评分。
2026-08-07 10:54:47 +08:00
youpaishidifu
9944d74798
fix(easyocr): 顶层崩溃全程留痕,消除"一声不吭"结束进程
...
- easyocr_worker.py: 新增 worker 状态文件 easyocr_worker_state.json
(pid/mode/status/last_img_len/ts/error),就绪/忙碌/空闲实时落盘;
强化 sys.excepthook / _flush_exit / _signal_handler 崩溃写状态+crash.log
- monitor.py: _kill_easyocr_proc 杀前诊断三路
(状态文件 + 残留stderr + crash.log尾),以 warning 汇总进主日志;
_read_easyocr_crash_tail 新增 ignore_age 跳过60s时间窗用于诊断路径
- unicode_radicals.md: 丿(U+4E3F)行改 - 不参与偏旁过滤,修复OCR碎片误杀儿下载等
2026-08-06 22:55:29 +08:00
youpaishidifu
3df59c53ad
修复时间戳过期过滤器和hash跳过逻辑
...
1. 时间戳过期过滤器:移除无条件放行逻辑,时间戳过期超过600s的消息必须丢弃
- 原逻辑:只要块内有中文消息内容就放行,导致过期消息仍被批准
- 新逻辑:时间戳过期超过600s且无新鲜特征的消息直接丢弃
2. hash跳过逻辑:消息必须已被回复才能跳过
- 原逻辑:只要上一帧已入队就跳过,导致消息从未处理过但hash相同时被静默跳过
- 新逻辑:必须确认消息已被回复(_last_hash_replied),才能跳过
- 新增_last_hash_replied标志跟踪消息是否已被回复
2026-08-06 21:19:35 +08:00
youpaishidifu
1c16970871
修复知识库搜索答非所问:heading链接文本误触发短语匹配
...
- 问题:查询"登录插件在哪儿下载?"返回protect文档的"操作方式|是否支持"表格
- 根因:heading_clean保留链接文本(如[sdf1_login登录插件]),导致phrase_in_text误判为True,避免惩罚
- 修复:phrase_in_text检查改用full_text_clean(排除链接文本),确保精确短语匹配准确
- 效果:protect文档因链接文本误匹配的惩罚避免被纠正,sdf1_login文档应优先返回
2026-08-06 20:48:16 +08:00
youpaishidifu
ef422ef776
修复急停冻结/消息hash跳过/正常调度冷却误触三处问题
...
1. 急停冻结: gui.py 将 monitor.stop() 移到后台线程执行,避免 terminate+wait 阻塞 GUI 主线程 6~8s 触发 Windows 冻结弹窗;窗口关闭同样后台 stop。
2. 消息丢失: 仅当上一帧 OCR 已成功入队才允许相同 hash 帧跳过;新增 _is_question_message 提问豁免,使继承极老时间戳的明确提问(如'资源包是强制的,还是可选的?')不再被误判为远古历史永久丢弃。
3. 正常调度冷却: 正常资源释放(每N次调用杀进程)清除残留 30s 冷却并重置失败计数器;正常重启握手阶段的初始化超时/崩溃/协议/握手错误不再施加 30s 冷静期,交由系统自行调度启停。
2026-08-06 20:32:50 +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
f84ea56311
修复知识库搜索粒度:parent section是表格时优先返回child sections
...
- 添加_build_parent_child_map方法构建section层级关系
- 当parent section有heading命中但body是表格时,优先返回child sections
- 最终结果按分数排序确保最高分排第一
- 修复'安装说明'查询返回插件表格而非下载链接的问题
2026-08-06 17:17:20 +08:00
youpaishidifu
1291a402de
修复三个问题:消息搅和打包、QQ系统消息过滤、OCR噪声残片过滤
...
1. 消息搅和打包修复(#1414):
- 将'同poll多条取最后'逻辑改为遍历处理所有消息
- 每条消息独立处理,不再丢弃旧消息
- 基线轮只处理一次,后续消息正常处理
2. QQ系统消息残片过滤(#1415):
- 添加'你撤回了, 条消息'模式匹配
- 添加'撤回了一条消息'模式匹配
- 在_is_system_message函数中实现
3. OCR噪声残片过滤:
- 添加'留, C'等逗号+字母组合噪声模式
- 添加纯逗号+字母噪声模式
- 在_is_noise_text函数中实现
2026-08-06 16:56:28 +08:00
youpaishidifu
4c044c6e7c
fix: 时间戳过滤器1漏消息——疑问句特征正则过严
...
_looks_fresh_content 原正则 (疑问词)\s*[??] 只匹配空白不匹配汉字,
导致'如何配置的?'/'在哪可以下载?'等正常疑问句(疑问词与问号间隔文字)匹配失败,
整块OCR文本被静默丢弃('登录插件在哪可以下载?'丢失)。
修复:
1. _looks_fresh_content 改为允许疑问词与问号间 ≤30 字非句末标点(同句内)
2. 最新时间戳≤600s 分支增加 _block_has_cjk_message 兜底放行,与硬截止分支一致
经诊断脚本复现确认:修复前返回False(丢弃),修复后返回True(放行)
2026-08-06 16:34:24 +08:00
youpaishidifu
41436cbe27
fix: 进程名正则空备选项导致所有文本被误杀
...
墨刀|) → 墨刀),去掉多余的|形成空备选项
此前^(?:...|墨刀|)匹配所有文本(空字符串开头=任何文本)
2026-08-06 16:12:00 +08:00
youpaishidifu
1169487dda
fix: EasyOCR崩溃日志残留+锁竞争误杀
...
1. 新增_truncate_easyocr_crash_log():worker成功启动后截断崩溃日志,清除旧条目防止混淆用户
2. 锁竞争超时(15s)不再计入consecutive_failures:worker在忙处理大图是正常行为,不触发杀进程
3. 锁超时仅重置call_count防止'正常释放'误触发
2026-08-06 16:02:33 +08:00
youpaishidifu
88593898be
强化EasyOCR超时计数:锁竞争超时/内层超时/外层超时/BrokenPipe均计入consecutive_failures+重置call_count,防'3次超时却正常释放'误触发
2026-08-06 14:28:33 +08:00
youpaishidifu
37ce6a0916
修复消息静默丢失+微信唤醒不稳定:_is_noise_text进程名正则缺失闭合括号导致异常返回空列表(QQ/微信均受影响);_ensure_foreground增加keybd_event骗取前台权限+SetWindowPos强置顶兜底
2026-08-06 10:43:21 +08:00
youpaishidifu
8575b5141b
修复语法错误:内存检查逻辑移回try块内,修复空行缩进问题
2026-08-06 10:03:50 +08:00
youpaishidifu
4ef261bfe7
修复语法错误:内存检查逻辑移回try块内
2026-08-06 09:54:15 +08:00
youpaishidifu
53175f57eb
修复EasyOCR三个问题:正常调度误判、内存检测误判、消息hash漏消息
2026-08-05 23:20:00 +08:00
youpaishidifu
4418a46460
修复三个问题:时间戳过滤放宽、系统进程名过滤、EasyOCR CUDA崩溃修复
...
1. 放宽时间戳过滤:窗口30s→60s,消息长度4字→20字,包含中文即放行
2. 添加系统进程名过滤:200+个Windows/第三方进程名模式,防止混入OCR文本
3. EasyOCR崩溃修复:检测内存不足时设置CUDA_VISIBLE_DEVICES=''禁用CUDA,避免import torch加载CUDA库导致崩溃
2026-08-05 21:57:53 +08:00
youpaishidifu
f50eeb28da
fix: 消除 sklearn TfidfVectorizer token_pattern 警告
2026-08-05 21:23:22 +08:00
youpaishidifu
5d9214526b
fix: Bug F 修复回复混合和缺失步骤问题
...
- 修改guide query合并逻辑,按parent guide分组sections
- 根据查询关键词选择最相关的guide(url/图床→非正版guide,正版/官网→正版guide)
- 避免混合不同guide的内容,确保第一步不被遗漏
- 测试验证:url查询返回URL操作方式,官网查询返回正版玩家操作方式
2026-08-05 20:14:23 +08:00
youpaishidifu
fd5d2ee73a
修复内存泄漏和回复截断问题
...
1. 内存泄漏修复(Bug D):
- 在 easyocr_worker.py 中添加 GPU 清理函数和信号处理器
- 在 monitor.py 中创建 _kill_easyocr_proc() 辅助方法
- 使用 terminate→wait→kill→gc.collect() 安全终止序列替换所有直接 kill()
- 确保 CUDA 上下文在子进程退出时正确清理
2. 回复截断修复(Bug E):
- 在 knowledge_base.py 的 search() 方法中检测指南类查询
- 对于步骤类查询(如何/怎么/教程等),合并同一文档的所有步骤 section
- 确保用户获得完整的操作指南而非单个步骤
2026-08-05 17:56:07 +08:00
youpaishidifu
5b20037052
fix: 修复提交量阈值过严导致CUDA误拒绝(Bug C)
...
- 提交量检查从绝对阈值(物理内存×1.5)改为百分比阈值(提交量/总量>90%)
- 页面文件百分比阈值从85%提高到95%
- 解决系统有大页面文件时提交量被误判为过高的问题
2026-08-05 15:49:17 +08:00
youpaishidifu
4aeb03d869
fix: 内存误判(psutil→GlobalMemoryStatusEx) + 时间戳硬截止(>30min丢弃)
...
- easyocr_worker.py: 删除psutil物理内存检查,统一使用GlobalMemoryStatusEx
(Windows上psutil可比Task Manager少报~1.7GB,导致4.2GB可用误判为2.5GB)
- monitor.py: _ocr_text_has_fresh_timestamp()加硬截止——最新时间戳>1800s(30min)
无论是否含CJK均丢弃,修复15:09看到13:34消息(90min前)被误回复
- 新增_timestamp_age_seconds()辅助方法
2026-08-05 15:25:33 +08:00
youpaishidifu
d8c0e62a2d
修复跨平台答案混用: 表格优先策略必须检查heading语义相关性
...
- 表格优先策略: 不再盲目优先含'操作'的表格, 只优先heading与查询有交集的表格
- 表格兜底策略: 同上, 只兜底与查询语义相关的操作/支持表格
- 表格内容奖励: 同上, 3.0x加权只给与查询相关的表格
- 根因: '操作方式'表(交互模式)含'操作'被盲目优先, 覆盖了'权限级别'表
- 测试: '权限级别'→权限级别表格(20.51), '操作方式'→操作方式表格(49.54)
2026-08-05 15:01:00 +08:00
youpaishidifu
49a95fb808
修复commit charge阈值判断和OCR乱码字符检测
2026-08-05 14:47:44 +08:00
youpaishidifu
cd2e1f5e36
fix: .gitignore 补全无下划线前缀的调试/测试脚本规则 - 曾有 debug_kb.py/test_kb.py 因命名绕过 _debug_*/_test_* 规则待被误入库
2026-08-05 14:30:50 +08:00
youpaishidifu
a181c18c79
移除不应入库的文件:数据库、调试脚本、测试脚本;更新.gitignore
2026-08-05 13:36:57 +08:00
youpaishidifu
4d7017be6a
修复知识库搜索:表格内容不再被切分,表格section优先返回
...
- knowledge_base.py: _split_body_by_list_items检测表格区域,不切分表格行
- knowledge_base.py: 添加独立表格section,确保表格内容可被搜索匹配
- knowledge_base.py: 表格兜底策略:最佳文档含操作/支持表格时强制加入并置顶
- knowledge_base.py: reranking后无条件优先返回含操作/支持的表格section
- .gitignore: 添加msg_history.db和诊断脚本到忽略列表
2026-08-05 13:22:27 +08:00
youpaishidifu
271ea21489
fix: 偏旁过滤失效 - Unicode列改为真实码点+常用字同形写-防误杀 (windowmsgbot)
2026-08-05 10:43:26 +08:00
youpaishidifu
3bae125392
修复漏消息:gate整块丢弃+行合并黏时间戳+stage尾部连坐 (windowmsgbot)
...
- 新增 _block_has_cjk_message:整屏时间戳全过期但含中文消息内容时放行给下游去重
- gate 两个全过期分支改为含中文消息内容即放行,不再整块丢弃连坐新消息
- stage splitting 中段/尾部不再按继承旧时间戳丢弃,仅>2h且非新鲜才丢远古历史
- 行合并增加 _TS_START 正则,禁止独立时间戳行被黏进消息
- 新增 _normalize_timestamps 规整 OCR 逐字空格/全角冒号时间戳,修复孤儿空格导致漏消息
- 内存泄漏修复保持不动(锁超时/句柄释放/启动失败计数/双重内存预检/看门狗)
2026-08-04 21:31:35 +08:00
youpaishidifu
7d3c73a3bf
fix: OCR噪声检测 - 用户消息与bot回复相似度≥90%时跳过
...
问题:OCR把bot回复内容误识别为用户消息,导致重复回复
根因:EasyOCR读取屏幕时,把右侧bot回复区域的文本也读取为用户消息
修复:
- 新增_last_bot_reply_content变量存储最近bot回复内容
- record_bot_reply方法更新该变量
- 消息处理前检查相似度,≥90%则跳过
- 添加SequenceMatcher导入
2026-08-04 15:44:25 +08:00
youpaishidifu
7e6d105b73
fix: EasyOCR超时也计入连续失败计数 - 防止超时跳过绕过杀进程逻辑
...
问题:连续3次EasyOCR超时未触发杀进程,因为'超时跳过'日志未增加失败计数器
根因:只在_q.get()返回None时增加计数器,线程超时is_alive()检查未增加计数器
修复:EasyOCR线程超时时也增加_easyocr_consecutive_failures,达到阈值触发杀进程
2026-08-04 15:27:06 +08:00
youpaishidifu
33848de623
fix: 修复cleaned_item未定义错误 - 调整清理顺序
...
问题:QQ轮询时cleaned_item变量未定义
根因:OCR清理函数调用顺序错误,在使用变量后才定义变量
修复:将cleaned_item = self._clean_ocr_prefix(item)移到使用前
2026-08-04 15:14:40 +08:00
youpaishidifu
597ed7d2fd
fix: 微信窗口被覆盖时无法唤醒 - 保留PID快速EnumWindows + 冷却缩短到10s
...
问题根因:
1. UIA (auto.WindowControl) 在窗口被其他程序覆盖时搜索不稳定
2. 缓存HWND验证失败时,PID也被清空,导致每次都要从psutil全进程扫描重新找PID
3. 搜索失败后30s冷却太长
修复:
- 仅清HWND,保留PID供后续EnumWindows快速复用(毫秒级,跳过psutil扫描)
- 新增PID快速路径:验证失败后先用缓存PID直接EnumWindows,再走UIA和psutil兜底
- 冷却时间从30s缩短到10s,加快恢复轮询
2026-08-04 14:03:19 +08:00
youpaishidifu
a3b0e35581
fix: EasyOCR内存不足时强制CPU模式,避免CUDA加载导致系统冻结
...
- monitor.py: 内存阈值从2GB提高到3GB,CUDA加载torch需要大量内存
- easyocr_worker.py: 新增物理内存预检(3GB阈值),不足时强制CPU模式
- easyocr_worker.py: _init_reader()再次检查物理内存,双重保障
- 改进错误日志:记录内存详细信息(总量、使用率)
- 解决:内存不足时仍加载CUDA导致电脑冻结的问题
2026-08-04 12:18:54 +08:00
youpaishidifu
7d8d39f7b6
fix: 修复OCR日期提取错误导致时间戳误判为未来的问题
...
- OCR常把日期和时间连在一起:2026/8/319:45:20 → 匹配到2026/8/31(未来/非法)
- 改进日期解析:从d向下截断,找到第一个合法且≤今天的日期
- 处理:2026/8/31(未来8月31日)→ 2026/8/3(过去8月3日)
- 处理:2026/8/32(非法日期)→ 2026/8/3(过去8月3日)
- 这样has_past_date=True,时间戳19:44/21:13等不会被误判为未来时间
2026-08-04 09:47:57 +08:00
youpaishidifu
161d2dd95b
修复基线抑制后截图 hash 导致消息被跳过的问题:
...
- 基线抑制时清除截图 hash(_last_screenshot_hash.pop)
- 防止下次轮询时 hash 相同直接跳过 OCR,导致消息永远等不到回复
- 更新注释:从'三项关键处置'改为'四项关键处置'
2026-08-03 23:07:01 +08:00
youpaishidifu
d6691f6037
修复 EasyOCR 连续启动失败不触发重启的问题:
...
- 新增 _easyocr_consecutive_startup_failures 计数器,跟踪子进程无法启动的次数
- 当连续3次启动失败时,清除冷却时间并重置状态,强制重试启动
- 前2次保留冷却(预留初始化时间),第3次强制清除冷却
- 在所有重置 _easyocr_consecutive_failures 的地方同步重置启动失败计数
- 解决 EasyOCR 全程未启动但从未触发杀进程重启的问题
2026-08-03 22:34:22 +08:00
youpaishidifu
795a245de7
修复两个bug:
...
1. 问题3:OCR逗号断行 - 在_process_ocr_output中添加连续行合并逻辑,防止EasyOCR将中文逗号视为行边界导致消息前半段丢失
2. 问题4:回复重试逻辑失效 - 为_paste_and_send添加force_retry参数,_execute_reply重试时跳过60秒冷却检查,实现真正的5秒间隔重试机制
2026-08-03 21:31:14 +08:00
youpaishidifu
d87e482e1e
修复微信端知识库答非所问 + QQ OCR 漏消息(双 bug 修复)
...
knowledge_base.py(问题2:微信端答非所问):
- 文档级标题语义匹配改为 token 级(原仅字面子串匹配),OCR 丢失"php"只剩"管理员端默认"也能正确命中 phpadmin
- 新增"管理员+默认"组合强偏好:无"领地"时 phpadmin ×3.0、protect ×0.4,避免退化查询误选 protect/全局配置
- section 级重排新增 bonus +30:查询含"管理员+默认"时,偏好正文真正含"密码/登录/ypshidifu"的 section,压过"## 目录"目录项
monitor.py(问题1 + 问题2 上游):
- 新增 _split_and_denoise_segments:按消息边界预分割 + 分段噪声隔离,修复 Windows OCR 大杂烩把用户消息当噪声整段丢弃(QQ 漏消息)
- 候选行剥离 bot 自身旧回复文本:OCR 把用户新提问与屏上 bot 旧回复拼成一行时,先剥离旧回复再走过滤,消除答非所问的上游拼接根因
测试:新增 debug_kb.py 复现退化查询、test_kb.py 回归;跨主题回归全部正确,py_compile 通过
2026-08-03 20:52:08 +08:00
youpaishidifu
8ed93382e0
修复两个bug:1. EasyOCR线程崩溃(_OCR_TIMEOUT未定义) 2. 知识库搜索优化(核心名词匹配奖励+文档标题语义匹配)
2026-08-03 18:17:43 +08:00
youpaishidifu
47996cd1b8
微信窗口验证修复:支持国内版weixin.exe进程名
2026-08-03 17:44:43 +08:00
youpaishidifu
f95a711c8c
搜索结果显示增强,展示更多匹配详情
2026-08-03 17:32:18 +08:00
youpaishidifu
c51a585bb9
微信窗口验证增强日志,诊断窗口无效原因
2026-08-03 17:32:04 +08:00
youpaishidifu
c3a210efef
知识库搜索优化:列表项二次切分,提升细粒度匹配精度
2026-08-03 17:31:45 +08:00
youpaishidifu
24036ecab9
fix: indentation error in _is_white_bubble_pixel decorator
2026-08-03 16:48:24 +08:00
youpaishidifu
c6c8cc0571
@
...
fix: 微信颜色检测放宽+KB精确匹配+自动回复重试
1. monitor.py - 微信白色气泡检测阈值放宽(>=245->>=240, >=3->>=2)
适配新版微信UI颜色变化,减少漏检
2. knowledge_base.py - 精确短语匹配(5x加分)+子串匹配(2.5x/1.5x)
防止查询被不相关文档抢走高分
3. gui.py - 自动回复发送失败重试(3次/5秒间隔)
连续失败退避本轮,避免反复抢焦点
4. .gitignore - 补充build目录下的证书/构建产物
@
2026-08-03 16:42:21 +08:00
youpaishidifu and WorkBuddy
708bcbf315
fix: 微信截图调试诊断 - 调试截图提前保存+PrintWindow失败回退
...
- 调试截图保存提前到所有检查之前(之前在size check之后,太小的图不保存)
- PrintWindow结果太小(<50px)时自动回退到屏幕截图
- 添加详细诊断日志(唤醒结果、可见性、前台状态、截图尺寸)
- QQ截图同样优化(PrintWindow太小回退+调试截图提前保存)
根因:微信PrintWindow返回None或空白图时,代码直接return[]不保存任何调试图片
导致用户看到截屏文件夹空白但日志说继续截图
Co-Authored-By: WorkBuddy <noreply@workbuddy.ai >
2026-08-03 16:13:23 +08:00
youpaishidifu
99e2a1cfe7
fix: 两个问题修复
...
1. QQ截图路径空值导致[Errno 2]错误 - 添加时间戳生成路径
2. 窗口被遮挡时使用PrintWindow API截取内容
- 新增_screenshot_window函数使用PrintWindow API
- QQ和微信截图逻辑:当窗口不在前台时尝试PrintWindow
- PrintWindow失败时回退到屏幕截图
2026-08-03 15:42:36 +08:00
youpaishidifu
2162a49068
fix: 昨天的时间戳不再被误判为今天未来的21:14
...
- 在_ocr_text_has_fresh_timestamp中提取日期信息(如2026/8/2)
- 如果日期是过去的(昨天或更早),跳过未来时间戳拦截
- 修改_is_timestamp_old函数,添加skip_future_check参数
- 解决问题:OCR文本包含2026/8/2 21:14:38,被误判为今天未来的21:14
2026-08-03 15:20:28 +08:00
youpaishidifu
b07fc75d99
@
...
fix: window activation bug - verify PID before using cached HWND
Root cause: _ensure_hwnd cached HWND without verifying the owning process.
When target app exits, OS reuses HWND value for another process, causing
activation of wrong window (e.g. browser/editor disguised as QQ/WeChat).
Changes:
- Add _validate_wechat_window() to verify process name == WeChat.exe
- _ensure_hwnd cache hit: verify HWND belongs to target process via PID
- TXGuiFoundation fallback: verify PID belongs to QQ.exe/TIM.exe
- _find_qq_window_fresh: same PID verification for TXGuiFoundation
- _ocr_read_wechat: validate window before OCR capture
- Raise min window size threshold from 200x100 to 300x200 everywhere
@
2026-08-03 14:47:23 +08:00
youpaishidifu
eb5a260534
build.bat: default skip cert+sign, fixed arg parsing for PowerShell
2026-08-03 12:48:39 +08:00
youpaishidifu
a9b853ec0a
sign.bat: replace all Chinese with pure ASCII to fix GBK encoding issue
2026-08-03 12:39:35 +08:00
youpaishidifu
1814f42d0e
build.bat: fix cmd variable expansion - PYINSTALLER var caused whole string to be treated as single command
2026-08-03 12:30:57 +08:00
youpaishidifu
00235dd0b6
build脚本GBK编码+参数解析修复(去除所有前缀后匹配)
2026-08-03 11:13:36 +08:00
youpaishidifu
686aae7e53
build.bat参数解析兼容PowerShell+gitignore修正保留构建脚本
2026-08-03 11:03:57 +08:00
youpaishidifu
fa67eb407e
@
...
修复3个问题:
1. EasyOCR OOM降级CPU+重启恢复重检内存:_init_easyocr和_ensure_easyocr_subprocess添加内存检测,<2GB强制CPU;start()添加full_restart参数,用户手动启用时重置OOM计数重新评估GPU/CPU
2. PyInstaller exe闪退:spec入口改main.py,main.py添加EASYOCR_WORKER环境变量检测跳转worker逻辑;build.bat只清理build/build和dist不删spec/hooks
3. QQ OCR _processed_path未定义:补充ts和_processed_path变量定义
@
2026-08-03 10:12:07 +08:00
youpaishidifu
30106571d7
修复4个问题:KB未回复诊断日志、微信唤醒bug、exe打包、截屏分目录
...
1. KB搜索命中但未回复:增加诊断日志记录每个检查步骤的失败原因
2. 微信窗口唤醒bug:增加Win32 API进程枚举兜底+可见窗口直接截图(不要求置前)
3. PyInstaller打包修复:自定义hook-torch.py避免isolated子进程access violation,
改用onedir模式+CUDA_VISIBLE_DEVICES=""环境变量
4. OCR截屏分平台存放:img/raw/qq/ img/raw/wechat/ img/processed/qq/ img/processed/wechat/
2026-08-02 23:44:43 +08:00
youpaishidifu
c853b3e504
fix(ocr): 页面文件不足防护——双重预检+长期冷却
...
问题:EasyOCR worker启动报 WinError 1455(页面文件太小),
无法加载 cufft64_11.dll,物理内存充足但虚拟内存(已提交32.5/35.7GB)不足。
修复:
1. worker端:import前预检虚拟内存——剩余<2GB则直接exit(2),不进入torch/easyocr加载
2. worker端:import捕获WinError 1455时写入虚拟内存诊断信息(物理/页面/提交率)
3. 父进程端:启动worker前预检虚拟内存——<2GB直接冷却1小时,不启动worker
4. 父进程端:识别exit(2)/页面文件错误——冷却1小时而非30秒(系统级问题不反复重试)
诊断增强:
- _get_virtual_memory_info():通过Win32 API获取物理/虚拟内存/页面文件状态
- 崩溃日志包含完整虚拟内存快照,便于排查
- 日志明确提示'增大Windows页面文件'
2026-08-02 21:35:33 +08:00
youpaishidifu
a858bbb9f6
fix(ocr): EasyOCR CUDA崩溃防护——健康检查+冻结隔离+自动降级
...
问题:EasyOCR worker启动即崩溃(access violation in torch CUDA),
冻住整台电脑,用户需强制重启。
修复三层防护:
1. worker端:CUDA健康检查——启动时创建小张量测试CUDA可用性,
失败则降级CPU,避免进入VGG模型加载的崩溃路径
2. 父进程端:CUDA_LAUNCH_BLOCKING=1——CUDA操作同步化,
access violation时只杀子进程不冻整机(关键防冻结)
3. 父进程端:崩溃检测——读取崩溃日志,含access violation/torch
则增加_easyocr_cuda_oom_count,第二次崩溃后强制CPU模式
(_easyocr_cuda_oom_count>=2 → EASYOCR_FORCE_CPU=1)
2026-08-02 21:22:59 +08:00
youpaishidifu
b21e8f8cd4
feat(ocr): 引入消息历史数据库,改进无时间戳消息放行逻辑\n\n问题:\n1. OCR识别不到时间戳则直接丢弃,如'领地系统依托于哪个插件'因无可见时间戳被丢弃\n2. 微信/QQ同时进消息时,总有一方的消息会被丢弃(待进一步排查)\n\n修复:\n- 新增MessageHistory类,使用SQLite记录用户消息和bot回复\n- 在bot回复时记录到数据库(三处回复路径均已添加)\n- 在ocr_text_has_fresh_timestamp中,无时间戳时增加上下文判断:\n - 若最近30秒内有bot回复(用户消息挨着bot消息):\n * 数据库无该用户消息记录 → 无条件放行\n * 数据库有记录 → 整段丢弃(防重复处理)\n - 否则保持原有逻辑(超短中文消息放行,其他丢弃)\n- 放行时记录用户消息到数据库,用于后续去重\n\n数据库:msg_history.db(SQLite),表message_history,字段:\n platform, sender_type(user/bot), content, content_hash(MD5), created_at\n\n验证:py_compile OK;数据库初始化自动创建表\n\n用户要求:'把用户消息、bot回复的消息做记录,如若用户的消息挨着bot的消息,且数据库无记录,无条件放行,如果用户的消息挨着bot的消息,无时间戳,数据库有记录,则整段丢弃。使用db保存。'
2026-08-02 21:01:33 +08:00
youpaishidifu
e0e5e05b10
fix(ocr): 乱码过滤器放宽——正常英文名词不再误杀\n\n根因:游戏UI乱码过滤器 regex CJK+大写英文 匹配'如何通过Minecraft...'中的'Minecraft',\n导致正常用户消息被误过滤。过滤器本意是捕获游戏UI公告/服务器列表中的乱码片段(如'玩家Ierite'),\n但无法区分正常英文名词。\n\n修复:在 CJK+大写英文过滤前增加中文字符占比检查——\n若中文字符数 >= 英文字母数,视为正常句子不过滤。\n三处过滤器均已修复:OCR(2183行)、剪贴板(2654行)、Poll(4328行)。\n\n示例:\n- '如何通过Minecraft的官网更新自己的皮肤?' → 中文10字母9,保留\n- '玩家Ierite' → 中文2字母6,过滤\n- '比武Mtp' → 中文2字母3,过滤
2026-08-02 19:49:15 +08:00
youpaishidifu
6f791622c9
fix(ocr): 引擎对比长度保护——Windows OCR截断丢消息
...
根因:_pick_ocr_text() 用 score >= score 选引擎,Windows OCR
虽然行数少(8行 vs EasyOCR 19行),但因垃圾字符少、空格惩罚低,
分数可能略高或持平,导致完整 EasyOCR 文本被丢弃。
修复:
- 新增长度保护:当一方行数 >=1.5x 且字符数 >=1.3x 另一方时,
分数差 <10 分则强制选更长文本
- 引擎对比日志增加行数/字符数/分数差,方便排查
- 不影响分数差距大时的正常选择逻辑
2026-08-02 17:51:27 +08:00
youpaishidifu
3853804ca4
fix: 急停/停止即时生效+基线吞消息永久拦截破除
...
问题1: 用户消息通过四层过滤器但不回复——根因基线轮吞消息后永久拦截:
- 基线轮 seen.add(item) 将历史消息永久加入 _seen_messages
- _last_sig 无条件更新 → 之后 OCR 每轮读到相同屏幕 sig 相同静默 return
- 双保险永久拦截: 用户重发相同内容永远等不到回复
修复: 基线轮 seen.discard(item) + 清空 _last_sig + 不 seen.add,
防重复改由 sig 静默跳过承担; sig 静默跳过加日志暴露(4131)
问题2: OCR 识别期间急停/手动停止不生效——主线程卡死在等待:
- _ocr_dual_engine join(timeout=10) 卡死
- _call_easyocr_safe queue.get(timeout=9) 卡死(EasyOCR子进程被杀后
proc.poll()!=None → _read_worker 立即退出 → _q 永空 → 等满超时)
- _safe_screenshot join(timeout=3) 卡死
修复: 三处等待全部改 while self._running 轮询(50ms粒度),
急停瞬间丢弃未出结果的 OCR 折返; _safe_screenshot 去 @staticmethod
验证: py_compile OK; 隔离测试 test_baseline_fix.py 4组断言全过
(基线后 seen 不含 item、sig 清空、重发触发回复、回复后防重复)
2026-08-02 16:44:00 +08:00
youpaishidifu
19c8817893
fix: 过滤器4 _is_reply_fragment 长度门槛6→4(≤4不参与匹配直接放行,≥4走完整匹配);日志拆分避免'7<6'误导(实际为_replied_texts空)
2026-08-02 15:12:16 +08:00
youpaishidifu
e9b9d6d92e
fix: QQ截图cap_left右移至25%避开消息列表时间戳; 修复未来时间戳误判为新鲜(14:40不能匹配16:00); 修复跨午夜反向边界+1day误用; 修复_is_markdown_document日志插入导致长文本检测死代码; 四层过滤器加日志
2026-08-02 14:53:46 +08:00
youpaishidifu
22e781edac
fix: 调整QQ截图裁剪参数cap_left=15%,添加噪声文本过滤
...
- QQ截图裁剪cap_left从0.10调整到0.15,避免截到左侧会话列表
- 新增_is_noise_text函数,过滤HTML标签、图片路径、OCR噪声等
- 在stage splitting主循环、尾部处理、_ocr_text_has_fresh_timestamp三处调用噪声过滤
- 语法检查通过
2026-08-02 12:34:32 +08:00
youpaishidifu
ad7aef5747
修复微信不唤醒前台+QQ裁消息+截屏定时随机清理
...
- 微信截图从不唤醒前台根因: _ensure_visible置前失败后'窗口可见即放行'
(IsWindowVisible&&!IsIconic→True), 截图截到被其他窗口压着的遮挡内容
(窗口停哪截哪, 用户实测原图证实)
- 修复: 微信分支改用_ensure_foreground(AttachThreadInput强置前),
必须真正前台才截图; 微信原生窗口安全(2630搜索联系人已用同路径)
- QQ裁剪继续往左放宽: cap_left 0.15→0.10 (15%仍裁掉左侧用户消息气泡边缘)
- 截屏清理改为定时随机: 原_clean_old_ocr_debug每次保存即按数量删(keep模式),
高频create+delete易触发360勒索误报; 新增_maybe_clean_ocr_dir()
每30~60秒随机间隔清理, 删除mtime早于60s的全部截图(raw+processed都清),
5处保存点去掉立即清理, 死函数已删, 挂载_run_loop主循环
2026-08-01 23:50:04 +08:00
youpaishidifu
4428042703
修复OCR捕捉不可见旧消息+微信无图可查+急停/停止/启动计数器清零
...
- 不可见消息被回复根因: stage splitting主循环+尾部处理中 last_ts=None 时
buf无条件append(首行消息在时间戳之前=更早历史, 绕过全部新鲜性检查)
→ 22:35:33日志实锤: '单清效果是清理哪些效果?'(早已被覆盖)被OCR精准捕捉并回复
- 修复: ① 主循环 if not last_ts: 视为历史丢弃(首个时间戳之前的消息)
② 尾部处理 if not last_ts: 丢弃(整行无时间戳归属)
③ _ocr_text_has_fresh_timestamp 无时间戳不再无条件True, 仅≤4字中文超短消息放行
- 微信无图: 22:35:26 _ensure_hwnd超时(12s)整轮跳过无截图; 现在
_ensure_visible失败时保存'窗口不可见现场截图'(尺寸过滤), 每次尝试都留图
- 计数器清零: start()/stop()缺_easyocr_consecutive_failures重置,
_emergency_stop()急停完全不重置; 三处统一清零
consecutive_failures/cuda_oom_count/call_count/retry_until/broken
+ OCR状态(截图hash/垃圾计数/引擎选择/回复冷却/上次文本)
= 重启后CUDA降级/超时计数不残留, 从头评估GPU/CPU
2026-08-01 22:57:54 +08:00
youpaishidifu
4ae189e82f
修复EasyOCR CUDA OOM冻结+时间戳day=0崩溃+OCR图片分目录img/raw+processed
...
- 冻结根因: CUDA OOM后worker不退出, 损坏context持续占显存, 父进程不杀子进程
反复发图→线程堆积+显存耗尽→桌面冻结
- worker: readtext CUDA/kernel错误→立即退出释放显存(faulerhandler已有兜底)
- 父进程: 收到CUDA错误→立即杀子进程+30s冷却; 连续2次CUDA错误→EASYOCR_FORCE_CPU=1
强制CPU模式启动(显存不足降级防冻结)
- 时间戳day=0崩溃: _is_timestamp_old跨午夜用replace(day-1), 每月1号day=1→day=0
抛ValueError day is out of range for month→微信OCR整轮失败; 改用timedelta(days=±1)
- OCR调试图片回源码目录: img/raw(原图PNG) + img/processed(处理后JPG) 分目录存储
- 崩溃日志回源码根 easyocr_crash.log (不写%LOCALAPPDATA%)
- _clean_old_ocr_debug 默认 keep=20 (回退上一轮激进keep=6)
- .gitignore: 忽略 img/ 与 worker_stderr/stdout.txt
2026-08-01 22:23:55 +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