《MetaGPT智能体开发入门》学习笔记 第五章 多智能体

需求:两个智能体,智能体一和智能体二

智能体一可以写文章,然后更具智能体二的建议进行修改;

智能体二可以看智能体一的输出并且给出智能体一的内容修改建议;

解决:

MetaGPT有watch观察方法作为外部数据进行思考和action具体代码如下

智能体一的角色和action定义

python 复制代码
import asyncio

from metagpt.actions import Action, UserRequirement
from metagpt.logs import logger
from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.environment import Environment

from metagpt.const import MESSAGE_ROUTE_TO_ALL

classroom = Environment()
# 学生写诗词
class WritePoem(Action):

    name: str = "WritePoem"

    PROMPT_TEMPLATE: str = """
    Here is the historical conversation record : {msg} .
    写一篇有human提供主题的100字发言稿,只返回生成的文稿不返回其他文本。如果老师提供了关于发言稿的修改建议,根据建议修改并返回。
    language: chinese
    your poem:
    """

    async def run(self, msg: str):
        prompt = self.PROMPT_TEMPLATE.format(msg = msg)
        rsp = await self._aask(prompt)
        return rsp

# 定义学生角色 使用学生的action并且input老师的检查反馈
class Student(Role):
    name: str = "xiaoming"
    profile: str = "Student"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # self._init_actions([WritePoem])
        self.set_actions([WritePoem])
        self._watch([UserRequirement, ReviewPoem])

    async def _act(self) -> Message:
        logger.info(f"{self._setting}: ready to {self.rc.todo}")
        todo = self.rc.todo
        msg = self.get_memories()  # 获取所有记忆
        # logger.info(msg)
        poem_text = await WritePoem().run(msg)
        logger.info(f'student : {poem_text}')
        msg = Message(content=poem_text, role=self.profile,
                      cause_by=type(todo))
        return msg

智能体二的角色和action定义

python 复制代码
# 老师检查学生写的诗词
class ReviewPoem(Action):

    name: str = "ReviewPoem"
    PROMPT_TEMPLATE: str = """

    Here is the historical conversation record : {msg} .
    检查学生创作关于human提供主题的文稿,并提出修改建议。您更喜欢表达优雅 引经据典 语句通顺连贯的内容。
    language: chinese
    your comments:
    """
    async def run(self, msg: str):
        prompt = self.PROMPT_TEMPLATE.format(msg = msg)
        rsp = await self._aask(prompt)
        return rsp

# 定义老师角色并且观察也就是input学生写的诗词
class Teacher(Role):

    name: str = "laowang"
    profile: str = "Teacher"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # self._init_actions([ReviewPoem])
        self.set_actions([ReviewPoem])
        self._watch([WritePoem])

    async def _act(self) -> Message:
        logger.info(f"{self._setting}: ready to {self.rc.todo}")
        todo = self.rc.todo
        msg = self.get_memories()  # 获取所有记忆
        poem_text = await ReviewPoem().run(msg)
        logger.info(f'teacher : {poem_text}')
        msg = Message(content=poem_text, role=self.profile,
                      cause_by=type(todo))
        return msg

MAIN程序入口:

python 复制代码
async def main(topic: str, n_round=3):

    classroom.add_roles([Student(), Teacher()])

    classroom.publish_message(
        Message(role="Human", content=topic, cause_by=UserRequirement,
                send_to='' or MESSAGE_ROUTE_TO_ALL),
        peekable=False,
    )

    while n_round > 0:
        # self._save()
        n_round -= 1
        logger.debug(f"max {n_round=} left.")
        await classroom.run()
    return classroom.history

asyncio.run(main(topic='写一个关于光伏性能源的200字文稿'))

执行结果:

相关推荐
oe10192 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(中)
人工智能·笔记·语言模型·agent开发
嵌入式-老费2 小时前
自己动手写深度学习框架(快速学习python和关联库)
开发语言·python·学习
许长安2 小时前
C++中指针和引用的区别
c++·经验分享·笔记
摇滚侠3 小时前
Spring Boot3零基础教程,StreamAPI 介绍,笔记98
java·spring boot·笔记
执笔论英雄3 小时前
【大模型训练】zero 学习及deepseed实战
人工智能·深度学习·学习
摇滚侠3 小时前
Spring Boot3零基础教程,StreamAPI 的基本用法,笔记99
java·spring boot·笔记
岑梓铭4 小时前
《考研408数据结构》第六章(5.5树的应用)复习笔记
数据结构·笔记·考研·408·ds
前路不黑暗@4 小时前
Java:继承与多态
java·开发语言·windows·经验分享·笔记·学习·学习方法
2501_916007475 小时前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
moringlightyn6 小时前
基础开发工具--编译器g++/gcc 自动化构建make/Makefile
linux·运维·笔记·自动化·c·编译器·make/makefile