修复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:
+5
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user