From 490a3f03fc25171fefbc8fe4eb85250303277321 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Mon, 22 Sep 2025 18:49:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E4=B8=BA=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=8E=86=E5=8F=B2=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当会话中没有已读消息时(例如,在机器人重启后),回复生成器现在会尝试从数据库中加载最近的聊天记录作为备用上下文。 此举旨在解决机器人因缺乏上下文而无法生成相关回复的问题,通过提供历史情景参考,显著提升了在中断对话后恢复聊天的连贯性。加载的数据库消息会与当前未读消息进行去重,以避免信息冗余。 --- src/chat/replyer/default_generator.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 4b02282ce..a720fd745 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -699,7 +699,32 @@ class DefaultReplyer: ) read_history_prompt = f"这是已读历史消息,仅作为当前聊天情景的参考:\n{read_content}" else: - read_history_prompt = "暂无已读历史消息" + # 如果没有已读消息,则从数据库加载最近的上下文 + logger.info("暂无已读历史消息,正在从数据库加载上下文...") + fallback_messages = get_raw_msg_before_timestamp_with_chat( + chat_id=chat_id, + timestamp=time.time(), + limit=global_config.chat.max_context_size, + ) + if fallback_messages: + # 从 unread_messages 获取 message_id 列表,用于去重 + unread_message_ids = {msg.message_id for msg in unread_messages} + filtered_fallback_messages = [ + msg for msg in fallback_messages if msg.get("message_id") not in unread_message_ids + ] + + if filtered_fallback_messages: + read_content = build_readable_messages( + filtered_fallback_messages, + replace_bot_name=True, + timestamp_mode="normal_no_YMD", + truncate=True, + ) + read_history_prompt = f"这是已读历史消息,仅作为当前聊天情景的参考:\n{read_content}" + else: + read_history_prompt = "暂无已读历史消息" + else: + read_history_prompt = "暂无已读历史消息" # 构建未读历史消息 prompt(包含兴趣度) unread_history_prompt = ""