人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率

原文:人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率

图片

在Agent开发过程中,LLM充当Agent的大脑,对问题进行规划、分解、推理,在执行过程中合理选择利用工具(Tool)解决某些具体领域的子问题。一般来说,大家习惯了选择使用搜索、计算器、code interperter之类的工具,但实际上,人也可以作为LLM的工具之一,被添加到解决问题的循环中,这被称作Human-In-The-Loop。

图片

传统的聊天机器人如 IVR,它会尝试处理呼叫请求,如果无法处理,就会转接给人工完成请求。而在 "Human In loop "下,Agent专注完成为用户请求,而过程中的人工支持对用户是透明的。agent可以通过一次或多次迭代来收集人工协助,而所有这些用户是看不到的。

在具体使用上也比较简单直接,和前面文章一文探秘LLM应用开发(24)-Prompt(架构模式Agent)提到的写法也没有什么区别。

举例,让agent回答:科布斯-葛瑞林的生日是几月几号?

完整代码:

pip install langchainpip install google-search-resultspip install openai
import osos.environ['OPENAI_API_KEY'] = str("xxxxxxxxxx")os.environ["SERPAPI_API_KEY"] = str("xxxxxxxxxx")llm = OpenAI(temperature=0,model_name='gpt-4-0314')
import sysfrom langchain.chat_models import ChatOpenAIfrom langchain.llms import OpenAIfrom langchain.agents import load_tools, initialize_agentfrom langchain.agents import AgentType
llm = ChatOpenAI(temperature=0.0)math_llm = OpenAI(temperature=0.0)tools = load_tools(    ["human", "llm-math"],     llm=math_llm,)
agent_chain = initialize_agent(    tools,    llm,    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,    verbose=True,)
agent_chain.run("In what month is Cobus Greyling's birthday?")

从下面代码可以看到,我们将human作为tool添加到agent可用的工具箱中。那么,什么情况可以使用human这个工具呢?这段源码可以看到答案。

class HumanInputRun(BaseTool):    """Tool that adds the capability to ask user for input."""
    name = "Human"    description = (        "You can ask a human for guidance when you think you "        "got stuck or you are not sure what to do next. "        "The input should be a question for the human."    )    prompt_func: Callable[[str], None] = Field(default_factory=lambda: _print_func)    input_func: Callable = Field(default_factory=lambda: input)

执行查看运行结果:

图片

总之,这一思路非常新颖,可以很好解决那种开放环境下,与用户交互的复杂场景任务,通过寻求人工的帮助能够有效降低任务的失败。这在智能客服情境下有很大的应用前景,比如可以定义哪些问题,哪些时间点应该寻求人工支持。基于这个思路,还可以进一步扩展,比如完成专业角色问题的分发,多人协同,形成一个人+AI的Agent网络,这对于解决当前阶段Agent现实挑战(详见:一文探秘LLM应用开发(25)-Prompt(架构模式之Agent的现实挑战))有了一个过渡性方案。

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

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

相关文章

Vite - 配置 - 文件路径别名的配置

为什么要配置别名 别名的配置,主要作用是为了缩短代码中的导入路径。例如有如下的项目目录: project-name| -- src| -- a| --b| --c| --d| --e| -- abc.png| -- index.html| -- main.js如果想在 main.js 文件中使用 abc.png ,则使用的路径是 &#xff1…

十三、Docker的安装

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

【Java 进阶篇】唤醒好运:JQuery 抽奖案例详解

在现代社交网络和电商平台中,抽奖活动成为吸引用户、提升用户参与度的一种常见手段。通过精心设计的抽奖页面,不仅可以增加用户的互动体验,还能在一定程度上提高品牌的知名度。本篇博客将通过详细解析 JQuery 抽奖案例,带领你走进…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

参考:https://www.cnblogs.com/sam-snow-v/p/15917898.html eclipse链接SQL Server出现问题 笔者使用Open JDK 17,SQL Server 2016,项目中使用JPA操作数据库。测试环境没问题,生产环境出现如题所示“驱动程序无法通过使用安全套接…

C++加持让python程序插上翅膀——利用pybind11进行c++和python联合编程示例

目录 0、前言1、安装 pybind11库c侧python侧 2、C引入bybind11vs增加相关依赖及设置cpp中添加头文件及导出模块cpp中添加numpy相关数据结构的接收和返回编译生成dll后改成导出模块同名文件的.pyd 3、python调用c4、C引入bybind11 0、前言 在当今的计算机视觉和机器学习领域&am…

解决Redis分布式锁宕机出现不可靠问题-zookeeper分布式锁

核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。 客户端获取锁时,在 lock 节点下创建临时顺序节点。然后获取 lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己…

什么是缓存雪崩、击穿、穿透?

背景 数据一般是存储于数据库中,数据库中的数据都是存在磁盘上的,磁盘读写的速度相较于内存或者CPU中的寄存器来说是非常慢的了。 如果用户的请求都直接访问数据库的话,请求数量一上来,数据库很容易就崩溃了,所以为了…

哈希

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻unordered系列关联式容器un…

【18年扬大真题】定义一个类Student记录学生计算机课程的成绩。要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩

【18年扬大真题】 定义一个类Student记录学生计算机课程的成绩。要求使用静态成员变量或静态成员函数计算全班学生计算机课程的总成绩和平均成绩 #include<stdio.h> #define n 5;//假设5个学生 typedef struct {char name[10];float score; }stu;int main() {printf(&qu…

传输层——UDP协议

文章目录 一.传输层1.再谈端口号2.端口号范围划分3.认识知名端口号4.两个问题5.netstat与iostat6.pidof 二.UDP协议1.UDP协议格式2.UDP协议的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 一.传输层 在学习HTTP等应用层协议时&#xff0c;为了便于理…

一起Talk Android吧(第五百五十三回:解析Retrofit返回的数据)

文章目录 1. 知识回顾2. 解析方法2.1 解析有效数据2.2 解析错误数据3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结各位看官们大家好,上一回中咱们说的例子是"Retrofit的基本用法",本章回中介绍的例子是" 如何解析Retrofit返回的数据"。闲话休提,言…

sqli-labs关卡20(基于http头部报错盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第二十关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚…