博客

  • MetaGPT 工具:让你的 AI 智能体拥有“外挂”

    在之前的教程中,我们学习了如何使用记忆来提升智能体的能力。但有时候,智能体需要与外部环境进行交互,例如获取信息、执行操作等等。这就是 MetaGPT 工具发挥作用的地方。

    MetaGPT 工具可以帮助你的智能体扩展能力,就像给它安装了“外挂”一样。本教程将带你学习如何创建和使用 MetaGPT 工具。

    创建工具

    在 MetaGPT 中,创建工具非常简单,只需在 metagpt/tools/libs 目录中创建自己的函数或类即可。

    步骤:

    1. 创建函数或类: 编写函数或类,用于实现与外部环境的交互。
    2. 添加 Google 风格的文档字符串: 为每个函数或类添加文档字符串,用于描述其用途、输入参数和预期输出。
    3. 使用 @register_tool 装饰器: 使用 @register_tool 装饰器将函数或类注册到工具注册表中。

    示例:

    假设你想创建一个计算阶乘的工具,名为 calculate_factorial。你可以创建一个名为 calculate_factorial.py 的文件,并在其中添加以下代码:

    # metagpt/tools/libs/calculate_factorial.py
    import math
    from metagpt.tools.tool_registry import register_tool
    
    # 使用装饰器注册工具
    @register_tool()
    def calculate_factorial(n):
        """
        计算一个非负整数的阶乘。
        """
        if n < 0:
            raise ValueError("输入必须是非负整数")
        return math.factorial(n)

    使用工具

    创建工具后,你可以使用 DataInterpreter 角色来使用它。

    示例:

    假设你想要使用 calculate_factorial 工具来计算 5 的阶乘。你可以创建一个名为 main.py 的文件,并在其中添加以下代码:

    # main.py
    import asyncio
    from metagpt.roles.di.data_interpreter import DataInterpreter
    from metagpt.tools.libs import calculate_factorial
    
    async def main(requirement: str):
       role = DataInterpreter(tools=["calculate_factorial"])  # 集成工具
       await role.run(requirement)
    
    if __name__ == "__main__":
       requirement = "请计算 5 的阶乘。"
       asyncio.run(main(requirement))

    这段代码首先导入必要的模块,然后定义一个 main 函数。在 main 函数中,我们创建了一个 DataInterpreter 角色,并使用 tools 参数指定了要使用的工具。最后,我们使用 role.run() 方法运行角色,并打印输出结果。

    工具定制

    MetaGPT 支持多种工具定制方式,例如:

    • 从函数定制工具: 如上面的 calculate_factorial 示例。
    • 从类定制工具: 你可以创建一个类,并使用 @register_tool 装饰器注册它。

    示例:

    假设你想创建一个名为 Calculator 的类,用于执行基本的算术运算和计算阶乘。你可以创建一个名为 calculator.py 的文件,并在其中添加以下代码:

    # metagpt/tools/libs/calculator.py
    import math
    from metagpt.tools.tool_registry import register_tool
    
    # 使用装饰器注册工具,并指定标签和包含的函数
    @register_tool(tags=["math"], include_functions=["__init__", "add", "subtract", "multiply", "divide", "factorial"])
    class Calculator:
       """
       一个简单的计算器工具,可以执行基本的算术运算和计算阶乘。
       """
    
       @staticmethod
       def add(a, b):
           """
           计算两个数字的和。
           """
           return a + b
    
       @staticmethod
       def subtract(a, b):
           """
           计算两个数字的差。
           """
           return a - b
    
       @staticmethod
       def multiply(a, b):
           """
           计算两个数字的积。
           """
           return a * b
    
       @staticmethod
       def divide(a, b):
           """
           计算两个数字的商。
           """
           if b == 0:
               return "错误:除数不能为零"
           else:
               return a / b
    
       @staticmethod
       def factorial(n):
           """
           计算一个非负整数的阶乘。
           """
           if n < 0:
               raise ValueError("输入必须是非负整数")
           return math.factorial(n)

    总结

    本教程展示了如何使用 MetaGPT 创建和使用工具。通过创建工具,你可以扩展智能体的能力,使其能够执行更复杂的任务。

    更多学习资源

  • MetaGPT 中的记忆:让你的 AI 智能体拥有记忆力

    在之前的教程中,我们已经了解了智能体和多智能体系统。但一个真正强大的 AI 智能体,还需要拥有记忆能力。记忆可以帮助智能体积累经验,并根据过去的经验进行决策和行动。

    本教程将带你了解 MetaGPT 中的记忆功能,以及如何使用它来提升你的 AI 智能体的能力。

    MetaGPT 中的记忆

    在 MetaGPT 中,Memory 类是智能体记忆的抽象表示。当一个角色被初始化时,它会获得一个 Memory 对象,用于存储它观察到的所有消息。这些消息会被保存在一个列表中,方便以后检索。

    检索记忆

    当你需要使用记忆时,例如将记忆作为 LLM 的上下文,可以使用 self.get_memories() 方法。该方法的定义如下:

    def get_memories(self, k=0) -> list[Message]:
        """A wrapper to return the most recent k memories of this role, return all when k=0"""
        return self.rc.memory.get(k=k)

    该方法接受一个可选参数 k,用于指定要检索的最近记忆数量。如果 k 为 0,则返回所有记忆。

    例如,在之前的多智能体教程中,我们使用 get_memories() 方法将所有记忆作为上下文提供给测试者。这样,如果审查者提供了反馈,测试者可以参考之前的版本修改测试用例。代码片段如下:

    async def _act(self) -> Message:
        logger.info(f"{self._setting}: ready to {self.rc.todo}")
        todo = self.rc.todo
    
        # context = self.get_memories(k=1)[0].content  # 使用最近的记忆作为上下文
        context = self.get_memories()  # 使用所有记忆作为上下文
    
        code_text = await todo.run(context, k=5)  # 指定参数
    
        msg = Message(content=code_text, role=self.profile, cause_by=todo)
    
        return msg

    添加记忆

    要添加记忆,可以使用 self.rc.memory.add(msg) 方法,其中 msg 必须是 Message 类的实例。

    建议在定义 _act 方法时,将动作输出的消息添加到角色的记忆中。角色通常需要记住它之前说过的话或做过的事,才能采取下一步行动。

    下一步

    本教程介绍了 MetaGPT 中的“短期记忆”概念。记忆的检索是基于简单的最近性原则。然而,还有许多其他类型的记忆,以及各种各样的记忆生成和检索技术。你可以参考 Memory 教程,了解如何使用记忆来真正提升你的智能体的性能。

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-07-10 23:07:42
沪ICP备2024052574号-1