跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(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) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) 聊天机器人(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(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) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(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) 低代码(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) 可穿戴设备(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)

TL;DR:我们正在引入一种新型的代理执行器,我们称之为“计划和执行”。这是为了与我们以前支持的代理类型形成对比,我们称之为“Action”代理。计划和执行代理在很大程度上受到了BabyAGI和最近的计划和解决论文的启发。我们认为Plan and Execute非常适合更复杂的长期规划,但代价是需要调用更多的语言模型。我们正在将其初始版本放入实验模块,因为我们预计会有快速的变化。

链接:

到目前为止,LangChain中的所有代理都遵循ReAct文件开创的框架。让我们称之为“行动特工”。这些算法可以大致用以下伪代码表示:

  • 接收到一些用户输入
  • 代理决定使用哪种工具(如果有的话),以及该工具的输入应该是什么
  • 然后用该工具输入调用该工具,并记录观察结果(这只是用该工具输出调用该工具的输出)
  • 工具、工具输入和观察的历史记录被传递回代理,它决定下一步要采取的步骤
  • 重复此操作,直到代理决定不再需要使用工具,然后直接响应用户。

到目前为止,这种风格一直很有效,但有几件事正在发生变化,这在这种算法中出现了一些裂缝:

  • 用户目标变得越来越复杂

  • 开发人员和组织开始在生产中依赖代理

这具有双重效果,即希望代理系统能够处理更复杂的请求,同时也更可靠。这两个因素结合在一起,迅速导致提示大小增加:

  • 随着目标越来越复杂,越来越多的过去历史被包括在内,以使代理专注于最终目标,同时也允许它记住和推理以前的步骤
  • 随着开发人员试图提高可靠性,他们包含了更多关于如何使用工具的说明

在使用大多数语言模型时,对越来越复杂的能力和越来越高的可靠性的需求导致了问题。

计划和执行实施

在这种情况下,我们看到了一种新型的代理框架的出现。这些代理框架试图将更高级别的计划与短期的执行分开。具体来说,他们首先计划要采取的步骤,然后迭代执行这些步骤。当然,这个核心算法有一些有趣的变体(我们可以稍后讨论)。这些代理的伪代码,我们称之为“计划和执行”代理,看起来像:

计划要采取的步骤

  • 对于分步:确定完成该步骤的适当工具或其他最佳行动方案
  • 这是用Python和TypeScript实现的核心代理框架。这个代理框架依赖于两件事:一个计划器和一个执行器。

让我们先谈谈计划器。这几乎总是应该是一个语言模型。这将利用语言模型的推理能力来计划要做什么并处理歧义/边缘情况。我们可以在末尾添加一个输出解析器,将原始LLM输出解析为字符串列表(每个字符串都是一个步骤)。

现在我们来谈谈执行器。在我们最初的实现中,我们已经将其作为一个Action Agent。这允许执行器代理接受一个高级别的目标(一个步骤),并找出使用哪些工具来实现这一目标(可以在一两个步骤中完成)。

这种方法有几个好处。它将计划与执行分离开来——这允许一个LLM专注于计划,另一个专注于执行。这使得在两个方面都具有更高的可靠性。这也使得将来更容易将这些组件换成更小的微调模型。这种方法的主要缺点是需要更多的电话。然而,由于关注点的分离,我们希望这些呼叫可以针对更小(因此更快、更便宜)的型号。

未来发展方向

我们认为这只是计划和执行代理的开始。未来的发展方向包括:

  • 更好地支持长序列的步骤。现在,前面的步骤以列表的形式传递——随着计划步骤越来越长,我们希望将其存储在向量库中并检索中间步骤
  • 重新制定计划。现在一开始就有一个计划步骤,但后来再也没有重新考虑过。我们很可能希望有一些机制来重新审视和调整计划,无论是每一步还是根据需要。
  • 评价目前,这些改进大多是理论上的,或者至少没有基准。我们希望有更严格的方法来评估代理框架。
  • 执行链的选择。现在,只有一个执行链。很容易出现需要多个执行链的情况,规划器可以指定要使用哪一个。例如,如果您有一个针对网络研究优化的执行链,一个用于分析等。

应该注意的是,对于这些未来的许多方向,我们可以从现有的工作中获得灵感。例如,BabyAGI已经使用向量库来存储中间步骤,并重新制定每次迭代的计划。计划和解决方案论文通过基准对产出进行了更严格的评估。

结论

看到这种新的代理模式在BabyAGI中出现,我们真的很兴奋(几周前,我们在帖子中强调了这一点)。我们同样兴奋地看到“计划和解决方案”论文作为对类似想法的严格评估而出现。我们期待着看到Plan and Execute方法的发展——在这里(Python)或这里(JS)尝试一下。