在之前的教程中,我们学习了如何使用记忆来提升智能体的能力。但有时候,智能体需要与外部环境进行交互,例如获取信息、执行操作等等。这就是 MetaGPT 工具发挥作用的地方。
友情链接:ACEJoy
MetaGPT 工具可以帮助你的智能体扩展能力,就像给它安装了“外挂”一样。本教程将带你学习如何创建和使用 MetaGPT 工具。
创建工具
在 MetaGPT 中,创建工具非常简单,只需在 metagpt/tools/libs
目录中创建自己的函数或类即可。
步骤:
- 创建函数或类: 编写函数或类,用于实现与外部环境的交互。
- 添加 Google 风格的文档字符串: 为每个函数或类添加文档字符串,用于描述其用途、输入参数和预期输出。
- 使用
@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 文档:了解更多关于 MetaGPT 的信息。
- MetaGPT Github:查看 MetaGPT 的源代码和示例。
- MetaGPT 论文:深入了解 MetaGPT 的技术细节。