你要的AI Agent工具都在这里
只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力。本篇,我们让AI Agent使用更多的工具,比如:外部搜索、分析CSV、文生图、执行代码等。
1. 使用工具的必要性
LLM(大模型)如果没有使用工具的能力,那就相当于一个有着聪明大脑 但四肢僵硬的 渐冻人,什么事儿也做不了。人类之所以区别于动物,正是因为学会了使用工具。因此,赋予LLM使用工具的能力至关重要。
我们需要 LLM去帮助执行各种任务。而Tool(工具)就是LLM 在执行任务过程中,能够调用的外部能力。比如:需要检索外部资料时,可以调用检索工具;需要执行一段代码时,可以调用自定义函数去执行。
2. LangChain的Tool规范
所有的工具肯定要遵守一套规范,才能让LLM随意调用。为此,LangChain 抽象出一个Tool 层,只要是遵守这套规范的函数就是 Tool 对象,就可以被 LLM调用。

2.1. Tool规范
Tool的规范也简单,只要有三个属性就行:name、description和function。
- name:工具的名称。
- description:对工具的功能描述,后续这个描述文本会添加到Prompt(提示词)中,LLM 将根据description来决定是否调用该工具。
- function:此工具实际运行的函数。
只要遵守这个规范就行,使用形式可以有多种,下文的实践代码会介绍到。
2.2. Agent使用工具的流程
让AI Agent使用工具,需要定义Agent和AgentExecutor。AgentExecutor维护了Tool.name到Tool的Map 结构。
LLM根据Prompt(包含了Tool的描述) 和 用户的问题,判断是否需要调用工具,确定某个工具后,在根据Tool的名称 和 调用参数,到映射Map 中获找Tool实例,找到之后调用Tool实例的function。
3. 如何使用各种Tool
自定义Tool只需要遵守以上规范就可以,下面以几个常用的工具做示例。
下文有些工具用到了toolkits。toolkits是LangChain提供的工具包,旨在简化使用工具的成本,toolkits里提供了丰富的工具,还在不断叠加,大部分的工具都可以在里面找到。
3.1. 外部搜索
使用外部搜索工具。本文使用的是serpapi,serpapi集成了Google、百度等多家搜索引擎,通过api的形式调用,非常方便。
官网地址:https://serpapi.com/。可以自行注册,有一些免费额度。外部搜索工具定义如下:
# 1. 使用@tool装饰器,定义搜索工具
@tool
def search(query: str) -> str:
"""只有在需要了解实时信息 或 不知道的事情的时候 才会使用这个工具,需要传入要搜索的内容。"""
serp = SerpAPIWrapper()
result = serp.run(query)
return result
3.2. 文生图
文生图工具是使用LangChain社区提供的DallEAPIWrapper类,本文使用OpenAI的图片生成模型Dall-E-3,具体代码如下:
# 2. 使用Tool工具类,定义图片生成工具
dalle_image_generator = Tool(
name="基于OpenAI Dall-E-3的图片生成器",
func=DallEAPIWrapper(model="dall-e-3").run,
description="OpenAI DALL-E API 的包装器。当你需要根据 描述的文本 生成图像时 使用此工具,需要传入 对于图像的描述。",
)
这里的DallEAPIWrapper(model="dall-e-3").run方法就是个函数,实际是去调用了OpenAI的接口。

