feat(chat): 为聊天上下文增加数据库历史回退
当会话中没有已读消息时(例如,在机器人重启后),回复生成器现在会尝试从数据库中加载最近的聊天记录作为备用上下文。 此举旨在解决机器人因缺乏上下文而无法生成相关回复的问题,通过提供历史情景参考,显著提升了在中断对话后恢复聊天的连贯性。加载的数据库消息会与当前未读消息进行去重,以避免信息冗余。
This commit is contained in:
@@ -698,6 +698,31 @@ class DefaultReplyer:
|
|||||||
truncate=True,
|
truncate=True,
|
||||||
)
|
)
|
||||||
read_history_prompt = f"这是已读历史消息,仅作为当前聊天情景的参考:\n{read_content}"
|
read_history_prompt = f"这是已读历史消息,仅作为当前聊天情景的参考:\n{read_content}"
|
||||||
|
else:
|
||||||
|
# 如果没有已读消息,则从数据库加载最近的上下文
|
||||||
|
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:
|
else:
|
||||||
read_history_prompt = "暂无已读历史消息"
|
read_history_prompt = "暂无已读历史消息"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user