agent报告
以下是自己以前总结的一个关于agent的简单报告,很遗憾没有太多时间去整理提纯了,但还是希望可以帮助到大家。
随着人工智能技术的飞速发展,大型语言模型(LLMs)已成为研究和工业界关注的焦点。LLMs通过吸收海量网络知识,展现出接近人类水平的智能潜力,从而推动了基于LLM的自主代理(autonomous agents)的研究热潮。本文旨在为程序员和技术决策者提供一个关于LLM基础自主代理的全面了解,包括其构建、应用和评估策略,并通过具体实例展示其在现实世界中的潜在商业价值。
1 agent(代理)是什么?
自主代理是指能够在环境中感知并根据自身议程行动的系统。随着LLMs的兴起,研究者们开始探索如何利用这些模型构建能够模拟人类决策过程的代理。与传统的、在受限环境中训练的代理不同,LLM基础的代理能够利用更广泛的知识和更复杂的策略来完成各种任务。
具体来说,一般的agent模块如下所示
这里以我们经常使用的Chat模型作为对比,
Chat(聊天):纯粹的Chat,像是一个主要由“大脑和嘴”构成的智能体,专注于信息处理和语言交流。比如ChatGPT这样的系统,它能够理解用户的查询,给出有用和连贯的回答,但它本身不直接执行任务。
Agent(代理):像一个具有“手、脚”的智能体,它能够进行思考、决策,并且能执行具体的任务。我们可以简单粗暴的理解为,Chat强调的是“说”,Agent强调的是“做”。
实际例子
下面举几个实际的例子,都是开源项目,可以直接拿来用
①AutoGPT:可以根据你设置的目标,将实现这个目标的任务进行拆解,再采用搜索、浏览网站、执行脚本等方式一条条去执行任务,帮你完成目标
②MetaGPT
③Open interpreter
以metagpt举个实际的例子
先介绍一下什么是SOP,就是一套程序员们开发程序流程的规范,是一种标准
metagpt就把SOP融入了其框架中,通过以下步骤,创建出多个agent,让多个agent协同工作,互相交流,类似机器学习中的集成学习,三个臭皮匠,顶上一个诸葛亮。
①定义专业化的角色:MetaGPT定义了软件公司中的五个角色(agent),包括产品经理、架构师、项目经理、工程师和QA工程师,并为每个角色初始化特定的上下文和技能。
②工作流管理:MetaGPT遵循SOPs来组织软件开发的基本工作流,确保所有智能体能够按顺序工作。
③结构化通信接口:MetaGPT使用结构化的通信接口来替代自然语言的通信,确保智能体之间的信息传递更加准确和高效。
④发布-订阅机制:MetaGPT引入了一个共享消息池,允许所有智能体直接交换消息,并通过订阅机制有效地管理信息。
⑤可执行反馈:MetaGPT在代码生成后引入了一个可执行反馈机制,通过编写和执行相应的单元测试用例,并根据测试结果进行代码迭代,直到测试通过或达到最大重试次数
一般来说,像metagpt这样的agent框架还有很多,前面举例说过。agent框架是以LLM为大脑的,使用的是大模型通过预训练已经嵌入在大模型内部的知识,其实也就是神经网络的参数。gpt4有了metagpt框架的各种加成,在一些数据集上可以做的更好,比如humaneval数据集,先说说这个数据集的格式
humaneval的评估逻辑:
每一个测试问题即prompt投给大模型,重复n次,每次的答案都要去经过单元测试,最后计算n次的平均通过率。我们可以在源码地址:https://github.com/abacaj/code-eval/tree/main/human-eval中看到起执行逻辑
评测结果:
上面只是为了证明metagpt这种agent框架对单纯使用gpt4是有加成的。到现在其实我没还没举一个实际的开发例子,我们以论文中提到的为例
用户只需要输入:编写一个 python3 GUI 应用程序,以便可以用它绘制图像
便能得到一个完整的已经开发好的项目
按照agent流程来
①首先是产品经理agent: 产品经理生成产品需求文档 (PRD),详细信息请参阅指定文档。本文档包含目标、用户故事、竞争分析、需求分析和需求池。此外,还生成了竞争性象限图。随后,这些文档和图表交给架构师agent进行系统设计
②架构师agent
根据PRD的要求,架构师agent制定技术规范,包括系统架构图和接口定义。最初,架构师定义了总体技术轨迹。随后,设计了项目的架构,包括文件、类和序列流程图。然后,架构师的文档将交给项目经理agent进行任务分配和执行。
③项目经理agent
将项目分解为任务列表。此外,每个代码文件都会根据其预期功能进行分析,然后将其视为分配给工程师的单独任务。
④工程师
鉴于所提供的文件结构和功能定义,工程师代理只需要基本的开发技能即可完成开发任务。由于文件较多,我们这里只展示一个自动生成的代码文件
⑤测试人员QA
收到工程师的代码输出后,QA 工程师生成单元测试代码并对其进行审查以识别和修复任何错误,确保高质量的软件
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
最后的结果
2 LLM自主agent如何构建?
构建LLM基础自主代理涉及设计合适的架构以最大化LLMs的能力。这包括以下几个关键模块:
2.1 配置文件模块(Profiling Module)
配置文件模块用于定义代理的角色和属性,如年龄、性别、职业等。这些信息通常以提示(prompts)的形式写入,以影响LLM的行为。
实际应用:在软件开发中,可以创建具有不同专长(如前端开发、后端开发)的代理,以模拟团队协作和项目分工。
如何构建每个agent的档案呢?主要有三种方法
- 手工制作方法:例如,如果想设计不同性格的代理人,他可以用“你是一个外向的人”或“你是一个内向的人”来描述代理人
- LLM生成:首先指出配置文件生成规则,阐明目标人群中代理配置文件的组成和属性。然后,可以选择指定多个种子代理配置文件作为少数样本示例。最后,利用LLM来生成所有代理配置文件
- 从真实世界的数据集中获得:人们将数据集中有关真实人类的信息组织成自然语言提示,然后利用它给代理做profile。例如,在一篇论文中,作者根据美国国家选举来研究参与者的人口背景(例如种族/民族、性别、年龄和居住地)为 GPT-3 分配角色。他们随后研究了 GPT-3 是否可以产生与真实人类相似的结果
2.2 记忆模块(Memory Module)
记忆模块使代理能够存储和回忆过去的经验,从而在面对新任务时做出更合理的决策。
实际应用:在客户支持系统中,代理可以通过记忆模块回顾用户的历史交互,提供更个性化的服务。
这里是很重要,也是很复杂的地方,主要分5大块,每块里又分为其他小的块
-
记忆的结构
基于LLM的自主agent通常结合源自人类记忆过程的机制。人类记忆遵循从记录感知输入的感觉记忆到短暂保存信息的短期记忆,再到长期巩固信息的长期记忆的一般进展。所以在设计agent的记忆结构时,研究人员从人类记忆的这些方面获得灵感。短期记忆类似于受 Transformer 架构约束的上下文窗口内的输入信息。长期记忆类似于外部向量存储(RAG?),代理可以根据需要快速查询和检索。这里讲两种内存结构:
统一的内存。这种结构仅模拟了人类的短期记忆:这种结构仅模拟了人类的短期记忆,通常通过上下文学习来实现,并将记忆信息直接写入提示中。例如,RLP [30] 是一个会话代理,它维护说话者和听者的内部状态。在每一轮对话中,这些状态都充当 LLM 提示,充当代理的短期记忆
混合内存,这种结构明确地模拟了人类的短期和长期记忆:短期记忆暂时缓存最近的感知,而长期记忆则随着时间的推移巩固重要信息。例如,一篇论文[20]采用混合内存结构来促进代理行为。短期记忆包含有关智能体当前情况的上下文信息,而长期记忆则存储智能体过去的行为和想法
-
记忆的格式
自然语言:诸如代理行为和观察之类的记忆信息是使用原始自然语言直接描述的。这种格式具有多种优势。首先,记忆信息能够以灵活易懂的方式表达。此外,它保留了丰富的语义信息,可以提供全面的信号来指导代理行为
嵌入向量:在这种格式中,记忆信息被编码为嵌入向量,可以提高记忆检索和读取效率。例如,MemoryBank [39] 将每个记忆片段编码为嵌入向量,从而创建用于检索的索引语料库
基于数据库:在这种格式中,记忆信息存储在数据库中,允许智能体高效、全面地操作记忆。例如,ChatDB [40] 使用数据库作为符号内存模块。 Agent可以利用SQL语句精确地添加、删除和修改内存信息
结构化列表:类似于数据结构这门课中typedef自定义的新的数据类型。在这种格式中,记忆信息被组织成列表,并且可以以高效、简洁的方式传达记忆的语义。例如,GITM [16] 在分层树结构中存储子目标的操作列表。层次结构明确地捕捉了目标和相应计划之间的关系。 RETLLM [42]首先将自然语言句子转换为三联短语,然后将它们存储在记忆中 -
记忆的读取
用公式选出最有价值的记忆,即新近度、相关性和重要性,不同论文采用不同的评分函数,外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
其中α、β和γ是平衡参数。通过给它们赋予不同的值,可以获得多种内存读取策略。例如,通过设置α = γ = 0,许多研究只考虑记忆阅读的相关性得分srel。通过指定 α = β = γ = 1.0,有的论文对上述所有三个指标进行同等加权,以从记忆中提取信息。
-
记忆的写入
如何解决记忆重复:为了整合类似的信息,人们开发了各种方法来整合新的和以前的记录。例如,在有的论文中,与同一子任务(这里的子任务是总任务被分解成的子任务)相关的成功动作序列存储在列表中。一旦列表的大小达到 N(=5),其中的所有序列都会使用 LLM, 压缩为统一的计划解决方案
如何解决记忆溢出:为了在记忆满时将信息写入内存,人们设计了不同的方法来删除现有信息以继续记忆过程。例如,在ChatDB [40]中,可以根据用户命令显式删除内存。 RET-LLM [42]使用固定大小的内存缓冲区,以先进先出(FIFO)的方式覆盖最旧的条目 -
记忆的反射
含义:将其存储在内存中的过去经验总结为更广泛和更抽象的见解。首先,智能体根据其最近的记忆生成三个关键问题。然后,用这些问题来查询记忆以获得相关信息。根据所获取的信息,代理会生成更高级的见解例如,低级的记忆:①“Klaus Mueller 正在写一篇研究论文”、②“Klaus Mueller 正在与图书馆员合作进一步研究”、③“Klaus Mueller 正在与 Ayesha Khan 讨论他的研究”,可以诱发高层次记忆“Klaus Mueller 致力于他的研究”。(句子的浓缩还是句子的升华?还是都有?)
2.3 规划模块(Planning Module)
规划模块赋予代理制定和执行计划的能力,使其能够在复杂任务中表现出高级推理和策略制定能力。
实际应用:在物流管理中,代理可以规划最佳的配送路线和库存管理策略,提高效率和降低成本。或者机械臂抓取任务中,代理可以规划最佳的抓取路线,不碰撞到障碍物。
规划模块根据有无反馈分两类,无反馈效果一般不如有反馈
- 无反馈的规划模块,在这种方法中,智能体在采取行动后不会收到可能影响其未来行为的反馈
单路径推理:在此策略中,最终任务被分解为几个中间步骤。这些步骤以级联方式连接,每个步骤仅导致一个后续步骤
多路径推理:在该策略中,生成最终计划的推理步骤被组织成树状结构。每个中间步骤可以有多个后续步骤。这种方法类似于人类思维,因为个人在每个推理步骤可能有多种选择。比如一篇论文这样做:首先使用 CoT 思维链生成各种推理路径和相应的答案。随后,选择频率最高的答案作为最终输出。在这种方法中,树中的每个节点代表一个“想法”。
外部规划模块:LLM在特定领域可能不行,所以研究人员求助于外部规划模块。这些工具经过精心开发,采用高效的搜索算法来快速识别正确甚至最佳的计划。具体来说,LLM+P[57]首先将任务描述转换为正式的规划领域定义语言(PDDL),然后使用外部规划模块来处理PDDL。最后,LLM将生成的结果转换回自然语言 - 带反馈的规划模块
环境反馈:从客观世界或虚拟环境获得的,包含环境状态以及每个执行操作的成功和失败信息
人类反馈:除了从环境中获取反馈外,与人类直接交互也是提升智能体规划能力的一种非常直观的策略。人的反馈是一种主观信号。它可以有效地使智能体与人类的价值观和偏好保持一致,同时也有助于缓解幻觉问题
模型反馈:首先,智能体产生一个输出。然后,它利用LLMs对输出提供反馈,并对如何改进输出提供指导。最后,通过反馈和精化提高输出。这个过程不断迭代,直到达到一些期望的条件。比如metagpt中QA测试人员就担任了反馈的作用。
2.4 行动模块(Action Module)
行动模块负责将代理的决策转化为具体行动,与外部环境进行交互。
实际应用:在智能家居系统中,代理可以根据用户的指令和环境反馈控制家电设备,如调节温度、照明等。
行动模块这里我们只讲agent可以动作的空间,即他可以做什么,怎么去做。主要就是依赖外部工具和LLM内部知识。这里我们讲外部工具,对于内部知识,我们在下面的agent能力获取时会提到
- 外部工具
API:利用外部 API 来补充和扩展操作空间是近年来的流行范例。例如,HuggingGPT [13] 利用 HuggingFace(开源模型网站,类似github) 上的模型来完成复杂的用户任务。有的论文建议在响应用户请求时自动生成查询以从外部网页中提取相关内容(比如谷歌浏览器插件maxai)。 TPTU [67] 与 Python 解释器和 LaTeX 编译器连接以执行复杂的计算,例如平方根、阶乘和矩阵运算。
数据库和知识库:集成外部数据库或知识库使代理能够获取特定领域的信息以生成更好的动作。例如,ChatDB [40] 使用 SQL 语句来查询数据库,以逻辑方式促进代理的操作。 MRKL [72] 和 OpenAGI [73] 结合了各种专家系统,例如知识库和规划器来访问特定领域的信息。我的感觉是类似RAG
**外部模型:**其实就是调用外部已经做好的模型。与 API 相比,外部现有的模型通常处理更复杂的任务。每个外部模型可能对应多个API。例如,为了增强文本检索能力,MemoryBank[39]结合了两种语言模型:一种用于对输入文本进行编码,另一种负责匹配查询语句。 ViperGPT[74]首先使用基于语言模型实现的Codex从文本描述生成Python代码,然后执行代码完成给定的任务。 TPTU [67] 结合了各种 LLM 来完成广泛的语言生成任务,例如生成代码、生成歌词等。 - 内部知识:仅依靠LLM的内部知识来指导行动
2.5 agent能力的获取
agent能力的获取,主要是依靠LLM这个大脑,如何才能获取更多能力
- 通过微调获取能力,微调本质就是修改大模型内部某些层的参数,让内部原有的知识进行更新。有三种方式
使用人类注释数据集进行微调:在这种方法中,研究人员首先设计注释任务,然后招募工作人员来完成它们
**使用LLM 生成的数据集进行微调:**构建人工注释数据集需要招募人员,这可能成本高昂,尤其是当需要注释大量样本时。考虑到LLM可以在广泛的任务中实现类似人类的能力,一个自然的想法是使用LLM来完成注释任务。虽然用这种方法生成的数据集可能不如人工注释的数据集那么完美,但它便宜得多,并且可以用来生成更多样本
使用真实数据集进行微调:直接使用现实世界的数据集来微调代理也是一种常见的策略。例如,在 MIND2WEB [89] 中,作者收集了大量的真实数据集来增强 Web 领域的代理能力。与之前的研究相比,本文提出的数据集包含不同的任务、真实场景和全面的用户交互模式。具体来说,作者从跨越 31 个领域的 137 个真实网站收集了 2,000 多个开放式任务。使用该数据集,作者对法学硕士进行了微调,以提高其在网络相关任务上的表现,包括电影发现和门票预订等 - 无需微调的能力获取,在这里,我们不需要去改变模型的内部参数,直接拿来用就行。
提示工程:又是一个大的领域,如何设计提示词,才能更好的激发LLM的能力也是一门学问。有时,直接让GPT单轮输出答案,不如一步步分解任务得到的答案好。我的感觉类似于神经网络调参,但比调参稍微有逻辑一些。
机械工程(智能体进化机制),metagpt就属于该类,该框架直接使用了gpt4,但是通过自己设计的各模块,使得gpt4在一些数据集上表现更好。这里分为四种方式:
试错。在该方法中,代理首先执行一个动作,然后调用预定义的批评者模块来判断该动作。如果行动被认为不满意,那么代理会通过纳入批评者模块的反馈来做出反应,一些开源代码如下:
DEPS [33]:https://github.com/craftjarvis/mc-planner
RoCo [93]:https://github.com/MandiZhao/robot-collab
PREFER [94]:https://github.com/zcrwind/prefer
众包。设计一种辩论机制,利用群体的智慧来增强代理能力。首先,不同的代理对给定的问题提供不同的回答。如果他们的回答不一致,系统将提示他们合并其他代理的解决方案并提供更新的响应。这个迭代过程持续进行,直到达成最终的共识答案。在这种方法中,每个智能体的能力通过理解和吸收其他智能体的意见来增强,一些开源代码如下:
https://github.com/composable-models/llm_multiagent_debate/issues
经验积累。在 GITM [16] 中,智能体一开始并不知道如何解决任务。然后,它进行探索,一旦成功完成任务,该任务中使用的操作就会存储到代理内存中。将来,如果智能体遇到类似的任务,那么就会提取相关的记忆来完成当前的任务。在这个过程中,Agent能力的提高来自于专门设计的内存积累和利用机制,一些开源代码如下:
GITM [16]https://github.com/opengvlab/gitm
Voyager [38] https://github.com/MineDojo/Voyager
AppAgent [96]https://appagent-official.github.io/
MemPrompt [97] https://github.com/madaan/memprompt
自我驱动进化。在LMA3[98]中,智能体可以自主地为自己设定目标,并通过探索环境和接收奖励函数的反馈来逐步提高其能力。遵循这种机制,智能体可以根据自己的喜好获取知识并发展能力,一些开源代码如下:
LMA3[98]
SALLM-MS [99]
CLMTWA[100]:https://github.com/swarnahub/explanationintervention
NLSOM [101]:https://github.com/mczhuge/NLSOM
3 LLM基础自主代理的应用
LLM基础自主代理结合了大型语言模型的强大语言理解和生成能力与自主决策的特性,这使得它们在多个领域都有广泛的应用潜力。以下是一些具体的应用实例:
3.1 社会科学领域
- 心理学研究:LLM代理能够模拟人类的心理状态和行为模式,帮助心理学家研究人类认知和情感反应。例如,通过与LLM代理的互动,研究人员可以观察到在特定情境下代理的反应,从而推断出人类可能的行为。
- 社会科学模拟:在社会科学研究中,LLM代理可以用来模拟社会互动和群体行为,研究社会规范、政策变化等对人群的影响。通过这种方式,研究者可以在虚拟环境中进行大规模的社会实验,而无需在现实世界中进行成本高昂的实地研究。
3.2 自然科学领域
- 教育辅助:LLM代理可以作为教育工具,提供个性化的学习体验。在自然科学教育中,代理可以根据学生的学习进度和理解能力,提供定制化的教学内容和实验指导,从而提高学生的学习效率。例如学而思的mathgpt
- 实验设计与执行:在化学或物理实验中,LLM代理可以帮助设计实验方案,预测实验结果,并在实验执行过程中提供指导和反馈。这不仅可以提高实验的准确性,还可以确保实验过程的安全性。例如生物合成领域的一些大模型。
3.3 工程领域
- 工程设计:在土木工程中,LLM代理可以参与到建筑结构的设计和优化过程中。代理可以分析建筑设计图纸,提出改进建议,并模拟不同设计方案的实施效果,从而帮助工程师做出更合理的决策。
- 工业自动化:在工业生产中,LLM代理可以用于优化生产流程和提高生产效率。代理可以分析生产数据,预测设备故障,并自动调整生产参数,以确保生产线的平稳运行。
3.4 商业与金融领域
- 客户服务:在商业领域,LLM代理可以作为客户服务代表,通过自然语言处理和情感分析技术,理解客户的需求和问题,并提供快速、准确的解答。
- 金融分析:在金融行业,LLM代理可以分析市场数据,预测股票走势,并为投资者提供基于数据的决策建议。这有助于金融机构提高投资决策的质量和效率。
3.5 健康医疗领域
- 医疗咨询:LLM代理可以提供初步的医疗咨询和健康建议。通过分析病人的症状描述,代理可以推荐可能的疾病和治疗方案,并引导病人进行进一步的医疗检查。
- 临床研究:在药物研发和临床试验中,LLM代理可以帮助研究人员分析临床数据,识别药物副作用,并预测药物的疗效。这有助于加速新药的研发进程,并提高药物的安全性和有效性。
- 法律咨询:旨在提供法律信息查询、法律问题解答和初步法律建议。这种模型通过学习和理解大量的法律文本、案例、法规和司法解释,能够模拟法律专业人士的某些功能,为用户提供便捷的法律服务。以下是法律咨询大模型的几个关键应用点:
-
法律信息检索
法律咨询大模型能够快速从海量的法律文档中检索相关信息。用户可以通过简单的查询,获得特定的法律条文、案例判决或法律解释。例如,用户询问关于合同违约的法律规定,大模型可以迅速提供相关法律条文和类似案例的判决结果。 -
法律问题解答
除了信息检索,法律咨询大模型还能够对用户的法律问题提供直接的答案。模型通过理解问题的上下文和法律背景,生成针对性的解答。例如,用户咨询在特定情况下是否构成侵权行为,模型可以根据描述的情况提供初步的法律意见。 -
风险评估与建议
利用先进的自然语言处理技术,法律咨询大模型可以对用户面临的法律风险进行评估,并提供相应的建议。例如,在企业合规审查中,模型可以帮助识别潜在的法律风险点,并建议采取相应的预防措施。 -
法律文档辅助起草
法律咨询大模型可以协助用户起草合同、协议和其他法律文档。用户只需提供基本的条款和条件,模型就能生成符合法律要求的文档草稿,从而提高文档起草的效率和准确性。 -
法律教育与普及
法律咨询大模型还可以作为法律教育的工具,帮助公众了解基本的法律知识和法律程序。通过模型的互动式问答,用户可以学习到法律常识,提高自身的法律意识和素养。
-
通过上述实例,我们可以看到LLM基础自主代理在不同领域的应用前景非常广阔。随着技术的不断进步和优化,这些代理将在未来的商业项目中发挥越来越重要的作用,为企业和社会创造更多的价值。
4 LLM基础自主代理的评估
评估LLM基础自主代理的有效性是确保其可靠性和实用性的关键。评估策略包括主观评估(如人类评估)和客观评估(如任务成功率、效率指标)。
略
5 结论
LLM基础自主代理作为一种新兴的AI技术,为程序员和技术决策者提供了新的工具和方法。通过理解其构建、应用和评估策略,我们可以更好地利用这些代理来解决实际问题,推动技术创新和商业发展。随着LLM技术的不断进步,预计未来将有更多的商业项目和应用场景出现,为程序员和企业提供新的增长点和竞争优势。