只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力。本篇,我们让AI Agent使用更多的工具,比如:外部搜索、分析CSV、文生图、执行代码等。
一、使用工具的必要性
LLM(大模型)如果没有使用工具的能力,那就相当于一个有着聪明大脑 但四肢僵硬的 渐冻人,什么事儿也做不了。人类之所以区别于动物,正是因为学会了使用工具。因此,赋予LLM使用工具的能力至关重要。
我们需要 LLM去帮助执行各种任务。而Tool(工具)就是LLM 在执行任务过程中,能够调用的外部能力。比如:需要检索外部资料时,可以调用检索工具;需要执行一段代码时,可以调用自定义函数去执行。
二、LangChain的Tool规范
所有的工具肯定要遵守一套规范,才能让LLM随意调用。为此,LangChain 抽象出一个Tool 层,只要是遵守这套规范的函数就是 Tool 对象,就可以被 LLM调用。
1. Tool规范
Tool的规范也简单,只要有三个属性就行:name、description和function。
- name:工具的名称。
- description:对工具的功能描述,后续这个描述文本会添加到Prompt(提示词)中,LLM 将根据description来决定是否调用该工具。
- function:此工具实际运行的函数。
只要遵守这个规范就行,使用形式可以有多种,下文的实践代码会介绍到。
2. Agent使用工具的流程
让AI Agent使用工具,需要定义Agent和AgentExecutor。AgentExecutor维护了Tool.name到Tool的Map 结构。
LLM根据Prompt(包含了Tool的描述) 和 用户的问题,判断是否需要调用工具,确定某个工具后,在根据Tool的名称 和 调用参数,到映射Map 中获找Tool实例,找到之后调用Tool实例的function。
三、如何使用各种Tool
自定义Tool只需要遵守以上规范就可以,下面以几个常用的工具做示例。
下文有些工具用到了toolkits。toolkits是LangChain提供的工具包,旨在简化使用工具的成本,toolkits里提供了丰富的工具,还在不断叠加,大部分的工具都可以在里面找到。
1. 外部搜索
使用外部搜索工具。本文使用的是serpapi,serpapi集成了Google、百度等多家搜索引擎,通过api的形式调用,非常方便。
官网地址:https://serpapi.com/。可以自行注册,有一些免费额度。外部搜索工具定义如下:
2. 文生图
文生图工具是使用LangChain社区提供的DallEAPIWrapper类,本文使用OpenAI的图片生成模型Dall-E-3,具体代码如下:
这里的DallEAPIWrapper(model=”dall-e-3″).run方法就是个函数,实际是去调用了OpenAI的接口。
3. 代码执行器
代码执行器工具,可以执行代码 或者 根据自然语言生成代码。主要使用LangChain提供的PythonREPLTool 和 LangChain提供的toolkits。
比如create_python_agent就简化了创建Python解释器工具的过程。代码如下:
4. 分析CSV
CSV工具,用来分析csv文件。依旧是使用toolkits工具包里的create_csv_agent函数快出创建工具。代码如下:
5. 完整代码
上面介绍了AI Agent的常用工具,定义好工具之后,在把工具放入到工具集中,最后在定义Agent 和 AgentExecutor就算完成了。短短几十行代码,就可以让LLM使用这么多工具了。
完整代码如下:
一起看下使用工具后,reAct的整个过程。
以上代码经过完整调试,更换下openai和serpapi的密钥即可直接运行。