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
parent 62c548ad2b
commit 0cb2fa3373
5 changed files with 36 additions and 19 deletions

View File

@@ -1025,14 +1025,18 @@ class DefaultReplyer:
prompt_text = await prompt.build()
# --- 动态添加分割指令 ---
if global_config.response_splitter.enable:
if global_config.response_splitter.enable and global_config.response_splitter.split_mode == "llm":
split_instruction = """
## 分割指令
你正在通过一个即时聊天软件发送消息。请模仿一个真实人类的打字和发送习惯:
- **简洁明了**: 如果一句话能说清楚,就一次性发出去,不要添加任何标记。
- **自然断句**: 当你想表达一个转折、一个停顿,或者想补充说明时,就像正常人会先发一部分再发另一部分一样,请在断句处插入 `[SPLIT]` 标记。
- **动机**: 使用 `[SPLIT]` 的目的是为了让对话节奏更自然,更有层次感,而不是为了分割而分割。
示例: "我刚刚看到一个超好笑的视频![SPLIT]等我找找发给你~"
## 消息分段艺术
为了模仿真实人类的聊天节奏,你可以在需要时将一条回复分成几段发送。
**核心原则**: 只有当分段能**增强表达效果**或**控制信息节奏**时,才在断句处使用 `[SPLIT]` 标记。
**参考场景**:
- 当你想表达一个转折或停顿时。
- 当你想先说结论,再补充说明时。
**任务**: 请结合你的智慧和人设,自然地决定是否需要分段。如果需要,请在最恰当的位置插入 `[SPLIT]` 标记。
"""
# 在 "现在,你说:" 之前插入
parts = prompt_text.rsplit("现在,你说:", 1)