LangChain 实战课
黄佳
新加坡科研局首席研究员
8120 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 28 讲
结束语 & 结课测试 (2讲)
LangChain 实战课
15
15
1.0x
00:00/00:00
登录|注册

12|代理(中):AgentExecutor究竟是怎样驱动模型和工具完成任务的?

你好,我是黄佳,欢迎来到 LangChain 实战课!
上节课中,你了解了 ReAct 框架的原理,最后我给你留了一道思考题,让你说一说 LangChain 中的“代理”和“链”的差异究竟是什么。
我的答案是:在链中,一系列操作被硬编码(在代码中)。在代理中,语言模型被用作推理引擎来确定要采取哪些操作以及按什么顺序执行这些操作。
下面这个图,就展现出了 Agent 接到任务之后,自动进行推理,然后自主调用工具完成任务的过程。
那么,你看 LangChain,乃至整个大模型应用开发的核心理念就呼之欲出了。这个核心理念就是操作的序列并非硬编码在代码中,而是使用语言模型(如 GPT-3 或 GPT-4)来选择执行的操作序列
这里,我又一次重复了上一段话,显得有点啰嗦,但是这个思路真的是太重要了,它也凸显了 LLM 作为 AI 自主决定程序逻辑这个编程新范式的价值,我希望你仔细认真地去理解。

Agent 的关键组件

在 LangChain 的代理中,有这样几个关键组件。
代理(Agent):这个类决定下一步执行什么操作。它由一个语言模型和一个提示(prompt)驱动。提示可能包含代理的性格(也就是给它分配角色,让它以特定方式进行响应)、任务的背景(用于给它提供更多任务类型的上下文)以及用于激发更好推理能力的提示策略(例如 ReAct)。LangChain 中包含很多种不同类型的代理。
 
工具(Tools):工具是代理调用的函数。这里有两个重要的考虑因素:一是让代理能访问到正确的工具,二是以最有帮助的方式描述这些工具。如果你没有给代理提供正确的工具,它将无法完成任务。如果你没有正确地描述工具,代理将不知道如何使用它们。LangChain 提供了一系列的工具,同时你也可以定义自己的工具。
 
工具包(Toolkits):工具包是一组用于完成特定目标的彼此相关的工具,每个工具包中包含多个工具。比如 LangChain 的 Office365 工具包中就包含连接 Outlook、读取邮件列表、发送邮件等一系列工具。当然 LangChain 中还有很多其他工具包供你使用。
 
代理执行器(AgentExecutor):代理执行器是代理的运行环境,它调用代理并执行代理选择的操作。执行器也负责处理多种复杂情况,包括处理代理选择了不存在的工具的情况、处理工具出错的情况、处理代理产生的无法解析成工具调用的输出的情况,以及在代理决策和工具调用进行观察和日志记录。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

