Fix #1701: 修复知识库搜索权重计算导致牛头不对马嘴问题
问题:用户问用户组是怎么配置的,系统回复了sdf1_game.md的问答题表格配置块, 而不是protect.md中关于用户组的正确描述。 根因:sdf1_game.md的题目配置格式section body包含完整代码块(数百字符), gui.py质量分body_len/100给该section大量加分,压过真正答案。 修复(三处): 1. knowledge_base.py: TF-IDF corpus构建时移除代码块内容 2. auto_reply.py: 相关性检查中移除代码块内容 3. gui.py: 质量分计算时截断代码块只计算说明文字长度
This commit is contained in:
@@ -193,6 +193,9 @@ class AutoReply:
|
||||
heading_clean = _link.sub(r'\1', heading).lower()
|
||||
body = doc.get("content", "") or doc.get("body", "")
|
||||
body_clean = _link.sub(r'\1', body).lower()
|
||||
# ⭐ 移除代码块内容:避免配置示例/问答数据等代码块污染相关性检查
|
||||
# 修复"用户组是怎么配置的"被sdf1_game"题目配置格式"(body含代码块)误匹配的问题
|
||||
body_clean = re.sub(r'```.*?```', '', body_clean, flags=re.DOTALL)
|
||||
|
||||
ht_tokens = AutoReply._meaningful_tokens(heading_clean + " " + title)
|
||||
body_tokens = AutoReply._meaningful_tokens(body_clean[:800])
|
||||
|
||||
@@ -1234,6 +1234,13 @@ class MsgBotApp(ctk.CTk):
|
||||
if rel:
|
||||
# 计算质量分:body越长、有表格/链接列表,质量越高
|
||||
body = doc.get('body', '') or doc.get('content', '')
|
||||
body_full_len = len(body.strip())
|
||||
# ⭐ 代码块长度惩罚:body含```代码块时,代码块内容(如配置格式示例、问答数据)
|
||||
# 不应贡献body_len加分。截断到代码块起始位置,只计算"说明文字"的长度。
|
||||
# 修复"用户组是怎么配置的"被sdf1_game"题目配置格式"(body含完整代码块)压过的问题
|
||||
_code_block_idx = body.find('```')
|
||||
if _code_block_idx >= 0:
|
||||
body = body[:_code_block_idx]
|
||||
body_len = len(body.strip())
|
||||
# 下载类查询优先选择详细表格,而非简略提示
|
||||
is_download_query = any(w in cleaned_msg for w in ('下载', '下到', '哪下', '怎么下'))
|
||||
|
||||
+6
-1
@@ -405,7 +405,12 @@ class KnowledgeBase:
|
||||
body = d.get("body", d["content"])
|
||||
# 移除链接语法 [text](url),只保留非链接部分
|
||||
body_clean = re.sub(r'\[([^\]]*)\]\([^\)]+\)', '', body)
|
||||
corpus.append(body_clean)
|
||||
# ⭐ 移除代码块内容:```...``` 内的配置示例/问答数据等不属于"正文说明",
|
||||
# 避免长代码块使body_len虚高,污染TF-IDF关键词密度和质量分计算。
|
||||
# 例:sdf1_game"## 题目配置格式"的body含完整问答题代码块(数百字符),
|
||||
# 导致该section在质量分计算中获得过多body_len加分,压过真正答案。
|
||||
body_no_code = re.sub(r'```.*?```', '', body_clean, flags=re.DOTALL)
|
||||
corpus.append(body_no_code)
|
||||
try:
|
||||
self._tfidf_matrix = self._vectorizer.fit_transform(corpus)
|
||||
self._ready = True
|
||||
|
||||
Reference in New Issue
Block a user