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

picture.image

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

picture.image

传统的 聊天机器人 如

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

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

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

完整代码:


          
pip install langchain
          
pip install google-search-results
          
pip install openai
          

          
import os
          
os.environ['OPENAI_API_KEY'] = str("xxxxxxxxxx")
          
os.environ["SERPAPI_API_KEY"] = str("xxxxxxxxxx")
          
llm = OpenAI(temperature=0,model_name='gpt-4-0314')
          

          
import sys
          
from langchain.chat_models import ChatOpenAI
          
from langchain.llms import OpenAI
          
from langchain.agents import load_tools, initialize_agent
          
from 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)
          

      

执行查看运行结果:

picture.image

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

picture.image

0
0
0
0
评论
未登录
暂无评论