定义执行规则
async def _act(self) -> Message:
logger.info(f"{self._setting}: to do {self.rc.todo}({self.rc.todo.name})")
todo = self.rc.todo # todo will be SimpleWriteCode()
msg = self.get_memories(k=1)[0] # find the most recent messages
code_text = await todo.run(msg.content)
msg = Message(content=code_text, role=self.profile, cause_by=type(todo))
return msg
- 重写_act,编写智能体具体的行动逻辑
- self.rc.todo:待办事项
- self.get_memories(k=1)[0]:获取最新的一条memory,即本次case里面的用户下达的指令
- 在本次的case里面,当用户输出instruction的时候,role需要把instruction传递给action,这里就涉及到了user如何传递消息给agent的部分,是通过memory来传递的
- memory作为agent的记忆合集,当role在进行初始化的时候,role就会初始化一个memory对象来作为
self._rc.memory
属性,在之后的_observe
中存储每一个message,以便后续的检索,所以也可以理解role的memory就是一个含有message的list - 当需要获取memory(llm的对话context)的时候,就可以使用get_memories(self, k=0) -> list[Message] 方法
- todo.run(msg.content):使用待办事项来处理最新一条memory
- Message:作为metagpt里面统一的消息处理格式