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.pswp.cn/diannao/85067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第60期第五十天打卡

大家好,首先感慨一下,时间过的真是快,不知不觉我们的训练营就已经到第五十天了,首先祝贺自己一直在坚持,今天是我们动态规划章节的收官之战,明天我们就会走进一个全新的算法章节单调栈,我们要为…

如何发布npm包?

如何发布npm包? 1. 注册账号[npm官网](https://www.npmjs.com/)2. 检查 npm 源是否在官方 npm 仓库,如果不在,进行切换3. 检查4. 打包配置5. 发布6. 使用错误:版本更新命令 1. 注册账号npm官网 2. 检查 npm 源是否在官方 npm 仓库…

AI工具使用的最佳实践,如何通过AI工具提高创作与工作效率

随着科技的迅猛发展,人工智能(AI)已从遥不可及的未来构想,转变为广泛应用于各行业的实用工具。AI不仅在内容创作、设计、写作等领域展现出巨大潜力,还通过自动化和智能化显著提升了工作效率。本文将深入探讨如何通过选…

漏洞Reconfigure the affected application to avoid use of weak cipher suites. 修复方案

修复方案:禁用弱加密套件(Weak Cipher Suites) 1. 确认当前使用的加密套件 在修复前,先检查应用程序或服务器当前支持的加密套件: OpenSSL (适用于HTTPS/TLS服务)openssl ciphers -v ALL:COMPLEMENTOFALL | sortNgi…

AI对软件工程的影响及未来发展路径分析报告

目录 第一部分:引言 研究背景与意义 报告框架与方法论 第二部分:AI对不同行业软件工程的影响分析 数字化行业 制造业 零售业 工业领域 第三部分:大厂AI软件工程实践案例分析 微软 谷歌 阿里巴巴 华为 第四部分:未来…

WSL里执行python深度学习的一些方法记录

安装anaconda3: 可以直接从 Download Now | Anaconda 中下载,然后拷贝到WSL环境的某个目录,执行 bash xxxxxxx.sh 即可安装。 启动jupyter notebook: 先conda activate 当前环境,然后pip install jupyter 此时&am…

使用 SpyGlass Power Verify 解决方案中的规则

本节提供了关于使用 SpyGlass Power Verify 解决方案 的相关信息。内容组织如下: SpyGlass Power Verify 简介运行 SpyGlass Power Verify 解决方案在 SpyGlass Power Verify 解决方案中评估结果SpyGlass Power Verify 解决方案中的参数SpyGlass Power Verify 报告1 SpyGlass …

spring4第3课-ioc控制反转-详解依赖注入的4种方式

1,属性注入; 2,构造函数注入;(通过类型;通过索引;联合使用) 3,工厂方法注入;(非静态工厂,静态工厂) 4,泛型依赖注入;(Spring4 整合 Hibernate4…

使用Rust和并发实现一个高性能的彩色分形图案渲染

分形与 Mandelbrot Mandelbrot 集 (Mandelbrot Set) 是复数平面上一个点的集合,以数学家 Benot Mandelbrot 的名字命名。它是最著名的分形之一。一个复数 c 是否属于 Mandelbrot 集,取决于一个简单的迭代过程: z n + 1 = z n 2 + c z_{n+1}=z_{n}^2+c zn+1​=zn2​+c 如果…

微信小程序的软件测试用例编写指南及示例--性能测试用例

以下是针对微信小程序的性能测试用例补充,结合代码逻辑和实际使用场景,从加载性能、渲染性能、资源占用、交互流畅度等维度设计测试点,并标注对应的优化方向: 一、加载性能测试用例 测试项测试工具/方法测试步骤预期结果优化方向冷启动加载耗时微信开发者工具「性能」面板…

行为型:观察者模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的:针对被观察对象与观察者对象之间一对多的依赖关系建立起一种行为自动触发机制,当被观察对象状态发生变化时主动对外发起广播&…

t009-线上代驾管理系统

项目演示地址 摘 要 使用旧方法对线上代驾管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在线上代驾管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题…

LVS-NAT 负载均衡群集

目录 简介 一、LVS 与群集技术基础 1.1 群集技术概述 1.2 负载均衡群集的分层结构 1.3 负载均衡工作模式 二、LVS 虚拟服务器核心组件与配置 2.1 LVS 内核模块与管理工具 2.2 负载调度算法解析 2.3 ipvsadm 管理工具实战 三、NFS 共享存储服务配置 3.1 NFS 服务基础…

LLaMaFactory - 支持的模型和模板 常用命令

一、 环境准备 激活LLaMaFactory环境,进入LLaMaFactory目录 cd LLaMA-Factoryconda activate llamafactory 下载模型 #模型下载 from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-0.5B-Instruct) 二、启动一个 Qwen3-0.6B…

EDW2025|数据治理的神话破除——从误区到现实

在当今数据驱动的世界中,数据治理已成为企业成功的关键因素。然而,许多组织在实施数据治理时,常常被一些常见的误区所困扰。本文将逐一破除这些误区,揭示数据治理的真实面貌。 误区一:你需要一个大的预算!…

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景:从算法突破到产业赋能1. **技术底座:多模态大模型的进化路径**2. **核心算法:从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作:从“灵感枯竭”到“创意井喷”**2…

ReactJS 中的 JSX工作原理

文章目录 前言✅ 1. JSX 是什么?🔧 2. 编译后的样子(核心机制)🧱 3. React.createElement 做了什么?🧠 4. JSX 与组件的关系🔄 5. JSX 到真实 DOM 的过程📘 6. JSX 与 Fr…

Spring Advisor增强规则实现原理介绍

Spring Advisor增强规则实现原理介绍 一、什么是 Advisor?1. Advisor 的定义与本质接口定义: 2. Advisor 的核心作用统一封装切点与通知构建拦截器链的基础实现增强逻辑的灵活组合 二. Sprin当中的实现逻辑1 Advisor 接口定义2 PointcutAdvisor 接口定义…

小程序32-简易双向数据绑定

在WXML中&#xff0c;普通属性的绑定是单向的&#xff0c;例如:<input value"{{value}}" /> 如果希望用户输入数据的同时改变data中的数据&#xff0c;可以借助简易双向绑定机制。在对应属性之前添加model:前缀即可: 例如<input model:value"{{value}…

Nginx网站服务:从入门到LNMP架构实战

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年5月30日14点22分 前言 说起Web服务器&#xff0c…