LangChain组件Tools/Toolkits详解(1)——Tools接口与创建工具概述
前言
本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebUI开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面,并可部署人工智能模型,是当前热门的非常易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为五部分:Gradio介绍、HuggingFace资源与工具库、Gradio基础功能实战、Gradio与大模型融合实战和Gradio高级功能实战。第一部分Gradio介绍,包括三章内容:第一章先介绍Gradio的概念,包括详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了Gradio的安装与运行,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式;第二章介绍Gradio的4种部署方式,包括本地部署launch()、huggingface托管、FastAPI挂载和Gradio-Lite浏览器集成;第三章介绍Gradio的三种Client,包括python客户端、javascript客户端和curl客户端,方便读者对Gradio整体把握。第二部分介绍著名网站Hugging Face的各类资源和工具库,因为Gradio演示中经常用到Hugging Face的models及某些场景需要部署在spaces,包括两章内容:第四章详解三类资源models/datasets/spaces的使用,第五章实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。第三部分是Gradio基础功能实战,进入本系列文章的核心,包括四章内容:第六章讲解Gradio库的模块架构和环境变量,第七章讲解Gradio高级抽象界面类Interface,第八章讲解Gradio底层区块类Blocks,第九章讲解补充特性Additional Features。第四部分是Gradio与大模型融合实战,包括二章内容:第十章讲解融合大模型的多模态聊天机器人组件Chatbot,第十一章讲述将LLM封装为工具的Gradio Tools。第五部分讲述LangChain,包括四章内容:第十二章讲述LangChain优势分析、学习资料及架构,第十三章讲述LangChain组件Chat models,第十四章讲述组件Tools/Toolkits,第十五章讲述其它五类主要组件:Text splitters/Document loaders/Embedding models/Vector stores/Retrievers。第六部分是使用Agent构建Gradio,包括两章内容:第十六章讲解使用langchain.agents和LangGraph构建Gradio,第十七章讲述使用transformers.agents构建Gradio。第七部分讲述Gradio其它高级功能,包括三章内容:第十八章讲述Discord Bot/Slack Bot/Website Widget部署,第十九章讲述数据科学与绘图Data Science And Plots,第二十章讲述流式传输Streaming。
本系列文章讲解细致,涵盖Gradio及相关框架的大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。
本系列文章目录如下:
- 《Gradio全解1——Gradio简介》
- 《Gradio全解1——Gradio的安装与运行》
- 《Gradio全解2——Gradio的3+1种部署方式实践》
- 《Gradio全解2——浏览器集成Gradio-Lite》
- 《Gradio全解3——Gradio Client:python客户端》
- 《Gradio全解3——Gradio Client:javascript客户端》
- 《Gradio全解3——Gradio Client:curl客户端》
- 《Gradio全解4——剖析Hugging Face:详解三类资源models/datasets/spaces》
- 《Gradio全解5——剖析Hugging Face:实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum》
- 《Gradio全解6——Gradio库的模块架构和环境变量》
- 《Gradio全解7——Interface:高级抽象界面类(上)》
- 《Gradio全解7——Interface:高级抽象界面类(下)》
- 《Gradio全解8——Blocks:底层区块类(上)》
- 《Gradio全解8——Blocks:底层区块类(下)》
- 《Gradio全解9——Additional Features:补充特性(上)》
- 《Gradio全解9——Additional Features:补充特性(下)》
- 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人》
- 《Gradio全解11——Gradio Tools:将LLM封装为工具》
- 《Gradio全解12——LangChain优势分析、学习资料及架构》
- 《Gradio全解13——LangChain组件Chat models详解》
- 《Gradio全解14——LangChain组件Tools/Toolkits详解》
- 《Gradio全解15——LangChain其它五类组件》
- 《Gradio全解16——使用langchain.agents和LangGraph构建Gradio》
- 《Gradio全解17——使用transformers.agents构建Gradio》
- 《Gradio全解18——Discord Bot/Slack Bot/Website Widget部署》
- 《Gradio全解19——Data Science And Plots:数据科学与绘图》
- 《Gradio全解20——Streaming:流式传输》
本章目录如下:
- 《LangChain组件Tools/Toolkits详解(1)——Tools接口与创建工具概述》
- 《LangChain组件Tools/Toolkits详解(2)——装饰器@tool》
- 《LangChain组件Tools/Toolkits详解(3)——结构化工具StructuredTool》
- 《LangChain组件Tools/Toolkits详解(4)——处理Error》
- 《LangChain组件Tools/Toolkits详解(5)——返回产物artifact》
- 《LangChain组件Tools/Toolkits详解(6)——特殊类型注解》
- 《LangChain组件Tools/Toolkits详解(7)——工具调用与Toolkits》
本篇摘要
本章介绍LangChain组件Tools/Toolkits。
14. LangChain组件Tools/Toolkits详解
工具(Tools)是一种封装函数及其模式schema的方法,可以传递给聊天模型,使模型能够请求执行带有特定输入的工具函数,例如从数据库获取数据、发出API请求或运行自定义代码。LangChain中的tool抽象类将Python函数与定义函数名称、描述和预期参数的模式schema关联起来,以明确创建工具的作用及调用方式。本节将从Tools接口与创建工具概述、装饰器@tool、结构化工具StructuredTool、处理Error、返回产物artifact、特殊类型注解、工具调用和Toolkits等方面详细介绍工具。
14.1 Tools接口与创建工具概述
本节将Tools接口与创建工具概述合并在一起讲述。
14.1.1 Tools接口
Tools接口在BaseTool类中定义,该类是Runnable Interface的子类,它与工具模式schema对应的关键属性有:
| 参数 | 描述 |
|---|---|
| name | 工具的名称。 |
| description | 工具功能的描述。 |
| args | 返回工具参数的JSON模式的属性。 |
| args_schema | 类型为pydantic.BaseModel,可选但推荐使用,如果使用回调处理器则是必需的,它可用于提供更多信息(如few-shot少样本示例)或对预期参数进行验证。 |
| return_direct | 仅与代理相关,当为True时,在调用给定工具后,代理将停止并直接将结果返回给用户。 |
与工具关联的执行函数的关键方法有:
- invoke:使用给定的参数调用工具;
- ainvoke:异步使用给定的参数调用工具,用于与LangChain进行异步编程。
下面看一下创建工具的概念。
14.1.2 创建工具概述
LangChain 支持从以下方式创建工具:
- 函数:通过简单的@tool装饰器或StructuredTool即可实现,适用于大多数用例;
- LangChain Runnables:接受字符串或字典输入的LangChain Runnables可以使用as_tool方法转换为工具,该方法允许为参数指定名称、描述和其他模式信息;
- 继承BaseTool类:通过从BaseTool进行子类化来定义自定义工具。这提供了对工具定义的最大控制,但需要编写更多的代码。
对于大多数用例,从函数创建工具可能已经足够,可以通过简单的 @tool 装饰器实现。如果需要更多配置(例如,同时指定同步和异步实现),还可以使用StructuredTool.from_function类方法。LangChain还可以通过子类化BaseTool类或使用LangChain Runnables创建工具,但通常建议在大多数情况下使用@tool装饰器。
工具更多信息请参考工具(Tools);有关@tool的详细信息和示例,请参阅:API reference for @tool以获取更多详情,从Runnables创建工具请参阅:How to convert Runnables to Tools,有关子类化BaseTool和StructuredTool请参阅:how to create custom tools guide指南中的示例。下面讲述通过函数创建工具的两种方法:装饰器@tool和StructuredTool。
LangChain组件Tools/Toolkits之Tools详解
2050

被折叠的 条评论
为什么被折叠?



