feat(emoji): 增强消息上下文下的表情选择并修复存储用户信息的问题
该提交对表情操作及相关消息发送 API 进行了重大改进。 现在,表情选择逻辑更加具备上下文感知能力。LLM 提示现在包括机器人的待发送回复内容,使其能够根据对话历史和自身回复选择更合适的表情。用于上下文的近期聊天记录也有所增加。 此外,修复了插件发送 API (`send_api`) 中的一个错误。之前,当机器人发送消息时,消息在数据库中存储的是接收者的用户信息,而非机器人的信息。本次提交通过显式传递并使用机器人的用户信息进行存储,确保消息历史准确反映发送者。 其他更改包括: - 重构表情操作的激活逻辑以提高清晰度。 - 改进 LLM 选择的表情描述匹配算法。- 为配置访问添加必要的类型安全检查。
This commit is contained in:
@@ -13,7 +13,7 @@ from mofox_wire import MessageEnvelope
|
||||
from src.chat.message_receive.message_processor import process_message_from_dict
|
||||
from src.chat.message_receive.storage import MessageStorage
|
||||
from src.chat.utils.utils import calculate_typing_time, truncate_message
|
||||
from src.common.data_models.database_data_model import DatabaseMessages
|
||||
from src.common.data_models.database_data_model import DatabaseMessages, DatabaseUserInfo
|
||||
from src.common.logger import get_logger
|
||||
from src.config.config import global_config
|
||||
|
||||
@@ -27,13 +27,13 @@ logger = get_logger("sender")
|
||||
|
||||
async def send_envelope(
|
||||
envelope: MessageEnvelope,
|
||||
chat_stream: "ChatStream" | None = None,
|
||||
chat_stream: ChatStream | None = None,
|
||||
db_message: DatabaseMessages | None = None,
|
||||
show_log: bool = True,
|
||||
) -> bool:
|
||||
"""发送消息"""
|
||||
message_preview = truncate_message(
|
||||
(db_message.processed_plain_text if db_message else str(envelope.get("message_segment", ""))),
|
||||
(db_message.processed_plain_text or "" if db_message else str(envelope.get("message_segment", ""))),
|
||||
max_length=120,
|
||||
)
|
||||
|
||||
@@ -81,6 +81,7 @@ class HeartFCSender:
|
||||
show_log: bool = True,
|
||||
thinking_start_time: float = 0.0,
|
||||
display_message: str | None = None,
|
||||
storage_user_info: "DatabaseUserInfo | None" = None,
|
||||
) -> bool:
|
||||
if not chat_stream:
|
||||
logger.error("消息缺少 chat_stream,无法发送")
|
||||
@@ -93,6 +94,13 @@ class HeartFCSender:
|
||||
platform=chat_stream.platform,
|
||||
)
|
||||
|
||||
# 如果提供了用于存储的用户信息,则覆盖
|
||||
if storage_message and storage_user_info:
|
||||
db_message.user_info.user_id = storage_user_info.user_id
|
||||
db_message.user_info.user_nickname = storage_user_info.user_nickname
|
||||
db_message.user_info.user_cardname = storage_user_info.user_cardname
|
||||
db_message.user_info.platform = storage_user_info.platform
|
||||
|
||||
# 使用调用方指定的展示文本
|
||||
if display_message:
|
||||
db_message.display_message = display_message
|
||||
@@ -125,9 +133,13 @@ class HeartFCSender:
|
||||
|
||||
# 将发送的消息写入上下文历史
|
||||
try:
|
||||
if chat_stream.context:
|
||||
if chat_stream and chat_stream.context and global_config.chat:
|
||||
context = chat_stream.context
|
||||
max_context_size = getattr(global_config.chat, "max_context_size", 40)
|
||||
chat_config = global_config.chat
|
||||
if chat_config:
|
||||
max_context_size = getattr(chat_config, "max_context_size", 40)
|
||||
else:
|
||||
max_context_size = 40
|
||||
|
||||
if len(context.history_messages) >= max_context_size:
|
||||
context.history_messages = context.history_messages[1:]
|
||||
|
||||
Reference in New Issue
Block a user