修复 ai_auto_response 思考标签泄露清洗问题

- 增强 LLMResultParser 对 <think> 思考块的清洗能力
- 兼容完整的 <think>...</think> 返回
- 兼容只有开标签、没有闭合标签的不完整思考块,避免将 Thinking about your request 透传到群里
- 兼容单独残留的 </think> 碎片标签
This commit is contained in:
liuwei
2026-04-24 14:47:57 +08:00
parent f593f5dd90
commit ed7af06555

View File

@@ -151,7 +151,16 @@ class LLMResultParser:
@staticmethod
def _strip_think_blocks(text: str) -> str:
value = str(text or "")
value = re.sub(r"<think>.*?</think>", "", value, flags=re.IGNORECASE | re.DOTALL)
# 兼容完整的思考块:
# 某些模型会返回 <think>...</think>,这类内容绝不能继续往下游透传。
value = re.sub(r"<think\b[^>]*>.*?</think>", "", value, flags=re.IGNORECASE | re.DOTALL)
# 兼容不完整的思考块:
# 实际线上偶发只返回了开标签和中间内容,没有闭合 </think>。
# 这种情况下如果只匹配完整标签,会把“<think>\nThinking about your request”原样漏出去。
# 这里把“从开标签开始到文本结束”的尾巴整个清掉。
value = re.sub(r"<think\b[^>]*>.*$", "", value, flags=re.IGNORECASE | re.DOTALL)
# 兼容少数模型把关闭标签单独吐出来的情况,避免残留 </think> 之类碎片。
value = re.sub(r"</think>", "", value, flags=re.IGNORECASE)
return value
@classmethod