优化自动对话逻辑
This commit is contained in:
@@ -151,8 +151,8 @@ class AIAutoResponsePlugin(MessagePluginInterface):
|
|||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
# 处理自动回复
|
# 处理自动回复
|
||||||
try:
|
try:
|
||||||
# 获取最近的消息
|
# 获取最近的消息 (完整的消息对象)
|
||||||
messages = [msg["message"] for msg in self.group_messages[roomid]]
|
chat_history = self.group_messages[roomid]
|
||||||
timestamp = message.get("timestamp", "")
|
timestamp = message.get("timestamp", "")
|
||||||
|
|
||||||
# 记录触发原因
|
# 记录触发原因
|
||||||
@@ -160,7 +160,7 @@ class AIAutoResponsePlugin(MessagePluginInterface):
|
|||||||
self.LOG.info(f"[{roomid}] 触发高频率回复规则,准备生成回复")
|
self.LOG.info(f"[{roomid}] 触发高频率回复规则,准备生成回复")
|
||||||
|
|
||||||
# 生成回复
|
# 生成回复
|
||||||
response = self._generate_response_with_dify(content, messages)
|
response = self._generate_response_with_dify(content, chat_history)
|
||||||
if response:
|
if response:
|
||||||
# 发送回复
|
# 发送回复
|
||||||
await bot.send_text_message(roomid, response, sender)
|
await bot.send_text_message(roomid, response, sender)
|
||||||
@@ -172,21 +172,29 @@ class AIAutoResponsePlugin(MessagePluginInterface):
|
|||||||
self.LOG.error(f"处理AI自动对话出错: {e}")
|
self.LOG.error(f"处理AI自动对话出错: {e}")
|
||||||
return False, f"处理出错: {e}"
|
return False, f"处理出错: {e}"
|
||||||
|
|
||||||
def _generate_response_with_dify(self, message: str, messages: List[str]) -> str:
|
def _generate_response_with_dify(self, current_message: str, chat_history: List[Dict[str, Any]]) -> str:
|
||||||
"""使用DIFY API生成自动回复内容"""
|
"""使用DIFY API生成自动回复内容"""
|
||||||
try:
|
try:
|
||||||
# 构建上下文消息
|
# 构建上下文消息
|
||||||
# 取更多上下文以帮助理解语境
|
# 取更多上下文以帮助理解语境
|
||||||
context_messages = messages[-10:] if len(messages) > 10 else messages
|
recent_msgs = chat_history[-10:] if len(chat_history) > 10 else chat_history
|
||||||
context = "\n".join(context_messages)
|
|
||||||
|
context_str_list = []
|
||||||
|
for msg in recent_msgs:
|
||||||
|
sender = msg.get("sender", "Unknown")
|
||||||
|
content = msg.get("message", "")
|
||||||
|
context_str_list.append(f"{sender}: {content}")
|
||||||
|
|
||||||
|
context = "\n".join(context_str_list)
|
||||||
|
|
||||||
# 构建提示词 - 增强拟人化指令
|
# 构建提示词 - 增强拟人化指令
|
||||||
prompt = (
|
prompt = (
|
||||||
f"当前群聊上下文(最后一句是最新消息):\n{context}\n\n"
|
f"当前群聊上下文(格式为 '发言人: 内容',最后一句是最新消息):\n{context}\n\n"
|
||||||
f"指令:\n"
|
f"指令:\n"
|
||||||
f"1. 保持简短(1-2句话),口语化,不要长篇大论。\n"
|
f"1. 参考上下文。\n"
|
||||||
f"2. 不要重复之前的回复。\n"
|
f"2. 保持简短(1-2句话),口语化,不要长篇大论。\n"
|
||||||
f"3. 如果最后一句不是对你说的,且你觉得没必要强行接话,可以回个表情或简短的语气词,或者委婉结束话题。\n"
|
f"3. 不要重复之前的回复。\n"
|
||||||
|
f"4. 如果最后一句不是对你说的,且你觉得没必要强行接话,可以回个表情或简短的语气词,或者委婉结束话题。\n"
|
||||||
f"请生成回复:"
|
f"请生成回复:"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user