修复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+过滤器已足够,配合新裁剪基本不会触发
This commit is contained in:
youpaishidifu
2026-07-26 16:37:41 +08:00
parent 0e02a4a44c
commit 8963a34b6a
8 changed files with 28 additions and 18 deletions
+5 -3
View File
@@ -67,15 +67,17 @@ class AutoReply:
def _get_answer(self, platform: str, msg: str, doc: dict, score: float) -> str or None:
"""提取答案 + 防重复检查。
优先返回 doc['answer'](Q&A 段),兜底用整段 content。
非 Q&A 文档限制返回内容首 500 字符,避免子串匹配触发后返回整篇文件。
非 Q&A 文档限制返回内容首 200 字符(之前 500 仍过多),
避免子串匹配触发后把一整个文件塞回去。
"""
answer = doc.get("answer")
if answer:
answer = answer.strip()
else:
# 非 Q&A 文档 → 取 content 前半段(最多 500 字符),不返回全文
# 非 Q&A 文档 → 只取前 200 字符
content = doc.get("content", "").strip()
answer = content[:497] + "..." if len(content) > 500 else content
answer = content[:197] + "..." if len(content) > 200 else content
if not answer:
return None