Files
msgbot/test_kb.py
T
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

40 lines
1.1 KiB
Python

#!/usr/bin/env python3
"""测试知识库搜索"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from knowledge_base import KnowledgeBase
def test_search():
kb = KnowledgeBase("D:/桌面/源码/文档/docs")
kb.reload()
if not kb.is_ready:
print("知识库未加载")
return
print(f"知识库加载了 {len(kb.docs)} 个文档")
# 测试查询
queries = [
"用户管理的部分可以查到哪些信息",
"用户管理",
"查询用户信息",
"php管理员后端",
]
for query in queries:
print(f"\n{'='*60}")
print(f"查询: {query}")
results = kb.search(query, top_k=3)
if results:
for i, (doc, score) in enumerate(results):
print(f" {i+1}. 标题: {doc['title']}, 匹配度: {score:.2f}")
print(f" heading: {doc['heading'][:60]}")
print(f" body片段: {doc['body'][:100].replace(chr(10), ' ')}...")
else:
print(" 无结果")
if __name__ == "__main__":
test_search()