frrr
This commit is contained in:
@@ -633,15 +633,12 @@ HFC_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 专注聊天 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 专注聊天 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": ("<level>{time:MM-DD HH:mm}</level> | <light-green>专注聊天 | {message}</light-green>"),
|
||||||
"<level>{time:MM-DD HH:mm}</level> | <light-green>专注聊天 | {message}</light-green>"
|
|
||||||
),
|
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 专注聊天 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 专注聊天 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CONFIRM_STYLE_CONFIG = {
|
CONFIRM_STYLE_CONFIG = {
|
||||||
"console_format": "<RED>{message}</RED>", # noqa: E501
|
"console_format": "<RED>{message}</RED>", # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | EULA与PRIVACY确认 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | EULA与PRIVACY确认 | {message}",
|
||||||
|
|||||||
@@ -213,7 +213,9 @@ class MaiEmoji:
|
|||||||
else:
|
else:
|
||||||
# 如果数据库记录删除失败,但文件可能已删除,记录一个警告
|
# 如果数据库记录删除失败,但文件可能已删除,记录一个警告
|
||||||
if not os.path.exists(file_to_delete):
|
if not os.path.exists(file_to_delete):
|
||||||
logger.warning(f"[警告] 表情包文件 {file_to_delete} 已删除,但数据库记录删除失败 (Hash: {self.hash})")
|
logger.warning(
|
||||||
|
f"[警告] 表情包文件 {file_to_delete} 已删除,但数据库记录删除失败 (Hash: {self.hash})"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
logger.error(f"[错误] 删除表情包数据库记录失败: {self.hash}")
|
logger.error(f"[错误] 删除表情包数据库记录失败: {self.hash}")
|
||||||
return False
|
return False
|
||||||
@@ -558,7 +560,9 @@ class EmojiManager:
|
|||||||
# 优先使用 last_used_time,否则用 timestamp,最后用当前时间
|
# 优先使用 last_used_time,否则用 timestamp,最后用当前时间
|
||||||
last_used = emoji_data.get("last_used_time")
|
last_used = emoji_data.get("last_used_time")
|
||||||
timestamp = emoji_data.get("timestamp")
|
timestamp = emoji_data.get("timestamp")
|
||||||
emoji.last_used_time = last_used if last_used is not None else (timestamp if timestamp is not None else time.time())
|
emoji.last_used_time = (
|
||||||
|
last_used if last_used is not None else (timestamp if timestamp is not None else time.time())
|
||||||
|
)
|
||||||
emoji.register_time = timestamp if timestamp is not None else time.time()
|
emoji.register_time = timestamp if timestamp is not None else time.time()
|
||||||
emoji.format = emoji_data.get("format", "") # 加载格式
|
emoji.format = emoji_data.get("format", "") # 加载格式
|
||||||
|
|
||||||
@@ -573,7 +577,6 @@ class EmojiManager:
|
|||||||
logger.error(f"[加载错误] 处理数据库记录时出错 ({full_path}): {str(e)}")
|
logger.error(f"[加载错误] 处理数据库记录时出错 ({full_path}): {str(e)}")
|
||||||
load_errors += 1
|
load_errors += 1
|
||||||
|
|
||||||
|
|
||||||
# 更新内存中的列表和数量
|
# 更新内存中的列表和数量
|
||||||
self.emoji_objects = emoji_objects
|
self.emoji_objects = emoji_objects
|
||||||
self.emoji_num = len(emoji_objects)
|
self.emoji_num = len(emoji_objects)
|
||||||
@@ -582,7 +585,6 @@ class EmojiManager:
|
|||||||
if load_errors > 0:
|
if load_errors > 0:
|
||||||
logger.warning(f"[数据库] 加载过程中出现 {load_errors} 个错误。")
|
logger.warning(f"[数据库] 加载过程中出现 {load_errors} 个错误。")
|
||||||
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[错误] 从数据库加载所有表情包对象失败: {str(e)}")
|
logger.error(f"[错误] 从数据库加载所有表情包对象失败: {str(e)}")
|
||||||
self.emoji_objects = [] # 加载失败则清空列表
|
self.emoji_objects = [] # 加载失败则清空列表
|
||||||
@@ -604,8 +606,9 @@ class EmojiManager:
|
|||||||
if hash:
|
if hash:
|
||||||
query = {"hash": hash}
|
query = {"hash": hash}
|
||||||
else:
|
else:
|
||||||
logger.warning("[查询] 未提供 hash,将尝试加载所有表情包,建议使用 get_all_emoji_from_db 更新管理器状态。")
|
logger.warning(
|
||||||
|
"[查询] 未提供 hash,将尝试加载所有表情包,建议使用 get_all_emoji_from_db 更新管理器状态。"
|
||||||
|
)
|
||||||
|
|
||||||
emoji_data_list = list(db.emoji.find(query))
|
emoji_data_list = list(db.emoji.find(query))
|
||||||
emoji_objects = []
|
emoji_objects = []
|
||||||
@@ -631,7 +634,9 @@ class EmojiManager:
|
|||||||
emoji.usage_count = emoji_data.get("usage_count", 0)
|
emoji.usage_count = emoji_data.get("usage_count", 0)
|
||||||
last_used = emoji_data.get("last_used_time")
|
last_used = emoji_data.get("last_used_time")
|
||||||
timestamp = emoji_data.get("timestamp")
|
timestamp = emoji_data.get("timestamp")
|
||||||
emoji.last_used_time = last_used if last_used is not None else (timestamp if timestamp is not None else time.time())
|
emoji.last_used_time = (
|
||||||
|
last_used if last_used is not None else (timestamp if timestamp is not None else time.time())
|
||||||
|
)
|
||||||
emoji.register_time = timestamp if timestamp is not None else time.time()
|
emoji.register_time = timestamp if timestamp is not None else time.time()
|
||||||
emoji.format = emoji_data.get("format", "")
|
emoji.format = emoji_data.get("format", "")
|
||||||
emoji_objects.append(emoji)
|
emoji_objects.append(emoji)
|
||||||
@@ -642,7 +647,6 @@ class EmojiManager:
|
|||||||
logger.error(f"[加载错误] 处理数据库记录时出错 ({full_path}): {str(e)}")
|
logger.error(f"[加载错误] 处理数据库记录时出错 ({full_path}): {str(e)}")
|
||||||
load_errors += 1
|
load_errors += 1
|
||||||
|
|
||||||
|
|
||||||
if load_errors > 0:
|
if load_errors > 0:
|
||||||
logger.warning(f"[查询] 加载过程中出现 {load_errors} 个错误。")
|
logger.warning(f"[查询] 加载过程中出现 {load_errors} 个错误。")
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,7 @@ from src.plugins.models.utils_model import LLMRequest
|
|||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
from src.plugins.chat.utils_image import image_path_to_base64 # Local import needed after move
|
from src.plugins.chat.utils_image import image_path_to_base64 # Local import needed after move
|
||||||
from src.plugins.utils.timer_calculator import Timer # <--- Import Timer
|
from src.plugins.utils.timer_calculator import Timer # <--- Import Timer
|
||||||
from src.do_tool.tool_use import ToolUser
|
|
||||||
from src.plugins.emoji_system.emoji_manager import emoji_manager
|
from src.plugins.emoji_system.emoji_manager import emoji_manager
|
||||||
from src.plugins.utils.json_utils import process_llm_tool_calls, extract_tool_call_arguments
|
|
||||||
from src.heart_flow.sub_mind import SubMind
|
from src.heart_flow.sub_mind import SubMind
|
||||||
from src.heart_flow.observation import Observation
|
from src.heart_flow.observation import Observation
|
||||||
from src.plugins.heartFC_chat.heartflow_prompt_builder import global_prompt_manager, prompt_builder
|
from src.plugins.heartFC_chat.heartflow_prompt_builder import global_prompt_manager, prompt_builder
|
||||||
@@ -788,7 +786,9 @@ class HeartFChatting:
|
|||||||
logger.info(f"{self.log_prefix}[Planner] 连续回复 2 次,80% 概率移除 text_reply 和 emoji_reply (触发)")
|
logger.info(f"{self.log_prefix}[Planner] 连续回复 2 次,80% 概率移除 text_reply 和 emoji_reply (触发)")
|
||||||
actions_to_remove_temporarily.extend(["text_reply", "emoji_reply"])
|
actions_to_remove_temporarily.extend(["text_reply", "emoji_reply"])
|
||||||
else:
|
else:
|
||||||
logger.info(f"{self.log_prefix}[Planner] 连续回复 2 次,80% 概率移除 text_reply 和 emoji_reply (未触发)")
|
logger.info(
|
||||||
|
f"{self.log_prefix}[Planner] 连续回复 2 次,80% 概率移除 text_reply 和 emoji_reply (未触发)"
|
||||||
|
)
|
||||||
elif lian_xu_wen_ben_hui_fu == 1:
|
elif lian_xu_wen_ben_hui_fu == 1:
|
||||||
if probability_roll < 0.4:
|
if probability_roll < 0.4:
|
||||||
logger.info(f"{self.log_prefix}[Planner] 连续回复 1 次,40% 概率移除 text_reply (触发)")
|
logger.info(f"{self.log_prefix}[Planner] 连续回复 1 次,40% 概率移除 text_reply (触发)")
|
||||||
@@ -834,7 +834,7 @@ class HeartFChatting:
|
|||||||
current_mind,
|
current_mind,
|
||||||
self.sub_mind.structured_info,
|
self.sub_mind.structured_info,
|
||||||
"", # replan_prompt_str,
|
"", # replan_prompt_str,
|
||||||
current_available_actions # <--- 传入当前可用动作
|
current_available_actions, # <--- 传入当前可用动作
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- 调用 LLM (普通文本生成) ---
|
# --- 调用 LLM (普通文本生成) ---
|
||||||
@@ -860,7 +860,9 @@ class HeartFChatting:
|
|||||||
if not llm_error and llm_content:
|
if not llm_error and llm_content:
|
||||||
try:
|
try:
|
||||||
# 尝试去除可能的 markdown 代码块标记
|
# 尝试去除可能的 markdown 代码块标记
|
||||||
cleaned_content = llm_content.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()
|
cleaned_content = (
|
||||||
|
llm_content.strip().removeprefix("```json").removeprefix("```").removesuffix("```").strip()
|
||||||
|
)
|
||||||
if not cleaned_content:
|
if not cleaned_content:
|
||||||
raise json.JSONDecodeError("Cleaned content is empty", cleaned_content, 0)
|
raise json.JSONDecodeError("Cleaned content is empty", cleaned_content, 0)
|
||||||
parsed_json = json.loads(cleaned_content)
|
parsed_json = json.loads(cleaned_content)
|
||||||
@@ -881,7 +883,9 @@ class HeartFChatting:
|
|||||||
emoji_query = ""
|
emoji_query = ""
|
||||||
# 检查 no_reply 是否也恰好被移除了 (极端情况)
|
# 检查 no_reply 是否也恰好被移除了 (极端情况)
|
||||||
if "no_reply" not in current_available_actions:
|
if "no_reply" not in current_available_actions:
|
||||||
logger.error(f"{self.log_prefix}[Planner] 严重错误:'no_reply' 动作也不可用!无法执行任何动作。")
|
logger.error(
|
||||||
|
f"{self.log_prefix}[Planner] 严重错误:'no_reply' 动作也不可用!无法执行任何动作。"
|
||||||
|
)
|
||||||
action = "error" # 回退到错误状态
|
action = "error" # 回退到错误状态
|
||||||
reasoning = "无法执行任何有效动作,包括 no_reply"
|
reasoning = "无法执行任何有效动作,包括 no_reply"
|
||||||
llm_error = True # 标记为严重错误
|
llm_error = True # 标记为严重错误
|
||||||
@@ -898,7 +902,9 @@ class HeartFChatting:
|
|||||||
)
|
)
|
||||||
|
|
||||||
except json.JSONDecodeError as json_e:
|
except json.JSONDecodeError as json_e:
|
||||||
logger.warning(f"{self.log_prefix}[Planner] 解析LLM响应JSON失败: {json_e}. LLM原始输出: '{llm_content}'")
|
logger.warning(
|
||||||
|
f"{self.log_prefix}[Planner] 解析LLM响应JSON失败: {json_e}. LLM原始输出: '{llm_content}'"
|
||||||
|
)
|
||||||
reasoning = f"解析LLM响应JSON失败: {json_e}. 将使用默认动作 'no_reply'."
|
reasoning = f"解析LLM响应JSON失败: {json_e}. 将使用默认动作 'no_reply'."
|
||||||
action = "no_reply" # 解析失败则默认不回复
|
action = "no_reply" # 解析失败则默认不回复
|
||||||
emoji_query = ""
|
emoji_query = ""
|
||||||
@@ -1197,7 +1203,7 @@ class HeartFChatting:
|
|||||||
replan="", # 暂时留空 replan 信息
|
replan="", # 暂时留空 replan 信息
|
||||||
cycle_info_block=cycle_info_block,
|
cycle_info_block=cycle_info_block,
|
||||||
action_options_text=action_options_text, # 传入可用动作描述
|
action_options_text=action_options_text, # 传入可用动作描述
|
||||||
example_action=example_action_key # 传入示例动作键
|
example_action=example_action_key, # 传入示例动作键
|
||||||
)
|
)
|
||||||
|
|
||||||
return prompt
|
return prompt
|
||||||
|
|||||||
@@ -7,14 +7,13 @@ from src.plugins.utils.chat_message_builder import build_readable_messages, get_
|
|||||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||||
from src.plugins.chat.utils import get_embedding
|
from src.plugins.chat.utils import get_embedding
|
||||||
import time
|
import time
|
||||||
from typing import Union, Optional, Dict, Any
|
from typing import Union, Optional
|
||||||
from ...common.database import db
|
from ...common.database import db
|
||||||
from ..chat.utils import get_recent_group_speaker
|
from ..chat.utils import get_recent_group_speaker
|
||||||
from ..moods.moods import MoodManager
|
from ..moods.moods import MoodManager
|
||||||
from ..memory_system.Hippocampus import HippocampusManager
|
from ..memory_system.Hippocampus import HippocampusManager
|
||||||
from ..schedule.schedule_generator import bot_schedule
|
from ..schedule.schedule_generator import bot_schedule
|
||||||
from ..knowledge.knowledge_lib import qa_manager
|
from ..knowledge.knowledge_lib import qa_manager
|
||||||
import traceback
|
|
||||||
|
|
||||||
logger = get_logger("prompt")
|
logger = get_logger("prompt")
|
||||||
|
|
||||||
@@ -50,7 +49,7 @@ def init_prompt():
|
|||||||
|
|
||||||
# Planner提示词 - 修改为要求 JSON 输出
|
# Planner提示词 - 修改为要求 JSON 输出
|
||||||
Prompt(
|
Prompt(
|
||||||
'''你的名字是{bot_name},{prompt_personality},你现在正在一个群聊中。需要基于以下信息决定如何参与对话:
|
"""你的名字是{bot_name},{prompt_personality},你现在正在一个群聊中。需要基于以下信息决定如何参与对话:
|
||||||
{structured_info_block}
|
{structured_info_block}
|
||||||
{chat_content_block}
|
{chat_content_block}
|
||||||
{current_mind_block}
|
{current_mind_block}
|
||||||
@@ -106,7 +105,7 @@ JSON 结构如下,包含三个字段 "action", "reasoning", "emoji_query":
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
请输出你的决策 JSON:
|
请输出你的决策 JSON:
|
||||||
''', # 使用三引号避免内部引号问题
|
""", # 使用三引号避免内部引号问题
|
||||||
"planner_prompt", # 保持名称不变,替换内容
|
"planner_prompt", # 保持名称不变,替换内容
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user