初步介绍
Agent=LLM+记忆+规划技能+工具使用
感知:多模态,深度学习
典型示例:斯坦福小镇
agent记忆
一种简单的短期记忆使用方法:
Memory,通俗的讲,就是记录对话的上下文信息,在有需要的时候补充到用户的提问中去。看上图,简单说下Memory的使用流程:
当用户输入一个问题,首先从Memory中读取相关的上文信息(历史对话信息),然后组装成一个Prompt,调用大模型,大模型的回复作为历史对话信息保存在Memory中,供之后的对话使用。
Agent的长期记忆
长期记忆:事实性记忆和程序性记忆
(1)事实性记忆的解决方案:总结、RAG和上下文。
总结:
文本总结:把聊天记录用一小段话总结一下。
指令的方式去访问外部存储:模型把对话中的要点记录到一个叫做bio的本上。
在模型层面用Embedding做总结,比如LongGPT,目前主要是学术界在研究。
RAG:一整套信息检索系统
长上下文:+持久化KV Cache、压缩技术、attention的优化技术。
(2)程序化记忆:prompt、few-shot、微调、Memba和RWKV
(3)一个简单有效的长期记忆解决方案:文本总结+RAG
a.按照一定的窗口分段,然后对每一段聊天记录(+前一段的总结)生成文本总结,放进RAG
b.在分段总结的基础上,再让大模型分别生成分话题的分类总结(放进RAG,这部分搜索排序权重要高于a.)和全局的用户记忆概要(不断更新的全局总结:包括用户基本信息、兴趣爱好和性格特征等)
最终带有长期记忆的大模型的输入:包括角色设定(system prompt)、最近对话、全局记忆概要(即角色对用户的核心记忆 b.2)、经过RAG的聊天记录分段总结(a.)和分类总结(b.1)。
(4)Agent对多人记忆的共享
Agent架构
AI大模型系列之六:基于LLM的Agent架构图解-CSDN博客
在Agent架构设计方面,该论文提出了一个统一的框架,包括Profile模块、Memory模块、Planning模块和Action模块。
Profile模块解析
定义和管理Agent角色的特性和行为。它包含一系列参数和规则,描述了Agent的各种属性,如角色、目标、能力、知识和行为方式等。这些属性决定了Agent如何与环境交互,如何理解和响应任务,以及如何进行决策和规划。
三种Agent角色生成方式,包括LLM生成方法、数据集对齐方法和组合方法。具体如下:
1. LLM生成方法:利用大语言模型自动生成代理的个人特征,比如年龄、性别、个人喜好等背景信息。具体做法是:首先设定代理的组成规则,明确目标人群中代理应具备的属性;然后指定几个手工创建的种子配置文件作为示例;最后利用语言模型生成大量代理配置文件。这种方法可以快速批量生成配置文件,但由于缺乏精确控制,生成的代理可能会缺乏细节。
2. 数据集对齐方法:是从真实世界的人口数据集中获取代理的配置文件信息,比如通过抽取人口调查数据组织成自然语言描述。这样可以使代理行为更真实可信,准确反映真实人口的属性分布。但需要可靠的大规模数据集支持。
3. 组合方法:利用真实数据集生成一部分关键代理,确保反映真实世界规律;然后用LLM生成方法补充大量其他代理,拓展代理数量。这样既保证了代理的真实性,又实现了充足的代理数量,使系统可以模拟更复杂的社会交互。谨慎的配置文件设计是构建有效代理系统的基础。
Memory模块解析
在Agent系统中扮演重要角色,它存储和组织从环境中获取的信息,以指导未来行动。
结构上,内存模块通常包含短期记忆和长期记忆两个部分。短期记忆暂存最近的感知,长期记忆存储重要信息供随时检索。
格式上,内存信息可以用自然语言表达,也可以编码为向量嵌入提高检索效率。还可以利用数据库存储,或组织为结构化列表表示内存语义。
操作上,主要通过记忆读取、写入和反射三种机制与环境交互。读取提取相关信息指导行动,写入存储重要信息,反射总结见解提升抽象水平。
Planning模块解析
主要任务:帮助Agent将复杂的任务分解为更易处理的子任务,并制定出有效的策略。它大致分为两种类型,一种是不依赖反馈的计划,另一种则是基于反馈的计划。
不依赖反馈的计划在制定过程中并不参考任务执行后的反馈,它有几种常用的策略。比如单路径推理,它按照级联的方式,一步一步地生成计划。另外,还有多路径推理,它会生成多个备选的计划路径,形成树状或图状的结构。当然,我们也可以利用外部的规划器进行快速搜索,以找出最优的计划。(思维树)
基于反馈的计划,它会根据任务执行后的反馈来调整计划,这种方式更适合需要进行长期规划的情况。反馈的来源可能来自任务执行结果的客观反馈,也可能是根据人的主观判断给出的反馈,甚至还可以是由辅助模型提供的反馈。
Action模块解析
职责:将抽象的决策转化为具体的行动,它就像是一个桥梁,连接了Agent的内部世界与外部环境。在执行任务时,需要考虑行动的目标、生成方式、应用范围以及可能产生的影响。
理想的行动应当是有目的的,例如完成特定任务、与其他代理进行交流或者探索环境。行动的产生可以依赖于查询过去的记忆经验,或者遵循预设的计划。而行动的范围,不仅可以通过利用如API和知识库等外部工具来扩展,还需要发挥大型语言模型(LLM)的内在能力,例如规划、对话及理解常识等。
架构:就像PC的硬件,但仅依赖架构设计是不够的,我们还需要赋予Agent完成不同任务的能力,这些被视为“软件”资源。论文中提出了几种方法,包括模型微调、提示工程和机械工程。其中提示工程应该是最为常见的一种形式了,我们常听说的提示词工程师就是在这个语境下的角色。
模型微调。使用特定任务数据对模型进行微调,提升相关能力。数据可以来自人类注释、LLM生成或实际应用中收集。这可以使Agent行为更符合人类价值观。
提示工程。通过自然语言描述向LLM灌输所需的能力,然后将描述作为提示指导Agent操作。这可以让Agent快速获得指定的软件能力。主要涵盖:
1)试错法:Agent先执行操作,根据效果调整行动。逐步优化。
2)众包法:整合多个Agent的见解,形成更新的集体响应。
3)经验积累法:Agent通过不断探索积累经验,逐步提升软件能力。
4)自我驱动法:Agent自主设置目标并在环境中不断探索,最终获得软件能力。
基于LLM的Agent的设计和构建策略是一个复杂且有挑战性的任务。