mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-24 14:15:17 +02:00
Merge branch 'feat-memory-opt' into 'mgx_ops'
use long-term memory in rolezero See merge request pub/MetaGPT!369
This commit is contained in:
commit
e0ec17e6aa
13 changed files with 418 additions and 6 deletions
|
|
@ -17,6 +17,7 @@ from metagpt.exp_pool import exp_cache
|
|||
from metagpt.exp_pool.context_builders import RoleZeroContextBuilder
|
||||
from metagpt.exp_pool.serializers import RoleZeroSerializer
|
||||
from metagpt.logs import logger
|
||||
from metagpt.memory.role_zero_memory import RoleZeroLongTermMemory
|
||||
from metagpt.prompts.di.role_zero import (
|
||||
ASK_HUMAN_COMMAND,
|
||||
CMD_PROMPT,
|
||||
|
|
@ -166,6 +167,24 @@ class RoleZero(Role):
|
|||
self._update_tool_execution()
|
||||
return self
|
||||
|
||||
@model_validator(mode="after")
|
||||
def set_longterm_memory(self) -> "RoleZero":
|
||||
"""Set up long-term memory for the role if enabled in the configuration.
|
||||
|
||||
If `enable_longterm_memory` is True, set up long-term memory.
|
||||
The role name will be used as the collection name.
|
||||
"""
|
||||
|
||||
if self.config.role_zero.enable_longterm_memory:
|
||||
self.rc.memory = RoleZeroLongTermMemory(
|
||||
**self.rc.memory.model_dump(),
|
||||
collection_name=self.name.replace(" ", ""),
|
||||
memory_k=self.memory_k,
|
||||
)
|
||||
logger.info(f"Long-term memory set for role '{self.name}'")
|
||||
|
||||
return self
|
||||
|
||||
def _update_tool_execution(self):
|
||||
pass
|
||||
|
||||
|
|
@ -289,12 +308,12 @@ class RoleZero(Role):
|
|||
self.rc.memory.add(AIMessage(content=self.command_rsp))
|
||||
if not ok:
|
||||
error_msg = commands
|
||||
self.rc.memory.add(UserMessage(content=error_msg))
|
||||
self.rc.memory.add(UserMessage(content=error_msg, cause_by=RunCommand))
|
||||
return error_msg
|
||||
logger.info(f"Commands: \n{commands}")
|
||||
outputs = await self._run_commands(commands)
|
||||
logger.info(f"Commands outputs: \n{outputs}")
|
||||
self.rc.memory.add(UserMessage(content=outputs))
|
||||
self.rc.memory.add(UserMessage(content=outputs, cause_by=RunCommand))
|
||||
|
||||
return AIMessage(
|
||||
content=f"I have finished the task, please mark my task as finished. Outputs: {outputs}",
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ from typing import Annotated
|
|||
from pydantic import Field
|
||||
|
||||
from metagpt.actions.di.run_command import RunCommand
|
||||
from metagpt.const import TEAMLEADER_NAME
|
||||
from metagpt.prompts.di.team_leader import (
|
||||
FINISH_CURRENT_TASK_CMD,
|
||||
TL_INFO,
|
||||
|
|
@ -19,7 +20,7 @@ from metagpt.tools.tool_registry import register_tool
|
|||
|
||||
@register_tool(include_functions=["publish_team_message"])
|
||||
class TeamLeader(RoleZero):
|
||||
name: str = "Mike"
|
||||
name: str = TEAMLEADER_NAME
|
||||
profile: str = "Team Leader"
|
||||
goal: str = "Manage a team to assist users"
|
||||
thought_guidance: str = TL_THOUGHT_GUIDANCE
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue