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

LangChain-自定义Tool和Agent结合DeepSeek应用实例

除了调用LangChain内置工具外,也可以自定义工具

实例1: 自定义多个工具

from langchain.agents import initialize_agent, AgentType
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_core.tools import tool, StructuredTool
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field# 初始化 LLM
llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-****',base_url='https://dashscope.aliyuncs.com/compatible-mode/v1'
)# 定义工具输入模型
class MySearchInput(BaseModel):query: str = Field(description='你搜索的关键词')# 定义搜索工具
@tool('my_search_tool', args_schema=MySearchInput, return_direct=True)
def my_search(query: str) -> str:"""用来搜索本地电脑上的数据:param query::return:"""return '我是一个搜索工具'# 定义排序工具输入模型
class MySortToolInput(BaseModel):sort_num: list[int] = Field(description='待排序的数字列表')# 定义排序工具
def sort_num(sort_num: list[int]) -> list[int]:"""把所有的数字重新排序:param sort_num::return:"""return sorted(sort_num)# 将排序工具转换为 StructuredTool
sort_tool = StructuredTool.from_function(func=sort_num,name='sort_num',description='排序列表中的数字',args_schema=MySortToolInput,return_direct=True
)# 加载工具
tools = load_tools(['arxiv'], llm)# 将自定义工具添加到工具列表中
tools.append(my_search)
tools.append(sort_tool)# 初始化代理
agent = initialize_agent(tools,llm,agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,handle_parsing_errors=True,  # 如果解析报错,继续verbose=True,
)# 调用代理
resp = agent.invoke({'input': '介绍一下2006.13145这篇论文的创新点,并且给[12,56,2,90,11,66]排序'})
resp2 = agent.invoke({'input':'请搜索当前文件夹中名称为 Tavity搜索.py 的文件'})
print(resp)
print(resp2)

以上,定义了一个my_search的搜索工具(具体没有实现,只是打印一句话) 和一个排序工具sort_num,同时使用了LangChain的内置工具 arxiv(该工具用于范文学术论文和文献)

运行结果:

实例2: 自定义一个工具

from langchain import hub
from langchain.agents import  create_structured_chat_agent, AgentExecutor
from langchain_core.tools import StructuredTool
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field# 初始化 LLM
llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-*****',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)# 定义工具输入模型
class AddlenToolInput(BaseModel):a: str = Field(description='第一个字符串')b: str = Field(description='第二个字符串')# 定义工具函数
def add_str_len(a: str, b: str) -> int:"""计算字符串的长度并求和:param a: 第一个字符串:param b: 第二个字符串:return: 两个字符串的长度之和"""return len(a) + len(b)# 将工具转换为 StructuredTool
add_len_tool = StructuredTool.from_function(func=add_str_len,name='my_add',description='计算2个字符串的长度之和',args_schema=AddlenToolInput,return_direct=False
)# 加载工具
tools = [add_len_tool]# 加载预定义的提示
prompt = hub.pull('hwchase17/structured-chat-agent')# 创建代理
agent = create_structured_chat_agent(llm, tools, prompt)# 初始化代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)# 调用代理
resp = agent_executor.invoke({'input': '`你好中国人`的字符串长度加上`abcde`字符串的长度是多少? langsmith是什么?'})
print(resp)

以上定义了一个计算字符串长度并求和的工具add_str_len

运行结果:

http://www.lryc.cn/news/2392737.html

相关文章:

  • 用 3D 可视化颠覆你的 JSON 数据体验
  • 联想小新笔记本电脑静电问题导致无法开机/充电的解决方案
  • MVCC(多版本并发控制)机制
  • Mac M1 安装 ffmpeg
  • Spring框架学习day3--Spring数据访问层管理(IOC)
  • 什么是集群(Cluster)?如何保证集群的高可用性?
  • React从基础入门到高级实战:React 核心技术 - 动画与过渡效果:提升 UI 交互体验
  • 重读《人件》Peopleware -(13)Ⅱ 办公环境 Ⅵ 电话
  • Free2AI:企业智能化转型的加速器
  • Python训练营打卡Day40
  • 制作一款打飞机游戏63:自动保存
  • 使用animation.css库快速实现CSS3旋转动画效果
  • 基于NetWork的类FNAF游戏DEMO框架
  • 湖北理元理律师事务所:债务优化中的生活保障实践
  • golang连接sm3认证加密(app)
  • 【Zephyr 系列 2】用 Zephyr 玩转 Arduino UNO / MEGA,实现串口通信与 CLI 命令交互
  • AIS常见问题解答(AIS知识补充)
  • 基于Matlab实现指纹识别系统
  • Windows10下搭建sftp服务器(附:详细搭建过程、CMD连接测试、连接失败问题分析解决等)
  • Vue3中Element-Plus中el-input及el-select 边框样式
  • vue + ant-design + xlsx 实现Excel自定义模板导入功能
  • SAP saml2 元数据 HTTP 错误
  • 知识课堂|sCMOS相机可编程快门模式解析
  • 数据结构之栈:原理与常用方法
  • 在React框架中使用Braft Editor集成Table表格的详细教程
  • 跳动的爱心
  • gbase8s数据库+mybatis问题记录
  • 实现安卓端与苹果端互通的方案多种多样,以下是一些主要的方案
  • SpringBoot开发——Spring Boot异常处理全攻略:五大方案实战对比
  • React-props