【LLM】Agent设计和开源框架汇总 | 记忆模块构建

note

  • 开源Agent分为积累:自动agent(autoGPT、loopGPT、babyAGI)、半自动agent(camel)、领域agent(chatDev、metaGPT),自定义sop和支持人为干预的agent
  • 5大目前主流的Agent memory相关的开源框架:mem0、Graphiti、letta、memary、Cognee

经典agent框架汇总

在这里插入图片描述

零、构建Agent系统

系统1和系统2思维是来自《思考,快与慢》一书中的概念。系统1思维是大脑的快速、本能且自动化的部分,能够快速做出反应和决策。相比之下,系统2思维是更加理性、缓慢和深思熟虑的部分,用于处理复杂的问题和决策。系统1思维更加直觉性和本能性,而系统2思维更加有意识和深入思考性。
在这里插入图片描述

为了构建一个结合系统1和系统2思维的Agent,可以考虑使用langchain来设计复杂的思考树状结构。参考下面思路:

  • 定义系统1和系统2的角色:系统1负责快速、本能的反应和决策,而系统2负责深入思考、反思和重新表述问题,并给出更准确的答案。
  • 使用langchain构建思考树状结构:在langchain中,可以使用Agent模块来定义系统1和系统2的行为。Agent类型可以包括Zero-shot ReAct、Conversational和Plan-and-execute等。ReAct模式可以将复杂问题拆解成多个Thought和Action,并通过工具从外部获取缺少的信息,最终得出答案。
  • 设计Agent的工具箱:为Agent提供一些工具,例如搜索工具、语音识别、OCR工具、文件处理、Python执行等,以辅助系统1和系统2的思考过程。
  • 使用记忆存储:为Agent提供一个交互中的"记忆"存储,如向量数据库,用于保存交流的历史记录,防止信息遗忘。
  • 设置Agent的推理规划能力:利用LLM的推理规划能力,将问题拆解成多个Thought和Action,并在中间过程中投喂信息,人工参与确认是否正确,直至找到人类认可的答案。

多智能体系统的构建方法:

  • 明确该系统需要解决的问题和目标
  • 创建多个智能体实例(类型、数量、特性),比如分为规划设计、获取新知识、对事物/现象进行评判等的类型
  • 定义多智能体之间的交互方式,包括协作、竞争、信息交流等,以及制定协议、策略或博弈论规则
  • 考虑系统的可扩展性、安全性、智能体之间的异构性等
  • 部署系统,持续监控和维护

一、AutoGPT

● 一个实验性的开源尝试,使GPT-4完全自主
● 串联LLM“思考”,以自主实现你设定的任何目标
● 访问互联网进行搜索和信息收集
● 管理长期和短期记忆
● 能够执行许多命令,如谷歌搜索、浏览网站、写入文件、执行Python文件等
● GPT-4实例用于文本生成
● 访问流行的网站和平台
● 文件存储和使用GPT-3.5进行摘要
● 通过插件扩展
●“很像BabyAGI结合LangChain工具”
● 0.4.0版本中添加的功能:文件阅读、命令自定义、增强测试

AutoGPT:
通过更好的提示词来激发模型的能力,把更多原先需要通过代码来实现的流程“硬逻辑”转化为模型自动生成的“动态逻辑”。
适用场景:适用于需要长期规划和多个步骤的复杂任务,如管理和发展业务。

AutoGPT以LLM 作为主控制器来建立 AI Agents ,AutoGPT 使用了许多代码来解析数据格式,以帮助 AI Agents 更好地理解和处理自然语言输入,目前还处于试验的阶段。AutoGPT 的核心逻辑是一个 Prompt Loop,步骤如下

1.AutoGPT 会基于一定策略自动组装 Command Prompt,这些首次会包含用户输入的 Name, Role和Goals
2.Command Prompt 的目标不是为了拿到最终结果,而是通过 GPT Chat API(Thinking 的过程)返回下一步的 Command (包含name和arguments, 如browser_website(url = “www.baidu.com”) )
3. 这些 Command 都是可扩展的,每一种命令代表一种外部能力(比如爬虫、Google搜索,也包括GPT的能力),通过这些 Command 调用返回的 Result 又会成为到 Command Prompt 的组成元素,
4. 回到第 1 步往复循环,直到拿到最终结果结果(状态为“compelete”)

它的核心 prompt 如下:

You are Guandata-GPT, 'an AI assistant designed to help data analysts do their daily work.'
Your decisions must always be made independently without seeking user assistance. Play to your strengths as an LLM and pursue simple strategies with no legal complications.

GOALS:

1. 'Process data sets'
2. 'Generate data reports and visualizations'
3. 'Analyze reports to gain business insights'

Constraints:
1. ~4000 word limit for short term memory. Your short term memory is short, so immediately save important information to files.
2. If you are unsure how you previously did something or want to recall past events, thinking about similar events will help you remember.
3. No user assistance
4. Exclusively use the commands listed in double quotes e.g. "command name"

Commands:
1. Google Search: "google", args: "input": "<search>"
2. Browse Website: "browse_website", args: "url": "<url>", "question": "<what_you_want_to_find_on_website>"
3. Start GPT Agent: "start_agent", args: "name": "<name>", "task": "<short_task_desc>", "prompt": "<prompt>"
4. Message GPT Agent: "message_agent", args: "key": "<key>", "message": "<message>"
5. List GPT Agents: "list_agents", args: 
6. Delete GPT Agent: "delete_agent", args: "key": "<key>"
7. Clone Repository: "clone_repository", args: "repository_url": "<url>", "clone_path": "<directory>"
8. Write to file: "write_to_file", args: "file": "<file>", "text": "<text>"
9. Read file: "read_file", args: "file": "<file>"
10. Append to file: "append_to_file", args: "file": "<file>", "text": "<text>"
11. Delete file: "delete_file", args: "file": "<file>"
12. Search Files: "search_files", args: "directory": "<directory>"
13. Evaluate Code: "evaluate_code", args: "code": "<full_code_string>"
14. Get Improved Code: "improve_code", args: "suggestions": "<list_of_suggestions>", "code": "<full_code_string>"
15. Write Tests: "write_tests", args: "code": "<full_code_string>", "focus": "<list_of_focus_areas>"
16. Execute Python File: "execute_python_file", args: "file": "<file>"
17. Generate Image: "generate_image", args: "prompt": "<prompt>"
18. Send Tweet: "send_tweet", args: "text": "<text>"
19. Do Nothing: "do_nothing", args: 
20. Task Complete (Shutdown): "task_complete", args: "reason": "<reason>"

Resources:
1. Internet access for searches and information gathering.
2. Long Term memory management.
3. GPT-3.5 powered Agents for delegation of simple tasks.
4. File output.

Performance Evaluation:
1. Continuously review and analyze your actions to ensure you are performing to the best of your abilities.
2. Constructively self-criticize your big-picture behavior constantly.
3. Reflect on past decisions and strategies to refine your approach.
4. Every command has a cost, so be smart and efficient. Aim to complete tasks in the least number of steps.

You should only respond in JSON format as described below 
Response Format: 
{
    "thoughts": {
        "text": "thought",
        "reasoning": "reasoning",
        "plan": "- short bulleted\n- list that conveys\n- long-term plan",
        "criticism": "constructive self-criticism",
        "speak": "thoughts summary to say to user"
    },
    "command": {
        "name": "command name",
        "args": {
            "arg name": "value"
        }
    }
} 
Ensure the response can be parsed by Python json.loads

二、BabyAGI

BabyAGI 是一个相对更聚焦在“思维流程”方面尝试的项目,并没有添加对各种外部工具利用的支持。其核心逻辑:
BabyAGI用于执行设定的task集合,另外,在执行过程中会产生新的task,它会重新进行优先级排序,然后继续进行执行。
适用场景:适用于需要系统性和逻辑性较强的任务,如自动执行风险投资工作流。
在这里插入图片描述

下面的图显示的是BabyAGI的steps的执行:
1.从任务列表中提取第一个任务。
2.将任务发送给执行agent,执行agent使用OpenAI的API根据上下文完成任务。
3.丰富结果,并存储在Chroma/Weaviate中。
4.创建新任务,并根据上一任务的目标和结果重新确定任务列表的优先级。
在这里插入图片描述
图片参考来源: https://github.com/yoheinakajima/babyagi

三、HuggingGPT

核心:HuggingGPT把LLM作为一个控制器,用于管理和组织这些专家模型(HuggingFace的文生图,图生文,目标检测等模型),LLM首先会根据用户的请求规划一个任务清单,然后给每个任务指派一个专家模型,专家模型执行完毕以后,LLM收集结果并返回给用户。
适用场景:适用于需要集成不同领域和模态的人工智能任务的场景,如文本分类、目标检测、语义分割等。

HuggingGPT的总体架构图如下图所示,LLM作为核心的控制器,模型作为执行器,HuggingGPT的执行分为四个阶段:
1)任务规划(Task Planning):LLM把用户的请求分解成任务集合,决定执行的顺序和任务之间的资源依赖;
2)模型选择(Model Selection):根据HuggingFace的模型的描述,LLM把合适的模型安排给任务;
3)任务执行(Task Execution):模型执行指派的任务;
4)响应生成(Response Generation):LLM集合专家的结果,生成一个workflow日志的摘要返回给用户。

在这里插入图片描述

图片引用来源:《HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face》 https://arxiv.org/pdf/2303.17580.pdf

