介绍
大家好,博主又来给大家分享知识了。今天要给大家分享的是使用LangChain进行大模型应用开发中的自定义工具调用。
在大模型应用开发的领域里,LangChain凭借其强大的功能和灵活性,成为了开发者们的得力助手。自定义工具调用则是LangChain众多亮点特性之一,它赋予了开发者根据特定需求打造专属工具的能力。
好了,我们直接进入正题。
自定义工具
在LangChain的应用开发中,自定义工具是实现灵活且强大功能的关键要素之一。尤其是在构建智能体(Agent)时,工具的合理配置和使用至关重要。智能体就像是大模型的 “助手”,能够代表大模型执行各种特定任务。而自定义工具则为这个 “助手” 提供了多样化的 “工作器具”,让其能够更好地应对不同场景下的需求。
接下来我介绍在构建智能体时自定义工具的相关内容。在构建智能体时,我们需要为其提供一个Tool列表,以便智能体可以使用这些工具。除了实际调用的函数之外,Tool由几个组件组成:
属性 |
类型 |
描述 |
name |
str |
在提供给LLM或智能体工具中必须是唯一的。 |
description |
str |
描述工具的功能。LLM或智能体将使用此描述作为上下文。 |
args_schema |
Pydantic BaseModel |
可选但建议,可用于提供更多信息(例如,few-shot示例)验证预期参数。 |
return_direct |
boolean |
仅对智能体相关。当为True时,在调用给定工具后,智能体将停止并将结果直接返回给用户。 |
LangChain提供了三种创建工具的方式:
- 使用@tool装饰器——定义自定义工具的最简单方式。
- 使用StructuredTool.from_function类方法——这类似于@tool装饰器,但允许更多配置和同步和异步实现的规范。
- 通过子类化BaseTool——这是最灵活的方法,它提供了最大程度的控制,但需要更多的工作量和代码。@tool或StructuredTool.from_function类方法对于大多数用例应该足够了。提示:如果工具具有精心选择的名称、描述和JSON模式,模型的性能会更好。
装饰器@tool
这个@tool装饰器是定义自定义工具的最简单方式。该装饰器默认使用函数名称作为工具名称,但可以通过传递字符串作为第一个参数来覆盖。此外,装饰器将使用函数的文档字符串作为工具的描述,因此必须提供文档字符串。
装饰器@tool应用完整代码
# 从langchain_core库的tools模块导入tool装饰器,用于将函数转换为工具
from langchain_core.tools import tool
# 使用tool装饰器,将下方函数转换为LangChain可用的工具
@tool
# 定义一个名为multiply_numbers的函数,接收两个整数类型的参数,返回值也是整数
def multiply_numbers(num1: int, num2: int) -> int:
# """此方法用于将两个整数相乘并返回结果。"""
# 返回两个输入参数相乘的结果
return num1 * num2
# 打印multiply_numbers工具的名称
print(multiply_numbers.name)
# 打印multiply_numbers工具的描述信息
print(multiply_numbers.description)
# 打印multiply_numbers工具的参数信息
print(multiply_numbers.args)
装饰器@tool应用运行结果
multiply_numbers
此方法用于将两个整数相乘并返回结果。
{'num1': {'title': 'Num1', 'type': 'integer'}, 'num2': {'title': 'Num2', 'type': 'integer'}}
进程已结束,退出代码为 0
我们使用@tool装饰器还可以应用于异步方法中。
装饰器@tool应用异步方法完整代码
# 从langchain_core库的tools模块导入tool装饰器,用于将函数转换为工具
from langchain_core.tools import tool
# 使用tool装饰器,将下方函数转换为LangChain可用的工具
@tool
# 定义一个名为multiply_numbers的异步函数,接收两个整数类型的参数,返回值也是整数
async def multiply_numbers(num1: int, num2: int) -> int:
"""此方法用于将两个整数相乘并返回结果。"""
# 返回两个输入参数相乘的结果
return num1 * num2
# 打印multiply_numbers工具的名称
print(multiply_numbers.name)
# 打印multiply_numbers工具的描述信息
print(multiply_numbers.description)
# 打印multiply_numbers工具的参数信息
print(multiply_numbers.args)
装饰器@tool应用异步方法运行结果
multiply_numbers
此方法用于将两个整数相乘并返回结果。
{'num1': {'title': 'Num1', 'type': 'integer'}, 'num2': {'title': 'Num2', 'type': 'integer'}}
进程已结束,退出代码为 0
我们还可以将装饰器@tool定义工具名称,输入参数验证,并设置该方法是否立刻返回结果等。