构建LangChain应用程序的示例代码:32、如何为任何工具添加人工验证教程

本演示展示了如何为任何工具添加人工验证。我们将使用HumanApprovalCallbackHandler来实现这一功能。

假设我们需要使用ShellTool。将此工具添加到自动化流程中存在明显的风险。让我们看看如何强制人工手动批准输入到此工具的输入。

注意:我们通常建议不要使用ShellTool。它有很多滥用的方式,并且大多数用例并不需要它。我们在这里仅出于演示目的使用它。

from langchain.callbacks import HumanApprovalCallbackHandler
from langchain.tools import ShellTool# 创建ShellTool实例
tool = ShellTool()# 运行一个简单的命令,输出“Hello World!”
print(tool.run("echo Hello World!"))

添加人工批准

将默认的HumanApprovalCallbackHandler添加到工具中,将使得用户必须在命令实际执行之前手动批准每一个输入。

tool = ShellTool(callbacks=[HumanApprovalCallbackHandler()])# 尝试运行一个命令,列出/usr目录下的内容
print(tool.run("ls /usr"))# 尝试运行一个命令,列出/private目录下的内容
print(tool.run("ls /private"))

配置人工批准

假设我们有一个代理,它接受多个工具,我们希望它只在特定工具和特定输入上触发人工批准请求。我们可以配置回调处理器来实现这一点。

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain_openai import OpenAI# 定义一个函数,用于决定是否需要人工检查
def _should_check(serialized_obj: dict) -> bool:return serialized_obj.get("name") == "terminal"# 定义一个函数,用于人工批准输入
def _approve(_input: str) -> bool:if _input == "echo 'Hello World'":return Truemsg = ("Do you approve of the following input? ""Anything except 'Y'/'Yes' (case-insensitive) will be treated as a no.")msg += "\n\n" + _input + "\n"resp = input(msg)return resp.lower() in ("yes", "y")# 创建回调列表,包含人工批准回调处理器
callbacks = [HumanApprovalCallbackHandler(should_check=_should_check, approve=_approve)]# 创建OpenAI实例,设置温度为0,表示输出的确定性最高
llm = OpenAI(temperature=0)# 加载工具列表
tools = load_tools(["wikipedia", "llm-math", "terminal"], llm=llm)# 初始化代理,使用ZERO_SHOT_REACT_DESCRIPTION类型的代理
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)# 运行代理,执行查询操作,并使用回调
agent.run("It's 2023 now. How many years ago did Konrad Adenauer become Chancellor of Germany.",callbacks=callbacks,
)# 运行代理,执行终端打印操作,并使用回调
agent.run("print 'Hello World' in the terminal", callbacks=callbacks)# 运行代理,执行列出/private目录下所有目录的操作,并使用回调
agent.run("list all directories in /private", callbacks=callbacks)

总结

本文介绍了如何在自动化工具中添加人工验证流程,以确保操作的安全性和准确性。通过使用HumanApprovalCallbackHandler,可以对特定工具或输入进行人工审批,从而避免潜在的风险。文中还展示了如何配置回调处理器,以实现对特定条件的灵活控制。

扩展知识点

  • ShellTool: 一个可以执行shell命令的工具,但使用时需要谨慎,因为它可能被滥用。
  • HumanApprovalCallbackHandler: 一个回调处理器,用于在执行操作前要求人工批准。
  • AgentType.ZERO_SHOT_REACT_DESCRIPTION: 一种代理类型,可以即时响应描述性的任务,无需事先的训练或配置。
  • OpenAI: 一个提供人工智能服务的接口,可以用于生成文本、解决问题等。
  • langchain: 一个用于构建和使用AI工具链的Python库,支持多种工具和代理的集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26632.shtml

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

相关文章

软设之需求分析的工具

1.应用的工具 数据流图 数据字典 判定表 判定树 2.数据流图基本概念 数据流:由一组固定成分的数据组成,表示数据的流向。每个数据流通常有一个合适的名词,反映数据流的含义 加工:加工描述了输入数据流到输出数据流之间的变换,也就是输…

道可云元宇宙每日资讯|上海科委:围绕元宇宙布局全产业链技术

道可云元宇宙每日简报(2024年6月13日)讯,今日元宇宙新鲜事有: 上海科委:围绕元宇宙布局全产业链技术 6月12日,上海市科学技术委员会印发《上海市颠覆性技术创新项目管理暂行办法》,其中提出&a…

放弃Venn-Upset-花瓣图,拥抱二分网络

写在前面 让点随机排布在一个区域,保证点之间不重叠,并且将点的图层放到最上层,保证节点最清晰,然后边可以进行透明化,更加突出节点的位置。这里我新构建了布局函数 PolyRdmNotdCirG 来做这个随机排布。调用的是packcircles包的算…

商家转账到零钱最全面攻略:申请、使用、注意事项等详解

一、微信商家转账到零钱功能概述 微信支付作为国内最大社交软件的增值服务,在商业活动中广泛使用。其开发的营销功能“商家转账到零钱”则允许商家直接将资金转入用户的微信钱包,操作简便快捷。本文将详细探讨此功能的使用条件、操作步骤以及解答一些常…

深入理解java设计模式之单例模式

目录 概述单例模式是什么单例模式的使用场景单例模式的优缺点单例模式的几种实现方式饿汉式懒汉式双重检查锁定机制静态内部类枚举使用容器几种可能破坏单例类的方法多线程环境下的竞争条件使用反射机制使用序列化多个类加载器概述 单例模式是什么 定义:单例模式确保一个类在…

Java中Transactional在不同方法间的穿透性,rollbackFor参数含义

