跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(78) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) ChatGPT(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) RAG(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 智能体(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) kafka(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) RAG架构(3) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

在过去的两周里,以代理方式使用LLM的人数大幅增加。具体来说,像AutoGPT、BabyAGI、CAMEL和Generative Agents这样的项目已经出现。LangChain社区现在已经在LangChain框架中实施了所有这些项目的一些部分。在研究和实施这些项目时,我们试图最好地了解它们之间的区别以及每个项目的新颖之处。这个博客是对我们所学知识的解释。

注意:这是一个相当技术性的博客。它假设对LangChain和这些相关项目有一定的熟悉程度。如果你不熟悉这些项目,读一篇更具介绍性的文章(比如索菲亚·杨的这篇精彩的文章)可能会有所帮助。

TL;DR:

  • “自主代理”项目(BabyAGI、AutoGPT)的长期目标在很大程度上是新颖的,这需要新型的规划技术和不同的内存使用。
  • “代理模拟”项目(CAMEL,Generative Agents)在很大程度上是新颖的,因为它们的模拟环境和基于事件反映和调整的长期内存。

我们还讨论了我们在LangChain框架中复制的每个项目的哪些部分,以及我们为什么选择这些部分。在LangChain框架中实现这些功能有以下好处:

  • 允许在LLM提供商之间轻松切换
  • 允许轻松切换VectorStore提供程序(或其他检索方法)
  • 允许连接到LangChain的工具集合
  • 允许连接到LangChain生态系统

背景

首先,让我们从一些背景上下文开始。什么是“代理人”,为什么他们很重要?在这次讨论中,我们将使用LangChain命名法,尽管值得注意的是,这个领域非常新,没有超标准的术语。

代理通常指的是使用语言模型作为推理引擎,并将其连接到两个关键组件:工具和内存。

工具有助于将LLM连接到其他数据或计算源。工具的示例包括搜索引擎、API和其他数据存储。工具很有用,因为LLM只知道他们接受过什么培训。这些知识很快就会过时。为了克服这些限制,工具可以获取最新的数据,并将其作为上下文插入到提示中。工具也可以用来采取行动(例如运行代码、修改文件等),然后LLM可以观察行动的结果,并将其纳入下一步行动的决策中。

内存有助于代理记住以前的交互。这些交互可以是与其他实体(人类或其他代理)的交互,也可以是与工具的交互。这些记忆可以是短期的(例如,之前5种工具使用的列表),也可以是长期的(过去的工具使用似乎与当前情况最相似)。

在LangChain中,我们将“代理”称为LLM,它决定采取什么行动;“工具”是指代理人可以采取的行动;“内存”是拉入以前事件的行为,而AgentExecutor是在while循环中运行代理直到满足某些停止条件的逻辑。

定型的LangChain Agent是基于Yao等人在2022年11月提出的推理和代理(ReAct)框架。这种方法的特征在于以下算法:

  1. 用户向代理提供任务
  2. 思考:代理人“思考”该做什么
  3. 动作/动作输入:代理决定采取什么动作(也就是使用什么工具)以及该工具的输入应该是什么
  4. 观察:工具的输出
  5. 重复步骤2-4,直到Agent“认为”完成为止
  6. 在讨论其他实现和框架时,我们将把它们与此算法进行比较。

自动GPT

链接:

这个项目有什么新颖之处?

AutoGPT项目与传统LangChain代理之间的主要差异可归因于不同的目标。在AutoGPT中,目标往往更为开放和长期。这意味着AutoGPT有不同的AgentExecutor和不同的内存处理方式(这两种方式都针对长时间运行的任务进行了更优化)。此前,LangChain中代理的记忆有两种形式:

  • 代理步骤的记忆:这是通过保留与该任务相关的中间代理步骤列表,并将完整列表传递给LLM调用来完成的
  • 系统记忆:这记住了最终的输入和输出(但忘记了中间代理步骤)

由于AutoGPT运行时间更长,将代理步骤的完整列表传递给LLM调用不再可行。相反,AutoGPT在中间代理步骤上添加了一个基于检索的内存。在引擎盖下,这种基于检索的内存正在使用VectorStore对嵌入进行语义搜索。请注意,LangChain具有这种类型的基于检索的内存,但它以前应用于用户-代理交互,而不是代理-工具交互。

我们是如何将其纳入LangChain的?

我们在langchain.experimental中添加了一个版本,在这个地方,我们可以放置更多的实验性和更新的代码,同时找出适当的抽象。具体来说,我们已经实现了所使用的提示模板逻辑,以及用于运行代理的while循环。我们已经使其与LangChain LLM包装器、LangChain VectorStores和LangChain工具兼容。

我们还创建了这个笔记本,展示了如何使用它。

BabyAGI

链接:

这个项目有什么新颖之处?

BabyAGI项目与传统LangChain代理商的不同之处在于:

  • 与AutoGPT类似,它将基于检索的内存应用于中间代理工具步骤。
  • 它有单独的计划和执行步骤,一次计划一系列行动(而不仅仅是下一个行动)

与AutoGPT类似,BabyAGI是为更长时间运行的任务而设计的,这导致了这两种差异。

让我们进一步讨论第二点,因为这是更重要和实质性的区别之一。在传统的LangChain Agent框架(以及AutoGPT框架)中,Agent一次向前思考一步。对于一个特定的世界状态,它思考下一个即时行动应该是什么,然后采取行动。

BabyAGI的不同之处在于它明确地计划了一系列行动。然后,它对第一个执行,然后使用结果执行另一个计划步骤并更新其任务列表。我们的直觉是,通过将规划步骤本质上用作状态跟踪系统,这使它能够更好地执行更复杂、更复杂的任务。。我们观察到(轶事),对于需要许多步骤的任务,传统的LangChain Agent有时会在几步后忘记其最初的目标,因此提前计划所有步骤可能是有益的。

我们是如何将其纳入LangChain的?

与AutoGPT类似,我们将其添加到langchain.experimental中。具体而言,我们实现了所使用的提示模板逻辑,以及用于运行代理的while循环。我们已经使其与LangChain LLM包装器、LangChain向量库和LangChain工具兼容。

Camel

 

这个项目有什么新颖之处?

这个项目的主要新颖之处在于邀请了两名特工,每个特工都有自己的个性,并让他们互相聊天。从这个意义上说,有两个新的组成部分:让两个代理以协作的方式相互作用的想法,以及特定的模拟环境。

两个代理交互的想法并不是全新的。鉴于LangChain的模块化性质,我们长期以来一直支持让代理使用其他代理作为工具。然而,这种类型的交互的新颖之处在于,两个代理是平等的——在以前的LangChain实现中,总是有一个代理以“堆叠”的方式调用另一个代理作为工具。这种将两个代理置于平等的基础上,而不是让一个代理将另一个代理用作工具的想法,引起了一种特别有趣的共鸣,即看到不断演变的行为出现。

请注意,这些代理可以使用不同的工具,并且可以专门针对这些工具。例如,你可以有一个代理,它配备了编码所需的工具,另一个代理配备了与线性交互所需的刀具,等等。因此,仍然有可能实现“堆叠”效果(你有不同的代理负责不同的事情)。

第二个新颖的组成部分是特定的模拟环境。这是一个双边对话,并不十分复杂,但仍然是我们所看到的第一次在研究环境中实现这一点。

我们是如何将其纳入LangChain的?

我们添加了一个笔记本,在很大程度上反映了模拟环境(有两个代理相互聊天)。我们可能会考虑在未来使这种模拟环境更加现成。

Generative Agents

链接:

这个项目有什么新颖之处?

这个项目有两个新颖(而且相当复杂)的方面。第一个是模拟环境,它由25个不同的代理组成。这看起来相当具体,也非常复杂,所以我们没有过多地探讨。另一个新颖的方面是他们为这些代理创造的长期记忆。

本周早些时候,我们对此进行了深入研究。代理的内存由以下部分组成:

  1. 重要性反思步骤,为每个观察结果打分。这个分数可以用于后续的检索,以获取特别重要的记忆,而忽略基本的记忆
  2. 反思步骤,“暂停”并思考代理人学到了什么概括。然后,这些反射可以与正常记忆一起检索。这个反射步骤可以用来浓缩信息并观察最近记忆中的模式
  3. 一种结合了最近性、与情况的相关性和重要性的检索器。这可以让人们回忆起与不久前发生的情况类似的记忆,尤其重要。所有这些似乎都是自然反映我们人类如何“找回”记忆的属性

所有这些记忆成分都相当新颖,对我们来说非常令人兴奋。

我们是如何将其纳入LangChain的?

检索器逻辑似乎是可推广的,所以我们将其添加为TimeWeightedVectorStoreRetriever.

我们添加了一个笔记本,展示了如何使用反射步骤+新的检索器来复制论文描述的部分设置。

模拟环境似乎很复杂,而且不太通用,所以我们没有在那里做任何事情。

结论

所有这些项目理所当然地获得了很多关注。我们将它们视为两个独立的类别:

  • 自主代理(Autonomous Agents,),具有改进的规划能力
  • Agent Simulations(Agent Simulations),具有新颖的模拟环境和复杂的、不断发展的内存

我们很高兴已经开始在LangChain生态系统中实施这些项目的一部分,并期待着看到社区如何使用、添加和组合这些项目🙂