Merge branch 'MaiM-with-u:dev' into dev
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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]:
|
||||||
"""处理信息对象的抽象方法
|
"""处理信息对象的抽象方法
|
||||||
|
|||||||
@@ -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对象
|
||||||
|
|||||||
@@ -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()),
|
||||||
@@ -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,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
在回复前进行思考,生成内心想法并收集工具调用结果
|
在回复前进行思考,生成内心想法并收集工具调用结果
|
||||||
|
|||||||
@@ -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,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
在回复前进行思考,生成内心想法并收集工具调用结果
|
在回复前进行思考,生成内心想法并收集工具调用结果
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user