Loading...

文章背景图

BabyAGI:自我构建的极简自主智能体框架

2026-01-31
0
- 字
- 分钟
|

BabyAGI:自我构建的极简自主智能体框架

官方信息表

项目 信息
项目名称 BabyAGI(新一代 self-building 版本)
开源仓库 yoheinakajima/babyagi
归档仓库 babyagi_archive(2024 年 9 月快照)
PyPI 包 babyagi
作者 Yohei Nakajima
协议 MIT
演示仪表盘默认端口 8080
文章分类 AI智能体
文章标签 若琳部署

一、项目背景:从任务规划实验,到"自我构建"框架

BabyAGI 最早在 2023 年 3 月以一段极简的脚本走红,它把"任务规划(task planning)"作为一种开发自主智能体的方法引入大众视野。README 开篇用两个醒目的提示框说明了现状:

  • NOTE:2023 年 3 月那个最初的 BabyAGI 已经归档,代码迁移到了 babyagi_archive 仓库(2024 年 9 月快照)。
  • CAUTION:这个框架的作者 Yohei 本人从来没有当过职业开发者。这个仓库的目的是分享想法、引发讨论,供有经验的开发者把玩,并不适合生产环境,使用需谨慎。

现在这个仓库里的"新一代 BabyAGI",是一个用于自我构建(self-building)自主智能体的实验性框架。README 解释了它的设计哲学:之前各种把 BabyAGI 做大做全的尝试表明,构建通用自主智能体的最优路径,是"做一个最简单、但能自己构建自己的东西(build the simplest thing that can build itself)"。换句话说,作者认为与其手工堆一个大而全的智能体,不如做一个最小内核,让智能体在运行中自己长出所需的能力,这也是它和 2023 年那版"任务列表+执行+记忆"脚本最根本的区别。

它的核心是一套全新的函数框架 functionz:用于从数据库里存储、管理和执行函数。它提供了基于图(graph)的结构,用来追踪 import 依赖、函数依赖和认证密钥,并且具备自动加载和完整日志能力。除此之外,它还自带一个仪表盘(dashboard),用来管理函数、运行更新和查看日志。作者建议想快速了解全貌的人去看他在 X/Twitter 上的介绍帖。

这套设计的关键在于:BabyAGI 不再试图把所有能力硬编码进一个庞大的智能体里,而是把"函数"当作一等公民,让智能体自己去数据库里发现、复用、组合乃至新写函数。imports 描述函数需要哪些外部库,dependencies 描述它依赖哪些其他函数,key_dependencies 描述它需要哪些密钥——这些关系全部被画成一张图,于是系统在执行任何函数之前,都能自动把所需的库、函数和密钥准备好。这也解释了为什么它叫"自我构建":当一个用户请求无法被现有函数满足时,智能体会把请求拆解成若干小函数,逐个生成、登记进图里,再像搭积木一样拼成最终能干活的函数。

二、环境要求与安装

BabyAGI 以 Python 包的形式发布,安装非常简单:

pip install babyagi

它的运行依赖 Python 环境,并且在你需要用到 AI 能力时,需要自备 OpenAI API Key(通过环境变量或仪表盘注入)。启动仪表盘后默认监听 8080 端口,因此运行时需要保证该端口未被占用,或按需在代码里改成其他端口。

三、快速开始:三步跑起仪表盘

README 给出的快速体验步骤如下:

  1. 安装 BabyAGI:

    bash pip install babyagi

  2. 导入 BabyAGI 并加载仪表盘:

    ```python import babyagi

    if name == "main": app = babyagi.create_app('/dashboard') app.run(host='0.0.0.0', port=8080) ```

  3. 打开浏览器访问仪表盘:访问 http://localhost:8080/dashboard 即可看到 BabyAGI 的仪表盘界面。

四、基本用法:注册函数与依赖

BabyAGI 的核心概念是"函数"。你从导入 babyagi 开始,然后注册自己的函数。下面这个例子注册了两个函数,其中一个依赖另一个:

import babyagi

# 注册一个简单函数
@babyagi.register_function()
def world():
    return "world"

# 注册一个依赖 'world' 的函数
@babyagi.register_function(dependencies=["world"])
def hello_world():
    x = world()
    return f"Hello {x}!"

# 执行函数
print(babyagi.hello_world())  # 输出: Hello world!

if __name__ == "__main__":
    app = babyagi.create_app('/dashboard')
    app.run(host='0.0.0.0', port=8080)

