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 创建和使用工具。通过创建工具,你可以扩展智能体的能力,使其能够执行更复杂的任务。

更多学习资源

发表评论