fix(replyer): 优化回复器提示词以修复戳一戳处理逻辑

- **问题现象:**
  回复模型(Replyer)在接收到“戳一戳”事件时,会错误地生成如“[戳了戳]”之类的文本回复,而不是交由动作执行器(Planner)处理`poke_user`动作。

- **根本原因:**
  1.  回复提示词模板中没有明确禁止输出此类文本,导致模型将其视为普通消息进行模仿。
  2.  模板中关于“可用动作”的描述不够明确,可能让回复模型误以为自己需要处理或决定这些动作。

- **解决方案:**
  1.  **增强指令:** 在所有核心回复模板 (`default_expressor_prompt`, `s4u_style_prompt`, `normal_style_prompt`) 中,明确增加了“‘戳一戳’不是文本消息,而是由`poke_user`动作处理的特殊互动,因此绝对禁止在回复中输出相关文字”的规则。
  2.  **明确职责:** 修改了 `build_prompt_reply_context` 方法中生成`action_descriptions`的逻辑,向回复模型强调其职责仅是生成回复文本,而动作的决策与执行由独立的模型负责,严禁其在回复中模仿或调用动作。

- **影响:**
  - 修复了“戳一戳”互动被错误处理为文本回复的BUG。
  - 增强了提示词的鲁棒性,明确了回复模型与决策模型之间的职责边界,降低了未来类似问题的发生概率。
This commit is contained in:
tt-P607
2025-11-02 09:33:19 +08:00
committed by Windpicker-owo
parent e3b949fdb2
commit cf5b2b5811

View File

@@ -72,7 +72,7 @@ def init_prompt():
不要浮夸,不要夸张修辞,平淡且不要输出多余内容(包括前后缀冒号和引号括号表情包at或 @等 ),只输出一条回复就好。
**【重要】不要在回复中输出任何格式化标记**
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式。**特别注意**:“戳一戳”不是文本消息,而是由`poke_user`动作处理的特殊互动,因此绝对禁止在回复中输出“[戳了戳]”或“[poke]”这样的文字。
- 如果想表达笑的情绪,直接说"哈哈""笑死"等,不要说"[表情包:笑哭]"
- 如果想提到某人,直接说""、或者他的名字,不要说"[回复<某人>]"
- 说什么就直接输出什么,不要加任何格式化标记
@@ -145,7 +145,7 @@ def init_prompt():
请注意不要输出多余内容(包括前后缀冒号和引号at或 @等 )。只输出回复内容。
**【重要】不要在回复中输出任何格式化标记**
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式。**特别注意**:“戳一戳”不是文本消息,而是由`poke_user`动作处理的特殊互动,因此绝对禁止在回复中输出“[戳了戳]”或“[poke]”这样的文字。
- 如果想表达笑的情绪,直接说"哈哈""笑死"等,不要说"[表情包:笑哭]"
- 如果想提到某人,直接说"""",不要说"[回复<某人>]"
- 说什么就直接输出什么,不要加任何标记或括号
@@ -218,7 +218,7 @@ If you need to use the search tool, please directly call the function "lpmm_sear
请注意不要输出多余内容(包括前后缀冒号和引号at或 @等 )。只输出回复内容。
**【重要】不要在回复中输出任何格式化标记**
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式
- 不要输出类似 [表情包xxx]、[图片xxx]、[回复<xxx>xxx] 这样的格式。**特别注意**:“戳一戳”不是文本消息,而是由`poke_user`动作处理的特殊互动,因此绝对禁止在回复中输出“[戳了戳]”或“[poke]”这样的文字。
- 如果想表达笑的情绪,直接说"哈哈""笑死"等,不要说"[表情包:笑哭]"
- 如果想提到某人,直接说"""",不要说"[回复<某人>]"
- 说什么就直接输出什么,不要加任何标记或括号
@@ -1273,7 +1273,7 @@ class DefaultReplyer:
# 构建action描述 (如果启用planner)
action_descriptions = ""
if available_actions:
action_descriptions = "你有以下的动作能力,但执行这些动作不由你决定,由另外一个模型同步决定,因此你只需要知道有如下能力即可:\n"
action_descriptions = "以下是系统中可用的动作列表。**【重要】**这些动作将由一个独立的决策模型决定是否执行,**并非你的职责**。你只需要了解这些能力的存在,以便更好地理解对话情景,**严禁**在你的回复中模仿、调用或提及这些动作本身。\n"
for action_name, action_info in available_actions.items():
action_description = action_info.description
action_descriptions += f"- {action_name}: {action_description}\n"