缺点:
1、链路过长,某一环节出问题,后续都会出问题。
2、效率,效率的瓶颈在于大型语言模型的推理。对于每一轮用户请求,HuggingGPT 在任务规划、模型选择和响应生成阶段至少需要与大型语言模型进行一次交互。

五、GPTSwarm

GPTSwarm 是一个基于图的框架,用于基于大型语言模型(LLM)的代理,提供两个高级特性:

  • 它允许你从图构建基于LLM的代理。
  • 它支持代理群的自定义和自动自组织,具备自我改进能力。

各种人为设计的提示工程技巧已经被提出,以改进基于大型语言模型(LLM)的问题解决器,产生了许多不同的代码基础。我们通过将基于LLM的代理描述为计算图来统一这些方法。每个节点实现一个函数来处理多模态数据或查询其他LLM。每条边描述操作和代理之间的信息流。图可以递归组合成更大的复合图,代表代理间协作的层级结构。我们的新型自动图优化器(1)细化节点级别的LLM提示(节点优化)和(2)通过改变图连接性来改进代理协调(边优化)。实验表明,我们的框架可以高效地开发、集成和自动改进多样化的LLM代理。

六、MetaGPT

1.MetaGPT是一个多代理框架,能够根据一行需求返回产品需求文档(PRD)、设计、任务或代码仓库。
2. MetaGPT允许为GPT分配不同的角色,形成一个协作的软件实体来处理复杂任务。
3. 它接受一行需求作为输入,并输出用户故事/竞争分析/需求/数据结构/APIs/文档等。
4. 内部,MetaGPT包括产品经理/架构师/项目经理/工程师。
5. 它提供了软件公司的全部流程,以及精心编排的标准操作程序(SOPs)。“代码=SOP(团队)”是核心理念。
6. 关于基于LLM的多代理工作的论文推动了自主代理相互协作的理念,以实现超出单个代理能力范围的更多功能。
7. MetaGPT将高效的人类工作流程作为一种元编程方法融入基于LLM的多代理协作中。

在这里插入图片描述

七、Camel

半自动agent在程序调用、agent角色设定、甚至sop至少可以部分修改,不是全封闭好的

camel:camel的可部署性、部署价值要比上面提到的 autoGPT、loopGPT强,社区也更成熟特色是引入了2个机器人角色来交流对话角色扮演,用户除了设定目标,也可以设定这两个机器人的角色(具体角色除了框架已经提供的,开发人员应该也能自己进行修改,还可以自己增加角色数量)

还可以添加专门负责api工具调用的agent-----可以浏览互联网、阅读文档、创建图像、音频和视频、图像识别等内容,甚至可以直接执行代码这个就需要有开发经验,自己根据这个框架做增添,在代码里改,也可以加上向量数据库等,from camel.utils import role_playing_with_function 提供函数调用

下面的例子是用户让发明一个针对股票的交易机器人,agent在用task specifier详细分解需要的任务后,一个担任ai user也就是股票交易员,一个担任ai assistant,就是负责写程序代码的,这两个机器人之间交互
在这里插入图片描述

八、AutoGen

● 一个用于开发具有多个会话代理的大型语言模型(LLM)应用程序的框架。
● 这些代理可以协作解决问题,并且能够与人类无缝交互。
● 它简化了复杂的LLM工作流程,增强了自动化和优化。
● 它提供了跨不同领域和复杂性的一系列工作系统。
● 它通过简单的性能调整和API统一、缓存等实用功能,改善了LLM的推理能力。
● 它支持高级使用模式,包括错误处理、多配置推理和上下文编程。

举例:假设你正在构建一个自动客服系统。在这个系统中,一个代理负责接收客户问题,另一个代理负责搜索数据库以找到答案,还有一个代理负责将答案格式化并发送给客户。AutoGen可以协调这些代理的工作。这意味着你可以有多个“代理”(这些代理可以是LLM、人类或其他工具)在一个工作流中相互协作。

定制性:AutoGen 允许高度定制。你可以选择使用哪种类型的LLM,哪种人工输入,以及哪种工具。举例:在一个内容推荐系统中,你可能想使用一个专门训练过的LLM 来生成个性化推荐,同时还想让人类专家提供反馈。AutoGen 可以让这两者无缝集成。

人类参与:AutoGen也支持人类输入和反馈,这对于需要人工审核或决策的任务非常有用。举例:在一个法律咨询应用中,初步的法律建议可能由一个LLM 生成,但最终的建议需要由一个真正的法律专家审核。AutoGen 可以自动化这一流程。

多agent交互框架:三种类型的agent,分别对应处理单一任务、用户输入以及团队合作功能

