feat(chat): 为回复分割器添加 llmpunctuation 模式

本次更新重构了回复分割功能,引入了 `split_mode` 配置项,允许用户在两种分割模式之间进行选择,提供了更大的灵活性。

- **`llm` 模式**: 延续了由大语言模型通过 `[SPLIT]` 标记决定断句的功能。此模式下的提示词(Prompt)已进一步优化,以引导模型做出更自然的分割。
- **`punctuation` 模式**: 恢复了传统的基于标点符号的分割逻辑。这已设为新的默认模式,确保用户更新后行为与旧版本保持一致。

此外,`at_user` 插件也进行了适配,以正确处理由 `llm` 模式可能产生的多段消息。
This commit is contained in:
tt-P607
2025-09-11 17:12:01 +08:00
committed by Windpicker-owo
parent 97e566b893
commit 08dc99ae51
5 changed files with 36 additions and 19 deletions

View File

@@ -28,9 +28,9 @@ class AtAction(BaseAction):
# === 功能描述(必须填写)===
action_parameters = {"user_name": "需要艾特用户的名字", "at_message": "艾特用户时要发送的消息"}
action_require = [
"需要艾特某个用户时使用",
"当你需要提醒特定用户查看消息时使用",
"在回复中需要明确指向某个用户时使用",
"当用户明确要求你去'''''提醒''艾特'某人时使用",
"当你判断,为了让特定的人看到消息,需要代表用户去呼叫他/她时使用",
"例如:'你去叫一下张三''提醒一下李四开会'",
]
llm_judge_prompt = """
判定是否需要使用艾特用户动作的条件:
@@ -150,11 +150,16 @@ class AtAction(BaseAction):
logger.error("回复器生成回复失败")
return False, "回复生成失败"
final_message = llm_response.get("content", "")
if not final_message:
final_message_raw = llm_response.get("content", "")
if not final_message_raw:
logger.warning("回复器生成了空内容")
return False, "回复内容为空"
# 对LLM生成的内容进行后处理解析[SPLIT]标记并将分段消息合并
from src.chat.utils.utils import process_llm_response
final_message_segments = process_llm_response(final_message_raw, enable_splitter=True, enable_chinese_typo=False)
final_message = " ".join(final_message_segments)
await self.send_command(
"SEND_AT_MESSAGE",
args={"group_id": self.chat_stream.group_info.group_id, "qq_id": user_id, "text": final_message},