[强化你的LangChain工具创建技能:从基础到进阶]
强化你的LangChain工具创建技能:从基础到进阶
在现代AI开发中,为语言模型和智能代理提供工具是提升其功能的关键一步。本指南将带你深入了解如何在LangChain中创建工具,从简单的函数到复杂的可配置工具。
引言
在构建智能代理时,开发者需要提供一组工具供其使用。工具的构建不仅需要考虑其功能,还需确保其具有良好的描述和参数验证,以便模型能够有效地理解和调用这些工具。
主要内容
工具的基本组成
一个工具通常包含以下几个部分:
- 名称:必须在工具集中唯一。
- 描述:描述工具的功能,供模型上下文使用。
- 参数模式(args_schema):可选的Pydantic BaseModel,用于提供参数验证。
- 直接返回(return_direct):仅对代理相关,指示调用工具后是否直接返回结果。
从函数创建工具
使用@tool
装饰器
这是定义自定义工具的最简单方式。装饰器使用函数名称作为工具名称,并使用函数的文档字符串作为工具描述。
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
print(multiply.name)
print(multiply.description)
print(multiply.args)
异步实现
你可以创建异步实现,使工具在异步环境中表现更好。
from langchain_core.tools import tool
@tool
async def amultiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
使用StructuredTool
进行更复杂的配置
如果需要更灵活的配置,可以使用StructuredTool.from_function
方法。
from langchain.pydantic_v1 import BaseModel, Field
from langchain_core.tools import StructuredTool
class CalculatorInput(BaseModel):
a: int = Field(description="first number")
b: int = Field(description="second number")
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
calculator = StructuredTool.from_function(
func=multiply,
args_schema=CalculatorInput,
return_direct=True
)
print(calculator.invoke({"a": 2, "b": 3}))
代码示例
下面给出一个完整的代码示例,展示如何利用LangChain创建一个简单的智能计算工具:
from langchain_core.tools import StructuredTool
from langchain.pydantic_v1 import BaseModel, Field
class CalculatorInput(BaseModel):
a: int = Field(description="第一个数字")
b: int = Field(description="第二个数字")
def multiply(a: int, b: int) -> int:
"""两个数相乘。"""
return a * b
calculator = StructuredTool.from_function(
func=multiply,
args_schema=CalculatorInput,
return_direct=True
)
print(calculator.invoke({"a": 5, "b": 7})) # 输出: 35
常见问题和解决方案
错误处理
在使用工具时可能会遇到异常情况,可以通过设置handle_tool_error
来处理。
from langchain_core.tools import ToolException
def get_weather(city: str) -> int:
"""获取指定城市的天气。"""
raise ToolException(f"错误:没有名为 {city} 的城市。")
weather_tool = StructuredTool.from_function(
func=get_weather,
handle_tool_error="没有找到该城市,可能温度高于0K!"
)
print(weather_tool.invoke({"city": "foobar"}))
总结和进一步学习资源
本文介绍了如何为LangChain模型创建简单和复杂的工具。通过掌握这些技术,你可以更好地为智能代理提供强大的功能支持。
- Pydantic文档
- LangChain官方指南
参考资料
- LangChain官方指南
- Pydantic文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—