DataWhale组队学习 wow-agent task4

news/2025/2/24 13:32:56

整体概念总结


 智能体的实现方法
  • 安装与配置:安装和配置MetaGPT,包括Python环境的准备、MetaGPT的安装(通过pip或git拉取代码),以及配置大模型API(如智谱、科大讯飞、百度千帆等)。

  • 单动作单智能体:我们通过定义简单的动作(如写唐诗、写代码)和角色(如SimpleCoder),实现了一个能够执行单一任务的智能体。

  • 多动作单智能体:通过组合多个动作(如写代码和运行代码),我们实现了一个能够执行复杂任务的智能体(如RunnableCoder)。

  • 多智能体系统:通过模拟辩论场景(辩论智能体为例),我们展示了如何设计多个智能体并促进它们之间的互动,帮助我们在实际工作中做出更好的决策。

代码解析与核心逻辑
  • 动作(Action):动作是智能体执行任务的基本单元。通过定义Action类,我们可以让智能体执行特定的任务。例如,SimpleWriteCode动作可以让智能体根据自然语言描述生成代码。

  • 角色(Role):角色是智能体的抽象,它包含了智能体的名称、配置文件、动作和记忆。通过定义Role类,我们可以为智能体配备特定的动作,并定义其行为逻辑。例如,SimpleCoder角色配备了SimpleWriteCode动作,能够根据用户指令生成代码。

  • 多智能体交互:在多智能体系统中,智能体之间通过消息进行通信。通过定义Debator角色和SpeakAloud动作,我们模拟了正方和反方之间的辩论过程。每个智能体根据对方的论点进行反驳,并通过消息传递进行交互。

核心代码解释

动作定义:这段代码定义了一个SimpleWriteCode动作,它根据用户指令生成Python代码,并返回代码文本。

class SimpleWriteCode(Action):
    PROMPT_TEMPLATE: str = """
    Write a python function that can {instruction} and provide two runnnable test cases.
    Return ```python your_code_here ```with NO other texts,
    your code:
    """

    async def run(self, instruction: str):
        prompt = self.PROMPT_TEMPLATE.format(instruction=instruction)
        rsp = await self._aask(prompt)
        code_text = SimpleWriteCode.parse_code(rsp)
        return code_text

角色定义:这段代码定义了一个SimpleCoder角色,它配备了SimpleWriteCode动作,能够根据用户指令生成代码并返回结果。

class SimpleCoder(Role):
    name: str = "Alice"
    profile: str = "SimpleCoder"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.set_actions([SimpleWriteCode])

    async def _act(self) -> Message:
        msg = self.get_memories(k=1)[0]
        code_text = await self.rc.todo.run(msg.content)
        return Message(content=code_text, role=self.profile, cause_by=type(self.rc.todo))

多智能体交互:这段代码定义了一个Debator角色,它配备了SpeakAloud动作,能够根据对方的论点进行反驳,并通过消息传递进行交互。

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 _act(self) -> Message:
        memories = self.get_memories()
        context = "\n".join(f"{msg.sent_from}: {msg.content}" for msg in memories)
        rsp = await self.rc.todo.run(context=context, name=self.name, opponent_name=self.opponent_name)
        return Message(content=rsp, role=self.profile, cause_by=type(self.rc.todo), sent_from=self.name, send_to=self.opponent_name)


http://www.niftyadmin.cn/n/5864389.html

相关文章

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…

golang设计模式-函数选项模式

函数选项模式 什么是函数选项模式 在 Go 语言中,函数选项模式是一种优雅的设计模式,用于处理函数的可选参数。它提供了一种灵活的方式,允许用户在函数调用时传递一组可选参数,而不是依赖于固定数量和顺序的参数列表。 哪些地方…

冒泡排序(详解)c++

冒泡排序(Bubble Sort)也是⼀种简单的排序算法。它的⼯作原理是每次检查相邻两个元素,如果前⾯ 的元素与后⾯的元素满⾜给定的排序条件,就将相邻两个元素交换。当没有相邻的元素需要交换时, 排序就完成了。 由于在算法的执⾏过程中&#xff0…

H5 火柴人科目三和GitHub获取仓库点星星的用户列表发生了艺术的碰撞

先看效果,代码写的比较乱,有待优化 效果 https://linyisonger.github.io/H5.Examples/?name./089.%E7%9C%8B%E6%98%9F%E6%98%9F%E7%9A%84%E8%88%9E%E8%80%85.html 思路 看起来很简单,实则也不是很难,就是需要思路要打开。 一…

QT 基础知识点

1.基础窗口类QMainWindow qDialog Qwidget 随项目一起创建的窗口基类有三个可选QMainWindow qDialog Qwidget 1.1 Qwidget 是所有窗口的基类,只要是他的子类,或子类的子类,都具有他的属性。 右键项目 Add New -> Qt qt设计师界面类&am…

2025年SCI一区智能优化算法:混沌进化优化算法(Chaotic Evolution Optimization, CEO),提供MATLAB代码

一、混沌进化优化算法 https://github.com/ITyuanshou/MATLABCode 1. 算法简介 混沌进化优化算法(Chaotic Evolution Optimization, CEO)是2025年提出的一种受混沌动力学启发的新型元启发式算法。该算法的主要灵感来源于二维离散忆阻映射的混沌进化过…

DINOv2 + yolov8 + opencv 检测卡车的可拉拽雨覆是否完全覆盖

最近是接了一个需求咨询图像处理类的,甲方要在卡车过磅的地方装一个摄像头用检测卡车的车斗雨覆是否完全, 让我大致理了下需求并对技术核心做下预研究 开发一套图像处理软件,能够实时监控经过的卡车并判断其车斗的雨覆状态。 系统需具备以下…

蓝桥杯 Java B 组之背包问题(01背包、完全背包)

Day 1:背包问题(01背包、完全背包) 📖 一、背包问题简介 背包问题是动态规划(DP)中一个经典的优化问题,涉及物品选择和容量约束。通常分为以下几类: 01 背包(0/1 Knaps…