【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

简介: 【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

MetaGPT中定义的一个agent运行示例如下:

  • 一个agent在启动后他会观察自己能获取到的信息,加入自己的记忆中
  • 下一步进行思考,决定下一步的行动,也就是从Action1,Action2,Action3中选择执行的Action
  • 决定行动后,紧接着就执行对应行动,得到这个环节的结果

以Task3 作业为例,来看下使用MetaGPT 实现Agent的思路。Task3任务如下:

经过上面的学习,我想你已经对 MetaGPT 的框架有了基本了解,现在我希望你能够自己编写这样一个 agent

  • 这个 Agent 拥有三个动作 打印1 打印2 打印3(初始化时 init_action([print,print,print]))
  • 重写有关方法(请不要使用act_by_order,我希望你能独立实现)使得 Agent 顺序执行上面三个动作
  • 当上述三个动作执行完毕后,为 Agent 生成新的动作 打印4 打印5 打印6 并顺序执行,(之前我们初始化了三个 print 动作,执行完毕后,重新 init_action([…,…,…]),然后顺序执行这个新生成的动作列表)

实现思路

用最通俗的话来总结:

  1. 要实现一个Agent,其实就是定义一个Role。该Role应该包含自己的Action。
  2. 在Role的初始化中初始化Actions
  3. Role重写_act函数或_react函数,Role run的时候会调用该函数
  • _react函数重写,一般是先思考_think下一步用哪个action,然后再_act
  1. Action重写run函数,这里面决定了我们对传入的内容到底要做什么样的处理,例如调用大模型得到结果

Task3 - 完整代码及注释

  • 先看执行结果:顺序打印1-6,然后结束

  • 完整代码及细节注释
# 加载 .env 到环境变量
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
from metagpt.actions import Action
from metagpt.logs import logger
import asyncio        
from metagpt.roles import Role
from metagpt.schema import Message
## 1. 定义Action
class PrintAction(Action):
    def __init__(self, name: str = "", number: int = 0, *args, **kwargs):
        super().__init__(name, *args, **kwargs)
        self._number = number
        
    ## 1.1 run方法中定义具体的处理操作,这里只是打印一个数
    async def run(self):
        logger.info(self._number)
        return self._number
## 2. 定义Role
class Printer(Role):
    def __init__(
        self,
        name: str = "Printer",
        profile: str = "Printer",
    ):
        super().__init__(name, profile)
        
        ## 2.1 初始化中初始化该Role的Actions,这里首先初始化了3个Action,将会按顺序执行
        self._init_actions([PrintAction(number=1), PrintAction(number=2), PrintAction(number=3)])
        
    async def _think(self) -> None:
        """Determine the next action to be taken by the role."""
        logger.info(self._rc.state)
        logger.info(self,)
        logger.info(f"{self._setting}: ready to {self._rc.todo}")
        if self._rc.todo is None:
            self._set_state(0) # 这里回到了第一个Action
            logger.debug("reset state to 0")
            return
    ## 这里决定下一个action是什么,_rc.state表示要执行的action的下标,_states记录了所有actions及其下标
        if self._rc.state + 1 < len(self._states):
            logger.debug(f"set state to {self._rc.state + 1}")
            self._set_state(self._rc.state + 1) # todo变为下一个action
        else:
            self._rc.todo = None     
            
    async def _act(self):
        todo = self._rc.todo
        if type(todo) is PrintAction:
            ret = await todo.run()
            if 3 == ret: # 这里判断下是第几个action了,根据任务描述,第三个任务完成后动态添加4,5,6 action
                actions = [PrintAction(number=4), PrintAction(number=5), PrintAction(number=6)]
                self._init_actions(actions) # 动态添加4,5,6 action,这时候action4变成了第一个action
                self._rc.todo = None # _think中会设置为第一个Action,也就是action4
            
        return "Continue"
        
    ## 3. 重写_react函数    
    async def _react(self):
        while True:
            logger.info("react")
            await self._think() ## 首先思考下一步执行哪个action
            if self._rc.todo is None:
                break
            result = await self._act() ## 执行action,这里的action是_think里决定
async def main():
    msg = "start" ## 给一个msg,必须给一个非空的msg,否则run不起来,待研究
    role = Printer()
    await role.run(msg) ## 开始运行agent,会调用role里的_react
asyncio.run(main())

先写到这,展示个结果和总体步骤,后面有时间会详细拆解每一步的实现和细节,以及过程中遇到的坑及解决方法。

相关文章
|
18天前
|
存储 人工智能 测试技术
手把手带你入门AI智能体:从核心概念到第一个能跑的Agent
AI智能体是一种能感知环境、自主决策并执行任务的人工智能系统。它不仅能生成回应,还可通过工具使用、计划制定和记忆管理完成复杂工作,如自动化测试、脚本编写、缺陷分析等。核心包括大语言模型(LLM)、任务规划、工具调用和记忆系统。通过实践可逐步构建高效智能体,提升软件测试效率与质量。
|
1月前
|
人工智能 JavaScript 测试技术
Cradle:颠覆AI Agent 操作本地软件,AI驱动的通用计算机控制框架,如何让基础模型像人一样操作你的电脑?
Cradle 是由 BAAI‑Agents 团队开源的通用计算机控制(GCC)多模态 AI Agent 框架,具备视觉输入、键鼠操作输出、自主学习与反思能力,可操作各类本地软件及游戏,实现任务自动化与复杂逻辑执行。
186 6
|
1月前
|
人工智能 自然语言处理 物联网
MCP+LLM+Agent:企业AI落地的新基建设计
MCP+LLM+Agent构建企业AI黄金三角架构,破解数据孤岛、工具碎片化与决策滞后难题。LLM负责智能决策,Agent实现自动执行,MCP打通数据与工具,助力企业实现从智能思考到业务闭环的跃迁。
|
2月前
|
人工智能 缓存 开发者
MCP协议究竟如何实现RAG与Agent的深度融合,打造更智能AI系统?
本文AI专家三桥君探讨了通过MCP协议实现RAG与Agent系统的深度融合,构建兼具知识理解与任务执行能力的智能系统。文章分析了传统RAG和Agent系统的局限性,提出了MCP协议的核心设计,包括标准化接口、智能缓存和动态扩展性。系统架构基于LlamaIndex和LangGraph实现服务端和客户端的协同工作,并提供了实际应用场景与生产部署指南。未来发展方向包括多模态扩展、增量更新和分布式处理等。
327 0
|
10天前
|
存储 人工智能 安全
企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent
通过 Sandbox 与 Serverless 的深度融合,AI Agent 不再是“黑盒”实验,而是可被企业精准掌控的生产力工具。这种架构不仅适配当前 AI Agent 的动态交互特性,更为未来多模态 Agent、跨系统协作等复杂场景提供了可复用的技术底座。若您的企业正面临 AI Agent 规模化落地的挑战,不妨从 Sandbox 架构入手,结合函数计算 FC 的能力,快速验证并构建安全、高效、可扩展的 AI 应用系统。
|
10天前
|
机器学习/深度学习 人工智能 小程序
RL 和 Memory 驱动的 Personal Agent,实测 Macaron AI
人工智能不仅提升生产力,也重塑人际关系。Macaron AI 探索“哆啦A梦关系”,融合实用与情感,通过长期记忆和强化学习技术,实现深度个性化陪伴,开创人机互动新方式。

热门文章

最新文章