表达学习提示词优化和过滤

pull/1413/head
unknown 2025-12-06 23:23:52 +08:00
parent 378b5f60ec
commit 3c81102ffc
1 changed files with 69 additions and 4 deletions

View File

@ -30,7 +30,7 @@ def init_prompt() -> None:
请从上面这段群聊中概括除了人名为"SELF"之外的人的语言风格
每一行消息前面的方括号中的数字 [1][2]是该行消息的唯一编号请在输出中引用这些编号来标注表达方式的来源行
1. 只考虑文字不要考虑表情包和图片
2. 不要涉及具体的人名和事件以及话题内容但是可以涉及具体名词
2. 不要涉及具体的人名但是可以涉及具体名词
3. 思考有没有特殊的梗一并总结成语言风格
4. 必须符合"{global_config.expression.filtration_prompt}"的要求
5. 例子仅供参考请严格根据群聊内容总结!!!
@ -320,9 +320,74 @@ class ExpressionLearner:
parsed = json.loads(repaired)
else:
parsed = repaired
except Exception:
logger.error(f"解析表达风格 JSON 失败,原始响应:{response}")
return []
except Exception as parse_error:
# 如果解析失败,尝试修复中文引号问题
# 使用状态机方法,在 JSON 字符串值内部将中文引号替换为转义的英文引号
try:
def fix_chinese_quotes_in_json(text):
"""使用状态机修复 JSON 字符串值中的中文引号"""
result = []
i = 0
in_string = False
escape_next = False
while i < len(text):
char = text[i]
if escape_next:
# 当前字符是转义字符后的字符,直接添加
result.append(char)
escape_next = False
i += 1
continue
if char == '\\':
# 转义字符
result.append(char)
escape_next = True
i += 1
continue
if char == '"' and not escape_next:
# 遇到英文引号,切换字符串状态
in_string = not in_string
result.append(char)
i += 1
continue
if in_string:
# 在字符串值内部,将中文引号替换为转义的英文引号
if char == '"': # 中文左引号
result.append('\\"')
elif char == '"': # 中文右引号
result.append('\\"')
else:
result.append(char)
else:
# 不在字符串内,直接添加
result.append(char)
i += 1
return ''.join(result)
fixed_raw = fix_chinese_quotes_in_json(raw)
# 再次尝试解析
if fixed_raw.startswith("[") and fixed_raw.endswith("]"):
parsed = json.loads(fixed_raw)
else:
repaired = repair_json(fixed_raw)
if isinstance(repaired, str):
parsed = json.loads(repaired)
else:
parsed = repaired
except Exception as fix_error:
logger.error(f"解析表达风格 JSON 失败,初始错误: {type(parse_error).__name__}: {str(parse_error)}")
logger.error(f"修复中文引号后仍失败,错误: {type(fix_error).__name__}: {str(fix_error)}")
logger.error(f"解析表达风格 JSON 失败,原始响应:{response}")
logger.error(f"处理后的 JSON 字符串前500字符{raw[:500]}")
return []
if isinstance(parsed, dict):
parsed_list = [parsed]