OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  BabyAGI — 只有 150 行代码的极简自主任务 Agent

BabyAGI — 只有 150 行代码的极简自主任务 Agent

 
  eclipse ·  2026-01-28 21:14:55 · 11 次点击  · 0 条评论  

BabyAGI

[!NOTE]
2023年3月发布的原始BabyAGI引入了任务规划作为开发自主智能体的方法。该项目已归档并移至 babyagi_archive 仓库(2024年9月快照)。

[!CAUTION]
这是一个由从未担任过开发人员工作的Yohei构建的框架。此仓库的目的是分享想法、激发讨论,并供有经验的开发者进行实验。不适用于生产环境。请谨慎使用。


这个最新版的BabyAGI是一个用于自构建自主智能体的实验性框架。早期扩展BabyAGI的努力表明,构建通用自主智能体的最佳方式是构建能够自我构建的最简单事物。

查看 这篇介绍性的 X/Twitter 帖子 以获取简单概述。

其核心是一个新的函数框架 (functionz),用于从数据库中存储、管理和执行函数。它提供了一个基于图的结构,用于跟踪导入、依赖函数和认证密钥,并具备自动加载和全面的日志记录功能。此外,它还附带一个仪表板,用于管理函数、运行更新和查看日志。

目录

快速开始

要快速查看仪表板并了解其工作原理:

  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 并注册你的函数。以下是如何注册两个函数,其中一个依赖于另一个:

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)

函数元数据

函数可以附带元数据注册,以增强其功能并管理它们之间的关系。以下是一个更全面的函数元数据示例,展示了所有字段的逻辑用法:

import babyagi

@babyagi.register_function(
    imports=["math"],
    dependencies=["circle_area"],
    key_dependencies=["openai_api_key"],
    metadata={
        "description": "使用 circle_area 函数计算圆柱体的体积。"
    }
)
def cylinder_volume(radius, height):
    import math
    area = circle_area(radius)
    return area * height

可用的元数据字段:

  • imports:函数依赖的外部库列表。
  • dependencies:此函数依赖的其他函数列表。
  • key_dependencies:函数所需的密钥列表。
  • metadata["description"]:对函数功能的描述。

函数加载

除了使用 register_function,你还可以使用 load_function 来加载插件或函数草案包。BabyAGI 内置了一些函数包,你也可以通过指向文件路径来加载自己的包。

你可以在 babyagi/functionz/packs 中找到可用的函数包。

加载自定义函数包:

import babyagi

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

这种方法通过将相关函数组织成包,使函数构建和管理更加容易。

关键依赖项

你可以直接从代码中存储 key_dependencies,或通过仪表板管理它们。

从代码中存储关键依赖项:

import babyagi

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

通过仪表板添加关键依赖项:

导航到仪表板并使用 add_key_wrapper 功能来安全地添加你的密钥。

执行环境

BabyAGI 自动加载必要的函数包并管理它们的依赖关系,确保无缝的执行环境。此外,它会记录所有活动,包括函数之间的关系,以提供对函数执行和依赖关系的全面跟踪。

日志

BabyAGI 实现了一个全面的日志系统,以跟踪所有函数执行及其交互。日志机制确保记录每个函数调用,包括其输入、输出、执行时间和任何错误,以便进行监控和调试。

关键日志功能:

  • 执行跟踪: 记录函数开始和结束执行的时间,包括函数名、参数、关键字参数和执行时间。
  • 错误日志: 捕获并记录函数执行期间发生的任何错误,提供详细的错误信息以便排查。
  • 依赖管理: 自动解析并记录函数之间的依赖关系,确保在执行前加载所有必需的函数和库。
  • 触发器日志: 记录被触发函数的执行情况,详细说明哪些函数被其他函数触发以及它们各自的执行结果。
  • 全面记录: 维护所有函数执行的历史记录,使用户能够审查过去的活动、理解函数关系并分析性能指标。

触发器的工作原理:

触发器是一种机制,允许某些函数在系统内发生特定事件或操作时自动执行。例如,当添加或更新一个函数时,触发器可以启动为该函数生成描述。

触发器通过实现自动化工作流和减少手动干预的需求,增强了 BabyAGI 的自主性。然而,必须小心管理触发器,以避免意外的递归执行或依赖函数之间的冲突。

仪表板

BabyAGI 仪表板提供了一个用户友好的界面,用于管理函数、监控执行和处理配置。主要功能包括:

  • 函数管理: 直接从仪表板注册、注销和更新函数。
  • 依赖关系可视化: 查看和管理函数之间的依赖关系,以理解它们的关联。
  • 密钥管理: 通过仪表板界面安全地添加和管理密钥。
  • 日志记录与监控: 访问函数执行的全面日志,包括输入、输出和执行时间。
  • 触发器管理: 设置触发器,以基于特定事件或条件自动执行函数。

访问仪表板:

运行你的应用程序后,导航到 http://localhost:8080/dashboard 以访问 BabyAGI 仪表板。

预加载函数摘要

BabyAGI 包含两个预加载的函数包:

  1. 默认函数 (packs/default_functions.py):

    • 函数执行: 运行、添加、更新或检索函数及其版本。
    • 密钥管理: 添加和检索密钥。
    • 触发器: 添加触发器以基于其他函数执行函数。
    • 日志: 检索日志(可选过滤)。
  2. AI 函数 (packs/ai_generator.py):

    • AI 描述与嵌入: 自动为函数生成描述和嵌入向量。
    • 函数选择: 根据提示查找或选择相似函数。

运行自构建智能体

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")

运行此代码时,你将在终端中看到函数正在生成,一旦完成,新函数将在仪表板中可用。

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 助手询问的不同任务,并创建处理这些任务的函数。

*函数将被生成并存储在仪表板中,但请注意生成的代码是最小化的,可能需要改进。

alt text

警告: 这些草案功能是实验性概念,可能无法按预期工作。它们需要重大改进,应谨慎使用。

贡献

非常感谢贡献,但坦率地说,我在管理 PR 方面做得并不好。由于我独自(在晚上和周末)进行这项工作,进展会比较缓慢,请耐心等待。我可能会先组建一个小型核心团队,然后再与更大的群体合作。

如果你是开发者、投资者、开源之友,并且有兴趣支持我做的 AI 工作,请填写 此表格(我即将推出一些有趣的项目!)

许可证

BabyAGI 根据 MIT 许可证发布。有关更多详细信息,请参阅 LICENSE 文件。

11 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  Ping ·   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor