1、前言
从24年初开始的时候,吴恩达(Andrew Ng)、Harrison Chase(LangChain创始人)等人开始在红杉资本AI论坛等公开场合,提倡Agent、workflow、flow engineering等概念,整个Agent和大模型结合的范式在2024年逐渐由学界研究转到终端应用的实际开发与实践上,大量的软件架构(Langchain、LlamaIndex、MetaGPT)等逐渐建设整个agent 生态
吴恩达观点:
2024年,目前通过Reflection(反思)和外部工具的调用,是比较成熟的技巧;通过planning(计划)和Multi-agent collaboration(多Agent协同),目前还没到那么好用的程度
大家现在对本时代(GPT-4 同等level)的大模型智能的理解是,一句话prompt,一次生成出来几乎不能很好解决复杂问题,特别是需要到生产阶段投入到社会经济活动产生价值的这种复杂问题。
从抽象的概念来说,大模型一句话next token prediction 生成就是 system 1 思考,巴拉巴拉就开始了。就拿写代码的例子来说,就好比口头描述一个需求,给到开发,逼他开始写代码了,而且还得一直顺着往下写,不能改,不能review。这几乎不太可能实现了
跟人类一样,AI需要通过sytem 2的思维来做复杂问题,对问题进行拆解、思考、行动、反馈迭代,反复打磨去把80分的基线拉到95分
下文会开始介绍从2022开始的几个比较重要的Agent思想的大模型试验,正是通过这一系列的empirical studies 证明了大模型的推理能力,挖掘了大模型在解决复杂问题的潜能,工业界随之便把这一系列的agent思想集成到了软件开发框架当中,给到开发者更多的工具来提升应用的智能
2、主流Agent思想
2.1、CoT(Chain-of-Thought)思维链
核心逻辑:在Promopt里面加上 中间的推理路径(intermediate reasoning steps),利用模型 上下文学习(in-context-learning)的能力来理解推理路径中的逻辑,运用到任务中去
这里实际上挖掘了两个能提升模型推理性能的点:
- 把路径拆解完,用一个例子放到prompt里面,推理能力提升了
- 如果你举例子举不好,就告诉模型 “let's think step by step“ 即 一步一步想
2.2、Basic Reflection
图片来源:LangChain
核心逻辑:两个 LLM,一个当老板,提供一些建设性建议;另外一个干活的,负责生成回答问题
整个流程会重复几遍
2.3、ReAct
核心 idea:让 LLM 模拟人的思维模式,在决策行动(action)的时候要产出对应的推理逻辑(reasoning)
先 Reason 再 Act,基本遵从了下面的一个拆解的逻辑
- 问题是啥
- 应该怎么做
- 我做了啥 Action
- 输入是什么
- 输出是什么
LangChain中最经典的ReAct 的Prompt 结构,如下图
我们可以通过这个prompt来了解 第一轮第二轮交互中,大模型生成的输出是怎么与下一轮的输入进行数据交互的
数据交互 | 第一轮 | 第二轮 |
{tools} | 工具 | 新的工具 |
Question:{input} | 用户任务 | 用户任务 |
Thought | 产生 thought | 产生新的 thought |
Thought: {agent_scratchpad} | null (之前的 thought,因为在第一轮,所以没有) | 前一轮的记忆 |
Action: {tool_names} | 根据 thought 使用某个 tool | 根据 thought 使用某个 tool |
Observation | 调用工具后返回结果 产生 observation1 | 调用工具后返回结果 产生 observation2 |
Final Answer | null(最后一轮产生 Final Answer) |
论文原本的例子:
2.4、Reflexion
Shinn et al. (2023) 提出 Reflexion,核心沿用了深度强化学习的逻辑,用一个强化学习的政策来不断调整 模型的输出做优化;实际上这里要提一嘴,传统的RL其实在transformer之前在SOTA的表现中都是由非常大的戏份的,只不过后来transformer的架构下训练的模型越来越好,大家逐渐放弃了RL的方式,不过后面GPT系列又把RL带回来作为增强模型对齐能力的一个方法
核心三个模型:
- 行动模型(Actor):生成文本输出(texts)和行动(actions)
- 评估模型(evaluator): 对 行动模型的输出打分(一般是二进制 失败成功 或者一个 分数)
- 反思模型(Self-reflection ):根据行动模型的输出,还有评估模型的分数,把这两者转换成一个 语言形式的反思,作为强化学习的一个提升的方向,存到记忆中,给到行动模型做下一轮行动的规划
核心逻辑:一般来说行动模型(Actor)会是ReAct或者CoT,我们把这个模型丢在一个环境下面,给他一个任务目标,那么这个行动模型就会沿着这个目标 去生成一个完整路径(可能包含多次反思 行动 观察)最终得到一个结果; 那么这个时候使用评估模型(evaluator)去对这个完整路径和生成的结果进行打分,来表达最终是否完成的足够好,这里一般evaluator 可以用传统的模型来做或者使用大模型来进行打分;然后我们使用反思模型(self-reflection)去对 行动模型的完整路径+结果+评估模型的分数 综合进行一个分析,产出一个语言上对前面这一套的路径和分数的归因分析,大概说人话就是(为啥这个路径最后失败了,可能是在某某个节点上,行动模型选错了),把这个分析结论存到记忆里面。
那么下一次行动模型行动的时候,他其实就可以从记忆中知道 “上一次这么做,做错了”那我这一次应该选一个更合理的路径来提升最后完成任务的可能性。
这样往复跑n次,就可以提高整个任务的完成的几率
原文例子:
3、收尾 + 题外关于flow engineering
作者个人在做agent实践的时候,也会经常遇到一个问题,怎么定义好这个Agent应该做什么,好像Agent是一个很聪明但是接触不到外界的一个智能,我在代码中定义给到Agent哪些工具,他就只能使用哪些工具;这样好像我的智能和对任务的拆解决定了Agent能力的上限,但实际想一想agent应该需要比我更聪明,不然生产力的话只能是线性的复制,和传统的代码一样。我写好了就可以复用,只不过传统代码基于规则,agent代码基于agent推理。但实际上现在不一定agent推理的稳定性就好用呢。
大家也有看到像 Baby-AGI、AutoGPT这样全自动的Agent,自己做计划完成自由度非常高,但是在这些case下面。整个规划的scope非常的大,很多时候Agent自己一个人自嗨就歪到天边去了,拉也拉不回来,你也不知道在哪一步agent就放飞自我了。
现在的大部分业界推崇的是,结合起来做流程把控。人类做规划,LLM推理决定每个节点怎么做,是否做的足够好可以进入到下个节点,类似于一个半自动的系统,得有状态机的概念,强把控,有对抗(引用了人类和AI推理的强化学习的逻辑,人类最佳实践对抗AI生成路径)
大概流程是:
行业专家讨论 -》 什么样是最佳实践 -》 用通用的LLM搭起一个流程,看看能力的边界 -》生产环境中找bad case 累计数据 -》 fine-tune 模型提高智能程度
说是这么说,实际上与业界交流过程中,大部分还在怎么写好一个prompt的阶段,还没有到复杂的flow,越复杂越不可控,整个系统搭建起来,对后向验证的能力挑战非常大。正向还没玩明白,怎么做后项测试和验证。
业界实践是这样,前言的学术研究和软件框架的创新还在前面跑,大家对agent的研究也会随着新的模型的到来 被一刀切,新的研究需要站在新的能力基线上面,能够复用的是科学方法论和对智能发展底层逻辑的正确判断。
现在也不要太FOMO,都在探索阶段,跑错的人可能已经跑错N远了,未来再纠回来也许会挺难,多实践多看,保持长期主义,深耕AI
后面会再更一篇,详细讲讲Agent 平台、Agent产品、Agent和workflow 实践与理想
感兴趣可以阅读: