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

[强化你的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 * bprint(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 StructuredToolclass 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 * bcalculator = 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, Fieldclass CalculatorInput(BaseModel):a: int = Field(description="第一个数字")b: int = Field(description="第二个数字")def multiply(a: int, b: int) -> int:"""两个数相乘。"""return a * bcalculator = 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 ToolExceptiondef 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.lryc.cn/news/440188.html

相关文章:

  • 4.提升客户服务体验:ChatGPT在客服中的应用(4/10)
  • Gradio导入AIGC大模型创建web端智能体聊天机器人,python(2)
  • PEM 格式
  • Android前台服务如何在后台启动activity?
  • c#visionpro开发 方法统计
  • dedecms——四种webshell姿势
  • GO GIN 推荐的库
  • YOLOv9改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
  • 如何在Linux下升级R版本和RStudio
  • npm安装时候报错certificate has expired
  • CSP-J_S第一轮复习资料1·计算机硬件
  • oracle 表的外键
  • 加密与安全_优雅存储二要素(AES-256-GCM )
  • 【C++高阶】解锁C++的深层魅力——探索特殊类的奥秘
  • Vue学习记录之三(ref全家桶)
  • 第二十六篇——九地篇:九种形势的应对之道
  • 学习记录:js算法(三十七): 搜索二维矩阵
  • 拥控算法BBR入门1
  • [Python数据可视化]Plotly Express: 地图数据可视化的魅力
  • windows C++ 并行编程-PPL 中的取消操作(四)
  • 【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
  • LeetcodeTop100 刷题总结(一)
  • Next-ViT: 下一代视觉Transformer,用于现实工业场景中的高效部署
  • C++知识点示例代码助记
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 垃圾回收算法
  • 苍穹外卖Day01-2
  • 软考中级软件设计师——数据结构与算法基础学习笔记
  • 虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天(中)
  • 整流电路的有源逆变工作状态
  • Android 签名、空包签名 、jarsigner、apksigner