feat(chat): 为回复分割器添加 llm 与 punctuation 模式
本次更新重构了回复分割功能,引入了 `split_mode` 配置项,允许用户在两种分割模式之间进行选择,提供了更大的灵活性。 - **`llm` 模式**: 延续了由大语言模型通过 `[SPLIT]` 标记决定断句的功能。此模式下的提示词(Prompt)已进一步优化,以引导模型做出更自然的分割。 - **`punctuation` 模式**: 恢复了传统的基于标点符号的分割逻辑。这已设为新的默认模式,确保用户更新后行为与旧版本保持一致。 此外,`at_user` 插件也进行了适配,以正确处理由 `llm` 模式可能产生的多段消息。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user