发挥大模型潜力:让AI Agent学会使用工具

只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力。本篇,我们让AI Agent使用更多的工具,比如:外部搜索、分析CSV、文生图、执行代码等。

使用工具的必要性

LLM(大模型)如果没有使用工具的能力,那就相当于一个有着聪明大脑 但四肢僵硬的

渐冻人

,什么事儿也做不了。人类之所以区别于动物,正是因为学会了使用工具。因此,赋予LLM使用工具的能力至关重要。

我们需要 LLM去帮助执行各种任务。而Tool(工具)就是LLM 在执行任务过程中,能够调用的外部能力。比如:需要检索外部资料时,可以调用检索工具;需要执行一段代码时,可以调用自定义函数去执行。

LangChain的Tool规范

所有的工具肯定要遵守一套规范,才能让LLM随意调用。为此,LangChain 抽象出一个

Tool 层

,只要是遵守这套规范的函数就是

Tool

对象,就可以被 LLM调用。

Tool规范

Tool的规范也简单,只要有三个属性就行:

name



description



function

  • name:工具的名称。
  • description:对工具的功能描述,后续这个描述文本会添加到Prompt(提示词)中,LLM 将根据description来决定是否调用该工具。
  • function:此工具实际运行的函数。

只要遵守这个规范就行,使用形式可以有多种,下文的实践代码会介绍到。

Agent使用工具的流程

让AI Agent使用工具,需要定义

Agent



AgentExecutor



AgentExecutor

维护了

Tool.name



Tool



Map

结构。

LLM根据Prompt(包含了

Tool

的描述) 和 用户的问题,判断是否需要调用工具,确定某个工具后,在根据

Tool

的名称 和 调用参数,到映射

Map

中获找

Tool

实例,找到之后调用

Tool

实例的

function

如何使用各种Tool


自定义Tool

只需要遵守以上规范就可以,下面以几个常用的工具做示例。

下文有些工具用到了

toolkits



toolkits



LangChain提供的工具包,旨在简化使用工具的成本



toolkits

里提供了丰富的工具,还在不断叠加,大部分的工具都可以在里面找到。

外部搜索

使用外部搜索工具。本文使用的是

serpapi



serpapi

集成了Google、百度等多家搜索引擎,通过api的形式调用,非常方便。

官网地址:
https://serpapi.com/
。可以自行注册,有一些免费额度。外部搜索工具定义如下:

# 1. 使用@tool装饰器,定义搜索工具
@tool
def search(query: str) -> str:
    """只有在需要了解实时信息 或 不知道的事情的时候 才会使用这个工具,需要传入要搜索的内容。"""
    serp = SerpAPIWrapper()
    result = serp.run(query)
    return result

文生图

文生图工具是使用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 的包装器。当你需要根据 描述的文本 生成图像时 使用此工具,需要传入 对于图像的描述。",
)

代码执行器

代码执行器工具,可以执行代码 或者 根据自然语言生成代码。主要使用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},
)

分析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,
)

完整代码

上面介绍了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")

# 各种方式定义工具
# ...(代码过长,省略部分内容)
# 将工具丢给Agent
# ...(代码过长,省略部分内容)
# 定义AgentExecutor
# ...(代码过长,省略部分内容)
# 不会使用工具
# ...(代码过长,省略部分内容)
# 使用查询工具
# ...(代码过长,省略部分内容)
# 使用Python代码工具
# ...(代码过长,省略部分内容)
# 使用图片生成工具
# ...(代码过长,省略部分内容)
# 使用CSV分析工具
# ...(代码过长,省略部分内容)

一起看下使用工具后,reAct的整个过程。

以上代码经过完整调试,更换下openai和serpapi的密钥即可直接运行,如果遇到问题可以

关注公众号

给我留言。

总结

本文主要聊了AI Agent的工具规范,以及常用工具。AI Agent只有借助工具才能发挥威力。

=====>>>>>>
关于我
<<<<<<=====


本篇完结!欢迎点赞 关注 收藏!!!


原文链接:

https://mp.weixin.qq.com/s/iSJExaJSCe7fXzous17pXg

未经允许不得转载:大白鲨游戏网 » 发挥大模型潜力:让AI Agent学会使用工具