只有让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提供的工具包,旨在简化使用工具的成本,