运行后会打印 Hello world!。关键点在于:被 @babyagi.register_function(dependencies=["world"]) 标注的函数,会把 world 记录为它的依赖,functionz 会在图结构里自动维护这层关系。

五、函数元数据:imports / dependencies / key_dependencies

函数可以带元数据注册,以增强能力并管理彼此关系。README 给了一个更完整的例子,展示了所有字段的逻辑用法:

import babyagi

@babyagi.register_function(
    imports=["math"],
    dependencies=["circle_area"],
    key_dependencies=["openai_api_key"],
    metadata={
        "description": "Calculates the volume of a cylinder using the circle_area function."
    }
)
def cylinder_volume(radius, height):
    import math
    area = circle_area(radius)
    return area * height

可用的元数据字段有四个:

  • imports:该函数依赖的外部库列表。
  • dependencies:该函数依赖的其他函数列表。
  • key_dependencies:该函数需要的密钥列表。
  • metadata["description"]:函数做什么的文字描述。

六、函数加载:内置与自定义 packs

除了用 register_function,你还可以用 load_function 来加载插件或函数草稿包。BabyAGI 自带函数包,也可以指向文件路径加载你自己的包。可用的函数包位于 babyagi/functionz/packs 目录。

加载自定义函数包的写法:

import babyagi

# 加载你自己的自定义函数包
babyagi.load_functions("path/to/your/custom_functions.py")

这种方式把相关函数组织成包,让函数的构建和管理更轻松。README 的目录里还列了 API Reference 一节,说明这些注册、加载、加密钥、跑仪表盘的调用都有对应的 Python API,开发者可以在自己的脚本里完整地用代码控制整个 functionz,而不必手动操作网页。

七、密钥管理:代码与仪表盘两种方式

key_dependencies 既可以直接从代码里存,也可以通过仪表盘管理。从代码里存:

import babyagi

# 添加一个密钥
babyagi.add_key_wrapper('openai_api_key', 'your_openai_api_key')

通过仪表盘添加:打开仪表盘,使用 add_key_wrapper 功能安全地加入你的密钥。

八、执行环境与日志系统

BabyAGI 会自动加载必要的函数包并管理它们的依赖,保证执行环境顺畅。同时它会记录所有活动,包括函数之间的关系,以便完整追踪函数执行与依赖。

它的日志系统有以下关键能力:

  • 执行追踪(Execution Tracking):记录函数何时开始、何时结束,包括函数名、位置参数、关键字参数和执行耗时。
  • 错误日志(Error Logging):捕获并记录函数执行中发生的任何错误,给出详细错误信息便于排查。
  • 依赖管理(Dependency Management):自动解析并记录函数间的依赖,确保执行前所需的函数和库都已加载。
  • 触发日志(Trigger Logging):记录被触发的函数,详细说明哪个函数触发了哪个函数、各自结果如何。
  • 完整记录(Comprehensive Records):保留所有函数执行历史,方便回看、理解函数关系、分析性能。

关于"触发器(triggers)":它是一种机制,让某些函数在系统内特定事件或动作发生时被自动执行。例如当一个函数被新增或更新时,触发器可以自动为它生成描述。触发器增强了 BabyAGI 的自主性,让工作流自动化、减少人工干预;但 README 也提醒要小心管理触发器,避免意外的递归执行或依赖冲突。

九、仪表盘功能

BabyAGI 仪表盘提供了一个友好界面来管理函数、监控执行和处理配置。关键功能包括:

  • 函数管理:直接在仪表盘上注册、注销和更新函数。
  • 依赖可视化:查看和管理函数之间的依赖关系。
  • 密钥管理:通过仪表盘界面安全地添加和管理密钥。
  • 日志与监控:访问完整的函数执行日志,包括输入、输出和执行时间。
  • 触发器管理:根据特定事件或条件设置触发器,自动执行函数。

运行应用后访问 http://localhost:8080/dashboard 即可进入。

十、预置函数包

BabyAGI 自带两个预置函数包:

  1. 默认函数(packs/default_functions.py):包含函数执行(运行、添加、更新、查询函数和版本)、密钥管理(添加、查询密钥)、触发器(基于其他函数添加触发器)、日志(带可选过滤地查询日志)。
  2. AI 函数(packs/ai_generator.py):包含 AI 描述与嵌入(自动为函数生成描述和 embedding)、函数选择(根据 prompt 查找或选择相似函数)。

十一、运行自我构建智能体

BabyAGI 还带了两个实验性的自我构建智能体,用来展示框架如何帮助一个"会写代码的智能体"复用已有函数、并写出新函数。

