refactor(chat): 将用户引用处理从同步改为异步,优化性能
This commit is contained in:
@@ -18,7 +18,7 @@ from src.chat.message_receive.uni_message_sender import HeartFCSender
|
||||
from src.chat.utils.chat_message_builder import (
|
||||
build_readable_messages,
|
||||
get_raw_msg_before_timestamp_with_chat,
|
||||
replace_user_references_sync,
|
||||
replace_user_references_async,
|
||||
)
|
||||
from src.chat.utils.memory_mappings import get_memory_type_chinese_label
|
||||
|
||||
@@ -1025,9 +1025,9 @@ class DefaultReplyer:
|
||||
sender_name = "未知用户"
|
||||
|
||||
# 处理消息内容中的用户引用,确保bot回复在消息内容中也正确显示
|
||||
from src.chat.utils.chat_message_builder import replace_user_references_sync
|
||||
from src.chat.utils.chat_message_builder import replace_user_references_async
|
||||
if msg_content:
|
||||
msg_content = replace_user_references_sync(
|
||||
msg_content = await replace_user_references_async(
|
||||
msg_content,
|
||||
platform,
|
||||
replace_bot_name=True
|
||||
@@ -1126,8 +1126,8 @@ class DefaultReplyer:
|
||||
sender_name = "未知用户"
|
||||
|
||||
# 处理消息内容中的用户引用,确保bot回复在消息内容中也正确显示
|
||||
from src.chat.utils.chat_message_builder import replace_user_references_sync
|
||||
msg_content = replace_user_references_sync(
|
||||
from src.chat.utils.chat_message_builder import replace_user_references_async
|
||||
msg_content = await replace_user_references_async(
|
||||
msg_content,
|
||||
platform,
|
||||
replace_bot_name=True
|
||||
@@ -1264,7 +1264,7 @@ class DefaultReplyer:
|
||||
person_id = await person_info_manager.get_person_id_by_person_name(sender)
|
||||
platform = chat_stream.platform
|
||||
|
||||
target = replace_user_references_sync(target, chat_stream.platform, replace_bot_name=True)
|
||||
target = await replace_user_references_async(target, chat_stream.platform, replace_bot_name=True)
|
||||
|
||||
# 构建action描述 (如果启用planner)
|
||||
action_descriptions = ""
|
||||
@@ -1909,9 +1909,6 @@ class DefaultReplyer:
|
||||
return ""
|
||||
|
||||
async def build_relation_info(self, sender: str, target: str):
|
||||
if not global_config.affinity_flow.enable_relationship_tracking:
|
||||
return ""
|
||||
|
||||
# 获取用户ID
|
||||
person_info_manager = get_person_info_manager()
|
||||
person_id = await person_info_manager.get_person_id_by_person_name(sender)
|
||||
|
||||
@@ -43,14 +43,13 @@ def replace_user_references_sync(
|
||||
return ""
|
||||
|
||||
if name_resolver is None:
|
||||
person_info_manager = get_person_info_manager()
|
||||
|
||||
def default_resolver(platform: str, user_id: str) -> str:
|
||||
# 检查是否是机器人自己
|
||||
if replace_bot_name and user_id == global_config.bot.qq_account:
|
||||
return f"{global_config.bot.nickname}(你)"
|
||||
person_id = PersonInfoManager.get_person_id(platform, user_id)
|
||||
return person_info_manager.get_value(person_id, "person_name") or user_id # type: ignore
|
||||
# 同步函数中无法使用异步的 get_value,直接返回 user_id
|
||||
# 建议调用方使用 replace_user_references_async 以获取完整的用户名
|
||||
return user_id
|
||||
|
||||
name_resolver = default_resolver
|
||||
|
||||
|
||||
@@ -1086,9 +1086,6 @@ class Prompt:
|
||||
Returns:
|
||||
str: 格式化后的关系信息字符串,或在失败时返回空字符串。
|
||||
"""
|
||||
if not global_config.affinity_flow.enable_relationship_tracking:
|
||||
return ""
|
||||
|
||||
from src.person_info.relationship_fetcher import relationship_fetcher_manager
|
||||
|
||||
relationship_fetcher = relationship_fetcher_manager.get_fetcher(chat_id)
|
||||
|
||||
@@ -159,6 +159,10 @@ class ChatterActionPlanner:
|
||||
action_data={},
|
||||
action_message=None,
|
||||
)
|
||||
|
||||
# 更新连续不回复计数
|
||||
await self._update_interest_calculator_state(replied=False)
|
||||
|
||||
initial_plan = await self.generator.generate(chat_mode)
|
||||
filtered_plan = initial_plan
|
||||
filtered_plan.decided_actions = [no_action]
|
||||
@@ -218,24 +222,27 @@ class ChatterActionPlanner:
|
||||
# 6. 根据执行结果更新统计信息
|
||||
self._update_stats_from_execution_result(execution_result)
|
||||
|
||||
# 7. Focus模式下如果执行了reply动作,根据focus_energy概率切换到Normal模式
|
||||
# 7. 更新兴趣计算器状态
|
||||
if filtered_plan.decided_actions:
|
||||
has_reply = any(
|
||||
action.action_type in ["reply", "proactive_reply"]
|
||||
for action in filtered_plan.decided_actions
|
||||
)
|
||||
else:
|
||||
has_reply = False
|
||||
await self._update_interest_calculator_state(replied=has_reply)
|
||||
|
||||
# 8. Focus模式下如果执行了reply动作,根据focus_energy概率切换到Normal模式
|
||||
if chat_mode == ChatMode.FOCUS and context:
|
||||
if filtered_plan.decided_actions:
|
||||
has_reply = any(
|
||||
action.action_type in ["reply", "proactive_reply"]
|
||||
for action in filtered_plan.decided_actions
|
||||
)
|
||||
else:
|
||||
has_reply = False
|
||||
if has_reply and global_config.affinity_flow.enable_normal_mode:
|
||||
await self._check_enter_normal_mode(context)
|
||||
|
||||
# 8. 清理处理标记
|
||||
# 9. 清理处理标记
|
||||
if context:
|
||||
context.processing_message_id = None
|
||||
logger.debug("已清理处理标记,完成规划流程")
|
||||
|
||||
# 9. 返回结果
|
||||
# 10. 返回结果
|
||||
return self._build_return_result(filtered_plan)
|
||||
|
||||
except Exception as e:
|
||||
@@ -340,6 +347,9 @@ class ChatterActionPlanner:
|
||||
self._update_stats_from_execution_result(execution_result)
|
||||
|
||||
logger.info("Normal模式: 执行reply动作完成")
|
||||
|
||||
# 更新兴趣计算器状态(回复成功,重置不回复计数)
|
||||
await self._update_interest_calculator_state(replied=True)
|
||||
|
||||
# 清理处理标记
|
||||
if context:
|
||||
@@ -361,6 +371,9 @@ class ChatterActionPlanner:
|
||||
action_message=None,
|
||||
)
|
||||
|
||||
# 更新连续不回复计数
|
||||
await self._update_interest_calculator_state(replied=False)
|
||||
|
||||
# 无论是否回复,都进行退出normal模式的判定
|
||||
await self._check_exit_normal_mode(context)
|
||||
|
||||
@@ -450,6 +463,30 @@ class ChatterActionPlanner:
|
||||
except Exception as e:
|
||||
logger.warning(f"检查退出Normal模式失败: {e}")
|
||||
|
||||
async def _update_interest_calculator_state(self, replied: bool) -> None:
|
||||
"""更新兴趣计算器状态(连续不回复计数和回复后降低机制)
|
||||
|
||||
Args:
|
||||
replied: 是否回复了消息
|
||||
"""
|
||||
try:
|
||||
from src.chat.interest_system.interest_manager import get_interest_manager
|
||||
from src.plugins.built_in.affinity_flow_chatter.core.affinity_interest_calculator import (
|
||||
AffinityInterestCalculator,
|
||||
)
|
||||
|
||||
interest_manager = get_interest_manager()
|
||||
calculator = interest_manager.get_current_calculator()
|
||||
|
||||
if calculator and isinstance(calculator, AffinityInterestCalculator):
|
||||
calculator.on_message_processed(replied)
|
||||
logger.debug(f"已更新兴趣计算器状态: replied={replied}")
|
||||
else:
|
||||
logger.debug("未找到 AffinityInterestCalculator,跳过状态更新")
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"更新兴趣计算器状态失败: {e}")
|
||||
|
||||
async def _sync_chat_mode_to_stream(self, context: "StreamContext") -> None:
|
||||
"""同步chat_mode到ChatStream"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user