LLM之Agent(二):BabyAGI的详细教程

       

图片

      BabyAGI是一个 AI 支持的任务管理系统(Python脚本),使用 OpenAI 和 Pinecone API 创建, 优先级排序和执行任务。该系统背后的主要思想是基于先前任务的结果和预定义的目标创建任务。脚本然后使用 OpenAI 的自然语言处理(NLP)能力根据目标创建新任务, 并使用 Pinecone 存储和检索任务结果以获得上下文. 这是原始的任务驱动的自驱代理(2023 年 3 月 28 日)的简化版本。

一、BabyAGI工作原理

BabyAGI的整体原理如下图所示:

图片

BabyAGI通过运行一个无限循环来工作, 该循环执行以下步骤:

  1. 从任务列表中提取第一个任务;

  2. 将任务发送给执行代理, 该代理使用 OpenAI API 根据上下文完成任务;

  3. 整理结果并将其存储在 Pinecone 中;

  4. 基于目标和前一个任务的结果创建新任务, 并根据优先级对任务列表进行排序。

execution_agent()函数使用 OpenAI API。它接受两个参数:目标和任务,然后向 OpenAI 的 API 发送一个 Prompt(包括 AI 系统任务的描述, 目标和任务本身), 该 API 结果以 string 形式返回。

task_creation_agent()函数使用 OpenAI API 根据目标和前一个任务的结果创建新任务。该函数接受 4 个参数:目标, 前一个任务的结果, 任务描述和当前任务列表。然后它向 OpenAI 的 API 发送一个 prompt, 该 API 返回一个新任务的 string 列表。函数然后将新任务作为字典列表返回, 其中每个字典包含任务的名称。

prioritization_agent()函数使用 OpenAI API 对任务列表进行重新排序。该函数接受一个参数, 即当前任务的 ID。它向 OpenAI 的 API 发送一个 prompt, 该 API 返回一个重新排序的任务列表(以数字编号)。

      最后, 脚本使用 Pinecone 存储和检索任务结果以获取上下文。脚本根据 YOUR_TABLE_NAME 变量中指定的表名创建一个 Pinecone 索引,然后 Pinecone 将任务结果与任务名称和任何其他元数据(metadata)一起存储在索引中。

二、BabyAGI如何使用

Step1 克隆仓库​​​​​​​

git clone https://github.com/yoheinakajima/babyagi.git

cd babyagi

Step2 安装所需要的库​​​​​​​

pip install -r requirements.txt
cp .env.example .env

Step3 设置OpenAI Key

    在.env文件中设置OPENAI_API_KEY、OPENAI_API_MODEL和PINECONE_API_KEY参数,在 PINECONE_ENVIRONMENT 变量中设置 Pinecone 环境,如果要使用weaviate,可以参考https://babyagi.org/docs/weaviate.html

Step4 设置存储结果的表名

指定存储结果的变量TABLE_NAME值

Step5 配置其他变量(可选)

     通过设置BABY_NAME变量名来指定BabyAGI实例名,通过设置OBJECTIVE变量名来制定任务管理系统的目标,通过设置INITIAL_TASK变量名来制定第一个任务名。

Step6 运行BabyAGI

python babyagi.py

PS:上述步骤同样也可以部署到docker中,首先需要安装docker和docker-compose,然后执行如下代码:

docker-compose up

三、BabyAGI支持的模型

      BabyAGI支持OpenAI所有模型,也支持LLaMA模型以及它的扩展模型(通过Llama.cpp),默认模型是 gpt-3.5-turbo,要使用不同的模型, 请通过 OPENAI_API_MODEL 指定, 或者使用命令行。

LLaMA

      下载最新版的Llama.cpp 并按照说明进行编译,还需要 Llama 模型的权重,然后将 llama/main 链接到 llama.cpp/main, 将 models 链接到存放 Llama 模型权重的文件夹,接着传入参数 OPENAI_API_MODEL=llama 或 -l 运行脚本。

PS:在任何情况下, 都不要在此 repo(仓库)的任何地方(包括问题, 讨论或拉取请求中)分享 IPFS, 磁力链接或任何其他模型下载链接。因为它们将被立即删除。

四、连续运行BabyAGI的警告

       BabyAGI被设计为作为任务管理系统的一部分持续运行,持续运行此脚本可能导致 API 的使用费超高, 请务必谨慎使用并后果自负。此外, 脚本需要正确设置 OpenAI 和 Pinecone API, 因此请确保在运行脚本之前已经设置了API。

参考文献:

[1] https://github.com/yoheinakajima/babyagi

[2] http://babyagi.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetCode 93.复原 IP 地址 + 回溯算法 + 图解 + 笔记

93. 复原 IP 地址 - 力扣(LeetCode) 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1…

CS 2520nonono

