当前位置: 首页 > article >正文

[强化你的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—


http://www.kler.cn/news/308890.html

相关文章:

  • C语言 | Leetcode C语言题解之第413题等差数列划分
  • c语言题目猜凶手问题
  • Vue2中父子组件通信双向绑定
  • 【Java】【力扣】83.删除排序链表中的重复元素
  • TensorRT-LLM——优化大型语言模型推理以实现最大性能的综合指南
  • react18基础教程系列-- 框架基础理论知识mvc/jsx/createRoot
  • 预训练蛋白质语言模型ESM-2保姆级使用教程
  • C++设计模式(更新中)
  • 数据结构:(OJ141)环形列表
  • 李宏毅2023机器学习HW15-Few-shot Classification
  • 部分动态铜皮的孤岛无法删除。报错
  • Linux下的CAN通讯
  • 深度学习中实验、观察与思考的方法与技巧
  • JavaScript:驱动现代Web应用的关键引擎及其与HTML/CSS的集成
  • 数模原理精解【11】
  • el-table 如何实现行列转置?
  • C#读取应用配置的简单类
  • 软件测试工程师面试整理-常见面试问题
  • 后端Controller获取成功,但是前端报错404
  • etcd入门指南:分布式事务、分布式锁及核心API详解
  • 企业开发时,会使用sqlalchedmy来构建数据库 结构吗? 还是说直接写SQL 语句比较多?
  • 断电重启之后服务器都有哪些服务需要重启
  • 828华为云征文|docker部署kafka及ui搭建
  • VRRP 笔记
  • 认知小文3《打破桎梏,编程与人生的基本法则》
  • 抓机遇,创发展︱2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会,零部件国产浪潮不可阻挡
  • Pillow:Python图像处理库详解
  • 计算机网络(网络层)
  • 系统架构设计师:系统质量属性与架构评估
  • 固态硬盘:量产、开卡、ROM短接是指什么?