修复 ai_auto_response 思考标签泄露清洗问题
- 增强 LLMResultParser 对 <think> 思考块的清洗能力 - 兼容完整的 <think>...</think> 返回 - 兼容只有开标签、没有闭合标签的不完整思考块,避免将 Thinking about your request 透传到群里 - 兼容单独残留的 </think> 碎片标签
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user