主题
工具集成(Tools)
在LangChain中,工具(Tools)是指可以被调用来执行特定任务的函数或接口。这些工具可以用于增强语言模型的能力,使其能够执行更复杂的任务,如调用外部API、访问数据库、执行计算等。LangChain提供了多种内置工具,同时也支持开发者自定义工具。
内置工具
LangChain提供了一些内置工具,这些工具可以直接使用,无需额外配置。常见的内置工具包括:
- Google Search Tool: 用于执行Google搜索并返回结果。
- Wikipedia Tool: 用于查询Wikipedia并返回相关信息。
- Python REPL Tool: 用于执行Python代码并返回结果。
- Wolfram Alpha Tool: 用于执行Wolfram Alpha查询并返回结果。
- Bash Tool: 用于执行Bash命令并返回结果。
自定义工具
除了内置工具,LangChain还允许开发者创建自定义工具。自定义工具可以通过定义一个Python函数来实现,该函数可以被LangChain调用。
创建自定义工具的步骤:
- 定义工具函数:首先,定义一个Python函数,该函数执行特定的任务并返回结果。
- 注册工具:使用LangChain提供的
Tool
类将函数注册为工具。 - 使用工具:在LangChain的流程中调用该工具。
示例:创建一个简单的自定义工具
假设我们想创建一个工具来将两个数字相加。
python
from langchain.tools import Tool
# 定义工具函数
def add_numbers(a: int, b: int) -> int:
return a + b
# 注册工具
add_tool = Tool(
name="add_numbers",
func=add_numbers,
description="A tool that adds two numbers together."
)
# 使用工具
result = add_tool.func(3, 5)
print(result) # 输出: 8
工具链(Tool Chains)
工具链是指将多个工具组合在一起,形成一个可以执行复杂任务的流程。LangChain允许开发者将多个工具串联起来,形成一个工具链。
示例:创建一个简单的工具链
假设我们有两个工具:一个用于将两个数字相加,另一个用于将结果乘以2。
python
from langchain.tools import Tool
# 定义第一个工具函数
def add_numbers(a: int, b: int) -> int:
return a + b
# 定义第二个工具函数
def multiply_by_two(x: int) -> int:
return x * 2
# 注册工具
add_tool = Tool(
name="add_numbers",
func=add_numbers,
description="A tool that adds two numbers together."
)
multiply_tool = Tool(
name="multiply_by_two",
func=multiply_by_two,
description="A tool that multiplies a number by two."
)
# 使用工具链
result = multiply_tool.func(add_tool.func(3, 5))
print(result) # 输出: 16
工具的选择与调用
在LangChain中,工具的选择和调用可以通过语言模型自动完成。开发者可以定义一个工具集,并让语言模型根据任务需求自动选择并调用合适的工具。
示例:自动选择工具
假设我们有一个工具集,包含加法和乘法工具,我们可以让语言模型根据输入的任务描述自动选择并调用合适的工具。
python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
# 定义工具函数
def add_numbers(a: int, b: int) -> int:
return a + b
def multiply_by_two(x: int) -> int:
return x * 2
# 注册工具
tools = [
Tool(
name="add_numbers",
func=add_numbers,
description="A tool that adds two numbers together."
),
Tool(
name="multiply_by_two",
func=multiply_by_two,
description="A tool that multiplies a number by two."
)
]
# 初始化语言模型
llm = OpenAI(temperature=0)
# 初始化代理
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
# 使用代理执行任务
result = agent.run("Add 3 and 5, then multiply the result by 2.")
print(result) # 输出: 16
工具集成是LangChain中非常强大的功能,它允许开发者扩展语言模型的能力,使其能够执行更复杂的任务。
通过内置工具和自定义工具,开发者可以灵活地构建各种工具链,并通过语言模型自动选择和调用工具,从而实现更智能的任务处理。