LangChain组件Tools/Toolkits详解(2)——装饰器@tool


本章目录如下:

  1. 《LangChain组件Tools/Toolkits详解(1)——Tools接口与创建工具概述》
  2. 《LangChain组件Tools/Toolkits详解(2)——装饰器@tool》
  3. 《LangChain组件Tools/Toolkits详解(3)——结构化工具StructuredTool》
  4. 《LangChain组件Tools/Toolkits详解(4)——处理Error》
  5. 《LangChain组件Tools/Toolkits详解(5)——返回产物artifact》
  6. 《LangChain组件Tools/Toolkits详解(6)——特殊类型注解》
  7. 《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.2 装饰器@tool

装饰器@tool是创建自定义工具的最简单方式,它简化了工具创建过程。默认情况下,装饰器会使用函数名称作为工具名称,但可以通过传递一个字符串作为第一个参数来覆盖此行为。此外,装饰器会将函数的文档字符串(docstring)作为工具的描述——因此必须提供文档字符串。装饰器@tool还支持以下功能:

  • 自动推断工具的名称、描述和预期参数,同时也支持自定义;
  • 自定义工具返回的artifact工件类型(例如图像、数据框架等);
  • 从模式(以及模型)中,使用注入的工具参数隐藏输入参数。

本节将讲述这些功能。

14.2.1 创建工具

使用@tool装饰器创建工具的方法是:在定义一个函数后,用@tool装饰它,以创建一个实现工具接口的工具,这种方法适用于大多数情况。示例代码如下:

from langchain_core.tools import tool

@tool
def multiply(a: int, b: int) -> int:
   """Multiply two numbers."""
   return a * b
   
multiply.invoke({
   "a": 2, "b": 3}) # 6
# Let's inspect some of the attributes associated with the tool.
print(multiply.name)
print(multiply.description)
print(multiply.args)
multiply
Multiply two numbers.
{
   
### 如何在 LangChain 中创建或使用自定义 Tools #### 创建简单工具 LangChain 提供了一个灵活的方式来定义和使用工具。可以通过继承 `BaseTool` 类来创建自定义工具[^1]。以下是实现的一个基本示例: ```python from langchain.agents import Tool from langchain.chains.conversation.memory import ConversationBufferMemory from langchain.chat_models import ChatOpenAI from langchain.utilities import SerpAPIWrapper class MyCustomSearchTool(Tool): name = "My Custom Search" description = "A tool that uses a search engine to find information on the web." def _run(self, query: str) -> str: """Use the SerpAPI to run a search.""" search = SerpAPIWrapper() return search.run(query) async def _arun(self, query: str) -> str: """Use the SerpAPI asynchronously to run a search.""" search = SerpAPIWrapper() return await search.arun(query) ``` 在此代码片段中,我们定义了一个名为 `MyCustomSearchTool` 的类,它实现了 `_run` 和 `_arun` 方法用于同步和异步操作[^3]。 #### 加载预定义工具并修改其属性 除了创建自定义工具外,还可以加载现有的工具并通过调整它们的属性来自定义行为。例如,可以更改工具名称或其他参数: ```python from langchain.llms import OpenAI from langchain.agents.agent_toolkits import create_csv_agent llm = OpenAI(temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) tools[0].name = "Google Search" # 修改第一个工具的名字为 Google Search ``` 这段代码展示了如何加载一组预先构建好的工具,并通过索引访问这些工具对象以更新特定字段。 #### 设置工具优先级 当多个工具可能匹配某个输入时,设置优先级可以帮助决定哪个工具应该被优先考虑执行任务。虽然具体方法取决于所使用的代理类型及其配置方式,但在某些情况下可以直接指定顺序或者权重值给各个工具实例作为参考依据之一来进行处理逻辑上的优化设计。 #### 使用视频资源进一步学习 对于更深入的理解以及实际应用中的技巧演示,《Create Custom Tools for Chatbots in LangChain》提供了详细的讲解与示范[^2]。观看此视频能够帮助开发者更好地掌握定制化聊天机器人所需的各种技能点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值