【AI Agent系列】【阿里AgentScope框架】简明教程:如何在AgentScope中使用自定义工具?附完整代码(可直接运行)
创始人
2024-11-30 16:36:37
0次

大家好,我是 同学小张,持续学习C++进阶、OpenGL、WebGL知识技能和AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,+v: jasper_8017 一起交流,共同学习和进步。


本文我们来学习下如何在AgentScope中使用自定义的工具。

文章目录

  • 0. 开篇
  • 1. 在 AgentScope 中使用自定义工具
    • 1.1 创建自定义工具
    • 1.2 使用自定义工具
  • 2. 完整代码与运行结果
  • 3. 存在的问题 - 一些思考,仅供参考

0. 开篇

在AgentScope中,自定义工具和内置工具的使用似乎没那么明显,但确实也提供了这个框架。它其实是通过一个叫 ServiceToolkit 来封装的工具。至于工具的使用,可以通过 ReActAgent 来实现。但这样使用在我看来有点问题。

先来看下具体怎么使用。

1. 在 AgentScope 中使用自定义工具

1.1 创建自定义工具

创建自定义工具,本质上是创建一个自定义函数。与LangChain和MetaGPT会通过类似 @tools 装饰器来将函数封装成框架内可用的工具不同,在 AgentScope 中,你只将函数的返回值封装成 ServiceResponse 对象即可。ServiceResponse 接收一个运行状态和一个content内容。

当然,记得要写该函数的docstring。还没细看源码,但猜测 AgentScope 内部应该是通过 docstring 来当作该工具的Prompt,并明确工具的参数和返回值。

def sum_num(a: int, b: int) -> int:     """计算两个数的和      Args:         a (int): 参数1         b (int): 参数2      Returns:         int: 结果     """     output = a + b     status = ServiceExecStatus.SUCCESS     return ServiceResponse(status, output) 

1.2 使用自定义工具

(1)首先,你需要将该工具添加到 ServiceToolkit 中。

service_toolkit = ServiceToolkit() service_toolkit.add(sum_num) 

(2)实例化一个 ReActAgent,通过 service_toolkit 参数来将自定义工具添加进去。

self.agent = ReActAgent(     name="assistant",     model_config_name="openai_cfg",     verbose=True,     service_toolkit=service_toolkit,     max_iters=1, ) 

(3)使用该 agent 即可

msg = Msg("user", query, role="user") return self.agent(msg) 

2. 完整代码与运行结果

完整代码如下:

from agentscope.agents.react_agent import ReActAgent  import agentscope from agentscope.message import Msg import os  from agentscope.service import (     ServiceToolkit,     ServiceResponse,     ServiceExecStatus, )  openai_api_key = os.getenv('OPENAI_API_KEY')  # 此Agent的模型配置,按需修改 OPENAI_CFG_DICT = {     "config_name": "openai_cfg",    # 此配置的名称,必须保证唯一     "model_type": "openai",         # 模型类型     "model_name": "gpt-3.5-turbo",  # 模型名称     "api_key": openai_api_key,      # OpenAI API key. 如果没有设置,将使用环境变量中的 OPENAI_API_KEY }  def sum_num(a: int, b: int) -> int:     """计算两个数的和      Args:         a (int): 参数1         b (int): 参数2      Returns:         int: 结果     """     output = a + b     status = ServiceExecStatus.SUCCESS     return ServiceResponse(status, output)   class ToolDemo:     def __init__(self):         # Prepare the tools for the agent         service_toolkit = ServiceToolkit()         service_toolkit.add(sum_num)          agentscope.init(model_configs=[OPENAI_CFG_DICT])          self.agent = ReActAgent(             name="assistant",             model_config_name="openai_cfg",             verbose=True,             service_toolkit=service_toolkit,             max_iters=1,         )              def invoke(self, query):         msg = Msg("user", query, role="user")         return self.agent(msg)      if __name__ == '__main__':     tool_demo = ToolDemo()     response = tool_demo.invoke("你是谁?")     print(response) 

运行结果:

在这里插入图片描述

可以看到它成功识别并使用了 sum_num 这个工具。

3. 存在的问题 - 一些思考,仅供参考

文章开始,我提到了通过 ReActAgent 来实现使用工具在我看来有点问题。

首先,ReActAgent 是实现的ReAct思想,即思考+行动。大模型先思考下一步该干什么,然后执行。这对于只想判断是否应该使用工具的场景来说,有点浪费。细心的同学可能发现了,在ReActAgent初始化的过程中,有个 max_iters 参数。这是最大的迭代步数,也就是思考多少次。判断一个工具的使用,其实只需要一次思考即可。(个人意见,欢迎讨论)。

其次,ReActAgent 最终的返回,是最终的结论,中间过程外部不可见。如果想要获取中间过程,需要自己实现,不能用 ReActAgent 了。目前还没看到 AgentScope 中有类似 LangChain 那样直接 bind_tools 或 bind_functions 这样的接口封装,让用户在执行之后可以获取是否需要调用工具的判断。

当识别到工具时,返回的结果是类似下图这样:

在这里插入图片描述

没有识别到工具时,返回的结果是类似下图这样:

在这里插入图片描述

难道可以通过这个返回值中有无 function 参数来判断是否使用过工具?感觉不太靠谱啊… 可能还是得自己写一个吧。欢迎熟悉的大佬指教!感谢!

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


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

本站文章一览:

在这里插入图片描述

相关内容

热门资讯

推荐十款!亚盈开挂功能方法,亚... 推荐十款!亚盈开挂功能方法,亚盈真是存在有开挂方法1、完成亚盈辅助器v3.3的残局,帮助玩家取得所有...
科技分享!五龙捕鱼开挂功能神器... 科技分享!五龙捕鱼开挂功能神器,五龙捕鱼本来有开挂神器1、在五龙捕鱼插件功能辅助器技巧中,中转单元十...
玩家必备科普!新九天辅助器功能... 玩家必备科普!新九天辅助器功能方法,新九天其实存在有辅助器方法1、新九天辅助器安装包、新九天辅助器2...
教程攻略!永乐透视功能方法,永... 教程攻略!永乐透视功能方法,永乐竟然有透视方法1、永乐辅助器安装包、永乐辅助器2、分享自己喜欢的永乐...
玩家必备科普!朋友安徽麻将透视... 玩家必备科普!朋友安徽麻将透视挂功能神器,朋友安徽麻将好像有透视挂神器1、每一步都需要思考,不同水平...
最新通报!东游三张牌辅助器功能... 最新通报!东游三张牌辅助器功能方法,东游三张牌本来有辅助器方法1、游戏颠覆性的策略玩法,独创攻略技巧...
玩家必看攻略!捕鱼联盟辅助器功... 玩家必看攻略!捕鱼联盟辅助器功能技巧,捕鱼联盟原来存在有辅助器技巧1、不需要AI权限,帮助你快速的进...
每日必看推荐!酷乐游戏透视挂功... 每日必看推荐!酷乐游戏透视挂功能脚本,酷乐游戏确实是有透视挂脚本1、下载好酷乐游戏透视辅助下载之后点...
科技介绍!游游棋牌开挂功能攻略... 科技介绍!游游棋牌开挂功能攻略,游游棋牌竟然真的是有开挂攻略游游棋牌辅助器是一种具有地方特色的麻将游...
今日头条!天酷大厅开挂功能工具... 今日头条!天酷大厅开挂功能工具,天酷大厅确实是真的有开挂工具天酷大厅能透视中分为三种模型:天酷大厅模...