Agent一词起源于拉丁语中的Agere,意思是“to do”。在LLM语境下,Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体。
Agent并非ChatGPT升级版,它不仅告诉你“如何做”,更会帮你去做。如果Copilot是副驾驶,那么Agent就是主驾驶。
自主Agent是由人工智能驱动的程序,当给定目标时,它们能够自己创建任务、完成任务、创建新任务、重新确定任务列表的优先级、完成新的顶级任务,并循环直到达到目标。
Agent = LLM+Planning+Feedback+Tool use
感知(Perception)→ 规划(Planning)→ 行动(Action)
Agent 是让 LLM 具备目标实现的能力,并通过自我激励循环来实现这个目标。
它可以是并行的(同时使用多个提示,试图解决同一个目标)和单向的(无需人类参与对话)。
为Agent创建一个目标或主任务后,主要分为以下三个步骤:
让我们一起来看一个具体的例子。我们可以从一个任务开始,例如"编写一篇关于ChatGPT以及它能做什么的1500字博客"。
模型接收这个要求,并按照以下步骤执行操作:
sub_tasks = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are an world class assistant designed to help people accomplish tasks"},
{"role": "user", "content": "Create a 1500 word blog post on ChatGPT and what it can do"},
{"role": "user", "content": "Take the users request above and break it down into simple sub-tasks which can be easily done."}
]
)
在这个例子中,我们使用OpenAI API来驱动 Agent。通过 system 字段,你可以在一定程度上定义你的Agent。然后,我们添加 user content Create a 1500 word blog post on ChatGPT and what it can do,以及下一步骤 Take the users request above and break it down into simple sub-tasks which can be easily done.,也就是在此基础上添加任务,将查询分解成子任务。
然后,你可以获取子任务,并在循环中向模型发送更多的调用,执行所有这些子任务,每个子任务都有不同的系统消息(想象成不同的Agent,可能是一个擅长写作的Agent,一个擅长学术研究的Agent等)。
接下来,你可以向模型循环发送更多的调用,执行每个子任务。每个子任务都可以有不同的系统消息,你可以想象这些系统消息代表了不同领域的专家,例如一个擅长写作的专家、一个擅长学术研究的专家等等。这样,你可以让模型在不同的角色下进行思考和响应,从而更好地满足用户的需求。
在工作中,我们通常会用到PDCA思维模型。基于PDCA模型,我们可以将完成一项任务进行拆解,按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。目前,这是人们高效完成一项任务非常成功的经验总结。
要让LLM替代人去做事,我们可以基于PDCA模型进行 规划、执行、评估和反思。
LLM作为一种智能代理,引发了人们对人工智能与人类工作的关系和未来发展的思考。它让我们思考人类如何与智能代理合作,从而实现更高效的工作方式。而这种合作方式也让我们反思人类自身的价值和特长所在。
反思是由代理生成的更高级别、更抽象的思考。因为反思也是一种记忆,所以在检索时,它们会与其他观察结果一起被包含在内。反思是周期性生成的;当代理感知到的最新事件的重要性评分之和超过一定阈值时,就会生成反思。
计划是为了做更长时间的规划。像反思一样,计划也被储存在记忆流中(第三种记忆),并被包含在检索过程中。这使得代理能够在决定如何行动时,同时考虑观察、反思和计划。如果需要,代理可能在中途改变他们的计划(即响应,reacting)。
Agent本身用到两部分能力,一部分是由LLM作为其“智商”或“大脑”的部分,另一部分是基于LLM,其外部需要有一个控制器,由它去完成各种Prompt,如通过检索增强Memory,从环境获得Feedback,怎样做Reflection等。
Agent既需要大脑,也要外部支撑。
现阶段Agent的落地,除了LLM本身足够通用之外,也需要实现一个通用的外部逻辑框架。不只是“智商”问题,还需要如何借助外部工具,从专用抵达通用——而这是更重要的问题。
解决特定场景的特定问题——将LLM作为一个通用大脑,通过Prompt设计为不同的角色,以完成专用的任务,而非普适性的应用。关键问题,即Feedback将成为Agent落地实现的一大制约因素,对于复杂的Tools应用,成功概率会很低。
假设Agent最终将落地于100种不同的环境,在目前连最简单的外部应用都难以实现的前提下,最终能否抽象出一个框架模型来解决所有外部通用性问题?
先将某一场景下的Agent做到极致——足够稳定且鲁棒,再逐步将它变成通用框架,也许这是实现通用Agent的路径之一。
由LLM大脑输出一种可执行的代码,像是一个语义分析器,由它理解每句话的含义,然后将其转换成一种机器指令,再去调用外部的工具来执行或生成答案。尽管现在的 Function Call 形式还有待改进,但是这种调用工具的方式是非常必要的,是解决幻觉问题的最彻底的手段。
在中国的市场环境下,如果做一个与企业深度结合的Agent,最终将成为“外包”,因为它需要私有化部署,集成到企业工作流里。很多公司都会去争抢保险公司、银行、汽车领域的大客户。这将与上一代AI公司的结局非常相似,边际成本很难降低,且没有通用性。出门问问目前的魔音工坊、奇妙文等AIGC产品都属于面向内容创作者的、介于深度和浅度之间的应用,既不完全属于consumer,也不完全属于enterprise,同时还有面向企业用户的CoPilot,其定位也是在企业里找到具体的「场景」,做相对通用的场景应用。
Transformers Agents,并加入到了 Transformers 4.29 之后的版本中。它在 Transformers 的基础上提供了一个自然语言 API,来 “让 Transformers 可以做任何事情”。
这其中有两个概念:一个是 Agent (代理),另一个是 Tools (工具),我们定义了一系列默认的工具,让代理去理解自然语言并使用这些工具。
我们在 transformers 中集成的工具 包括:文档问答、文本问答、图片配文、图片问答、图像分割、语音转文本、文本转语音、零样本文本分类、文本摘要、翻译等。不过你也可以扩展这些一些与 transformers 无关的工具,比如从网络读取文本等,查看如何开发自定义工具
未来是Agent的世界,在今天的Agent进程下,依然重复昨天AI的故事,私有化部署将面临挑战。