改进 AI 回复模式
1. generate_reply: 改为优先关键词匹配,不匹配则调用 AI 2. _ai_generate_reply: 改进 prompt,加入对话上下文、微信风格要求 3. 要求回复简洁(50字以内),符合聊天风格
This commit is contained in:
@@ -79,24 +79,34 @@ class MessageProcessor:
|
||||
return True
|
||||
|
||||
def generate_reply(self, chat_snapshot: ChatSnapshot) -> str:
|
||||
"""生成回复内容"""
|
||||
"""生成回复内容
|
||||
|
||||
策略:优先关键词匹配,如果没有匹配则使用 AI 生成回复
|
||||
"""
|
||||
# 先检查关键词规则(取最新消息)
|
||||
latest_content = chat_snapshot.messages[0].get("content", "") if chat_snapshot.messages else ""
|
||||
|
||||
# 先检查关键词匹配
|
||||
for rule in self._rules:
|
||||
if not rule.enabled:
|
||||
if not rule.enabled or rule.reply_type != "keyword":
|
||||
continue
|
||||
|
||||
if rule.reply_type == "keyword":
|
||||
# 关键词匹配
|
||||
for keyword in rule.keywords:
|
||||
if keyword in latest_content:
|
||||
logger.info(f"关键词匹配: {keyword}")
|
||||
return rule.reply_content
|
||||
|
||||
elif rule.reply_type == "AI":
|
||||
# AI 生成回复
|
||||
return self._ai_generate_reply(chat_snapshot)
|
||||
for keyword in rule.keywords:
|
||||
if keyword in latest_content:
|
||||
logger.info(f"关键词匹配: {keyword}")
|
||||
return rule.reply_content
|
||||
|
||||
# 没有关键词匹配,使用 AI 生成回复
|
||||
for rule in self._rules:
|
||||
if not rule.enabled or rule.reply_type != "AI":
|
||||
continue
|
||||
logger.info("使用 AI 生成回复")
|
||||
return self._ai_generate_reply(chat_snapshot)
|
||||
|
||||
# 如果没有配置 AI 回复规则,也尝试调用 AI
|
||||
if not self._rules:
|
||||
logger.info("无规则配置,使用 AI 生成回复")
|
||||
return self._ai_generate_reply(chat_snapshot)
|
||||
|
||||
return ""
|
||||
|
||||
@@ -104,22 +114,39 @@ class MessageProcessor:
|
||||
"""AI 生成回复"""
|
||||
try:
|
||||
# 构造 prompt
|
||||
prompt = f"""当前聊天: {chat_snapshot.chat_name}
|
||||
历史消息(按时间倒序):
|
||||
chat_name = chat_snapshot.chat_name
|
||||
messages = chat_snapshot.messages[:10] # 取最新10条(VLM返回的是倒序)
|
||||
|
||||
prompt = f"""你是微信聊天助手,正在和「{chat_name}」对话。
|
||||
|
||||
对话历史(最新在前):
|
||||
"""
|
||||
for msg in chat_snapshot.messages[:10]: # 取最新10条(VLM返回的是倒序)
|
||||
for msg in messages:
|
||||
sender = "我" if msg.get("is_self") else "对方"
|
||||
prompt += f"- [{sender}] {msg.get('content', '')}\n"
|
||||
content = msg.get("content", "")
|
||||
time = msg.get("time", "")
|
||||
prompt += f"[{time}] {sender}:{content}\n"
|
||||
|
||||
prompt += """
|
||||
请生成一条合适的回复,只返回回复内容,不要其他文字。"""
|
||||
请根据对话上下文,生成一条自然的回复。
|
||||
要求:
|
||||
1. 回复要符合微信聊天风格,轻松友好
|
||||
2. 简洁明了,不要太长(50字以内)
|
||||
3. 如果对方提问,尽量回答问题
|
||||
4. 如果对方分享事情,给予适当回应
|
||||
5. 只返回回复内容,不要其他文字"""
|
||||
|
||||
logger.debug(f"AI 回复 prompt:\n{prompt[:300]}...")
|
||||
|
||||
# 调用 LLM
|
||||
response = self.llm_client.chat([
|
||||
{"role": "user", "content": prompt}
|
||||
])
|
||||
|
||||
return response.get("text", "")
|
||||
text = response.get("text", "").strip()
|
||||
logger.info(f"AI 生成回复: {text[:50]}...")
|
||||
return text
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"AI 生成回复失败: {e}")
|
||||
return ""
|
||||
|
||||
Reference in New Issue
Block a user