Merge branch 'MaiM-with-u:dev' into dev

This commit is contained in:
A0000Xz
2025-06-12 17:01:48 +08:00
committed by GitHub
8 changed files with 26 additions and 57 deletions

View File

@@ -376,9 +376,7 @@ class HeartFChatting:
if acquired and self._processing_lock.locked(): if acquired and self._processing_lock.locked():
self._processing_lock.release() self._processing_lock.release()
async def _process_processors( async def _process_processors(self, observations: List[Observation]) -> tuple[List[InfoBase], Dict[str, float]]:
self, observations: List[Observation], running_memorys: List[Dict[str, Any]]
) -> tuple[List[InfoBase], Dict[str, float]]:
# 记录并行任务开始时间 # 记录并行任务开始时间
parallel_start_time = time.time() parallel_start_time = time.time()
logger.debug(f"{self.log_prefix} 开始信息处理器并行任务") logger.debug(f"{self.log_prefix} 开始信息处理器并行任务")
@@ -392,7 +390,7 @@ class HeartFChatting:
async def run_with_timeout(proc=processor): async def run_with_timeout(proc=processor):
return await asyncio.wait_for( return await asyncio.wait_for(
proc.process_info(observations=observations, running_memorys=running_memorys), proc.process_info(observations=observations),
timeout=global_config.focus_chat.processor_max_time, timeout=global_config.focus_chat.processor_max_time,
) )
@@ -479,7 +477,7 @@ class HeartFChatting:
# 创建三个并行任务 # 创建三个并行任务
action_modify_task = asyncio.create_task(modify_actions_task()) action_modify_task = asyncio.create_task(modify_actions_task())
memory_task = asyncio.create_task(self.memory_activator.activate_memory(self.observations)) memory_task = asyncio.create_task(self.memory_activator.activate_memory(self.observations))
processor_task = asyncio.create_task(self._process_processors(self.observations, [])) processor_task = asyncio.create_task(self._process_processors(self.observations))
# 等待三个任务完成 # 等待三个任务完成
_, running_memorys, (all_plan_info, processor_time_costs) = await asyncio.gather( _, running_memorys, (all_plan_info, processor_time_costs) = await asyncio.gather(

View File

@@ -1,5 +1,5 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import List, Any, Optional, Dict from typing import List, Any
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.common.logger import get_logger from src.common.logger import get_logger
@@ -23,8 +23,7 @@ class BaseProcessor(ABC):
@abstractmethod @abstractmethod
async def process_info( async def process_info(
self, self,
observations: Optional[List[Observation]] = None, observations: List[Observation] = None,
running_memorys: Optional[List[Dict]] = None,
**kwargs: Any, **kwargs: Any,
) -> List[InfoBase]: ) -> List[InfoBase]:
"""处理信息对象的抽象方法 """处理信息对象的抽象方法

View File

@@ -1,4 +1,4 @@
from typing import List, Optional, Any from typing import List, Any
from src.chat.focus_chat.info.obs_info import ObsInfo from src.chat.focus_chat.info.obs_info import ObsInfo
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
@@ -8,7 +8,6 @@ from src.chat.heart_flow.observation.chatting_observation import ChattingObserva
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.chat.focus_chat.info.cycle_info import CycleInfo from src.chat.focus_chat.info.cycle_info import CycleInfo
from datetime import datetime from datetime import datetime
from typing import Dict
from src.llm_models.utils_model import LLMRequest from src.llm_models.utils_model import LLMRequest
from src.config.config import global_config from src.config.config import global_config
@@ -35,8 +34,7 @@ class ChattingInfoProcessor(BaseProcessor):
async def process_info( async def process_info(
self, self,
observations: Optional[List[Observation]] = None, observations: List[Observation] = None,
running_memorys: Optional[List[Dict]] = None,
**kwargs: Any, **kwargs: Any,
) -> List[InfoBase]: ) -> List[InfoBase]:
"""处理Observation对象 """处理Observation对象

View File

@@ -12,10 +12,9 @@ from src.chat.message_receive.chat_stream import get_chat_manager
from src.person_info.relationship_manager import get_relationship_manager from src.person_info.relationship_manager import get_relationship_manager
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from src.chat.focus_chat.info.mind_info import MindInfo from src.chat.focus_chat.info.mind_info import MindInfo
from typing import List, Optional from typing import List
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from src.chat.heart_flow.observation.actions_observation import ActionObservation from src.chat.heart_flow.observation.actions_observation import ActionObservation
from typing import Dict
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
logger = get_logger("processor") logger = get_logger("processor")
@@ -110,7 +109,8 @@ class MindProcessor(BaseProcessor):
logger.debug(f"{self.log_prefix} 更新 structured_info_str: \n{self.structured_info_str}") logger.debug(f"{self.log_prefix} 更新 structured_info_str: \n{self.structured_info_str}")
async def process_info( async def process_info(
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos self,
observations: List[Observation] = None,
) -> List[InfoBase]: ) -> List[InfoBase]:
"""处理信息对象 """处理信息对象
@@ -120,16 +120,14 @@ class MindProcessor(BaseProcessor):
Returns: Returns:
List[InfoBase]: 处理后的结构化信息列表 List[InfoBase]: 处理后的结构化信息列表
""" """
current_mind = await self.do_thinking_before_reply(observations, running_memorys) current_mind = await self.do_thinking_before_reply(observations)
mind_info = MindInfo() mind_info = MindInfo()
mind_info.set_current_mind(current_mind) mind_info.set_current_mind(current_mind)
return [mind_info] return [mind_info]
async def do_thinking_before_reply( async def do_thinking_before_reply(self, observations: List[Observation] = None):
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None
):
""" """
在回复前进行思考生成内心想法并收集工具调用结果 在回复前进行思考生成内心想法并收集工具调用结果
@@ -157,13 +155,6 @@ class MindProcessor(BaseProcessor):
logger.debug( logger.debug(
f"{self.log_prefix} 当前完整的 structured_info: {safe_json_dumps(self.structured_info, ensure_ascii=False)}" f"{self.log_prefix} 当前完整的 structured_info: {safe_json_dumps(self.structured_info, ensure_ascii=False)}"
) )
memory_str = ""
if running_memorys:
memory_str = "以下是当前在聊天中,你回忆起的记忆:\n"
for running_memory in running_memorys:
memory_str += f"{running_memory['topic']}: {running_memory['content']}\n"
# ---------- 1. 准备基础数据 ---------- # ---------- 1. 准备基础数据 ----------
# 获取现有想法和情绪状态 # 获取现有想法和情绪状态
previous_mind = self.current_mind if self.current_mind else "" previous_mind = self.current_mind if self.current_mind else ""
@@ -203,7 +194,6 @@ class MindProcessor(BaseProcessor):
prompt = (await global_prompt_manager.get_prompt_async(template_name)).format( prompt = (await global_prompt_manager.get_prompt_async(template_name)).format(
bot_name=get_individuality().name, bot_name=get_individuality().name,
memory_str=memory_str,
extra_info=self.structured_info_str, extra_info=self.structured_info_str,
relation_prompt=relation_prompt, relation_prompt=relation_prompt,
time_now=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), time_now=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),

View File

@@ -9,7 +9,7 @@ from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.chat.message_receive.chat_stream import get_chat_manager from src.chat.message_receive.chat_stream import get_chat_manager
from src.person_info.relationship_manager import get_relationship_manager from src.person_info.relationship_manager import get_relationship_manager
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from typing import List, Optional from typing import List
from typing import Dict from typing import Dict
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from src.chat.focus_chat.info.relation_info import RelationInfo from src.chat.focus_chat.info.relation_info import RelationInfo
@@ -114,9 +114,7 @@ class RelationshipProcessor(BaseProcessor):
name = get_chat_manager().get_stream_name(self.subheartflow_id) name = get_chat_manager().get_stream_name(self.subheartflow_id)
self.log_prefix = f"[{name}] " self.log_prefix = f"[{name}] "
async def process_info( async def process_info(self, observations: List[Observation] = None, *infos) -> List[InfoBase]:
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos
) -> List[InfoBase]:
"""处理信息对象 """处理信息对象
Args: Args:
@@ -138,7 +136,7 @@ class RelationshipProcessor(BaseProcessor):
async def relation_identify( async def relation_identify(
self, self,
observations: Optional[List[Observation]] = None, observations: List[Observation] = None,
): ):
""" """
在回复前进行思考,生成内心想法并收集工具调用结果 在回复前进行思考,生成内心想法并收集工具调用结果

View File

@@ -9,9 +9,8 @@ from src.individuality.individuality import get_individuality
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.chat.message_receive.chat_stream import get_chat_manager from src.chat.message_receive.chat_stream import get_chat_manager
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from typing import List, Optional from typing import List
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
from typing import Dict
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from src.chat.focus_chat.info.self_info import SelfInfo from src.chat.focus_chat.info.self_info import SelfInfo
@@ -62,9 +61,7 @@ class SelfProcessor(BaseProcessor):
name = get_chat_manager().get_stream_name(self.subheartflow_id) name = get_chat_manager().get_stream_name(self.subheartflow_id)
self.log_prefix = f"[{name}] " self.log_prefix = f"[{name}] "
async def process_info( async def process_info(self, observations: List[Observation] = None, *infos) -> List[InfoBase]:
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos
) -> List[InfoBase]:
"""处理信息对象 """处理信息对象
Args: Args:
@@ -73,7 +70,7 @@ class SelfProcessor(BaseProcessor):
Returns: Returns:
List[InfoBase]: 处理后的结构化信息列表 List[InfoBase]: 处理后的结构化信息列表
""" """
self_info_str = await self.self_indentify(observations, running_memorys) self_info_str = await self.self_indentify(observations)
if self_info_str: if self_info_str:
self_info = SelfInfo() self_info = SelfInfo()
@@ -85,7 +82,8 @@ class SelfProcessor(BaseProcessor):
return [self_info] return [self_info]
async def self_indentify( async def self_indentify(
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None self,
observations: List[Observation] = None,
): ):
""" """
在回复前进行思考,生成内心想法并收集工具调用结果 在回复前进行思考,生成内心想法并收集工具调用结果

View File

@@ -8,7 +8,7 @@ from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.tools.tool_use import ToolUser from src.tools.tool_use import ToolUser
from src.chat.utils.json_utils import process_llm_tool_calls from src.chat.utils.json_utils import process_llm_tool_calls
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from typing import List, Optional, Dict from typing import List, Optional
from src.chat.heart_flow.observation.observation import Observation from src.chat.heart_flow.observation.observation import Observation
from src.chat.focus_chat.info.structured_info import StructuredInfo from src.chat.focus_chat.info.structured_info import StructuredInfo
from src.chat.heart_flow.observation.structure_observation import StructureObservation from src.chat.heart_flow.observation.structure_observation import StructureObservation
@@ -47,9 +47,7 @@ class ToolProcessor(BaseProcessor):
) )
self.structured_info = [] self.structured_info = []
async def process_info( async def process_info(self, observations: Optional[List[Observation]] = None) -> List[StructuredInfo]:
self, observations: Optional[List[Observation]] = None, running_memories: Optional[List[Dict]] = None, *infos
) -> List[StructuredInfo]:
"""处理信息对象 """处理信息对象
Args: Args:
@@ -67,7 +65,7 @@ class ToolProcessor(BaseProcessor):
if observations: if observations:
for observation in observations: for observation in observations:
if isinstance(observation, ChattingObservation): if isinstance(observation, ChattingObservation):
result, used_tools, prompt = await self.execute_tools(observation, running_memories) result, used_tools, prompt = await self.execute_tools(observation)
logger.debug(f"工具调用结果: {result}") logger.debug(f"工具调用结果: {result}")
# 更新WorkingObservation中的结构化信息 # 更新WorkingObservation中的结构化信息
@@ -87,7 +85,7 @@ class ToolProcessor(BaseProcessor):
return [structured_info] return [structured_info]
async def execute_tools(self, observation: ChattingObservation, running_memorys: Optional[List[Dict]] = None): async def execute_tools(self, observation: ChattingObservation):
""" """
并行执行工具,返回结构化信息 并行执行工具,返回结构化信息
@@ -117,19 +115,12 @@ class ToolProcessor(BaseProcessor):
chat_observe_info = observation.get_observe_info() chat_observe_info = observation.get_observe_info()
# person_list = observation.person_list # person_list = observation.person_list
memory_str = ""
if running_memorys:
memory_str = "以下是当前在聊天中,你回忆起的记忆:\n"
for running_memory in running_memorys:
memory_str += f"{running_memory['topic']}: {running_memory['content']}\n"
# 获取时间信息 # 获取时间信息
time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 构建专用于工具调用的提示词 # 构建专用于工具调用的提示词
prompt = await global_prompt_manager.format_prompt( prompt = await global_prompt_manager.format_prompt(
"tool_executor_prompt", "tool_executor_prompt",
memory_str=memory_str,
chat_observe_info=chat_observe_info, chat_observe_info=chat_observe_info,
is_group_chat=is_group_chat, is_group_chat=is_group_chat,
bot_name=get_individuality().name, bot_name=get_individuality().name,

View File

@@ -9,10 +9,9 @@ from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
from src.chat.message_receive.chat_stream import get_chat_manager from src.chat.message_receive.chat_stream import get_chat_manager
from .base_processor import BaseProcessor from .base_processor import BaseProcessor
from src.chat.focus_chat.info.mind_info import MindInfo from src.chat.focus_chat.info.mind_info import MindInfo
from typing import List, Optional from typing import List
from src.chat.heart_flow.observation.working_observation import WorkingMemoryObservation from src.chat.heart_flow.observation.working_observation import WorkingMemoryObservation
from src.chat.focus_chat.working_memory.working_memory import WorkingMemory from src.chat.focus_chat.working_memory.working_memory import WorkingMemory
from typing import Dict
from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.info_base import InfoBase
from json_repair import repair_json from json_repair import repair_json
from src.chat.focus_chat.info.workingmemory_info import WorkingMemoryInfo from src.chat.focus_chat.info.workingmemory_info import WorkingMemoryInfo
@@ -67,9 +66,7 @@ class WorkingMemoryProcessor(BaseProcessor):
name = get_chat_manager().get_stream_name(self.subheartflow_id) name = get_chat_manager().get_stream_name(self.subheartflow_id)
self.log_prefix = f"[{name}] " self.log_prefix = f"[{name}] "
async def process_info( async def process_info(self, observations: List[Observation] = None, *infos) -> List[InfoBase]:
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos
) -> List[InfoBase]:
"""处理信息对象 """处理信息对象
Args: Args: