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 通过
40 lines
1.1 KiB
Python
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() |