以AutoGPT为例浅谈智能体Agent

本文探讨了智能体Agent在人工智能中的作用,重点介绍了如何通过大语言模型(LLM)实现规划、记忆和工具使用。以AutoGPT为例,讲解了项目原理、核心组件以及如何通过提示生成、记忆管理和评估子任务来构建一个自主的AI系统。
摘要由CSDN通过智能技术生成

什么是智能体Agent? LLM给出的答案如下:智能体,也被称为Agent,是人工智能领域中的一个重要概念。这是一个能够自主理解、规划决策和执行复杂任务的实体。智能体可以感知环境,进行决策,并执行动作。在具体实现上,智能体常常利用大语言模型作为核心控制器,通过记忆检索、决策推理和行动顺序选择等方式,将智能体的智能程度提升到了新的高度。
那么如何构建智能体?我们从LLM的答案中也可以窥见一二,就是通过LLM为核心控制器,添加规划能力、记忆能力以及调用工具能力,就可以实现。

关于大模型本身这里就不做过多赘述,下面先简单介绍一下三个Agent相关的基础概念:
▶ 如何实现规划Planning?
▶ 如何实现记忆Memory?
▶ 如何实现调用工具Tool Use?

1.规划Planning

一项复杂的任务通常包括多个子步骤,智能体需要提前将任务分解,并进行规划。其中最重要的两个机制是任务分解自我反思 Self Reflection
任务分解是通过思维链(Chain of Thought, CoT)技术实现,增了解决复杂任务时的模型性能。通过“Think step by step”,模型可以利用更多测试时计算(test-time computation)将任务分解为更小、更简单的子步骤,并能够解释模型的思维过程。类似的还有思维树( Tree of Thoughts)等。
另一种非常独特的任务分解的方法是 LLM+P ,它利用外部经典规划师(External classical planner)进行长期规划。该方法利用规划域定义语言 (Planning Domain Definition Language,PDDL) 作为中间接口来描述规划问题。在这个过程中,LLM 需要完成以下几个步骤:

  1. 将问题转化为“问题 PDDL”;
  2. 请求经典规划师基于现有的“域 PDDL”生成 PDDL 计划;
  3. 将 PDDL 计划翻译回自然语言。
    上述由外部工具来完成规划步骤被这件事在某些机器人环境中很常见,但在其他领域并不常见。

自我反思可以让自主智能体改进过去的行动决策、纠正之前的错误来迭代改进,在可以试错的现实任务中非常有用。ReAct 是 Auto-GPT 实现的基础组件之一,由 Google Research Brain Team 在 ReAct:Synergizing Reasoning And Actiong In Language Models 论文中提出。
简单来说,ReAct 方法即推理+动作得到结果。灵感来自于作者对人类行为的一个洞察:在人类从事一项需要多个步骤的任务时,每一步之间往往会有一个推理过程。作者提出让 LLM 把内心独白“说”出来,然后再根据独白做相应的动作,模仿人类的推理过程,以提高 LLM 答案的准确性。ReAct通过将动作空间扩展为任务相关的离散动作和语言空间的组合,在LLM中集成了推理和动作,其中动作使得LLM能够与环境交互(例如使用维基百科搜索API),而语言空间可以让LLM以自然语言的方式生成推理轨迹。
ReAct提示模板包含了LLM思考的明确步骤,大致格式为:

Thought: ...
Action: ...
Observation: ...
... (Repeated many times)

2.记忆Memory

记忆大致分为以下三类:

  • 作为原始输入(包括文本、图像或其他形式)的学习嵌入表征的感官记忆;
  • 短期记忆就是上下文学习(in-context learning),非常短且影响范围有限,受到Transformer的上下文窗口长度的限制。
  • 长期记忆作为智能体在查询时可用的外部向量存储,可通过快速检索访问。长期记忆可以缓解有限注意力span的限制,常用的操作是将信息嵌入表征保存到支持快速最大内积搜索(MIPS)的向量存储数据库中。

3.调用工具Tool Use

MRKL(模块化推理、知识和语言),是一种用于自主代理 的神经符号架构。MRKL 架构的设计中包含了“专家(expert)”模块的集合,LLM 将扮演路由器(router)的角色,通过查询路由找到最合适的专家模块。通过 MRKL 系统,不同类型的模块能够被整合在一起,实现更高效、灵活和可扩展的 AI 系统。
TALM(工具增强语言模型)和Toolformer都是微调语言模型以学习使用外部工具API。ChatGPT插件和OpenAI API函数调用也是增强语言模型使用工具能力的例子,其中工具API的集合可以由其他开发人员提供(如插件)或自定义(如函数调用)。