CS 2520nonono WeChat:yj4399_​​​​​ Sina Visitor System High-level●3 Congestion Control Algorithms:○TCP Reno:■additive increase, multiplicative decrease function to adjust window size for every RTTuntil a packet loss is detected○TCP CUBI…

用java实现拼图小游戏

1、了解拼图游戏基本功能: 拼图游戏内容由若干小图像块组成的,通过鼠标点击图像块上下左右移动,完成图像的拼凑。 2、拼图游戏交互界面设计与开发: 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…

分享从零开始学习网络设备配置--任务4.3 使用动态路由RIPng实现网络连通

任务描述 某公司使用IPv6技术搭建企业网络,由于静态路由需要管理员手工配置,在网络拓扑发生变化时,也不会自动生成新的路由,因此采用IPv6动态路由协议RIPng实现网络连通,实现任意两个节点之间的通信,并降低…

基于SpringBoot学生读书笔记共享

摘 要 本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发的…

第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容

------> 课程视频同步分享在今日头条和B站 天下武功,唯快不破! 大家好,我是博哥爱运维。这节课给大家讲下云平台的弹性容器实例怎么结合其托管K8S,使用混合服务架构,带来极致扩缩容快感。 下面是全球主流云平台弹…

对抗产品团队中的认知偏误:给产品经理的专家建议

今天的产品经理面临着独特的挑战。他们不仅需要设计和构建创新功能,还必须了解这些功能将如何为客户带来价值并推进关键业务目标。如果不加以控制,认知偏差可能会导致您构建的内容与客户想要的内容或业务需求之间不一致。本文将详细阐述产品经理可以避免…

下载MySQL JDBC驱动的方法

说明 java代码通过JDBC访问MySQL数据库,需要MySQL JDBC驱动。 例如,下面这段代码,因为找不到JDBC驱动,所以执行会报异常: package com.thb;public class JDBCDemo {public static void main(String[] args) throws …

网络基础_1

目录 网络基础 协议 协议分层 OSI七层模型 网络传输的基本流程 数据包的封装和分用 IP地址和MAC地址 网络基础 网络就是不同的计算机之间可以进行通信,前面我们学了同一台计算机之间通信,其中有进程间通信,前面学过的有管道&#xff…

Redis之秒杀系统

目录 Redis 秒杀 Mysql数据库设计 Mysql秒杀实现 MysqlRedis秒杀实现 秒杀是一种高并发场景,通常指的是在短时间内(秒级别)有大量用户同时访问某个商品或服务,争相抢购的情景。在这种情况下,系统需要处理大量并发请…

Openai通用特定领域的智能语音小助手

无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来。她只能咧嘴无奈的摇摇头。水都还没有喝一口就开始“人工智能”的去回复。原本很阳光心情开始蒙上一层薄薄阴影。在这无休无止的Q&A中,就算你对工作有磐石一般强硬&#xff0…

Linux C/C++高级全栈开发(后端/游戏/嵌入式/高性能网络/存储/基础架构)

Linux C/C高级全栈开发是一个涉及到多个领域的综合性技术要求,需要对Linux系统、C/C编程语言以及各种相关的技术进行深入的理解和应用。 下面是一些涵盖的主要技术领域和技能要点: Linux系统基础:熟悉Linux操作系统的原理和常用命令&#xf…

Linux下的文件IO之系统IO

1. 知识点 读入写出,切记以我们程序为中心向文件或者别的什么东西读入写出(输入流输出流) 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

手写VUE后台管理系统5 - 整合状态管理组件pinia

整合状态管理组件 安装整合创建实例挂载使用 pinia 是一个拥有组合式 API 的 Vue 状态管理库。 pinia 官方文档:https://pinia.vuejs.org/zh/introduction.html 安装 yarn add pinia整合 所有与状态相关的文件都放置于项目 src/store 目录下,方便管理 在…

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

电子学会C/C++编程等级考试2023年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数(2023.3) 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中…

8. 队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列的尾部,而位于队列头部的人逐个离开。 如下图所示,我们将队列的头部称为“队首”,尾部称为“队尾”&#xff…

HuggingFace学习笔记--Model的使用

1--Model介绍 Transformer的 model 一般可以分为:编码器类型(自编码)、解码器类型(自回归)和编码器解码器类型(序列到序列); Model Head(任务头)是在base模型…

Rust UI开发(5):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第五篇,前四篇链接: 1、Rust UI开发(一):使用iced构建UI时…

MySQL实现(高可用方案-MHA安装及配置)

MySQL高可用性解决方案Master High Availability (MHA) 是一种在 MySQL 故障转移环境中实现快速故障转移和数据保护的开源软件。MHA 能在 MySQL 主节点发生故障时,自动将备节点提升为主节点,并且不会中断正在进行的 SQL 操作。 需求:主从配置…