[!NOTE]
2023年3月发布的原始BabyAGI引入了任务规划作为开发自主智能体的方法。该项目已归档并移至 babyagi_archive 仓库(2024年9月快照)。[!CAUTION]
这是一个由从未担任过开发人员工作的Yohei构建的框架。此仓库的目的是分享想法、激发讨论,并供有经验的开发者进行实验。不适用于生产环境。请谨慎使用。
这个最新版的BabyAGI是一个用于自构建自主智能体的实验性框架。早期扩展BabyAGI的努力表明,构建通用自主智能体的最佳方式是构建能够自我构建的最简单事物。
查看 这篇介绍性的 X/Twitter 帖子 以获取简单概述。
其核心是一个新的函数框架 (functionz),用于从数据库中存储、管理和执行函数。它提供了一个基于图的结构,用于跟踪导入、依赖函数和认证密钥,并具备自动加载和全面的日志记录功能。此外,它还附带一个仪表板,用于管理函数、运行更新和查看日志。
要快速查看仪表板并了解其工作原理:
安装 BabyAGI:
bash
pip install babyagi
导入 BabyAGI 并加载仪表板:
```python
import babyagi
if name == "main":
app = babyagi.create_app('/dashboard')
app.run(host='0.0.0.0', port=8080)
```
导航到仪表板:
打开浏览器并访问 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 包含两个预加载的函数包:
默认函数 (packs/default_functions.py):
AI 函数 (packs/ai_generator.py):
BabyAGI 包含两个实验性的自构建智能体,展示了该框架如何帮助自构建编码智能体利用现有函数编写新函数。
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")
运行此代码时,你将在终端中看到函数正在生成,一旦完成,新函数将在仪表板中可用。
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 助手询问的不同任务,并创建处理这些任务的函数。
*函数将被生成并存储在仪表板中,但请注意生成的代码是最小化的,可能需要改进。

警告: 这些草案功能是实验性概念,可能无法按预期工作。它们需要重大改进,应谨慎使用。
非常感谢贡献,但坦率地说,我在管理 PR 方面做得并不好。由于我独自(在晚上和周末)进行这项工作,进展会比较缓慢,请耐心等待。我可能会先组建一个小型核心团队,然后再与更大的群体合作。
如果你是开发者、投资者、开源之友,并且有兴趣支持我做的 AI 工作,请填写 此表格(我即将推出一些有趣的项目!)
BabyAGI 根据 MIT 许可证发布。有关更多详细信息,请参阅 LICENSE 文件。