1. code_writing_functions 包里的 process_user_input

这个函数先判断是该用已有函数还是生成新函数;如果需要新函数,它会把新函数拆解成更小的可复用组件,再组合成最终函数。试一下:

import babyagi

babyagi.add_key_wrapper('openai_api_key', os.environ['OPENAI_API_KEY'])
babyagi.load_functions("drafts/code_writing_functions")

babyagi.process_user_input("Grab today's score from ESPN and email it to test@test.com")

运行后,你会在 shell 里看到函数被逐个生成,完成后新函数会出现在仪表盘里。

2. self_build 包里的 self_build

这个函数接收一段用户描述,生成 X 个用户可能问 AI 助手的不同任务;每个任务交给 process_user_input 处理,若已有函数不够用就创建新函数。试一下:

import babyagi

babyagi.add_key_wrapper('openai_api_key', os.environ['OPENAI_API_KEY'])
babyagi.load_functions("drafts/code_writing_functions")
babyagi.load_functions("drafts/self_build")

babyagi.self_build("A sales person at an enterprise SaaS company.", 3)

这会生成 3 个销售可能问 AI 助手的不同任务,并创建函数来处理它们。README 同时提醒:这些函数会被生成并存入仪表盘,但生成的代码非常精简,可能需要人工改进;这些草稿特性属于实验性概念,可能不会按预期工作,需要大量改进,请谨慎使用。

把这两个例子连起来看,BabyAGI 的自我构建闭环就很清楚了:你给它一句自然语言请求(比如"抓今天 ESPN 的比分并发邮件到 test@test.com"),process_user_input 先在已有函数里找有没有能直接用的;找不到或不够用时,它就把请求拆成更小的步骤——抓比分、发邮件、拼接文案——每一步生成一个小函数,再把这些小函数按 dependencies 串起来。新函数连同它的 import、依赖、所需密钥一起登记进 functionz 的图里,之后你就能在仪表盘上看到它们、改它们、再被别的函数复用。这就是 README 所说的"最简单、但能自己构建自己"的具体含义:框架本身不预设业务能力,业务能力是在运行中由智能体自己一点点长出来的。

十二、FAQ(常见问题)

Q1:这个 BabyAGI 还能直接拿来做生产项目吗? A:不能。README 用 CAUTION 明确声明作者并非职业开发者,仓库用于分享想法和实验,不适合生产使用。

Q2:我以前听过的那个简单 BabyAGI 还在吗? A:在归档仓库 babyagi_archive 里,是 2024 年 9 月的快照。

Q3:pip install babyagi 后怎么用? A:写几行代码调用 babyagi.create_app('/dashboard') 并 app.run(port=8080),然后浏览器打开 http://localhost:8080/dashboard。

Q4:需要 OpenAI Key 吗? A:基础的函数注册与演示不需要;但要跑 AI 相关函数和自我构建演示,必须通过 add_key_wrapper 或仪表盘注入 OpenAI API Key。

Q5:生成的函数能直接用吗? A:README 坦言生成代码非常精简、可能需要改进,且这些草稿功能是实验性的,使用需谨慎。

Q6:函数之间的依赖是怎么被自动满足的? A:每个函数用 imports、dependencies、key_dependencies 登记了所需的外部库、其他函数和密钥;functionz 在执行前会按这张图自动把它们准备好,因此你不用在每个函数里手写 import 和初始化。

Q7:为什么要仪表盘?它和命令行是什么关系? A:仪表盘是 functionz 的管理界面:注册/注销/更新函数、可视化依赖、安全地加密钥、看执行日志、配触发器。命令行脚本里 create_app('/dashboard') 就是把这个界面挂在 8080 端口上,数据和你代码里注册的函数是同一份。

Q8:触发器会不会让系统失控? A:README 明确提示要小心管理触发器,避免意外的递归执行或依赖冲突。例如一个函数更新时触发"自动生成描述",而描述生成又触发别的动作,就可能形成循环,需要人工审查。

十三、参与贡献与许可

README 表示非常欢迎贡献,但作者坦言自己一直不太擅长管理 PR,因为他是一个人在晚上和周末维护,进展会比较慢;他提到可能会先组建一个小的核心团队,再和更大的社区协作。如果你是开发者、投资人或开源支持者,可以通过他提供的表单联系。BabyAGI 基于 MIT 协议发布,详见仓库内的 LICENSE 文件。

十四、跳转链接

评论交流

文章目录