AI菜鸟向前飞 — LangChain系列之十七 – 剖析AgentExecutor

作者 : admin 本文共1441个字,预计阅读时间需要4分钟 发布时间: 2024-06-10 共2人阅读

AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。

    先回顾

AI菜鸟向前飞 — LangChain系列之十七 – 剖析AgentExecutor插图

AI菜鸟向前飞 — LangChain系列之十四 – Agent系列:从现象看机制(上篇)

AI菜鸟向前飞 — LangChain系列之十五 – Agent系列:从现象看机制(中篇)一个Agent的“旅行”

AI菜鸟向前飞 — LangChain系列之十六 – Agent系列:从现象看机制(下篇)一款“无需传递中间步骤”的Agent

当时在介绍Agent,给大家的一个让Agent执行的示例,

intermediate_steps = []
while not isinstance(
    res := agent.invoke({"input": "AI菜鸟向前飞系列文章出自哪里?", "intermediate_steps": intermediate_steps}), AgentFinish):
    for each in res:
        observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)
        intermediate_steps.append((each, observation))

这次为了方便与AgentExecutor更好的对比,将程序微调如下样式:

intermediate_steps = []
while True:
    res = agent.invoke({"input": "AI菜鸟向前飞系列文章出自哪里?", "intermediate_steps": intermediate_steps})
    if isinstance(res, AgentFinish):
        break
    for each in res:
        observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)
        intermediate_steps.append((each, observation))

抽丝剥茧,从下图可以更好的看出官方是如何实现的,其实、“几乎一样”

AI菜鸟向前飞 — LangChain系列之十七 – 剖析AgentExecutor插图(1)

释义:

  • 蓝色:官方用迭代次数 与耗时多方面判断是否要进入循环(即:while True)

  • 褐色:官方也是AgentFinish判断,和拼接intermediate_steps(即:循环体内部处理)

  • 敲黑板、划重点

    • 粉色:特有的类型,AgentStep,它将每一个要执行的方法和返回值都作为一个AgentStep,例如:

      AI菜鸟向前飞 — LangChain系列之十七 – 剖析AgentExecutor插图(2)

    • 绿色:另一种实现方法,封装为def plan作用是调用LLM(大语言模型)后,大模型响应的内容(这个很好理解,就不晒图了)

One more thing…

谈谈Tool的return_direct属性   为啥之前讲tool时不介绍它,因为学会了AgentExecutor再了解它会更有意义:) 

AI菜鸟向前飞 — LangChain系列之十三 – 关于Tool的必知必会

若看不懂的话,咱们做个实验 ,tool的return_direct取值

  • True

{'input': 'AI菜鸟向前飞系列文章出自哪里?', 'output': 'AI菜鸟向前飞文章出自Song榆钱儿的公众号。'
  • False(默认)

// 不同的LLM的output内容可能会不同
{'input': 'AI菜鸟向前飞系列文章出自哪里?', 'output': 'AI菜鸟向前飞系列文章出自Song榆钱儿的公众号。'

简单来说,True:直接返回函数的返回值,False:将函数返回值再经过‘润色’返回

本站无任何商业行为
个人在线分享 » AI菜鸟向前飞 — LangChain系列之十七 – 剖析AgentExecutor
E-->