3.3. 代码执行器
代码执行器工具,可以执行代码 或者 根据自然语言生成代码。主要使用LangChain提供的PythonREPLTool 和 LangChain提供的toolkits。
比如create_python_agent就简化了创建Python解释器工具的过程。代码如下:
# 3. 使用toolkit,定义执行Python代码工具
python_agent_executor = create_python_agent(
llm=model,
tool=PythonREPLTool(),
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
)
3.4. 分析CSV
CSV工具,用来分析csv文件。依旧是使用toolkits工具包里的create_csv_agent函数快出创建工具。代码如下:
# 4. 使用toolkit,定义分析CSV文件工具
csv_agent_executor = create_csv_agent(
llm=model,
path="course_price.csv",
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
allow_dangerous_code=True,
)
3.5. 完整代码
上面介绍了AI Agent的常用工具,定义好工具之后,在把工具放入到工具集中,最后在定义Agent 和 AgentExecutor就算完成了。短短几十行代码,就可以让LLM使用这么多工具了。
完整代码如下:
import os
from langchain import hub
from langchain_openai import ChatOpenAI
from langchain.agents import create_structured_chat_agent, AgentExecutor, Tool
from langchain.tools import BaseTool, StructuredTool, tool
from langchain_experimental.agents.agent_toolkits import (
create_python_agent,
create_csv_agent,
)
from langchain_community.utilities import SerpAPIWrapper
from langchain_experimental.tools import PythonREPLTool
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
# 需要先安装serpapi, pip install serpapi, 还需要到 https://serpapi.com/ 去注册账号
# SERPAPI_API_KEY 和 OPENAI 相关密钥,注册到环境变量
os.environ["SERPAPI_API_KEY"] = (
"9dd2b2ee429ed996c75c1daf7412df16336axxxxxxxxxxxxxxx"
)
os.environ["OPENAI_API_KEY"] = "sk-a3rrW46OOxLBv9hdfQPBKFZtY7xxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_BASE"] = "https://api.302.ai/v1"
model = ChatOpenAI(model_name="gpt-3.5-turbo")
# 基于reAct机制的Prompt模板
prompt = hub.pull("hwchase17/structured-chat-agent")
# 各种方式定义工具
# 1. 使用@tool装饰器,定义搜索工具
@tool
def search(query: str) -> str:
"""只有在需要了解实时信息 或 不知道的事情的时候 才会使用这个工具,需要传入要搜索的内容。"""
serp = SerpAPIWrapper()
result = serp.run(query)
return result
# 2. 使用Tool工具类,定义图片生成工具
dalle_image_generator = Tool(
name="基于OpenAI Dall-E-3的图片生成器",
func=DallEAPIWrapper(model="dall-e-3").run,
description="OpenAI DALL-E API 的包装器。当你需要根据 描述的文本 生成图像时 使用此工具,需要传入 对于图像的描述。",
)
# 3. 使用toolkit,定义执行Python代码工具
python_agent_executor = create_python_agent(
llm=model,
tool=PythonREPLTool(),
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
)
# 4. 使用toolkit,定义分析CSV文件工具
csv_agent_executor = create_csv_agent(
llm=model,
path="course_price.csv",
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
allow_dangerous_code=True,
)
# 定义工具集合
tool_list = [
search,
dalle_image_generator,
Tool(
name="Python代码工具",
description="""
当你需要借助Python解释器时,使用这个工具。
比如当你需要执行python代码时,
或者,当你想根据自然语言的描述生成对应的代码时,让它生成Python代码,并返回代码执行的结果。
""",
func=python_agent_executor.invoke,
),
Tool(
name="CSV分析工具",
description="""
当你需要回答有关course_price.csv文件的问题时,使用这个工具。
它接受完整的问题作为输入,在使用Pandas库计算后,返回答案。
""",
func=csv_agent_executor.invoke,
),
]
# 将工具丢给Agent
agent = create_structured_chat_agent(
llm=model,
tools=tool_list,
prompt=prompt
)
# 定义AgentExecutor
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tool_list,
verbose=True, # 打印详细的 选择工具的过程 和 reAct的分析过程
handle_parsing_errors=True
)
# 不会使用工具
agent_executor.invoke({"input": "你是谁?"})
# 使用查询工具
# agent_executor.invoke({"input": "南京今天的温度是多少摄氏度?现在外面下雨吗?"})
# 使用Python代码工具
# agent_executor.invoke(
# {
# "input": """
# 帮我执行```号里的python代码,
# ```python
# def add(a,b):
# return a+b
# print("hello world : ", add(100,200))
# ```
# """
# }
# )
# 使用图片生成工具
# agent_executor.invoke(
# {
# "input": "帮我生成一副图片,图片描述如下:一个非常忙碌的中国高中生在准备中国的高考,夜已经很深了,旁边他的妈妈一边看书一边在陪伴他,窗外是模糊的霓虹灯。"
# }
# )
# 使用CSV分析工具
# agent_executor.invoke({"input": "course_price数据集里,一共有哪几个城市?用中文回答"})
一起看下使用工具后,reAct的整个过程。

以上代码经过完整调试,更换下openai和serpapi的密钥即可直接运行,如果遇到问题可以关注公众号给我留言。
4. 总结
本文主要聊了AI Agent的工具规范,以及常用工具。AI Agent只有借助工具才能发挥威力。
=====>>>>>> 关于我 <<<<<<=====
本篇完结!欢迎点赞 关注 收藏!!!
原文链接:https://mp.weixin.qq.com/s/iSJExaJSCe7fXzous17pXg

