斯坦福小镇
从openai演进路线,和结合sam的访谈记录,还有OpenAI联合创始人Karpathy分享。
Sam Altman 早在2023年4月底说了
“I think we’re at the end of the era where it’s going to be these, like, giant, giant models,” he told an audience at an event held at MIT late last week. “We’ll make them better in other ways.”
Karpathy 也在大概6月份说过类似的话
“如果一篇论文提出了某种不同的训练方法,那么我们OpenAI内部的Slack群组里的讨论会类似于,哦是的,有人在两年半尝试过,它不起作用,我们对这种方法的来龙去脉非常了解。但是当新的AI Agents论文出来的时候,我们都非常感兴趣,觉得它非常酷,因为我们的团队并没有花费五年时间在这上面,我们并不比你们更多掌握什么,我们正在与你们所有人一起竞争。这就是认为你们处于AI Agents能力的最前沿的原因”
可以看出他们的思路,越来越趋向ai agent模式,大模型不应该只是一个提问-回答的模式,而是越来越像人类,人类会用工具,会有不同的分工,产生组织,进行协作。结合openai的官方更新日志来看,验证了他们的思路,以下是他们的更新表格。
可以看23年第一季度,openai主要集中在模型上,但是第二季开始,openai的注意力就放到了ai agent上面,给大模型装上插件,给予访问互联网的能力,函数回调,代码解释器。
以下列表是openai一些重要更新查看。
更新日期 发布内容
8/3, 2023 1 提示词示例,一些帮助用户如何写提示词的一些实例。2 会提示用户,有推荐提示帮助用户继续对话。3 plus用户会默认使用gpt4 模型 4 plus用户可以上传各类文件,让gpt4分析和总结。5 保持登录,不会再2周自动登出 6 增加了一些快捷键来复制对话,和查看对话列表。
7/6, 2023 1 plus用户可以使用代码解释器,用户可以上传文件,运行代码,访问用户上传的文件,分析数据,绘制图表,遍接文件,运行计算。
5/12, 2023 1 plus会员可以使用beta 版本的chatgpt,即具有访问互联网能力,且可以使用第三方插件的chatgpt模型,可以到插件store安装和启用插件。
3/23, 2023 1 插件模型上线,chatgpt可以访问最新的信息,可以做数学计算,使用第三方服务。启动waitlist给用户和开发者,1.1:浏览器模型,可以访问互联网。1.2,代码解释器模型,实验性质的chat gpt模型,可以使用python,可以上传文件和下载文件。1.3第三方插件模型,模型有能力知道什么场景使用什么第三方插件
3/14, 2023 1 gpt4 上线,更强的逻辑推理能力,处理更加负责的指示,更强的创造力,并且动态给予plus会员尝试gpt4的服务。
更新日期 博客更新内容
6/13,2023 1 函数调用,这个特性是openai对tool思考的一个落地,也就是说在调用gpt api时添加了,一个function字段来描述你自定义的工具(这个工具的描述),一旦用户问了某个问题,模型判断需要用到这个函数,就会请求开发者调用并且使用该结果 2 推出了GPT4-0613,GPT-3.5-turbo-0613, 具备了函数调用能力 3 推出了延长输入的,GPT4-32k,GPT3.5-turbo-16K 4 还有价格下降,GPT3.5-turbo 价格下降到700 page对话仅需要1美元 https://openai.com/blog/function-calling-and-other-api-updates
7/6, 2023 GPT-4 API 会开放给所有的开发者 https://openai.com/blog/gpt-4-api-general-availability
7/20, 2023 prompt优化更新,允许自定义两个设定,A告诉gpt自己的信息,B希望gpt怎么回应自己,以便更好的得到回答 https://openai.com/blog/custom-instructions-for-chatgpt
总结:
从chatgpt演化思路来看,以及全世界范围内,大模型的参数规模边际效益减弱,agent模式越来越成为llm的未来。
业界当前主要实践两种agent:
1 ai + 工具 = agent,这种模式有:https://github.com/Significant-Gravitas/Auto-GPT
- chat gpt + 各种插件(天气,股票…)
- chat gpt + 向量数据库
- autp gpt: https://github.com/Significant-Gravitas/Auto-GPT
- meta gpt: https://link.zhihu.com/?target=https%3A//github.com/geekan/MetaGPT
- agent gpt: https://github.com/reworkd/AgentGPT
2 agent + agent = agents
当前这个领域,主要是斯坦福在探索,清华在跟随。
斯坦福大学论文《Generative Agents: Interactive Simulacra of Human Behavior》:https://arxiv.org/pdf/2304.03442.pdf
清华大学论文《Communicative Agents for Software Development》:https://arxiv.org/abs/2307.07924
本文主要探讨agents模式的前沿探索,和其未来的范式。
2 Memory Stream,ai agent的记忆
现在很多人去langchain+llm的工作,本质上就是用向量数据库去存储,一些私有领域的知识,在提问大模型的时候,把相关的信息作为上下文带入,然后获得一个回答的案例,但是这仅仅是一种非常粗糙人尽皆知的用法而已。
这里可以通过斯坦福小镇获得很多灵感,在斯坦福小镇里,一个ai agent具备有memory stream,相当于一个记忆实体的流,这个流是按照时间排序下来的一个一个记忆实体,记忆实体里最基本的就是观察。
由上图可见,是一系列ai agent在通过 “观察”,获得了周围环境的一些记忆实体,这里需要注意的是,这种“观察”是
1其他agent的行为和状态
2身处的环境的状态。
2.1 提取记忆实体
不是所有的记忆实体都是需要,一个agent需要做什么决策,都需要提取相关的记忆实体,来做相关的决策。所以斯坦福小镇的做法,是将agent当前的状况作为输入,提取和当前状况有相关性的,且时间戳比较相近的,还有重要性比较高的记忆实体。这里最关键的重要性指标,没有“算法”,没有“if else”判断语句,重要性的判断是模型去判断。
这里做一个引申:模型判断 替换 if else 判断。
就是agent的逻辑判断if语句,演化成了,问模型,这是一种很反程序员的思路,因为预示了agent的行为不是明确的,而是概率性的。过去的开发一个工具,和一个程序来完成特定的任务,编程范式从控制流式,到面向对象。但是都是有明确的输入和输出结果,但是斯坦福这里做的尝试就是基本,让agent里的if else逻辑用模型自己去判断替换掉了。这是一个思路。让模型来把关if else语句
由于斯坦福纯粹是为了学术研究,所以他们这里制造的agent,就是模拟一个居民而已。制造memory stream,和提取momory object的机制,可能会让读者觉得这些没啥用。
后来清华大学在这方面研究,模拟了三个agents互相协作,一个产品经理agent,和一个程序员agent,和一个测试人员agent,产出了一个可运行,可测试的程序实体。这个过程,memory stream和记忆实体提取机制就产生了很大作用。
3 Reflection,ai agent自省机制。
在斯坦福小镇里,一个agent每日三省其身,使用reflection机制,这是什么意思呢?
这里斯坦福小镇有一种创造性的想法,他们认为 一个agent的 “自省”, 也就是reflection,也是一种类型的记忆,从上图可以看到,一个agent,由于有“观察”,它的记忆流,一开始只充满这类纯观察类记忆,后面每固定的一个时间周期,agent会对observation进行一个总结,记忆流出现第二类记忆,就是总结类的记忆。
简单的说就是
输入一系列的 记忆实体,让大模型对这些记忆实体总结浓缩,输出一个reflection,再存入memory stream里面去。
总结类记忆也会存到memory stream里面,下一次,reflection会对观察类和总结类记忆再自省一次,形成更高维度的总结类记忆。
这种总结类记忆,其实有点像形成一个结论,这对指导agent的行为和计划有很好的作用。而且如果仅仅对纯观测类的记忆进行抽取,可能会形成错误的结论。reflection很好的纠正了这点。
后面会看到清华大学把reflection机制,当作agents之间协作的收敛和闭环的机制。
4 plan 和 action,agent的手脚
对于一个agent而言,行动之前,肯定是需要让大模型把一系列agent需要做的行动先安排好。再斯坦福小镇里,这些action包含了时间,地点,持续时间,和做的事情。当然如果要让agent来完成现实世界的一个任务,肯定没那么简单,这些action可能包含了,需要写的代码,需要调用的api等等。但是思想都是一样的,(加粗)需要让大模型安排出一个plan
关键在于如何让大模型安排plan,如何执行这个plan
这里斯坦福小镇的思路在于,把每个角色的定位信息作为输入,然后把agent当前的环境信息,以及提取的memory state作为集合,输入给大模型,通过top-down的递归方式,先让大模型安排出一个粗颗粒的计划,再逐步的迭代到比较细致的步骤。接着才调用api,去让角色执行plan。
并且这个plan是需要更新的,一个agent的memory stream会流入很多观测信息和reflection信息,他们这里就使用了上述的“不确定性编程”,这里流入信息后,需要决定是否更新plan,还是不更新plan。这个if else 语句,依旧交给大模型来做。
斯坦福小镇的这个制定计划的思路,其实本质和auto gpt的如出一辙,都是让大模型分解一个任务到最小可执行的细颗粒度,然后才去执行。但是不一样的是,这里的agent具备自己的memory stream,让agent和agent之间的合作变得可能,协作。
总结
从斯坦福小镇,展示了Memory Stream, Reflection,制定plan和执行action,这三个机制其实是就是agent之间互相协作的基础。大模型的一问一答的模式,其实远没有发挥出它的实力。大模型为底座,agents之间的互相协作肯定是比单个模型的一问一答强大很多的。