在这里插入图片描述
基础双智能体交互:
助手接收到来自user_proxy的消息,其中包含任务描述。
然后助手尝试编写Python代码来解决任务,并将响应发送给user_proxy。
一旦user proxy从助手那里收到响应,它会尝试通过征求人类输入或准备自动生成的回复来回复。如果没有提供人类输入,user_proxy将执行代码并使用结果作为自动回复。然后助手为user_proxy生成进一步的响应。然后user_proxy可以决定是否终止对话。如果不是,就重复步骤3和4。

实现多agent沟通方式:
动态团队交流:在群聊管理器中注册一个回复功能,广播消息并指定下一个发言的的角色。
有限状态机:自定义DAG流程图,定义agent间沟通的SOP

AutoGen

AutoGen的主要功能:

  1. Multi-Agent对话框架;
  2. 支持大语言模型和传API;
  3. 可定制的Agent角色和行为;
  4. 增强对话记忆和上下文管理;
  5. 内置错误处理和任务恢复机制;
    • 与外部工具和服务集成;
    • 灵活的对话流程控制;
    • 支持人机互动;
    • 适用于定制Agent实施的可扩展架构;
    • 全面的文档和示例。

AutoGen的适用场景:

  1. 高级AI对话系统;
  2. 自动编码助手和软件开发工具;
  3. 复杂的问题解决和决策系统;
  4. 自动化客户支持和服务Agent;
  5. 创意写作和内容生成系统;
  6. 数据分析和可视化助理。

AutoGen的优势:

  1. 简化复杂Multi-Agent系统的开发;
  2. 可为不同任务创建专门的Agent;
  3. 促进不同人工智能模型和服务的无缝集成;
  4. 提高人工智能对话的稳健性和可靠性;
  5. 支持自主运行和人工监督;
  6. 通过预置组件缩短开发时间;
  7. 实现快速原型设计和实验;
  8. 为高级人工智能应用奠定基础;
  9. 鼓励社区驱动的发展和创新;
  10. 提供从简单到复杂Agent系统扩展的灵活性。

九、记忆模块

5大目前主流的Agent memory相关的开源框架

  • mem0,27k star,根据交互内容,自动记录用户信息,采用向量化存储
  • Graphiti,3k star,自动构建context的知识图谱,这是将KG应用到了Agent中的一种路径,具体可以看一下对应论文Zep
  • letta,16k star,也就是之前的MemGPT,提供了一个用于构建stateful agent的开发平台,相当于一个中间层,可以Docker启动后比较方便地接入项目,还可以帮助记录应用运行情况
  • memary,2.1k star,又一个基于知识图谱来建立记忆的框架
  • Cognee,1.7k star,结合了RAG和知识图谱的一个库

Reference

[1] https://github.com/e2b-dev/awesome-ai-agents?tab=readme-ov-file
[2] AGENT DESIGN PATTERN CATALOGUE:A COLLECTION OF ARCHITECTURAL PATTERNS FOR FOUNDATION MODEL BASED AGENTS

### 大型语言模型代理框架概述 大型语言模型(LLM)代理框架旨在利用强大的语言处理能力广泛的背景知识来执行特定任务或解决问题。这类框架通常集成了多个组件,以确保高效的任务完成服务质量。 #### 对话驱动的解决方案代理(DERA) 一种具体的实现方式是对话驱动的解决代理(DERA),该架构特别强调通过高质量的人机交互提升系统的性能可靠性[^2]。 DERA创建了一种模拟人类协作的工作流程,在这个过程中有两个主要角色: - **研究者**:负责收集必要的信息、解析输入内容以及发现潜在的关键要素; - **决策者**:基于接收到的数据作出最终决定,并可能返回给用户提供进一步指导或者确认请求的结果。 这种设计不仅提高了透明度还增强了用户的信任感,因为每一步骤都是公开可见并与用户互动紧密相连。 #### 上下文学习与推理能力 除了上述提到的角色划分外,LLM本身所具备的强大特性也是构建有效代理不可或缺的一部分。相较于传统的小规模语言模型,LLM拥有更出色的上下文理解逻辑推断技能,这使得它们能够在复杂场景中更好地理解意图并给出恰当回应[^1]。 ```python def process_user_input(user_message, context_history=None): """ 使用LLM处理用户消息 参数: user_message (str): 用户发送的消息文本 context_history (list of str, optional): 历史对话记录,默认为空列表 返回: tuple: 包含两个元素的元组, 第一个是响应字符串, 另一个是更新后的context_history. """ if not context_history: context_history = [] # 更新历史记录 updated_context = [*context_history, user_message] # 调用预训练好的LLM获取回复建议 response_suggestion = call_large_language_model(updated_context) return response_suggestion, updated_context # 模拟调用实际的大规模语言模型API函数 def call_large_language_model(contexts): pass # 实现细节省略... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山顶夕景

小哥哥给我买个零食可好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值