目前有几个实验项目例如AutoGPT、GPT-Engineer 和 BabyAGI,都充分利用了LLM作为智能体思维的大脑,辅以其他关键组件,构成一个功能全面的自治系统。

本文将以AutoGPT项目为例,从以下几个方面了解一下Agent的内容和构建原理:
▶ AutoGPT 项目简介
▶ AutoGPT 核心原理
▶ AutoGPT 如何生成提示词
▶ AutoGPT 如何存储记忆
▶ AutoGPT 如何评估子任务达标

1.AutoGPT 项目简介

AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试将其分解成子任务,并在自动循环中使用搜索引擎和其他工具来实现这一目标,它由GPT-4驱动,自主地开发和管理业务。官网对GPT的优势描述如下:
🌐 用于搜索和信息收集的互联网接入 / Internet access for searches and information gathering
💾 长期和短期内存管理 / Long-term and short-term memory management
🧠 用于文本生成的 / GPT-4实例GPT-4 instances for text generation
🔗 访问热门网站和平台 / Access to popular websites and platforms
🗃️ 使用GPT-3.5进行文件存储和摘要 / File storage and summarization with GPT-3.5
🔌 插件扩展性 / Extensibility with Plugins
–【来源:https://autogpt.cn/】
这里列举一个AutoGPT和ChatGPT的区别:ChatGPT主要根据人类指令和多轮对话,一步一步完成一个复杂的任务。AutoGPT则只需要一个指令,就会想方设法一步一步的完成这个任务,它可以通过LLM自主产生Prompt,并且通过网络搜索引擎和Python脚本等工具来实现最终目标。

2.AutoGPT核心原理:

AutoGPT背后接入的语言模型,可以是GPT-4、也可以是GPT-3.5的text-davinci-003。LLM模型本身是无法完成浏览网页、执行代码、发布信息的操作的,于是AutoGPT将这些操作变成命令,让GPT-4模型选择,然后根据返回的结果进行操作。这里可以理解为AutoGPT设计了一个十分精巧的prompt,然后把我们要执行的命令,基于prompt模板封装后发给GPT-4,然后根据结果来执行。

根据GitHub的项目源代码,目前,该prompt已经公开,结果如下:

1. Google Search: "google", args: "input": "<search>"
2. Browse Website: "browse_website", args: "url": "<url>", "question": "<what_you_want_to_find_on_website>"6. Start GPT Agent: "start_agent",  args: "name": "<name>", "task": "<short_task_desc>", "prompt": "<prompt>"
3. Message GPT Agent: "message_agent", args: "key": "<key>", "message": "<message>"
4. List GPT Agents: "list_agents", args: ""9. Delete GPT Agent: "delete_agent", args: "key": "<key>"
5. Write to file: "write_to_file", args: "file": "<file>", "text": "<text>"11. Read file: "read_file", args: "file": "<file>"
6. Append to file: "append_to_file", args: "file": "<file>", "text": "<text>"13. Delete file: "delete_file", args: "file": "<file>"
7. Search Files: "search_files", args: "directory": "<directory>"15. Evaluate Code: "evaluate_code", args: "code": "<full_code_string>"
16. Get Improved Code: "improve_code", args: "suggestions": "<list_of_suggestions>", "code": "<full_code_string>"
17. Write Tests: "write_tests", args: "code": "<full_code_string>", "focus": "<list_of_focus_areas>"
18. Execute Python File: "execute_python_file", args: "file": "<file>"
19. Execute Shell Command, non-interactive commands only: "execute_shell", args: "command_line": "<command_line>".
20. Task Complete (Shutdown): "task_complete", args: "reason": "<reason>"
21. Generate Image: "generate_image", args: "prompt": "<prompt>"
22. Do Nothing: "do_nothing", args: ""

例如AutoGPT会把问题,如“今年发生了哪些轰动的事件”发给GPT-4,并要求GPT-4根据上述COMMAND选择最合适的方式去得到答案,并给出每一个COMMAND背后需要使用的参数,包括URL、执行的代码等。
然后AutoGPT根据返回的结果来使用合适的命令执行GPT-4的建议。

当然,除了这个Prompt外,AutoGPT还使用了一些技巧确保任务更加有效地被完成。这里列举几个技术:

使用列表保存历史发送的信息,并在每一次请求token允许的条件下发送最多的历史消息给GPT-4。从代码中分析可以看到,为了让GPT-4更好地完成任务,AutoGPT每一次都会尽量使用完成可以使用的输入tokens数量,把当前命令输入进去之后,只要还可以继续添加历史信息,它就会把之前存的命令取出来放进去。因此,虽然AutoGPT效果很好,但是这样的处理导致非常消耗API的额度。
每一次发送请求的时候,它都会让GPT知道现在的一些时间等情景信息,方便处理与时间有关的内容
。前面说了,AutoGPT会把最近一段历史消息也发给GPT-4来提升目标完成概率,同时也会把目标中最相关的信息也发过去。因此,AutoGPT保存了所有的历史信息。

下图是大致的流程示意。
图片来源于网络

3.AutoGPT 如何生成提示词

在对话刚开始的时候,AutoGPT 使用“系统”角色来配置约束,并进行自我绩效评估。AutoGPT 有一个提示生成器,其中一些约束是硬编码的:
在这里插入图片描述

在这些提示的引导下,GPT 的自主性和自力更生能力都得到了提高,还能看到很多通过持续反馈循环来帮助 GPT 自我改进输出的案例。
在这里插入图片描述
总结下来就是:

  • Auto GPT 根据设定的目标和任务以及存储在数据库中的数据,为 GPT-4 生成合适的提示。
  • Auto GPT 利用 GPT4 的学习功能,根据自身表现和结果学习并改进学习和执行方法。

4.AutoGPT如何存储记忆

AutoGPT可以通过与向量数据库集成,来保留上下文并做出更加明智的决策,就像是给机器人配备长时记忆,记住过去的经历,而实际上AutoGPT通过写入和读取数据库、文件,来管理短期和长期内存。
AutoGPT 使用了 OpenAI 的embedding API ,根据 GPT 文本输出创建embedding,因此可以使用的向量存储服务有很多。AutoGPT 使用的是:本地存储、Pinecone(第三方服务)、Redis 和 Milvus(开源服务)。Pinecone 和 Milvus 优化了向量搜索算法,可以根据相关上下文搜索文本嵌入。AutoGPT 将嵌入存储到这些向量存储服务之一,然后通过搜索当前任务会话的相关向量将上下文注入到 GPT。

5.AutoGPT如何评估子任务达标

AutoGPT 根据生成的提示和结果以及人类反馈评估和改进自己的表现。比如:用户让AutoGPT写一个营销文案,根据结果给出反馈:“文案写得很好,但有些地方不够吸引人,没有触达用户的决策点,希望你可以再详细一些。”
AutoGPT 根据这个反馈修改和完善文案。同时,AutoGPT 生成新的提示:“营销文案需要有哪些特点?”并让 GPT4 回答。根据 GPT4 的回答(如简洁明了、强调价值、突出特色、唤起情感共鸣等),AutoGPT 判断是否完成子任务并达到目标。
如果回答不够完整或准确,它会生成新提示并让 GPT4 继续回答。满意回答后,AutoGPT 将结果存入数据库并继续执行下一个子任务。这使得 Auto GPT 在执行更复杂和多步骤任务时具有更高的自主性和灵活性。

总结:

AutoGPT在网络上有很多收获了极高关注量的例子,案例的内容包括有商业调查、无代码生成APP或网页、自动化办公和文本生成等等。在加入了Stable Diffusion后甚至可以拥有图片的生成能力。
总而言之,如果说以LLM构建的Copilot应用可以是辅助驾驶,那么通过智能体Agent构建的AutoGPT应用则是主动驾驶。但其核心LLM的通用能力,还是关键中的关键,只有足够强大的能力才可以使得Agent按照预期,轻松处理多个来自完全截然不同的领域的任务,从而实现针对人类的“意图识别”、针对可选工具的“组织规划”,并且引入“感知器”向大模型报告“执行结果”,当出现错误时指导大模型完成“自主纠错”,完整实现智能应用流程。

文章参考:
《自主 AI 来了?一文详解火爆全网的 AutoGPT》
《下一代语言模型范式LAM崛起!AutoGPT模式席卷LLM,三大组件全面综述:规划、记忆和工具》
《【AI Agent洞察】03-AutoGPT:以ChatGPT为核心的自治AI智能体》
《AutoGPT文档》https://docs.agpt.co/

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值