微信扫码
添加专属顾问
智能体的概念可以溯源到人工智能与强化学习,尤其是在强化学习中得到了延伸与实际的应用。在MetaGPT看来,可以将智能体想象成环境中的数字人,其中
❝智能体 = 大语言模型(LLM) + 观察 + 思考 + 行动 + 记忆
这个公式概括了智能体的功能本质。为了理解每个组成部分,可以与人类进行类比:
多智能体系统可以视为一个智能体社会,其中
❝多智能体 = 智能体 + 环境 + 标准流程(SOP) + 通信 + 经济
这些组件各自发挥着重要的作用:
在MetaGPT中,一个智能体运行周期的流程图如下:
在MetaGPT中,对于智能体来说,思考与行动是必不可少的,主要是基于ReAct理论框架[1],其流程主要是observe -> think -> act即一个react的流程;MetaGPT实现了三种模式的react,具体请看:思考与行动 | MetaGPT[2]。
在MetaGPT中,有两个关键对象定义了智能体的基础:Action、Role。
Action类是动作的逻辑抽象。用户可以通过简单地调用 <font style="color:rgb(60, 60, 67);">self._aask</font> 函数令 LLM 赋予这个动作能力,即这个函数将在底层调用 LLM api。Role类是智能体的逻辑抽象。一个 Role 能执行特定的/多个 Action,拥有记忆、思考并采用各种策略行动。基本上,它充当一个将所有这些组件联系在一起的凝聚实体。对于Action来说,一般继承此类,重载run方法即可。
class Action(SerializationMixin, ContextMixin, BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
# 省略其它....
async def _aask(self, prompt: str, system_msgs: Optional[list[str]] = None) -> str:
"""Append default prefix"""
return await self.llm.aask(prompt, system_msgs)
async def _run_action_node(self, *args, **kwargs):
"""Run action node"""
msgs = args[0]
context = "## History Messages\n"
context += "\n".join([f"{idx}: {i}" for idx, i in enumerate(reversed(msgs))])
return await self.node.fill(context=context, llm=self.llm)
async def run(self, *args, **kwargs):
"""Run action"""
if self.node:
return await self._run_action_node(*args, **kwargs)
raise NotImplementedError("The run method should be implemented in a subclass.")
而对于智能体的抽象类Role来说,里面的方法就更复杂一些,代码地址:Role.py[3];一些关键的方法如下:
对于智能体的实现来说,主要是看当前智能体的业务场景,实现不同的重载,从而实现不同的react模式,适应不同的业务;从源码来看,MetaGPT对扩展的支持真的很强。
MetaGPT提供了的多个示例[4]是基于数据解释器DataInterpreter[5]来实现的。数据解释器是一个通过编写代码来解决数据相关问题的智能体。它能理解用户需求,制定计划,编写执行代码,并在必要时使用工具;这些能力使它能够处理广泛的场景。
对于数据解释器agent而言,其主要的思想是规划与行动(plan_and_act)。
# 提示词
REACT_THINK_PROMPT = """
# User Requirement
{user_requirement}
# Context
{context}
Output a json following the format:
.....
"""
class DataInterpreter(Role):
# 设置react模式为plan_and_act
@model_validator(mode="after")
def set_plan_and_tool(self) -> "Interpreter":
# code....
return self
# 设置持久化
@property
def working_memory(self):
return self.rc.working_memory
# 重写_think方法
async def _think(self) -> bool:
# code....
return need_action
# 重写_act方法
async def _act(self) -> Message:
# code....
return Message(content=code, role="assistant", cause_by=WriteAnalysisCode)
# 重写_plan_and_act方法
async def _plan_and_act(self) -> Message:
try:
# code....
return rsp
except Exception as e:
await self.execute_code.terminate()
raise e
# 重写_act_on_task方法
async def _act_on_task(self, current_task: Task) -> TaskResult:
# code....
return task_result
# 实际action的抽象
async def _write_and_exec_code(self, max_retry: int = 3):
# code....
return code, result, success
async def _write_code(
self,
counter: int,
plan_status: str = "",
tool_info: str = "",
):
# code....
return code, todo
async def _check_data(self):
# code....
对于我们自己要做智能体的话,数据解释器agent是一个很好的参考,而且还有论文详述。
不过这是一个单智能体,这点是要注意的,相比较多智能体来说,除却react模式的选择和业务的差异,单智能体会少一个watch环节,主要是不需要智能体彼此间的通信。
这是一个多agent的示例,但我个人觉得并不是一个标准的agent示例,因为其代码结构来说,只有一个agent,只是通过不同的属性初始化辩手智能体,不过也是可以借鉴的。相关描述请查看:辩论[6],完整代码查看:debate.py[7]
# action
class SpeakAloud(Action):
"""Action: Speak out aloud in a debate (quarrel)"""
PROMPT_TEMPLATE: str = """
## BACKGROUND
Suppose you are {name}, you are in a debate with {opponent_name}.
## DEBATE HISTORY
Previous rounds:
{context}
## YOUR TURN
Now it's your turn, you should closely respond to your opponent's latest argument, state your position, defend your arguments, and attack your opponent's arguments,
craft a strong and emotional response in 80 words, in {name}'s rhetoric and viewpoints, your will argue:
"""
name: str = "SpeakAloud"
async def run(self, context: str, name: str, opponent_name: str):
prompt = self.PROMPT_TEMPLATE.format(context=context, name=name, opponent_name=opponent_name)
# logger.info(prompt)
rsp = await self._aask(prompt)
return rsp
# agent智能体
class Debator(Role):
name: str = ""
profile: str = ""
opponent_name: str = ""
def __init__(self, **data: Any):
super().__init__(**data)
self.set_actions([SpeakAloud])
self._watch([UserRequirement, SpeakAloud])
async def _observe(self) -> int:
await super()._observe()
# accept messages sent (from opponent) to self, disregard own messages from the last round
self.rc.news = [msg for msg in self.rc.news if msg.send_to == {self.name}]
return len(self.rc.news)
async def _act(self) -> Message:
logger.info(f"{self._setting}: to do {self.rc.todo}({self.rc.todo.name})")
todo = self.rc.todo # An instance of SpeakAloud
memories = self.get_memories()
context = "\n".join(f"{msg.sent_from}: {msg.content}" for msg in memories)
# print(context)
rsp = await todo.run(context=context, name=self.name, opponent_name=self.opponent_name)
msg = Message(
content=rsp,
role=self.profile,
cause_by=type(todo),
sent_from=self.name,
send_to=self.opponent_name,
)
self.rc.memory.add(msg)
return msg
# 根据不同的属性初始化两个agent实例使用
Biden = Debator(name="Biden", profile="Democrat", opponent_name="Trump")
Trump = Debator(name="Trump", profile="Republican", opponent_name="Biden")
大概的走读了解的一些MetaGPT框架的agent开发流程,从我个人所需的agent技能点来看,MetaGPT支持的不错,而且扩展做的蛮好的,代码也已读简洁,相比较autogen而言。感觉可以继续深挖MetaGPT,而且在开发的过程中,我个人一个最大的感受——好像是在基于Spring等框架——做业务开发,现在的AI发展趋势,尤其是在agent侧,的确是越来越简化AI的开发,对于我们来说,只需要了解agent框架,而后基于业务开发即可。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-06-29
dbskill 更新:一键排版发布公众号
2026-06-22
写代码你不在乎AI味儿,写文章为啥那么计较?
2026-06-03
用 WorkBuddy 辅助写投标技术方案:别让 AI 替你投标,让它替你把话说清楚
2026-05-30
企业级 AI Coding 还有一堆问题,并没有像PR一样说的这么好用
2026-05-27
如何使用 AI 设计企业级产品?
2026-05-24
我研究了这个 18.6k Star 的 Skills,做幼师的女朋友夸我真猛!
2026-05-21
AI里,你必学的新Office三件套:MD、CSV、HTML
2026-05-21
体验完阿里首款Design Agent,我开始替UI/前端焦虑了..
2026-04-14
2026-04-28
2026-04-18
2026-05-21
2026-05-27
2026-05-19
2026-05-06
2026-05-21
2026-05-24
2026-06-03
2026-06-22
2026-05-27
2026-02-28
2026-02-07
2026-01-29
2026-01-21
2026-01-06
2025-12-22
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。