feat(reminder): 使用 LLM 生成个性化提醒消息
将提醒插件中的确认消息和提醒通知改为通过 `generator_api` 调用 LLM 生成,以提供更具个性和符合人设的互动体验。 - **动态确认消息**: 在用户成功设置提醒后,调用 LLM 生成一条生动的确认回复,取代了原有的固定文本。 - **动态提醒内容**: 在提醒任务触发时,调用 LLM 根据提醒内容、设置者和被提醒者信息生成一条定制化的提醒消息。 - **回退机制**: 为确保核心功能的稳定性,在 LLM 调用失败或未返回有效内容时,系统将自动回退到原有的硬编码模板消息。
This commit is contained in:
@@ -13,7 +13,7 @@ from src.plugin_system import (
|
|||||||
register_plugin,
|
register_plugin,
|
||||||
ActionActivationType,
|
ActionActivationType,
|
||||||
)
|
)
|
||||||
from src.plugin_system.apis import send_api, llm_api
|
from src.plugin_system.apis import send_api, llm_api, generator_api
|
||||||
from src.plugin_system.base.component_types import ChatType, ComponentType
|
from src.plugin_system.base.component_types import ChatType, ComponentType
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
@@ -22,7 +22,7 @@ logger = get_logger(__name__)
|
|||||||
# ============================ AsyncTask ============================
|
# ============================ AsyncTask ============================
|
||||||
|
|
||||||
class ReminderTask(AsyncTask):
|
class ReminderTask(AsyncTask):
|
||||||
def __init__(self, delay: float, stream_id: str, group_id: Optional[str], is_group: bool, target_user_id: str, target_user_name: str, event_details: str, creator_name: str):
|
def __init__(self, delay: float, stream_id: str, group_id: Optional[str], is_group: bool, target_user_id: str, target_user_name: str, event_details: str, creator_name: str, chat_stream: "ChatStream"):
|
||||||
super().__init__(task_name=f"ReminderTask_{target_user_id}_{datetime.now().timestamp()}")
|
super().__init__(task_name=f"ReminderTask_{target_user_id}_{datetime.now().timestamp()}")
|
||||||
self.delay = delay
|
self.delay = delay
|
||||||
self.stream_id = stream_id
|
self.stream_id = stream_id
|
||||||
@@ -32,6 +32,7 @@ class ReminderTask(AsyncTask):
|
|||||||
self.target_user_name = target_user_name
|
self.target_user_name = target_user_name
|
||||||
self.event_details = event_details
|
self.event_details = event_details
|
||||||
self.creator_name = creator_name
|
self.creator_name = creator_name
|
||||||
|
self.chat_stream = chat_stream
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
try:
|
try:
|
||||||
@@ -41,10 +42,32 @@ class ReminderTask(AsyncTask):
|
|||||||
|
|
||||||
logger.info(f"执行提醒任务: 给 {self.target_user_name} 发送关于 '{self.event_details}' 的提醒")
|
logger.info(f"执行提醒任务: 给 {self.target_user_name} 发送关于 '{self.event_details}' 的提醒")
|
||||||
|
|
||||||
reminder_text = f"叮咚!这是 {self.creator_name} 让我准时提醒你的事情:\n\n{self.event_details}"
|
extra_info = f"现在是提醒时间,请你以一种符合你人设的、俏皮的方式提醒 {self.target_user_name}。\n提醒内容: {self.event_details}\n设置提醒的人: {self.creator_name}"
|
||||||
|
success, reply_set, _ = await generator_api.generate_reply(
|
||||||
|
chat_stream=self.chat_stream,
|
||||||
|
extra_info=extra_info,
|
||||||
|
reply_message=self.chat_stream.context.get_last_message().to_dict(),
|
||||||
|
request_type="plugin.reminder.remind_message"
|
||||||
|
)
|
||||||
|
|
||||||
|
if success and reply_set:
|
||||||
|
for _, text in reply_set:
|
||||||
|
if self.is_group:
|
||||||
|
message_payload = [
|
||||||
|
{"type": "at", "data": {"qq": self.target_user_id}},
|
||||||
|
{"type": "text", "data": {"text": f" {text}"}}
|
||||||
|
]
|
||||||
|
await send_api.adapter_command_to_stream(
|
||||||
|
action="send_group_msg",
|
||||||
|
params={"group_id": self.group_id, "message": message_payload},
|
||||||
|
stream_id=self.stream_id
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await send_api.text_to_stream(text=text, stream_id=self.stream_id)
|
||||||
|
else:
|
||||||
|
# Fallback message
|
||||||
|
reminder_text = f"叮咚!这是 {self.creator_name} 让我准时提醒你的事情:\n\n{self.event_details}"
|
||||||
if self.is_group:
|
if self.is_group:
|
||||||
# 在群聊中,构造 @ 消息段并发送
|
|
||||||
message_payload = [
|
message_payload = [
|
||||||
{"type": "at", "data": {"qq": self.target_user_id}},
|
{"type": "at", "data": {"qq": self.target_user_id}},
|
||||||
{"type": "text", "data": {"text": f" {reminder_text}"}}
|
{"type": "text", "data": {"text": f" {reminder_text}"}}
|
||||||
@@ -55,7 +78,6 @@ class ReminderTask(AsyncTask):
|
|||||||
stream_id=self.stream_id
|
stream_id=self.stream_id
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# 在私聊中,直接发送文本
|
|
||||||
await send_api.text_to_stream(text=reminder_text, stream_id=self.stream_id)
|
await send_api.text_to_stream(text=reminder_text, stream_id=self.stream_id)
|
||||||
|
|
||||||
logger.info(f"提醒任务 {self.task_name} 成功完成。")
|
logger.info(f"提醒任务 {self.task_name} 成功完成。")
|
||||||
@@ -261,13 +283,27 @@ class RemindAction(BaseAction):
|
|||||||
target_user_id=str(user_id_to_remind),
|
target_user_id=str(user_id_to_remind),
|
||||||
target_user_name=str(user_name_to_remind),
|
target_user_name=str(user_name_to_remind),
|
||||||
event_details=str(event_details),
|
event_details=str(event_details),
|
||||||
creator_name=str(self.user_nickname)
|
creator_name=str(self.user_nickname),
|
||||||
|
chat_stream=self.chat_stream
|
||||||
)
|
)
|
||||||
await async_task_manager.add_task(reminder_task)
|
await async_task_manager.add_task(reminder_task)
|
||||||
|
|
||||||
# 4. 发送确认消息
|
# 4. 生成并发送确认消息
|
||||||
confirm_message = f"好的,我记下了。\n将在 {target_time.strftime('%Y-%m-%d %H:%M:%S')} 提醒 {user_name_to_remind}:\n{event_details}"
|
extra_info = f"你已经成功设置了一个提醒,请以一种符合你人设的、俏皮的方式回复用户。\n提醒时间: {target_time.strftime('%Y-%m-%d %H:%M:%S')}\n提醒对象: {user_name_to_remind}\n提醒内容: {event_details}"
|
||||||
await self.send_text(confirm_message)
|
last_message = self.chat_stream.context.get_last_message()
|
||||||
|
success, reply_set, _ = await generator_api.generate_reply(
|
||||||
|
chat_stream=self.chat_stream,
|
||||||
|
extra_info=extra_info,
|
||||||
|
reply_message=last_message.to_dict(),
|
||||||
|
request_type="plugin.reminder.confirm_message"
|
||||||
|
)
|
||||||
|
if success and reply_set:
|
||||||
|
for _, text in reply_set:
|
||||||
|
await self.send_text(text)
|
||||||
|
else:
|
||||||
|
# Fallback message
|
||||||
|
fallback_message = f"好的,我记下了。\n将在 {target_time.strftime('%Y-%m-%d %H:%M:%S')} 提醒 {user_name_to_remind}:\n{event_details}"
|
||||||
|
await self.send_text(fallback_message)
|
||||||
|
|
||||||
return True, "提醒设置成功"
|
return True, "提醒设置成功"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user