🤖 自动格式化代码 [skip ci]

This commit is contained in:
github-actions[bot]
2025-04-29 10:07:04 +00:00
parent dffb690cba
commit 853ca47a7e
3 changed files with 26 additions and 20 deletions

View File

@@ -374,13 +374,15 @@ class ActionPlanner:
# 使用新的 PROMPT_END_DECISION # 使用新的 PROMPT_END_DECISION
end_decision_prompt = PROMPT_END_DECISION.format( end_decision_prompt = PROMPT_END_DECISION.format(
persona_text=persona_text, # 复用之前的 persona_text persona_text=persona_text, # 复用之前的 persona_text
chat_history_text=chat_history_text # 复用之前的 chat_history_text chat_history_text=chat_history_text, # 复用之前的 chat_history_text
) )
logger.debug(f"[私聊][{self.private_name}]发送到LLM的结束决策提示词:\n------\n{end_decision_prompt}\n------") logger.debug(
f"[私聊][{self.private_name}]发送到LLM的结束决策提示词:\n------\n{end_decision_prompt}\n------"
)
try: try:
end_content, _ = await self.llm.generate_response_async(end_decision_prompt) # 再次调用LLM end_content, _ = await self.llm.generate_response_async(end_decision_prompt) # 再次调用LLM
logger.debug(f"[私聊][{self.private_name}]LLM (结束决策) 原始返回内容: {end_content}") logger.debug(f"[私聊][{self.private_name}]LLM (结束决策) 原始返回内容: {end_content}")
# 解析结束决策的JSON # 解析结束决策的JSON
@@ -390,32 +392,36 @@ class ActionPlanner:
"say_bye", "say_bye",
"reason", "reason",
default_values={"say_bye": "no", "reason": "结束决策LLM返回格式错误默认不告别"}, default_values={"say_bye": "no", "reason": "结束决策LLM返回格式错误默认不告别"},
required_types={"say_bye": str, "reason": str} # 明确类型 required_types={"say_bye": str, "reason": str}, # 明确类型
) )
say_bye_decision = end_result.get("say_bye", "no").lower() # 转小写方便比较 say_bye_decision = end_result.get("say_bye", "no").lower() # 转小写方便比较
end_decision_reason = end_result.get("reason", "未提供原因") end_decision_reason = end_result.get("reason", "未提供原因")
if end_success and say_bye_decision == "yes": if end_success and say_bye_decision == "yes":
# 决定要告别,返回新的 'say_goodbye' 动作 # 决定要告别,返回新的 'say_goodbye' 动作
logger.info(f"[私聊][{self.private_name}]结束决策: yes, 准备生成告别语. 原因: {end_decision_reason}") logger.info(
f"[私聊][{self.private_name}]结束决策: yes, 准备生成告别语. 原因: {end_decision_reason}"
)
# 注意:这里的 reason 可以考虑拼接初始原因和结束决策原因,或者只用结束决策原因 # 注意:这里的 reason 可以考虑拼接初始原因和结束决策原因,或者只用结束决策原因
final_action = "say_goodbye" final_action = "say_goodbye"
final_reason = f"决定发送告别语。决策原因: {end_decision_reason} (原结束理由: {initial_reason})" final_reason = f"决定发送告别语。决策原因: {end_decision_reason} (原结束理由: {initial_reason})"
return final_action, final_reason return final_action, final_reason
else: else:
# 决定不告别 (包括解析失败或明确说no) # 决定不告别 (包括解析失败或明确说no)
logger.info(f"[私聊][{self.private_name}]结束决策: no, 直接结束对话. 原因: {end_decision_reason}") logger.info(
f"[私聊][{self.private_name}]结束决策: no, 直接结束对话. 原因: {end_decision_reason}"
)
# 返回原始的 'end_conversation' 动作 # 返回原始的 'end_conversation' 动作
final_action = "end_conversation" final_action = "end_conversation"
final_reason = initial_reason # 保持原始的结束理由 final_reason = initial_reason # 保持原始的结束理由
return final_action, final_reason return final_action, final_reason
except Exception as end_e: except Exception as end_e:
logger.error(f"[私聊][{self.private_name}]调用结束决策LLM或处理结果时出错: {str(end_e)}") logger.error(f"[私聊][{self.private_name}]调用结束决策LLM或处理结果时出错: {str(end_e)}")
# 出错时,默认执行原始的结束对话 # 出错时,默认执行原始的结束对话
logger.warning(f"[私聊][{self.private_name}]结束决策出错,将按原计划执行 end_conversation") logger.warning(f"[私聊][{self.private_name}]结束决策出错,将按原计划执行 end_conversation")
return "end_conversation", initial_reason # 返回原始动作和原因 return "end_conversation", initial_reason # 返回原始动作和原因
else: else:
action = initial_action action = initial_action
@@ -429,9 +435,9 @@ class ActionPlanner:
"wait", "wait",
"listening", "listening",
"rethink_goal", "rethink_goal",
"end_conversation", # 仍然需要验证,因为可能从上面决策后返回 "end_conversation", # 仍然需要验证,因为可能从上面决策后返回
"block_and_ignore", "block_and_ignore",
"say_goodbye" # 也要验证这个新动作 "say_goodbye", # 也要验证这个新动作
] ]
if action not in valid_actions: if action not in valid_actions:
logger.warning(f"[私聊][{self.private_name}]LLM返回了未知的行动类型: '{action}',强制改为 wait") logger.warning(f"[私聊][{self.private_name}]LLM返回了未知的行动类型: '{action}',强制改为 wait")

