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

Song榆钱儿 2024-08-17 17:31:02 阅读 51

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

    先回顾

图片

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

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

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

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

<code>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))

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

图片

释义:

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

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

敲黑板、划重点

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

图片

绿色:另一种实现方法,封装为<code>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:将函数返回值再经过‘润色’返回



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。