上一篇讲了AI Agent是什么。后来看到比尔盖茨在同一天发了一篇他对Agent的深度思考的文章。很高兴看到自己的理解和对未来的愿景跟大佬们的想法大差不差。这次接着上篇讲讲为什么LLM的发展绕不开Agent这种应用方式。
🔒大语言模型的局限性
大家用过ChatGPT应该知道它是能理解整个对话的上下文的,很多人可能以为这是LLM本身的能力。其实背后是由一套程序+LLM来实现的。这套程序在你每次发消息的时候,把你整个对话从头到尾再加上你这次发的消息,一起送入LLM,要求LLM根据之前所有的对话内容,再针对最后一个消息来答复。当然实际过程要复杂的多,比如对话长度如果超过context window,就需要节选其中的内容。重点是如果没有一套程序来管理每次送入LLM的内容(context management),只给LLM提供单个消息的话,每次LLM的问答是完全独立的,LLM是无法知道自己的长期目标,无法知道自己上一步做了什么,也无法利用外界的信息。
💻围绕大语言模型的程序
这套围绕LLM的程序目前有几个主要的形式:
1️⃣各种角色扮演的对话类服务。程序主要负责通过预设prompt来制定人设和少量的知识,所谓API wrapper的最简单例子。
2️⃣各类Copilot工具。程序主要通过context management + prompt engineering + RAG,来尽量优化单次inference的质量,辅助写代码、写作等目标清晰的需求。
3️⃣各种目前还处于demo阶段的Agent。程序被设定目标之后,可以很大程度上独立运行,自主做决策,通过多次调用LLM来完成目标。
🦾绕不开的程序和Agent的能力
其实不管是Agent还是其他形式的程序,彪哥关注的重点是它们通过哪些手段来发挥LLM的潜力:
1️⃣通过state management来记住长期的目标和当前做到哪一步。
2️⃣通过prompt & context management的方式把多次inference的结果串联起来,让LLM知道之前做过什么,接下来要怎么做。
3️⃣通过extended capabilities让LLM不光可以用自然语言来答复,也可以答复可执行的指令(e.g. function calls),来直接调用外部系统的功能。
4️⃣通过retrieval让LLM可以调用initial context和training data以外的信息,让答复变得更具体,更有时效性。
这些手段可以根据需求单独使用或者组合起来使用。但这些跟LLM的发展绕不开Agent有什么关系呢?首先绕不开的其实是这套程序,也就是之前说的狭义的Agent,因为这些环节的实现过程,在传统软件工程里都有成熟的参照,所以可行性是有保证的,而且好处也很明显。其次绕不开的是Agent这个广义的概念,因为Agent这个概念最大程度的涵盖了一个“智能个体“最理想的功能集,像是画了一个大饼一样让人想去实现,而且正好最近LLM的发展加上刚才说的这些程序手段,使Agent这个大饼变得有可能了。
这个大饼里面有个特征是彪哥最关注的,那就是主动性(Proactive)。这是这波AI之前很难实现的,彪哥正在开发的Agent项目就是围绕这个特征展开设计的,后来看到比尔盖茨的文章里也着重讲了这点彪哥就放心了。之后有机会再展开聊聊。
🔗用Crypto的例子来理解Agent
最后再举个偏门的例子从侧面理解Agent。对区块链技术有了解的朋友们应该知道Ethereum通过Smart Contract的方式,把Bitcoin的去中心化信任机制和价值体系变得可编程化(programmable),从而打开了dAPP(decentralized application)这整个应用层的价值。本质上Agent这个概念还有围绕LLM的各种程序,给LLM带来的就是可编程化这个属性。让我们可以把传统软件工程能实现的功能都应用到LLM上,包括彪哥在Agent应用落地的视频里聊到的stateful vs stateless也是可编程化带来的好处之一。
抽象的概念说的差不多了,之后的笔记里打算讲一些更有操作性的内容。比如Assistants API的作用,设计Agent应用的切入点,新手怎么安排学习路径,怎么判断OpenAI会做的和不会做的功能等等。大家有什么希望彪哥讲的内容欢迎在评论区或者群里留言。
实在RPA_IPA 2023-11-24