View File

@@ -565,7 +565,7 @@ class Conversation:
self.conversation_info.last_successful_reply_action = None # 重置状态 self.conversation_info.last_successful_reply_action = None # 重置状态
elif action == "say_goodbye": elif action == "say_goodbye":
self.state = ConversationState.GENERATING # 也可以定义一个新的状态,如 ENDING self.state = ConversationState.GENERATING # 也可以定义一个新的状态,如 ENDING
logger.info(f"[私聊][{self.private_name}]执行行动: 生成并发送告别语...") logger.info(f"[私聊][{self.private_name}]执行行动: 生成并发送告别语...")
try: try:
# 1. 生成告别语 (使用 'say_goodbye' action_type) # 1. 生成告别语 (使用 'say_goodbye' action_type)
@@ -575,14 +575,14 @@ class Conversation:
logger.info(f"[私聊][{self.private_name}]生成的告别语: {self.generated_reply}") logger.info(f"[私聊][{self.private_name}]生成的告别语: {self.generated_reply}")
# 2. 直接发送告别语 (不经过检查) # 2. 直接发送告别语 (不经过检查)
if self.generated_reply: # 确保生成了内容 if self.generated_reply: # 确保生成了内容
await self._send_reply() # 调用发送方法 await self._send_reply() # 调用发送方法
# 发送成功后,标记动作成功 # 发送成功后,标记动作成功
action_successful = True action_successful = True
logger.info(f"[私聊][{self.private_name}]告别语已发送。") logger.info(f"[私聊][{self.private_name}]告别语已发送。")
else: else:
logger.warning(f"[私聊][{self.private_name}]未能生成告别语内容,无法发送。") logger.warning(f"[私聊][{self.private_name}]未能生成告别语内容,无法发送。")
action_successful = False # 标记动作失败 action_successful = False # 标记动作失败
conversation_info.done_action[action_index].update( conversation_info.done_action[action_index].update(
{"status": "recall", "final_reason": "未能生成告别语内容"} {"status": "recall", "final_reason": "未能生成告别语内容"}
) )
@@ -596,7 +596,7 @@ class Conversation:
logger.error(f"[私聊][{self.private_name}]{traceback.format_exc()}") logger.error(f"[私聊][{self.private_name}]{traceback.format_exc()}")
# 即使出错,也结束对话 # 即使出错,也结束对话
self.should_continue = False self.should_continue = False
action_successful = False # 标记动作失败 action_successful = False # 标记动作失败
conversation_info.done_action[action_index].update( conversation_info.done_action[action_index].update(
{"status": "recall", "final_reason": f"生成或发送告别语时出错: {goodbye_err}"} {"status": "recall", "final_reason": f"生成或发送告别语时出错: {goodbye_err}"}
) )

View File

@@ -75,6 +75,7 @@ PROMPT_FAREWELL = """{persona_text}。你在参与一场 QQ 私聊,现在对
请直接输出最终的告别消息内容,不需要任何额外格式。""" 请直接输出最终的告别消息内容,不需要任何额外格式。"""
class ReplyGenerator: class ReplyGenerator:
"""回复生成器""" """回复生成器"""
@@ -152,14 +153,13 @@ class ReplyGenerator:
if action_type == "send_new_message": if action_type == "send_new_message":
prompt_template = PROMPT_SEND_NEW_MESSAGE prompt_template = PROMPT_SEND_NEW_MESSAGE
logger.info(f"[私聊][{self.private_name}]使用 PROMPT_SEND_NEW_MESSAGE (追问生成)") logger.info(f"[私聊][{self.private_name}]使用 PROMPT_SEND_NEW_MESSAGE (追问生成)")
elif action_type == "say_goodbye": # 处理告别动作 elif action_type == "say_goodbye": # 处理告别动作
prompt_template = PROMPT_FAREWELL prompt_template = PROMPT_FAREWELL
logger.info(f"[私聊][{self.private_name}]使用 PROMPT_FAREWELL (告别语生成)") logger.info(f"[私聊][{self.private_name}]使用 PROMPT_FAREWELL (告别语生成)")
else: # 默认使用 direct_reply 的 prompt (包括 'direct_reply' 或其他未明确处理的类型) else: # 默认使用 direct_reply 的 prompt (包括 'direct_reply' 或其他未明确处理的类型)
prompt_template = PROMPT_DIRECT_REPLY prompt_template = PROMPT_DIRECT_REPLY
logger.info(f"[私聊][{self.private_name}]使用 PROMPT_DIRECT_REPLY (首次/非连续回复生成)") logger.info(f"[私聊][{self.private_name}]使用 PROMPT_DIRECT_REPLY (首次/非连续回复生成)")
# --- 格式化最终的 Prompt --- # --- 格式化最终的 Prompt ---
prompt = prompt_template.format( prompt = prompt_template.format(
persona_text=persona_text, goals_str=goals_str, chat_history_text=chat_history_text persona_text=persona_text, goals_str=goals_str, chat_history_text=chat_history_text