工具Tools
概述
工具是代理、链或LLM可以用来与世界互动的接口。它们结合了几个要素:
LangChain通过提供统一框架集成功能的具体实现。在框架内,每个功能被封装成一个工具,具有自己的输入输出及处理方法。代理接收任务后,通过大模型推理选择适合的工具处理任务。一旦选定,LangChain将任务输入传递给该工具,工具处理输入生成输出。输出经过大模型推理,可用于其他工具的输入或作为最终结果返回给用户。
简单的说就是:代理根据任务类型和需求通过大模型推理选择工具处理任务,LangChain传递任务输入给工具生成输出,输出再经大模型推理,作为其他工具输入或最终结果返回给用户。
工具列表
具体工具Tools详情参考: Tools文档
工具名称 | 中文说明 |
---|---|
Alpha Vantage | 提供实时和历史金融市场数据的工具 |
Apify | 用于网络抓取和数据提取的云平台工具 |
ArXiv | 提供访问学术论文和文献的工具 |
AskNews | 为任何LLM注入最新的全球新闻(或历史新闻)的工具 |
AWS Lambda | 提供云函数或无服务器计算的工具 |
Shell (bash) | 提供让LLM使用它来执行任何shell命令的工具 |
Bearly Code Interpreter Bearly | 提供一个代码沙箱(代码解释器),允许远程执行代码的工具 |
Bing Search | 提供 Bing 搜索引擎查询结果的工具 |
Brave Search | 提供 Brave 搜索引擎查询结果的工具 |
ChatGPT Plugins | 插件工具,用于扩展 ChatGPT的功能 |
Connery Action Tool | 提供了各种即用型开源插件,以增加便利性的工具 |
Dall-E Image Generator | OpenAI提供的开发文本到图像模型的工具 |
DataForSeo | 从各种搜索引擎获取搜索结果的工具 |
Dataherald | 提供自然语言到SQL的 API工具 |
DuckDuckGo Search | 提供 DuckDuckGo 搜索引擎查询结果的工具 |
E2B Data Analysis | E2B 的数据分析沙箱允许在沙箱环境中安全执行代码 |
Eden AI | 通过单个API轻松访问更多的AI功能API的工具 |
Eleven Labs Text2Speech | 一个实现文本转语音功能的工具 |
Exa Search | 完全为LLMs使用而设计的搜索引擎工具 |
File System | 提供与本地文件系统交互的工具集 |
Golden Query | 提供基于知识图谱的自然语言查询服务的工具 |
Google Cloud Text-to-Speech | 提供文本转语音功能的工具 |
Google Drive | 提供操作谷歌云端硬盘API的工具 |
Google Places | 提供 Google 地点信息和查询的工具 |
Google Search | 提供 Google 搜索引擎查询结果的工具 |
Google Serper | 用于网络搜索的工具,需要注册并获取 API 密钥 |
Gradio | 提供与 Gradio 应用交互的工具 |
GraphQL | 提供 GraphQL 查询的工具 |
HuggingFace Hub Tools | 提供了与 HuggingFace 库交互的工具 |
Human as a tool | 描述了如何将人类作为一个执行具体任务的工具 |
IFTTT WebHooks | 提供与 IFTTT WebHooks 交互的工具 |
Lemon Agent | 用于实现自动化工作流的工具 |
OpenWeatherMap | 提供查询天气信息的工具 |
PubMed | 提供 PubMed 医学文献查询的工具 |
Requests | 提供网络信息获取功能的工具 |
SceneXplain | 提供图像描述服务的工具 |
Search Tools | 提供各种搜索工具的工具集 |
SearxNG Search | 提供自托管 SearxNG 搜索 API 查询的工具 |
SerpAPI | 提供网络搜索的工具 |
Twilio | 提供 SMS 或其他消息通道发送消息的工具 |
Wikipedia | 提供查询 Wikipedia 百科全书的工具 |
Wolfram Alpha | 提供查询 Wolfram Alpha 的知识引擎的工具 |
YouTube | 提供 YouTube 视频搜索的工具 |
Zapier Natural Language Actions API | 用于自然语言处理的API 工具 |
参考连接
内置工具:有关所有内置工具的列表,请 参阅此页面
自定义工具:虽然内置工具很有用,但很可能必须定义自己的工具。请 参阅本指南
工具包:工具包是可以很好地协同工作的工具的集合。请 参阅此页面
工具的初步认识
Wikidata工具
维基数据是一个自由开放的知识库,人类和机器都可以阅读和编辑。维基数据是世界上最大的开放知识库之一。
WikipediaAPIWrapper是维基百科的包装器,通过它进行维基百科的搜索查询
安装Wikidata相关库
具体实现代码如下
自定义默认工具
可以修改参数的内置名称、描述和JSON模式。
在定义参数的JSON模式时,重要的是输入保持与函数相同,因此不应更改它,但可以轻松地为每个输入定义自定义描述。
工具的加载方式
通常使用以下形式代码加载工具
有些工具(链、代理)可能需要使用LLM来初始化
自定义工具
在LangChain中,自定义工具有多种方法
@tool装饰器
@tool装饰器是定义自定义工具的最简单方法。装饰器默认使用函数名称作为工具名称,但可以通过传递字符串作为第一个参数来覆盖此设置。此外,装饰器将使用函数的文档字符串作为工具的描述 - 因此必须提供文档字符串。
示例:
输出:
通过将工具名称和 JSON 参数传递到工具装饰器来自定义
BaseTool
通过子类化 BaseTool 类来明确定义自定义工具。这可以最大程度地控制工具定义,但工作量会更大。
示例:
输出:
StructuredTool
还可以使用StructuredTool数据类。此方法是前两种方法的混合。它比从 BaseTool 类继承更方便,但提供的功能比仅使用装饰器更多
自定义 args_schema 来提供有关输入的更多信息
处理工具错误
当工具遇到错误且异常未被捕获时,代理将停止执行。如果希望代理继续执行,可以引发 ToolException 并相应地设置 handle_tool_error。
当ToolException抛出时,代理不会停止工作,可以根据handle_tool_error工具的变量来处理异常,并将处理结果作为观察返回给代理,并以红色打印。