BabyAGI 是一个实验性项目,其名称源于 2023 年 3 月发布的原始版本,该版本首次引入了任务规划作为开发自主智能体的方法。原始版本已被归档,并移至 babyagi_archive 仓库(2024 年 9 月快照)。当前版本由 Yohei 构建,作者自述从未担任过开发者职务,该仓库的目的是分享想法、激发讨论,并供经验丰富的开发者尝试,明确声明不适用于生产环境,使用时需谨慎。
当前 BabyAGI 是一个用于自我构建自主智能体的实验性框架。项目认为,构建通用自主智能体的最佳方式是构建一个能够自我构建的最简单事物。其核心是一个名为 functionz 的新函数框架,用于从数据库中存储、管理和执行函数。该框架提供基于图的结构来追踪导入、依赖函数和认证密钥,并具备自动加载和全面的日志记录能力。此外,它还附带一个仪表板,用于管理函数、运行更新和查看日志。
安装与启动方式:通过 pip install babyagi 安装。在 Python 代码中导入 babyagi 并创建应用,例如在 main 中调用 babyagi.create_app('/dashboard') 并运行,然后访问 http://localhost:8080/dashboard 即可打开 BabyAGI 仪表板。
函数注册与管理:用户可以通过 register_function 注册函数,函数可以带有元数据以增强能力并管理关系。可用的元数据字段包括:imports(函数依赖的外部库列表)、dependencies(函数依赖的其他函数列表)、key_dependencies(函数所需的密钥列表)、metadata["description"](函数功能描述)。除了 register_function,还可以使用 load_function 加载插件或草稿函数包。BabyAGI 内置了函数包,也可以指向文件路径加载自定义包。函数包位于 babyagi/functionz/packs 目录中。通过将相关函数组织成包,函数构建和管理变得更加容易。
密钥依赖管理:可以直接从代码中存储 key_dependencies,也可以通过仪表板管理。在仪表板中可以使用 add_key_wrapper 功能安全地添加密钥。
执行环境与日志:BabyAGI 自动加载必要的函数包并管理依赖,确保无缝的执行环境。同时记录所有活动,包括函数之间的关系,以全面追踪函数执行和依赖。日志系统会记录每次函数调用,包括输入、输出、执行时间及任何错误,便于监控和调试。关键日志功能包括:执行跟踪(记录函数开始和结束执行的时间、函数名、参数、关键字参数和执行时间)、错误日志(捕获并记录执行期间的错误,提供详细错误信息)、依赖管理(自动解析并记录函数间依赖,确保执行前加载所有必需函数和库)、触发日志(记录被触发函数的执行,详细说明哪些函数被其他函数触发及其执行结果)、全面记录(维护所有函数执行历史,便于回顾过往活动、理解函数关系和分析性能指标)。
触发器机制:触发器允许某些函数在系统内特定事件或操作发生时自动执行。例如,当添加或更新函数时,触发器可以启动为该函数生成描述。触发器通过实现自动化工作流并减少人工干预,增强了 BabyAGI 的自主性。但需要小心管理触发器,以避免意外的递归执行或依赖函数之间的冲突。
仪表板功能:提供用户友好的界面来管理函数、监控执行和处理配置。主要功能包括:函数管理(直接在仪表板中注册、注销和更新函数)、依赖可视化(查看和管理函数间的依赖关系)、密钥管理(通过仪表板界面安全地添加和管理密钥)、日志与监控(访问函数执行的全面日志,包括输入、输出和执行时间)、触发器管理(设置触发器以根据特定事件或条件自动执行函数)。运行应用后,访问 http://localhost:8080/dashboard 即可使用。
预加载函数包:BabyAGI 包含两个预加载函数包。默认函数(packs/default_functions.py)提供:函数执行(运行、添加、更新或检索函数及版本)、密钥管理(添加和检索密钥)、触发器(添加触发器以基于其他函数执行函数)、日志(检索带可选过滤的日志)。AI 函数(packs/ai_generator.py)提供:AI 描述与嵌入(自动为函数生成描述和嵌入)、函数选择(根据提示查找或选择相似函数)。
运行自我构建代理:BabyAGI 包含两个实验性自我构建代理,展示框架如何帮助自我构建编码代理利用现有函数编写新函数。其一,code_writing_functions 包中的 process_user_input 函数首先判断使用现有函数还是生成新函数。如果需要新函数,则将其分解为更小的可复用组件,并组合成最终函数。运行后会在 shell 中看到函数生成过程,完成后新函数将出现在仪表板中。其二,self_build 包中的 self_build 函数接收用户描述,并生成用户可能向 AI 助手提出的 X 个不同任务。每个任务由 process_user_input 处理,若现有函数不足则创建新函数。例如会生成销售人员可能向 AI 助手提出的 3 个不同任务,并创建处理这些任务的函数。生成的函数会存储到仪表板中,但生成的代码很基础,可能需要改进。警告:这些草稿功能是实验性概念,可能无法按预期工作,需要大量改进,应谨慎使用。
贡献与许可:项目欢迎贡献,但作者坦言在管理 PR 方面做得不够好,由于是独自在夜间和周末工作,进展会较慢,请保持耐心。作者可能会先建立一个小型核心团队,再与更大群体协作。BabyAGI 基于 MIT 许可证发布,详见 LICENSE 文件。