跳转到主要内容

标签(标签)

资源精选(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) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(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) 编程语言(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) 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)

category

我们听到的最常见的要求之一是为创建自定义代理提供更好的功能和文档。这一直有点棘手,因为在我们看来,实际上还不清楚“代理”到底是什么,因此它们的“正确”抽象可能是什么。最近,我们感觉到一些抽象开始融合在一起,所以我们在Python和TypeScript模块上做了一个大的努力,以更好地执行和记录这些抽象。请参阅下面的技术文档链接,然后是我们介绍的抽象和未来方向的描述。

TL;DR:我们引入了BaseSingleActionAgent作为代理的最高级别抽象,它可以在我们当前的AgentExecutor中使用。我们添加了一个更实用的LLMSingleActionAgent,它以一种简单且可扩展的方式实现了这个接口(PromptTemplate+LLM+OutputParser)。

BaseSingleActionAgent

我们引入的最基本的抽象是BaseSingleActionAgent。正如您从名称中可以看出的那样,我们并不认为这是所有代理的基本抽象。相反,我们认为这是一个代理家族的基本抽象,它一次预测一个动作。

在我们当前的AgentExecutor中使用了SingleActionAgent。这个AgentExecutor在很大程度上可以被认为是一个循环,它:

  1. 将用户输入和任何以前的步骤传递给Agent
  2. 如果Agent返回AgentFinish,则将其直接返回给用户
  3. 如果Agent返回AgentAction,则使用它调用工具并获取Observation
  4. 重复,将AgentAction和Observation传递回Agent,直到发出AgentFinish。

AgentAction是一个由action和action_input组成的响应。action指的是要使用的工具,action_input指的是该工具的输入。

AgentFinish是一个响应,其中包含要发送回用户的最终消息。这应该用于结束代理运行。

如果你对这个级别的可定制性感兴趣,可以看看这个笔记本。然而,对于大多数用例,我们建议使用下面的抽象。

LLMSingleActionAgent

我们引入的另一个类是LLMSingleActionAgent。这是BaseSingleActionAgent的具体实现,但高度模块化,因此具有高度可定制性。

LLMSingleActionAgent由四个部分组成:

  • PromptTemplate:这是一个提示模板,可以用来指导语言模型做什么
  • LLM:这是为代理提供动力的语言模型
  • stop sequence:指示LLM在找到此字符串后立即停止生成
  • OutputParser:它确定如何将LLM的输出解析为AgentAction或AgentFinish对象

将这些结合起来的逻辑是:

  • 使用PromptTemplate将输入变量(包括用户输入和任何以前的AgentAction、Observation对)转换为提示
  • 将提示传递给LLM,并带有特定的停止序列
  • 将LLM的输出解析为AgentAction或AgentFinish对象

这些抽象可以用于以多种方式自定义代理。例如:

  • 想给你的经纪人一些个性吗?使用PromptTemplate!
  • 想要以特定方式格式化之前的AgentAction,Observation对吗?使用PromptTemplate!
  • 想要使用自定义或本地模型吗?编写一个自定义LLM包装并将其作为LLM传入!
  • 输出解析是否过于脆弱,或者您希望以不同的方式处理错误?使用自定义OutputParser!

(最后一个是粗体,因为这可能是我们听到最多的一个)

我们认为这是最实用的抽象。请参阅博客开头的文档链接,以获取具体的Python/TypeScripts指南的链接。

未来发展方向

我们希望这些抽象概念已经澄清了我们对代理的一些想法,并为我们希望社区能够做出贡献开辟了空间。特别地:

我们对SingleActionAgents的其他例子感到非常兴奋,比如:

  • 在调用LLM之前使用嵌入进行工具选择
  • 使用本构链代替LLMChain来提高可靠性

我们也对其他类型的代理感到兴奋(这将需要新的代理执行器),如:

  • 多作用代理
  • 计划执行代理

如果其中任何一个听起来很有趣,我们总是愿意与人们合作来实现他们的想法!最好的方法可能是做一些初始工作,打开一个RFC拉取请求,我们很乐意从那里开始:)

文章链接