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

人充当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的现实挑战))有了一个过渡性方案。

相关文章:

  • STM32F429主控TB6612驱动直流电机----解决PWM波形未输出bug
  • 清华学霸告诉你:如何自学人工智能?
  • 【Python 千题 —— 基础篇】输出列表方差
  • 国产化项目改造:使用达梦数据库和东方通组件部署,前后端分离框架
  • mac中安装Homebrew
  • [Docker]六.Docker自动部署nodejs以及golang项目
  • SpringCloud微服务:Ribbon负载均衡
  • 【微服务专题】Spring启动过程源码解析
  • 【Java并发编程三】线程的基本使用一
  • 论信息系统项目的沟通管理
  • Debian/Ubuntu 安装 NodeJS【详细步骤】
  • 设计模式-创建型模式-单例模式
  • C++ 继承和派生
  • JAXB的XmlElement注解
  • 紫色调城市和奔跑人物剪影背景工会工作总结汇报PPT模板
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 5、React组件事件详解
  • java多线程
  • Laravel 中的一个后期静态绑定
  • October CMS - 快速入门 9 Images And Galleries
  • v-if和v-for连用出现的问题
  • 不上全站https的网站你们就等着被恶心死吧
  • 诡异!React stopPropagation失灵
  • 力扣(LeetCode)357
  • 模型微调
  • 数据可视化之 Sankey 桑基图的实现
  • Prometheus VS InfluxDB
  • Spring Batch JSON 支持
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)MFC+openGL单文档框架glFrame
  • (3)(3.5) 遥测无线电区域条例
  • (bean配置类的注解开发)学习Spring的第十三天
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (备忘)Java Map 遍历
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转) 深度模型优化性能 调参
  • (转)Unity3DUnity3D在android下调试
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • ??javascript里的变量问题
  • [android] 练习PopupWindow实现对话框
  • [C语言]编译和链接
  • [GN] Vue3快速上手1
  • [javaSE] 数据结构(二叉查找树-插入节点)
  • [Linux] PHP程序员玩转Linux系列-telnet轻松使用邮箱
  • [luoguP3159] [CQOI2012]交换棋子(最小费用最大流)
  • [NOIP2004] 提高组 洛谷P1090 合并果子
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [OpenGL(Win32)] - 3D 轮廓字体
  • [Operating System] {ud923} P4L4: Datacenter Technologies
  • [python] RRT快速拓展随机树
  • [Redis实战]分布式锁-redission
  • [Spark][Python]DataFrame中取出有限个记录的例子