Langchain自定义Tool的三种方式

本文介绍了如何使用装饰器定义工具、继承BaseTool类以及StructuredTool类在构建智能体时提供功能,包括设置工具名称、描述和参数验证。通过谷歌搜索工具实例展示了这些方法的应用。
摘要由CSDN通过智能技术生成

在构建你自己的智能体(Agent)时,你会需要提供一系列供它使用的工具(Tools)。除了被调用的函数,Tool还由以下部分组成

  • 名称(name: str),必填且需要唯一
  • 描述(description: str)可选但是建议填写,可以供agent参考是否需要调用Tool
  • 参数schema(args_schema : Pydantic BaseModel) 可选但是建议填写,可以用于提供额外信息,如少样本学习的例子或者对期望参数的校验。

接下来,我会以一个谷歌搜索工具来演示如何自定义Tool

一、@tool 装饰器

search_wrapper = GoogleSearchClient()

@tool("my_search_tool")
def search(query: str) -> list[str]:
    """通过搜索引擎查询"""
    result = search_wrapper.search(query)
    return [res["snippet"] for res in result]

print(search.name)
print(search.description)
print(search.args)
my_search_tool
my_search_tool(query: str) -> list[str] - 通过搜索引擎查询
{'query': {'title': 'Query', 'type': 'string'}}

用装饰器来定义Tool是最简单的方式,会默认函数名作为Tool的名称。你也可以多传一个string类型的参数来覆盖名称。此外,装饰器会使用函数的注释作为tool的描述,所以函数必须有注释。

二、继承 BaseTool类

你可以自定义一个集成了BaseTool类的工具,这样你可以完全控制tool的定义,不过得多写点代码

class SearchQuery(BaseModel):
    query: str = Field(..., description="要查询的query")

class CustomSearchTool(BaseTool):
    name = "my_search_tool_class"
    description = "通过搜索引擎来查询信息"
    args_schema: Type[BaseModel] = SearchQuery

    def _run(self, query: str) -> list[str]:
        """调用工具"""
        result = search_wrapper.search(query)
        return [res["snippet"] for res in result]


search = CustomSearchTool()
print(search.name)
print(search.description)
print(search.args)
my_search_tool_class
通过搜索引擎来查询信息
{'query': {'title': 'Query', 'description': '要查询的query', 'type': 'string'}}

三、用StructuredTool类提供的函数

你也可以用dataclass:StructuredTool。这种方法有点类似于上面两种方法的混合,比继承类方便,比用decorator的功能多

def search(query: str) -> list[str]:
    """通过搜索引擎查询"""
    result = search_wrapper.search(query)
    return [res["snippet"] for res in result]


search_tool = StructuredTool.from_function(
    func=search,
    name="我的搜索方法",
    description="通过搜索引擎查询,方便又强大",
    # coroutine= ... <- 如果需要,可以指定一个异步方法
)

print(search_tool.name)
print(search_tool.description)
print(search_tool.args)
我的搜索方法
我的搜索方法(query: str) -> list[str] - 通过搜索引擎查询,方便又强大
{'query': {'title': 'Query', 'type': 'string'}}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值