fix:优化reply,填补缺失值,youhualog
This commit is contained in:
@@ -1750,6 +1750,7 @@ class HippocampusManager:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"文本产生激活值失败: {e}")
|
logger.error(f"文本产生激活值失败: {e}")
|
||||||
response = 0.0
|
response = 0.0
|
||||||
|
keywords = [] # 在异常情况下初始化 keywords 为空列表
|
||||||
return response, keywords
|
return response, keywords
|
||||||
|
|
||||||
def get_memory_from_keyword(self, keyword: str, max_depth: int = 2) -> list:
|
def get_memory_from_keyword(self, keyword: str, max_depth: int = 2) -> list:
|
||||||
|
|||||||
@@ -127,8 +127,10 @@ class ActionModifier:
|
|||||||
if all_removals:
|
if all_removals:
|
||||||
removals_summary = " | ".join([f"{name}({reason})" for name, reason in all_removals])
|
removals_summary = " | ".join([f"{name}({reason})" for name, reason in all_removals])
|
||||||
|
|
||||||
|
available_actions = list(self.action_manager.get_using_actions().keys())
|
||||||
|
available_actions_text = "、".join(available_actions) if available_actions else "无"
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{self.log_prefix} 动作修改流程结束,最终可用动作: {list(self.action_manager.get_using_actions().keys())}||移除记录: {removals_summary}"
|
f"{self.log_prefix} 当前可用动作: {available_actions_text}||移除: {removals_summary}"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _check_action_associated_types(self, all_actions: Dict[str, ActionInfo], chat_context: ChatMessageContext):
|
def _check_action_associated_types(self, all_actions: Dict[str, ActionInfo], chat_context: ChatMessageContext):
|
||||||
|
|||||||
@@ -75,20 +75,14 @@ def init_prompt():
|
|||||||
{relation_info_block}
|
{relation_info_block}
|
||||||
{extra_info_block}
|
{extra_info_block}
|
||||||
|
|
||||||
|
|
||||||
{identity}
|
{identity}
|
||||||
|
|
||||||
{action_descriptions}
|
{action_descriptions}
|
||||||
你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你主要还是关注你和{sender_name}的聊天内容。
|
|
||||||
|
|
||||||
{time_block}
|
{time_block}
|
||||||
这是所有聊天内容:
|
你现在的主要任务是和 {sender_name} 聊天。同时,也有其他用户会参与聊天,你可以参考他们的回复内容,但是你现在想回复{sender_name}的发言。
|
||||||
|
|
||||||
{background_dialogue_prompt}
|
{background_dialogue_prompt}
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
{time_block}
|
|
||||||
这是你和{sender_name}的对话,你们正在交流中:
|
|
||||||
|
|
||||||
{core_dialogue_prompt}
|
{core_dialogue_prompt}
|
||||||
|
|
||||||
{reply_target_block}
|
{reply_target_block}
|
||||||
@@ -555,7 +549,7 @@ class DefaultReplyer:
|
|||||||
return name, result, duration
|
return name, result, duration
|
||||||
|
|
||||||
def build_s4u_chat_history_prompts(
|
def build_s4u_chat_history_prompts(
|
||||||
self, message_list_before_now: List[Dict[str, Any]], target_user_id: str
|
self, message_list_before_now: List[Dict[str, Any]], target_user_id: str, sender: str
|
||||||
) -> Tuple[str, str]:
|
) -> Tuple[str, str]:
|
||||||
"""
|
"""
|
||||||
构建 s4u 风格的分离对话 prompt
|
构建 s4u 风格的分离对话 prompt
|
||||||
@@ -568,7 +562,6 @@ class DefaultReplyer:
|
|||||||
Tuple[str, str]: (核心对话prompt, 背景对话prompt)
|
Tuple[str, str]: (核心对话prompt, 背景对话prompt)
|
||||||
"""
|
"""
|
||||||
core_dialogue_list = []
|
core_dialogue_list = []
|
||||||
background_dialogue_list = []
|
|
||||||
bot_id = str(global_config.bot.qq_account)
|
bot_id = str(global_config.bot.qq_account)
|
||||||
|
|
||||||
# 过滤消息:分离bot和目标用户的对话 vs 其他用户的对话
|
# 过滤消息:分离bot和目标用户的对话 vs 其他用户的对话
|
||||||
@@ -580,27 +573,35 @@ class DefaultReplyer:
|
|||||||
if (msg_user_id == bot_id and reply_to_user_id == target_user_id) or msg_user_id == target_user_id:
|
if (msg_user_id == bot_id and reply_to_user_id == target_user_id) or msg_user_id == target_user_id:
|
||||||
# bot 和目标用户的对话
|
# bot 和目标用户的对话
|
||||||
core_dialogue_list.append(msg_dict)
|
core_dialogue_list.append(msg_dict)
|
||||||
else:
|
|
||||||
# 其他用户的对话
|
|
||||||
background_dialogue_list.append(msg_dict)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"处理消息记录时出错: {msg_dict}, 错误: {e}")
|
logger.error(f"处理消息记录时出错: {msg_dict}, 错误: {e}")
|
||||||
|
|
||||||
# 构建背景对话 prompt
|
# 构建背景对话 prompt
|
||||||
background_dialogue_prompt = ""
|
all_dialogue_prompt = ""
|
||||||
if message_list_before_now:
|
if message_list_before_now:
|
||||||
latest_25_msgs = message_list_before_now[-int(global_config.chat.max_context_size * 0.5) :]
|
latest_25_msgs = message_list_before_now[-int(global_config.chat.max_context_size) :]
|
||||||
background_dialogue_prompt_str = build_readable_messages(
|
all_dialogue_prompt_str = build_readable_messages(
|
||||||
latest_25_msgs,
|
latest_25_msgs,
|
||||||
replace_bot_name=True,
|
replace_bot_name=True,
|
||||||
timestamp_mode="normal_no_YMD",
|
timestamp_mode="normal_no_YMD",
|
||||||
truncate=True,
|
truncate=True,
|
||||||
)
|
)
|
||||||
background_dialogue_prompt = f"这是其他用户的发言:\n{background_dialogue_prompt_str}"
|
all_dialogue_prompt = f"所有用户的发言:\n{all_dialogue_prompt_str}"
|
||||||
|
|
||||||
# 构建核心对话 prompt
|
# 构建核心对话 prompt
|
||||||
core_dialogue_prompt = ""
|
core_dialogue_prompt = ""
|
||||||
if core_dialogue_list:
|
if core_dialogue_list:
|
||||||
|
# 检查最新五条消息中是否包含bot自己说的消息
|
||||||
|
latest_5_messages = core_dialogue_list[-5:] if len(core_dialogue_list) >= 5 else core_dialogue_list
|
||||||
|
has_bot_message = any(str(msg.get("user_id")) == bot_id for msg in latest_5_messages)
|
||||||
|
|
||||||
|
# logger.info(f"最新五条消息:{latest_5_messages}")
|
||||||
|
# logger.info(f"最新五条消息中是否包含bot自己说的消息:{has_bot_message}")
|
||||||
|
|
||||||
|
# 如果最新五条消息中不包含bot的消息,则返回空字符串
|
||||||
|
if not has_bot_message:
|
||||||
|
core_dialogue_prompt = ""
|
||||||
|
else:
|
||||||
core_dialogue_list = core_dialogue_list[-int(global_config.chat.max_context_size * 2) :] # 限制消息数量
|
core_dialogue_list = core_dialogue_list[-int(global_config.chat.max_context_size * 2) :] # 限制消息数量
|
||||||
|
|
||||||
core_dialogue_prompt_str = build_readable_messages(
|
core_dialogue_prompt_str = build_readable_messages(
|
||||||
@@ -612,9 +613,13 @@ class DefaultReplyer:
|
|||||||
truncate=True,
|
truncate=True,
|
||||||
show_actions=True,
|
show_actions=True,
|
||||||
)
|
)
|
||||||
core_dialogue_prompt = core_dialogue_prompt_str
|
core_dialogue_prompt = f"""--------------------------------
|
||||||
|
这是你和{sender}的对话,你们正在交流中:
|
||||||
|
{core_dialogue_prompt_str}
|
||||||
|
--------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
return core_dialogue_prompt, background_dialogue_prompt
|
return core_dialogue_prompt, all_dialogue_prompt
|
||||||
|
|
||||||
def build_mai_think_context(
|
def build_mai_think_context(
|
||||||
self,
|
self,
|
||||||
@@ -842,7 +847,7 @@ class DefaultReplyer:
|
|||||||
|
|
||||||
# 构建分离的对话 prompt
|
# 构建分离的对话 prompt
|
||||||
core_dialogue_prompt, background_dialogue_prompt = self.build_s4u_chat_history_prompts(
|
core_dialogue_prompt, background_dialogue_prompt = self.build_s4u_chat_history_prompts(
|
||||||
message_list_before_now_long, target_user_id
|
message_list_before_now_long, target_user_id, sender
|
||||||
)
|
)
|
||||||
|
|
||||||
self.build_mai_think_context(
|
self.build_mai_think_context(
|
||||||
|
|||||||
@@ -1098,6 +1098,10 @@ async def get_person_id_list(messages: List[Dict[str, Any]]) -> List[str]:
|
|||||||
if not all([platform, user_id]) or user_id == global_config.bot.qq_account:
|
if not all([platform, user_id]) or user_id == global_config.bot.qq_account:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# 添加空值检查,防止 platform 为 None 时出错
|
||||||
|
if platform is None:
|
||||||
|
platform = "unknown"
|
||||||
|
|
||||||
if person_id := PersonInfoManager.get_person_id(platform, user_id):
|
if person_id := PersonInfoManager.get_person_id(platform, user_id):
|
||||||
person_ids_set.add(person_id)
|
person_ids_set.add(person_id)
|
||||||
|
|
||||||
|
|||||||
@@ -301,31 +301,6 @@ class Expression(BaseModel):
|
|||||||
class Meta:
|
class Meta:
|
||||||
table_name = "expression"
|
table_name = "expression"
|
||||||
|
|
||||||
|
|
||||||
class ThinkingLog(BaseModel):
|
|
||||||
chat_id = TextField(index=True)
|
|
||||||
trigger_text = TextField(null=True)
|
|
||||||
response_text = TextField(null=True)
|
|
||||||
|
|
||||||
# Store complex dicts/lists as JSON strings
|
|
||||||
trigger_info_json = TextField(null=True)
|
|
||||||
response_info_json = TextField(null=True)
|
|
||||||
timing_results_json = TextField(null=True)
|
|
||||||
chat_history_json = TextField(null=True)
|
|
||||||
chat_history_in_thinking_json = TextField(null=True)
|
|
||||||
chat_history_after_response_json = TextField(null=True)
|
|
||||||
heartflow_data_json = TextField(null=True)
|
|
||||||
reasoning_data_json = TextField(null=True)
|
|
||||||
|
|
||||||
# Add a timestamp for the log entry itself
|
|
||||||
# Ensure you have: from peewee import DateTimeField
|
|
||||||
# And: import datetime
|
|
||||||
created_at = DateTimeField(default=datetime.datetime.now)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
table_name = "thinking_logs"
|
|
||||||
|
|
||||||
|
|
||||||
class GraphNodes(BaseModel):
|
class GraphNodes(BaseModel):
|
||||||
"""
|
"""
|
||||||
用于存储记忆图节点的模型
|
用于存储记忆图节点的模型
|
||||||
@@ -373,7 +348,6 @@ def create_tables():
|
|||||||
OnlineTime,
|
OnlineTime,
|
||||||
PersonInfo,
|
PersonInfo,
|
||||||
Expression,
|
Expression,
|
||||||
ThinkingLog,
|
|
||||||
GraphNodes, # 添加图节点表
|
GraphNodes, # 添加图节点表
|
||||||
GraphEdges, # 添加图边表
|
GraphEdges, # 添加图边表
|
||||||
Memory,
|
Memory,
|
||||||
@@ -403,7 +377,6 @@ def initialize_database(sync_constraints=False):
|
|||||||
PersonInfo,
|
PersonInfo,
|
||||||
Expression,
|
Expression,
|
||||||
Memory,
|
Memory,
|
||||||
ThinkingLog,
|
|
||||||
GraphNodes,
|
GraphNodes,
|
||||||
GraphEdges,
|
GraphEdges,
|
||||||
ActionRecords, # 添加 ActionRecords 到初始化列表
|
ActionRecords, # 添加 ActionRecords 到初始化列表
|
||||||
@@ -502,7 +475,6 @@ def sync_field_constraints():
|
|||||||
PersonInfo,
|
PersonInfo,
|
||||||
Expression,
|
Expression,
|
||||||
Memory,
|
Memory,
|
||||||
ThinkingLog,
|
|
||||||
GraphNodes,
|
GraphNodes,
|
||||||
GraphEdges,
|
GraphEdges,
|
||||||
ActionRecords,
|
ActionRecords,
|
||||||
@@ -682,7 +654,6 @@ def check_field_constraints():
|
|||||||
PersonInfo,
|
PersonInfo,
|
||||||
Expression,
|
Expression,
|
||||||
Memory,
|
Memory,
|
||||||
ThinkingLog,
|
|
||||||
GraphNodes,
|
GraphNodes,
|
||||||
GraphEdges,
|
GraphEdges,
|
||||||
ActionRecords,
|
ActionRecords,
|
||||||
|
|||||||
@@ -81,7 +81,10 @@ class PersonInfoManager:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_person_id(platform: str, user_id: Union[int, str]) -> str:
|
def get_person_id(platform: str, user_id: Union[int, str]) -> str:
|
||||||
"""获取唯一id"""
|
"""获取唯一id"""
|
||||||
if "-" in platform:
|
# 添加空值检查,防止 platform 为 None 时出错
|
||||||
|
if platform is None:
|
||||||
|
platform = "unknown"
|
||||||
|
elif "-" in platform:
|
||||||
platform = platform.split("-")[1]
|
platform = platform.split("-")[1]
|
||||||
|
|
||||||
components = [platform, str(user_id)]
|
components = [platform, str(user_id)]
|
||||||
|
|||||||
@@ -14,9 +14,7 @@ from src.plugin_system.base.config_types import ConfigField
|
|||||||
# 导入依赖的系统组件
|
# 导入依赖的系统组件
|
||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
|
|
||||||
# 导入API模块 - 标准Python包方式
|
from src.plugins.built_in.emoji_plugin.emoji import EmojiAction
|
||||||
# NoReplyAction已集成到heartFC_chat.py中,不再需要导入
|
|
||||||
from src.plugins.built_in.core_actions.emoji import EmojiAction
|
|
||||||
|
|
||||||
logger = get_logger("core_actions")
|
logger = get_logger("core_actions")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user