你要的AI Agent工具都在这里

ai,agent · 浏览次数 : 0

小编点评

本文主要讨论了如何让大型语言模型(LLM)学会使用各种工具,以便更好地发挥其潜力。文章首先强调了使用工具的重要性,然后详细介绍了LangChain工具规范以及如何使用各种工具,包括外部搜索、文生图、代码执行器和CSV分析工具等。最后,文章通过完整代码示例展示了如何将工具集成到LLM中,并通过实际例子展示了使用工具后的反应过程。 1. **使用工具的必要性**:文章指出,如果LLM没有使用工具的能力,那么它就像一个只有大脑而没有四肢的人,无法执行任何任务。因此,赋予LLM使用工具的能力对于其发挥真正实力至关重要。 2. **LangChain的Tool规范**:为了使LLM能够随意调用各种工具,文章提出了LangChain的Tool规范。这个规范要求工具必须具有三个属性:名称、描述和功能。其中,名称是工具的标识,描述是对工具功能的简要说明,而功能则是工具实际执行的操作。 3. **Agent使用工具的流程**:文章进一步阐述了AI Agent如何使用这些工具。首先,需要定义Agent和AgentExecutor。AgentExecutor维护了一个工具名称到工具实例的映射表。当LLM接收到包含工具描述的Prompt时,它会根据描述判断是否需要调用工具,并在找到相应的工具后,调用其功能。 4. **如何使用各种Tool**:文章详细介绍了几种常用的工具,并展示了如何自定义工具。这些工具包括外部搜索工具、文生图工具、代码执行器和CSV分析工具等。每个工具都遵循LangChain的Tool规范,并可以通过LangChain的工具集进行调用。 5. **完整代码示例**:最后,文章提供了一个完整的代码示例,展示了如何将定义好的工具集成到LLM中,并通过不同的工具执行了一系列任务。这包括使用搜索工具查找信息、使用图片生成工具创作图片、使用Python代码工具执行Python代码以及使用CSV分析工具分析CSV文件等。 总的来说,本文通过详细介绍LangChain工具规范和使用各种工具的方法,为AI Agent的开发和应用提供了宝贵的参考。通过合理地使用工具,LLM将能够更好地服务于用户,发挥其巨大的潜力。

正文

只有让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的规范也简单,只要有三个属性就行:namedescriptionfunction

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

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

2.2. Agent使用工具的流程

让AI Agent使用工具,需要定义AgentAgentExecutorAgentExecutor维护了Tool.nameToolMap 结构。

LLM根据Prompt(包含了Tool的描述) 和 用户的问题,判断是否需要调用工具,确定某个工具后,在根据Tool的名称 和 调用参数,到映射Map 中获找Tool实例,找到之后调用Tool实例的function

3. 如何使用各种Tool

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

下文有些工具用到了toolkitstoolkitsLangChain提供的工具包,旨在简化使用工具的成本toolkits里提供了丰富的工具,还在不断叠加,大部分的工具都可以在里面找到。

3.1. 外部搜索

使用外部搜索工具。本文使用的是serpapiserpapi集成了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工具都在这里相似的内容:

你要的AI Agent工具都在这里

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

免费考AI OCP认证,附通关秘籍!

这是一个能让你快速熟悉AI相关技能的考试,由Oracle官方提供,而且限时免费。 它就是OCI Generative AI Professional。 可以看到,目前免费政策正在执行,到今年的7月31号截止,有想法的小伙伴们要抓紧学习了。 具体信息可参考OU官方的介绍:全新推出OCI Generat

Solution -「ARC 106E」Medals

Desc. Link. 你有 \(n\) 个朋友,他们会来你家玩,第 \(i\) 个人 \(1...A_i\) 天来玩,然后 \(A_i+1...2A_i\) 天不来,然后 \(2A_i+1...3A_i\) 又会来,以此类推; 每天你会选一个来玩的人,给他颁个奖,如果没人来玩,你就不颁奖。 你要给

前后端分离项目(十一):实现"删"功能(前后端)

好家伙,本篇介绍如何实现"删"功能 来看效果, 数据库 (自然是没什么毛病) "增"搞定了,其实"删"非常简单 (我不会告诉你我是为了水一篇博客才把他们两个分开写,嘿嘿) 逻辑简洁明了: 首先,看见你要删除的数据,点"删除", 随后,①拿到当前这条数据的Id,向后台发请求网络, 然后,②后端删除该字

[转帖]Redis的高并发及高可用,到底该如何保证?

https://zhuanlan.zhihu.com/p/404481762 一、redis如何通过读写分享来承载读请求QPS超过10万+ 1、redis高并发跟整个系统的高并发之间的关系 redis,你要搞高并发的话,不可避免,要把底层的缓存搞得很好 mysql,高并发,做到了,那么也是通过一系列

全面的ASP.NET Core Blazor简介和快速入门

前言 因为咱们的MongoDB入门到实战教程Web端准备使用Blazor来作为前端展示UI,本篇文章主要是介绍Blazor是一个怎样的Web UI框架,其优势和特点在哪?并带你快速入门上手ASP.NET Core Blazor(当然这个前提是你要有一定的C#编程基础的情况,假如你完全没有接触过C#的

被辞退怎么办?

首先要有底气有条理的冷静应对 如果公司要辞退你,一定是先找你谈,一旦他找你谈辞退,一般就是让你自离,这是他们的首选(因为便宜嘛,不用给钱) 这时候就要开启战斗状态了,即使内心翻江倒海的难受,也要冷静的先听他说完 赔偿这种东西本来就是要靠谈的,你不要指望一个资本家,凭良心给你的 第一轮谈话,面对对方的

学node 之前你要知道这些

初识nodejs 19年年底一个偶然的机会接到年会任务,有微信扫码登录、投票、弹幕等功能,于是决定用node 来写几个服务,结果也比较顺利。 当时用看了下koa2的官方文档,知道怎么连接数据库、怎么映射表实体,怎么处理http,怎么处理异常等,就可以直接写起来了。从应用层面上来说 nodejs 入门

玩好.NET高级调试,你也要会写点汇编

一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多还是用微软的 MASM + DosBox 搭一个 8086 的环境,这玩意距今快 50 年了。 在以

探究:初学者编程语言的选择

| 日期 | 修改人 | 修改内容 | | | | | | 2023年2月12日 | 北极的大企鹅 |添加了C语言的新比喻 | 前景提要 很多初学者面临的最多的问题就是编程语言的选择问题,一旦你接触编程,无论任何人都会给你提到一个问题,说你要选择一门编程语言学习,才能在后续的计算机学习中取得成绩,但