MetaGPT-Tools

MetaGPT 通过 3 个步骤创建工具:

  1. 创建预提供的函数或类:编写专门用于与外部环境进行特定交互的函数或类,并将它们放置在 metagpt/tools/libs 目录中
  2. 使用谷歌风格的文档字符串(Docstring):为每个函数或类配备谷歌风格的文档字符串。这作为一个简洁而全面的参考资料,详细说明其用途、输入参数和预期输出
  3. 应用 @register_tool 装饰器:使用 @register_tool 装饰器以确保在工具注册表中准确注册。这个装饰器简化了函数或类与 DataInterpreter

创建预提供的函数

在 MetaGPT 的安装路径的 metagpt\\tools\ 目录下新建函数,并使用 @register_tool() 注册工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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)

import nest_asyncio
nest_asyncio.apply()
# 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))

metaGPT 会自己生成以下代码

MetaGPT-Tools-20250115191104

创建预提供的类

同样的方式,将装饰器注册参数改为以下:@register_tool(tags=["math"], include_functions=["__init__", "add", "subtract", "multiply", "divide", "factorial"])

Tools 与 Action 的关系

在自定义 Tools 后,会使用 DataInterpreter 封装工具以初始化 Role,就内部函数来说,两者地位等同,只是:

  • Action:通过 run 函数执行
  • Tool:通过运行代码执行

MetaGPT-Tools-20250111104023