From 8d8cae8c10e23ff995d435cf6d70fe234e792efb Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sat, 13 Sep 2025 14:46:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E8=BF=87=E6=BB=A4=E5=99=A8=E5=92=8C=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=99=A8=E4=B8=AD=E7=9A=84=E6=BD=9C=E5=9C=A8?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 `plan_filter.py` 中,当LLM未指定 `target_message_id` 时,明确将目标消息设置为最新的消息,避免后续操作因 `target_message_dict` 未定义而出错。 - 在 `chat_message_builder.py` 中,为 `replace_user_references_sync` 函数增加了对 `content` 为空的检查,防止后续处理引发异常。 - 将数据库查询从 `.scalar()` 改为 `.scalar_one_or_none()`,以更清晰地处理未找到结果的情况。 --- src/chat/planner_actions/plan_filter.py | 12 +++++++----- src/chat/utils/chat_message_builder.py | 7 +++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/chat/planner_actions/plan_filter.py b/src/chat/planner_actions/plan_filter.py index 00097870c..32ad9586b 100644 --- a/src/chat/planner_actions/plan_filter.py +++ b/src/chat/planner_actions/plan_filter.py @@ -233,11 +233,13 @@ class PlanFilter: if action not in ["no_action", "no_reply", "do_nothing", "proactive_reply"]: if target_message_id := action_json.get("target_message_id"): target_message_dict = self._find_message_by_id(target_message_id, message_id_list) - if target_message_dict is None: - target_message_dict = self._get_latest_message(message_id_list) - if target_message_dict: - from src.common.data_models.database_data_model import DatabaseMessages - target_message_obj = DatabaseMessages(**target_message_dict) + else: + # 如果LLM没有指定target_message_id,我们就默认选择最新的一条消息 + target_message_dict = self._get_latest_message(message_id_list) + + if target_message_dict: + from src.common.data_models.database_data_model import DatabaseMessages + target_message_obj = DatabaseMessages(**target_message_dict) available_action_names = list(plan.available_actions.keys()) if action not in ["no_action", "no_reply", "reply", "do_nothing", "proactive_reply"] and action not in available_action_names: diff --git a/src/chat/utils/chat_message_builder.py b/src/chat/utils/chat_message_builder.py index 38b8839ac..5bdee8cd2 100644 --- a/src/chat/utils/chat_message_builder.py +++ b/src/chat/utils/chat_message_builder.py @@ -35,6 +35,9 @@ def replace_user_references_sync( Returns: str: 处理后的内容字符串 """ + if not content: + return "" + if name_resolver is None: def default_resolver(platform: str, user_id: str) -> str: # 检查是否是机器人自己 @@ -812,8 +815,8 @@ def build_pic_mapping_info(pic_id_mapping: Dict[str, str]) -> str: description = "[图片内容未知]" # 默认描述 try: with get_db_session() as session: - image = session.execute(select(Images).where(Images.image_id == pic_id)).scalar() - if image and image.description: + image = session.execute(select(Images).where(Images.image_id == pic_id)).scalar_one_or_none() + if image and image.description: # type: ignore description = image.description except Exception: # 如果查询失败,保持默认描述