哈喽,大家好,我是木头左! 在Java开发中,经常会遇到需要在一个事务中执行多个操作的场景。为了确保这些操作的原子性,可以使用Spring框架提供的Transactional注解来实现事务管理。然而,在实际开发过程中&…

LeetCode刷题之HOT100之验证二叉搜索树

1、题目描述 2、逻辑分析 要求给定的根节点是否是有效的二叉树。有效的二叉搜索树定义如上。那么如何求解呢?题解给出了两张求解方法:递归、中序遍历。这边倾向于中序遍历,中序遍历后的二叉树是升序排序的,以这个性质即可解题。 …

Prometheus——部署详解

目录 一、Prometheus Server端安装和相关配置 1.上传安装包并解压 2.配置系统启动文件 3.启动 二、部署Node Exporters监控系统指标 三、监控Mysql配置示例 1.Mysql服务器操作 2.Prometheus服务器操作 四、监控Nginx配置示例 1.在Nginx服务器操作 2.Prometheus服务器…

HTML列表和表格标签

目录 1.列表标签 1.1无序列表 1.2有序列表 1.3定义列表 2. 表格标签、 2.1表格标签的属性 2.2合并单元格 1.列表标签 1.1无序列表 <ul>: [type 属性&#xff1a; disc( 实心圆点 )( 默认 ) 、 circle( 空心圆圈 ) 、 square( 实心方块 )] <li>: 列表中…

vue+java实现简易AI问答组件(基于百度文心大模型)

一、需求 公司想要在页面中加入AI智能对话功能&#xff0c;故查找免费gpt接口&#xff0c;最终决定百度千帆大模型&#xff08;进入官网、官方文档中心&#xff09;&#xff1b; 二、主要功能列举 AI智能对话&#xff1b;记录上下文回答环境&#xff1b;折叠/展开窗口&#…

用Qt 中的QPainter类画时钟

在Qt中&#xff0c;我们可以通过QPainter类来绘制各种图形&#xff0c;包括时钟指针。以下是一个简单的例子&#xff0c;展示了如何在Qt中绘制一个简单的时钟指针。 #include <QPainter> #include <QWidget> #include <QTimer> #include <QTime>class…

管道(channel)select

select功能&#xff1a;解决多个管道的选择问题&#xff0c;也可以叫多路复用&#xff0c;可以从多个管道中随机公平的选择一个来执行 case后面必须进行的是io操作&#xff0c;不能是等值&#xff0c;随机去选择一个io操作 default防止select被阻塞&#xff0c;加入default 只…

使用MATLAB对地铁站、公交站等求解最短路径

使用MATLAB对城市的地铁站、公交站等站点&#xff0c;根据站点的经纬度坐标和彼此之间的权重&#xff0c;求解其最短路径、途径站点和路程 已知的数据如图&#xff0c;是西安市地铁站点的数据&#xff0c;保存在一个Excel里 如图&#xff0c;每列的内容都在上面&#xff0c;不…

滚动条样式

/*滚动条*/ //滚动条没有滑块的轨道部分. ::-webkit-scrollbar-track-piece {background: #fff;border-radius: 0px;opacity: 1;border: 1px solid #D9D9D9; } //整个滚动条 ::-webkit-scrollbar {width: 8px;height: 8px;background-color: transparent; } //滚动条上的滚动滑…

经常加班却不给加班费,我又不想离开这个单位,该怎么办?

经常加班却不给加班费&#xff0c;我又不想离开这个单位&#xff0c;该怎么办&#xff1f; --#李秘书讲写作#教你如何在维护权益与保持工作稳定间找到平衡&#xff1f; 在现代社会中&#xff0c;加班已经成为许多职场人士的常态。你也许也不例外&#xff0c;每天都在忙碌的工作…

Python教程:机器学习 - 百分位数(4)

什么是百分位数&#xff1f; 统计学中使用百分位数&#xff08;Percentiles&#xff09;为您提供一个数字&#xff0c;该数字描述了给定百分比值小于的值。 例如&#xff1a;假设我们有一个数组&#xff0c;包含住在一条街上的人的年龄。 ages [5,31,43,48,50,41,7,11,15,3…

深入理解服务器路由功能:配置与应用详解

在现代网络结构中&#xff0c;服务器不仅仅是提供数据和服务的中心节点&#xff0c;它们还经常承担着路由的角色&#xff0c;负责在不同网络之间转发数据包。这一过程依赖于服务器的路由功能&#xff0c;通过精确的路由表配置和管理&#xff0c;确保数据能够高效、准确地到达目…

SSL协议在实际生活中有哪些应用实例?

SSL协议的实际应用案例 SSL&#xff08;Secure Sockets Layer&#xff09;协议是一种网络通信协议&#xff0c;用于在客户端和服务器之间建立加密链接&#xff0c;以确保数据在传输过程中的安全性。尽管SSL协议已被TLS&#xff08;Transport Layer Security&#xff09;协议所取…

AMS(ActivityManagerService)源码解析,Activity是如何被打开的

AMS解析&#xff0c;Activity是如何被打开的 前言总结1. PMS保存App缩略信息2. startActivity发送请求3. AMS从PMS获取目标Activity的相关信息3.1 AMS部分3.2 PMS部分 4. AMS操作Activity返回栈&#xff0c;将目标Activity调用resume5. AMS将目标页面信息发给ActivityThread6. …

STM32学习笔记(二)--GPIO通用输入输出口详解

&#xff08;1&#xff09;配置步骤1.使用RCC开启GPIO时钟2.使用GPIO_Init函数初始化GPIO3.使用输入或输出的函数等来控制GPIO 其中涉及外设有RCC、GPIO &#xff08;2&#xff09;代码示例 案例1&#xff08;设置PA0为推挽输出&#xff09; RCC_APB2PeriphClockCmd(RCC_APB2…