AgentExecutor是LangChain中驱动模型和工具完成任务的关键组件。它通过代理执行器调用代理,执行操作序列,实现了模型的推理和工具选择。文章深入探讨了AgentExecutor的运行机制,包括代理给大模型的提示和代理执行器按照ReAct框架调用模型、接收模型输出并调用工具。通过对AgentExecutor的运行机制的深入挖掘,读者可以了解LangChain内部的逻辑和代码实现细节。文章还通过具体的调用示例展示了AgentExecutor的工作流程,包括模型接收提示信息、选择工具、执行操作、观察结果,并根据结果决定下一步行动。这些内容使读者能够快速了解LangChain中AgentExecutor的作用和运行机制,为深入理解LangChain提供了重要的参考。文章内容详实,通过具体的调用示例展示了AgentExecutor的工作流程,使读者能够快速了解LangChain中AgentExecutor的作用和运行机制,为深入理解LangChain提供了重要的参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《LangChain 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 刘旺旺
    各位同学可以尝试在测试脚本中添加一段代码: ```python import langchain langchain.debug = True ``` 这样可以看到大部分思考过程!

    作者回复: 特别好!!

    2024-01-19归属地:北京
    5
  • iLeGeND
    感觉能多能力 不管是chain还是代理,本质上都是给大模型完善的提示词呢, 并且langchain在适当的环节,内置了很多适当的提示词,结合上下文,觉得下一步做什么,引导大模型完成对应的需求, langchain本质上还是提供了默认的提示词,不知道理解的对不对

    作者回复: 对,这些提示词是值得我们学习的。此外,在AgentExecutor中,还构建了自主计划和调用工具的逻辑。

    2023-09-30归属地:湖北
    4
  • 一只豆
    在最近比较火的Agent综述文章中,Agent被概括为:Profile Memory Plan Tool这四个模块。结合老师这讲前半部分说的“LLM编程新范式”:不是把操作序列硬编码进去,而是让GPT3/4这样的模型去选择这些操作序列。 可不可以理解为:所谓 Plan,就是定义了“操作序列”(?);所谓Profile,就是提供了“选择操作序列”时推理所需的高层次背景信息? 反思Reflect,是引导LLM生成推理需要的中观信息? Memory和Tool是基于此的支撑? 提问心态:我已经通过prompt engineering验证了某个业务领域的多层次复杂问题框架,现在需要使用Agent思想工程化。所以在试着塞进去,还请老师明示!多谢!

    作者回复: 谢谢同学这么有深度的提问。确实,从你描述的情境和Agent的综述文章的四个模块来看,你的理解是很接近的。 Profile : 定义了Agent的个性、知识和经验。 提供了“选择操作序列”时推理所需的高层次背景信息。 当Agent处理特定的任务时,它会考虑Profile中的信息来做出与其“个性”和“经验”相一致的决策。 Memory (记忆): 让Agent能够记住之前的交互和决策,帮助其更好地适应和处理后续的任务。 在LLM的编程中,它可以帮助模型跟踪和使用之前的交互来生成更准确的操作序列。 Plan (计划): 是你提到的“定义操作序列”的部分。 在LLM编程范式中,这意味着Agent不是依靠硬编码的规则来执行任务,而是生成、选择和执行计划,这些计划是基于其当前的Profile和Memory生成的。 Tool (工具): 允许Agent与外部系统和API进行交互,执行具体的任务。 在LLM编程范式中,这意味着模型可以调用外部工具或API来实现某些操作,而不仅仅是生成文本。 当你提到的“反思Reflect”是指模型的自我反思和自我调整能力,这确实是指导LLM生成推理所需的中观信息。它可以帮助模型更好地适应任务和上下文,生成更准确的操作序列。 基于你的业务需求,使用Agent的四个模块框架是一个很好的思路。在工程化时,你可以考虑如何整合这四个模块,并结合LLM的编程范式来处理复杂的业务逻辑和交互。

    2023-10-13归属地:广东
    3
    3
  • 阿斯蒂芬
    先打卡学习。 人类一思考,上帝就发笑。大模型一循环思考,我就忍俊不住要惊呼点赞! 话说第一张图Tack是写错了吗?应该是Task?

    作者回复: 也给你点赞!坚持学习力超强 嗯嗯,应该改成Task,我们改一下。

    2023-09-27归属地:广东
    2
  • 漏网之渔
    agent执行的过程中,prompt是不断累计的么,会出现token上限的情况吗

    作者回复: 从模型的输出来看,Prompt的确是越来越多的。一段时间后,应该是会达到上限。如何节约Token,我想对于LangChain内部机制来说,也是一个大课题。同学可以Debug一下看看LangChain有什么限制Token数量的机制。当然将来LLM所能够接纳的上限也会增加的。

    2023-10-08归属地:北京
    1
  • Geek_339c29
    大佬,我们公司现在在计划做一个AI产品核心,形成自己的core产品,后续接到具体的客户订单的时候,可以直接基于core做一些定制化的开发以此来快速完成各种项目。不知道我理解的对不对,目前有个fastgpt开源项目,是不是做了可视化的chain组装最后生成的是agent? 如果我们要做这样的一个core产品,是不是也是这样一个类似的东西,有哪些东西值得做在这个core里面?

    作者回复: 同学的问题有点宏观。思路是对的,但是感觉具体落地细节有很多要实现的内容。可以进一步说说具体细节吗,我们可以进一步分析。

    2023-12-24归属地:江苏
  • Geek_085d59
    请问调用数学计算工具时,为什么是llm在做计算,我理解的不应该是让大模型返回工具名称和参数,然后langchain本地调用python工具计算吗

    作者回复: 难道不是大模型返回Python代码,然后另一个工具调用Python做计算的吗??理论上应该是这样的哈!!

    2023-11-18归属地:北京
    2
  • SH
    老师, 看你本次的分析中,都会重复的出现 那个 思考-行动-观察的步骤,每一轮得到一个结果,再重复执行之前的步骤时,把上一步的结果代入到新的任务,有点不理解, 在这里为什么基于上次的逻辑里面,在需要的结果处继续往下执行的呢?而且重新思考一轮呢? 这样是不是会很浪费 token ?

    作者回复: 大家讨论讨论这个问题吧

    2023-11-05归属地:浙江
    4
  • iLeGeND
    chain中决策走哪一个分支,和代理中选择用哪一个代理, 本质上是一回事吗

    作者回复: 是一回事,都是用LLM的推理能力来决策。

    2023-09-30归属地:湖北
  • Kevin
    debug的详细过程能不能也专门出一节课,整个判断的思路形成过程特别重要,谢谢啦~

    作者回复: 同学好,这节课不正是Debug的详细过程嘛?感觉已经写到很细了呀。

    2023-09-29归属地:英国
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部