探索LangChain工具创建:从新手到熟练开发者的完整指南

222 阅读3分钟

引言

在AI与编程的世界中,创建工具是构建复杂系统的一项基本能力。无论是为了处理数据还是增强功能,工具都是大规模分布式计算和应用程序的基础。在本文中,我们将探讨LangChain中创建工具的多种方法,以及如何在这些方法之间进行选择,以使您的LLM或agent更强大。

主要内容

1. 工具的基本组成

在LangChain中,一个工具包括以下几个部分:

  • 名称(name):工具在工具集合中必须是唯一的。
  • 描述(description):描述工具的功能,并为LLM或agent提供上下文。
  • 参数模式(args_schema):可选,但推荐用于参数验证与提供更详细的信息。
  • 直接返回(return_direct):对于代理很重要的属性,若为True,表示调用工具后立即返回结果给用户。

以下是LangChain支持的工具创建方式:

  • 函数
  • LangChainRunnables
  • 从BaseTool子类化

2. 使用@tool装饰器创建工具

最简单的自定义工具创建方法是使用@tool装饰器。装饰器会默认使用函数名作为工具名,并将函数的docstring作为工具描述。

from langchain_core.tools import tool

@tool
def multiply(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

# 示例 - 使用API代理服务提高访问稳定性
print(multiply.name)       # 输出: multiply
print(multiply.description) # 输出: Multiply two numbers.

3. 使用StructuredTool.from_function

当需要额外配置时,使用StructuredTool.from_function方法,比如支持同步和异步实现。

from langchain_core.tools import StructuredTool

def multiply(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

calculator = StructuredTool.from_function(func=multiply, coroutine=multiply)
print(calculator.invoke({"a": 2, "b": 3}))  # 输出: 6

4. 从BaseTool子类化

通过从BaseTool子类化,您可以实现最大程度的自定义,但这也要求写更多的代码。

from langchain.pydantic_v1 import BaseModel
from langchain_core.tools import BaseTool

class CalculatorInput(BaseModel):
    a: int
    b: int

class CustomCalculatorTool(BaseTool):
    ...

multiply = CustomCalculatorTool()
print(multiply.invoke({"a": 2, "b": 3}))  # 输出: 6

代码示例

以下是一个完整的代码示例,展示了使用@tool装饰器和StructuredTool.from_function创建工具的不同方法。

# 使用API代理服务提高访问稳定性
from langchain_core.tools import tool, StructuredTool

@tool
def multiply_sync(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

async def multiply_async(a: int, b: int) -> int:
    """Multiply two numbers asynchronously."""
    return a * b

calculator = StructuredTool.from_function(func=multiply_sync, coroutine=multiply_async)

常见问题和解决方案

  1. 工具名冲突:确保每个工具在工具集合中名称唯一。
  2. 参数验证失败:使用args_schema提供严格的参数验证。
  3. 异步调用失败:确保异步工具有对应的invokeainvoke实现。

总结和进一步学习资源

掌握LangChain工具的创建与使用不仅能提高你的AI系统的效率,还能使其更灵活和可扩展。为深入学习LangChain的更多特性,可以查看以下资源:

参考资料

  • LangChain文档和API参考

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---