你要的AI Agent工具都在这里的更多相关文章
- 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具
在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...
- Azure、数据、AI开发工具
Azure.数据.AI开发工具 在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲 ...
- 一键上手时下最火AI作画工具
摘要:在华为云ModelArts上, 无需考虑计算资源.环境的搭建,就算不懂代码,也能按照教程案例,通过Stable Diffusion成为艺术大师. 本文分享自华为云社区<跟着华为云Model ...
- AI测试101:测试AI系统的实用技巧&ML和AI自动化工具
基于人工智能的系统,也称为神经网络(NN Neural Networks),和其他应用程序一样是 "系统",因此需要测试.本文将指导你测试AI和基于NN的系统,并理解相关概念. 测 ...
- 口碑最好的五款BI工具都在这了
目前,无论是大企业还是小企业,都面临着数字化转型的挑战.在这个过程中,BI工具起到了举足轻重的作用.市面上打着BI的旗号,实际却只是单纯数据工具的产品不少,客户在进行BI 选型时,眼花缭乱,不知所措. ...
- JetBrains Rider 破解 (ideaIU等等开发工具都通用)2018-02-27
贴一下Rider下载地址:(下载不了可以用百度云离线下载) Win:https://download.jetbrains.com/resharper/JetBrains.Rider-2017.3.1. ...
- 使用 tablib 来自动化管理测试用例,其他的工具都不用学了
你在学习 python 自动化测试吗?听过 requests 库吗?tablib 是 requests 库作者常年维护的一个可以操作 Excel 等多种文件格式,将他们变成一种通用数据集的第三方库. ...
- 医学图像分割-在3DSlicer中使用英伟达的AI辅助工具NvidiaAIAssistedAnnotation自动切割医学图像教程
前期准备 下载3DSlicer并安装: 3DSlicer官网(http://www.slicer.org)或者直接下载(https://download.slicer.org),需要注意目前该插件只支 ...
- 好用的C语言编程软件!工具都没有,怎么用技术改变世界呢!
好用的C语言编程软件 1.VS(Visual Studio) VS(Visual Studio) VS是目前最流行的windows平台应用程序的集成开发环境,由于大部分同学使用的都是Windows ...
- 赶紧收藏!最好用的BI工具都在这了!
1.bi厂商--思迈特软件Smartbi 广州思迈特软件有限公司成立于2011 年,以提升和挖掘企业客户的数据价值为使命,专注于商业智能与大数据分析软件产品与服务.思迈特软件是国家认定的"高 ...
随机推荐
- MySQL 数据库重置密码
1.Linux 中 MySQL 数据库重置密码 停止服务:systemctl stop mysql 打开 my.cnf(没有则创建一个):vim /etc/my.cnf 在 [mysqld] 下添加: ...
- SQL Server 数据库分析操作程序时SQL语句等待或执行时间较长(死锁)
大型程序,总会遇到程序操作端卡顿或者直接遇到死锁,死锁是数据库设计的缺陷,虽不能完全避免死锁的出现,但一旦出现死锁我们要进行及时分析死锁语句,找出原因,进行SQL语句或程序的优化,避免再次出现同样的问 ...
- ACM算法竞赛代码模板(长期更新)
C++算法模板 基础算法 排序 快速排序 void quickSort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j ...
- MySQL如何快速获取binlog的开始时间和结束时间
之前写过一篇文章MySQL如何获取binlog的开始时间和结束时间[1],文章里面介绍了如何获取MySQL数据库二进制日志(binlog)的开始时间与结束时间的一些方法.实际应用当中,我们可能还会遇到 ...
- mysql如何优雅的备份数据
MySQL 有多种备份方式,以下是几种常用的备份方式: 使用 mysqldump 命令备份数据 mysqldump 是 MySQL 自带的备份工具,可以备份指定数据库或表的数据为 SQL 文件.可以通 ...
- C语言:将字符逆反排列再输出的问题
代码: #include<stdio.h> #define N 10 int main() { /*输入字符串,str[10],将里面的字符逆反排列,再输出.*/ char ch[N]; ...
- C 语言编程 — 代码规范
目录 文章目录 目录 前文列表 空行 空格 缩进 对齐 代码行 注释 示例 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 ...
- linux常用关机/重启命令:shutdown,init 0,init 6
目录 一.使用shutdown关机,重启,定时关机 二.使用init关机/重启 一.使用shutdown关机,重启,定时关机 1.设置计算机10分钟之后关机 [root@node5 ~]# shutd ...
- CSS——透明度
CSS 中提供了一个 opacity 属性用来设置元素的透明度,它不仅对颜色有效,对图像或者页面中其它的元素也有效. 其语法格式如下: opacity: number; 其中 number 为一个 0 ...
- nginx001
本文档版权归属:陈雷雷,仅限学习交流 QQ:370460470 blog:www.chenleilei.net Nginx服务实践 简述Nginx(nginx.org) Nginx (engine x ...