【AI Agent教程】【MetaGPT】我竟然才知道MetaGPT中也能创建和使用自定义工具

大家好,我是 同学小张,持续学习C++进阶知识AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,共同学习和进步。


学了这么久的MetaGPT,突然发现,竟然没有用到过工具。工具作为大模型连接外部世界,融入工程中的重要一环,必不可少。本文我们就来学习一下如何在MetaGPT中定义工具、使用工具。

参考:https://docs.deepwisdom.ai/main/zh/guide/tutorials/create_and_use_tools.html

0. 先上手体验

官方例子:自定义阶乘工具

0.1 定义工具

新开一个文件,定义工具。

官方是要求在 metagpt/tools/libs 中创建一个你自己的函数,但一身反骨的我,随便找个目录放就行了。

# MyMetaGPT/tools/calculate_factorial.py
import math
from metagpt.tools.tool_registry import register_tool

# 使用装饰器注册工具
@register_tool()
def calculate_factorial(n):
    """
    计算非负整数的阶乘
    """
    if n < 0:
        raise ValueError("输入必须是非负整数")
    print(f"计算{n}的阶乘------>:")
    return math.factorial(n)

0.2 使用工具

再开一个文件,使用工具。

# main.py
import asyncio
from metagpt.roles.di.data_interpreter import DataInterpreter
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))

0.3 运行结果

以下是运行过程与结果。

结构化输入信息:

在这里插入图片描述
在这里插入图片描述

找到工具:

在这里插入图片描述

输出结果:

在这里插入图片描述

1. 代码解释

1.1 工具定义与集成的步骤

以上代码调用工具时是使用了 DataInterpreter 模块,这个模块应该是0.8版本正式发布的,后面会详细介绍。本文主要介绍工具的定义和集成步骤:

(1)首先是引入工具定义的依赖:from metagpt.tools.tool_registry import register_tool

(2)使用 @register_tool() 装饰器注册工具

(3)导入你的工具:import calculate_factorial

(4)集成并使用工具: role = DataInterpreter(tools=["calculate_factorial"])

1.2 工具定义的注意事项

工具定义时,最最重要的,我认为是下面的这几行:

除了函数名和参数外,不要忘了写这个函数的注释,用 “”" 括起来。这不仅仅是注释这么简单,在Python中叫文档字符串(docstring)。在定义工具时,这个字符串就是工具的Prompt,是直接决定大模型是否选择这个工具的依据

def calculate_factorial(n):
    """
    计算非负整数的阶乘
    """

2. 另一个更复杂的例子 - 计算器类作为工具

上面的例子是将单个函数作为一个工具。官方还给了一个将一个类作为工具的例子。

2.1 示例代码

# metagpt/tools/libs/calculator.py
import math
from metagpt.tools.tool_registry import register_tool

# 使用装饰器注册工具
# “math”的tag用于将工具分类为数学工具,include_functions 参数用于指定要包含的函数。这有利于`DataInterpreter`选择并理解工具
@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)

2.2 代码解释

这个代码与单函数作为工具的区别在于这一行:

@register_tool(tags=["math"], include_functions=["__init__", "add", "subtract", "multiply", "divide", "factorial"])

这个装饰器中,有两个参数:tagsinclude_functions

tags 参数用于指定工具的分类。这个在单函数工具和类作为工具中都适用。

include_functions 参数用于指定工具中包含的函数。这个在类作为工具中才适用,单函数工具不需要这个参数。

同样,最关键的一点,要注意给这个类和各个函数添加文档字符串。

3. 工具与Action的关系

其实学到这里,MetaGPT中的工具的定义和使用,已经差不多可以了。但是这也衍生了我的一个疑问:工具和Action的关系是什么?工具用来执行特定动作,Action也是用来执行特定动作的吧?有了Action,那工具存在的意义是什么呢?

我隐约觉得,工具其实实现原理是大模型的Function Calling功能,是可以让大模型识别和执行的,而Action因为无法封装成大模型Function Calling的形式,所以不能被大模型直接识别和执行。Action更像是流程中的一环,可以是主动触发的。而工具是放在那被大模型调用的?

但是似乎又觉得这样的理解还是不清楚。大家有什么好的见解吗?

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是 同学小张,持续学习C++进阶知识AI大模型应用实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜同学小张 🙏

本站文章一览:

在这里插入图片描述

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当你想在Github上创建一个人工智能项目时,以下是一些教程和资源,可以帮助你入门和进行开发: 1. 选择合适的编程语言:人工智能项目可以使用多种编程语言进行开发,如Python、Java、C++等。选择一种你熟悉或感兴趣的语言作为项目的主要开发语言。 2. 学习机器学习和深度学习基础:人工智能的核心是机器学习和深度学习。你可以通过在线教程、书籍或课程来学习这些基础知识,了解常见的机器学习算法和深度学习框架。 3. 选择合适的机器学习框架:根据你的项目需求和编程语言选择合适的机器学习框架。常用的机器学习框架包括TensorFlow、PyTorch、Scikit-learn等。 4. 学习使用机器学习库和工具:熟悉所选机器学习框架的基本概念和使用方法,掌握常用的机器学习库和工具的操作,如数据处理库(NumPy、Pandas)、数据可视化库(Matplotlib、Seaborn)等。 5. 寻找开源项目和示例代码:在Github上搜索相关的开源项目和示例代码,可以借鉴他人的实现思路和代码结构,快速开始你的项目。 6. 创建Github仓库:按照之前提到的步骤,在Github上创建一个新的仓库作为你的人工智能项目的主页。 7. 编写项目文档:为你的项目编写文档,包括项目介绍、安装说明、使用方法、代码结构等。这样其他人可以更好地理解和使用你的项目。 8. 提交代码和文档:使用Git命令行或者Git客户端将你的代码和文档提交到Github仓库,并定期进行更新和维护。 9. 与社区互动:在Github上积极与其他开发者和用户进行交流和互动,接受反馈和建议,参与讨论等。 10. 持续学习和改进:人工智能领域发展迅速,持续学习新的技术和算法,并不断改进你的项目。 以上是一些基本的教程和资源,希望能帮助你开始在Github上创建自己的人工智能项目。记得不断学习和实践,积极参与开源社区,与他人分享你的工作和经验。祝你成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学小张

如果觉得有帮助,欢迎给我鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值