fix(chat): 增强回复内容清理逻辑以处理嵌套回复头

先前的回复头清理逻辑无法有效处理模型生成的复杂或嵌套的回复结构,例如 `[回复<A>:[回复<B>:内容]],说:`,导致清理不彻底。

本次更新通过以下方式提升了清理的健壮性:
- 使用循环和更健壮的正则表达式,以递归方式剥离多层嵌套的回复头。
- 增加了一个基于 `],说:` 的 rsplit 作为最终防线,处理日志中观察到的其他特殊格式。
- 移除了可能存在的 `[SPLIT]` 标记,避免意外的消息分割。

此外,本次提交还更新了 QQ 表情列表,增加了新的表情并修正了一个格式错误。
This commit is contained in:
tt-P607
2025-10-30 18:28:00 +08:00
parent 17c0e58a7b
commit 9152a06f5b
3 changed files with 32 additions and 11 deletions

View File

@@ -1795,17 +1795,36 @@ class DefaultReplyer:
)
if content:
# 循环移除,防止模型生成多个回复头
cleaned_content = content
while True:
new_content = re.sub(r"^\s*\[回复<[^>]+>\s*的消息:[^\]]+\]\s*", "", cleaned_content).lstrip()
if new_content == cleaned_content:
break
cleaned_content = new_content
# 移除 [SPLIT] 标记,防止消息被分割
cleaned_content = content.replace("[SPLIT]", "")
if cleaned_content != content:
logger.debug(f"移除了模型自行生成的回复头,原始内容: '{content}', 清理后: '{cleaned_content}'")
content = cleaned_content
# 循环移除,以处理模型可能生成的嵌套回复头/尾
# 使用更健壮的正则表达式,通过非贪婪匹配和向后查找来定位真正的消息内容
pattern = re.compile(r"^\s*\[回复<.+?>\s*(?:的消息)?(?P<content>.*)\](?:?说:)?\s*$", re.DOTALL)
temp_content = cleaned_content
while True:
match = pattern.match(temp_content)
if match:
new_content = match.group("content").strip()
# 如果内容没有变化,说明可能无法进一步解析,退出循环
if new_content == temp_content:
break
temp_content = new_content
else:
break # 没有匹配到,退出循环
# 在循环处理后,再使用 rsplit 来处理日志中观察到的特殊情况
# 这可以作为处理复杂嵌套的最后一道防线
final_split = temp_content.rsplit("],说:", 1)
if len(final_split) > 1:
final_content = final_split[1].strip()
else:
final_content = temp_content
if final_content != content:
logger.debug(f"清理了模型生成的多余内容,原始内容: '{content}', 清理后: '{final_content}'")
content = final_content
logger.debug(f"replyer生成内容: {content}")
return content, reasoning_content, model_name, tool_calls

View File

@@ -179,6 +179,8 @@ qq_face: dict = {
"393": "[表情:新年中龙]",
"394": "[表情:新年大龙]",
"395": "[表情:略略略]",
"396": "[表情:龙年快乐]",
"424": "[表情:按钮]",
"😊": "[表情:嘿嘿]",
"😌": "[表情:羞涩]",
"😚": "[ 表情:亲亲]",

View File

@@ -180,5 +180,5 @@ qq_face: dict = {
"394": "[表情:新年大龙]",
"395": "[表情:略略略]",
"396": "[表情:龙年快乐]",
"424": " [表情:按钮]",
"424": "[表情:按钮]",
}