fix:修复记忆无法被置入reply的bug

This commit is contained in:
SengokuCola
2025-06-23 13:28:00 +08:00
parent 5ba36dab45
commit 3a4dfa46e7
6 changed files with 71 additions and 89 deletions

View File

@@ -5,8 +5,6 @@ from src.chat.focus_chat.info.info_base import InfoBase
from .base_processor import BaseProcessor
from src.common.logger import get_logger
from src.chat.heart_flow.observation.chatting_observation import ChattingObservation
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.chat.focus_chat.info.cycle_info import CycleInfo
from datetime import datetime
from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config
@@ -55,13 +53,8 @@ class ChattingInfoProcessor(BaseProcessor):
for obs in observations:
# print(f"obs: {obs}")
if isinstance(obs, ChattingObservation):
# print("1111111111111111111111读取111111111111111")
obs_info = ObsInfo()
# 改为异步任务,不阻塞主流程
# asyncio.create_task(self.chat_compress(obs))
# 设置聊天ID
if hasattr(obs, "chat_id"):
obs_info.set_chat_id(obs.chat_id)
@@ -101,10 +94,6 @@ class ChattingInfoProcessor(BaseProcessor):
# logger.debug(f"聊天信息处理器处理后的信息: {obs_info}")
processed_infos.append(obs_info)
if isinstance(obs, HFCloopObservation):
obs_info = CycleInfo()
obs_info.set_observe_info(obs.observe_info)
processed_infos.append(obs_info)
return processed_infos

View File

@@ -131,11 +131,15 @@ def init_prompt():
1.你需要提供用户名和你想要提取的信息名称类型来进行调取
2.请注意,提取的信息类型一定要和用户有关,不要提取无关的信息
3.你也可以调取有关自己({bot_name})的信息
4.如果当前聊天记录中没有需要查询的信息,或者现有信息已经足够回复,请返回{{"none": "不需要查询"}}
请以json格式输出例如
{example_json}
如果不需要查询任何信息,请输出:
{{"none": "不需要查询"}}
请严格按照json输出格式不要输出多余内容可以同时查询多个人的信息
"""
@@ -649,48 +653,53 @@ class PersonImpressionpProcessor(BaseProcessor):
# print(f"content: {content}")
content_json = json.loads(repair_json(content))
# 收集即时提取任务
instant_tasks = []
async_tasks = []
person_info_manager = get_person_info_manager()
for person_name, info_type in content_json.items():
is_bot = person_name == global_config.bot.nickname or person_name in global_config.bot.alias_names
if is_bot:
person_id = person_info_manager.get_person_id("system", "bot_id")
logger.info(f"{self.log_prefix} 检测到对bot自身({person_name})的信息查询使用特殊ID。")
else:
person_id = person_info_manager.get_person_id_by_person_name(person_name)
if not person_id:
logger.warning(f"{self.log_prefix} 未找到用户 {person_name} 的ID跳过调取信息。")
continue
self.info_fetching_cache.append(
{
"person_id": person_id,
"person_name": person_name,
"info_type": info_type,
"start_time": time.time(),
"forget": False,
}
)
if len(self.info_fetching_cache) > 20:
self.info_fetching_cache.pop(0)
logger.info(f"{self.log_prefix} 调取用户 {person_name}{info_type} 信息。")
# 检查是否返回了不需要查询的标志
if "none" in content_json:
logger.info(f"{self.log_prefix} LLM判断当前不需要查询任何信息{content_json.get('none', '')}")
# 跳过新的信息提取,但仍会处理已有缓存
else:
# 收集即时提取任务
instant_tasks.append((person_id, info_type, time.time()))
instant_tasks = []
async_tasks = []
# 执行即时提取任务
if instant_tasks:
await self._execute_instant_extraction_batch(instant_tasks)
person_info_manager = get_person_info_manager()
for person_name, info_type in content_json.items():
is_bot = person_name == global_config.bot.nickname or person_name in global_config.bot.alias_names
if is_bot:
person_id = person_info_manager.get_person_id("system", "bot_id")
logger.info(f"{self.log_prefix} 检测到对bot自身({person_name})的信息查询使用特殊ID。")
else:
person_id = person_info_manager.get_person_id_by_person_name(person_name)
# 启动异步任务(如果不是即时模式)
if async_tasks:
# 异步任务不需要等待完成
pass
if not person_id:
logger.warning(f"{self.log_prefix} 未找到用户 {person_name} 的ID跳过调取信息。")
continue
self.info_fetching_cache.append(
{
"person_id": person_id,
"person_name": person_name,
"info_type": info_type,
"start_time": time.time(),
"forget": False,
}
)
if len(self.info_fetching_cache) > 20:
self.info_fetching_cache.pop(0)
logger.info(f"{self.log_prefix} 调取用户 {person_name}{info_type} 信息。")
# 收集即时提取任务
instant_tasks.append((person_id, info_type, time.time()))
# 执行即时提取任务
if instant_tasks:
await self._execute_instant_extraction_batch(instant_tasks)
# 启动异步任务(如果不是即时模式)
if async_tasks:
# 异步任务不需要等待完成
pass
else:
logger.warning(f"{self.log_prefix} LLM返回空结果关系识别失败。")