源码深度学习 · 零基础友好 · 20 天

BabyAGI(functionz) 源码学习

把 Python 函数作为可版本化、可依赖解析、可追踪执行的数据库资产管理(新版 functionz,非 2023 经典版)。这不是 API 速查表,而是一条可以重复走的源码路线:每天用 30 分钟,从一个真实相对路径出发,先用类比建立直觉,再把它接回整条运行链路。

00

开篇 · 这是个什么项目

BabyAGI(functionz) 可以先想成一间会自动装配工具的工坊。它的代码不是一堆孤立文件:入口接到需求,核心对象做判断,工具或模型完成工作,状态把结果交给下一个环节。

💡 20 天的主线先找入口和地图,再跟一次真实任务穿过核心循环;随后研究状态、模型、工具与扩展;最后用复盘把全部概念连成一张可迁移的地图。不要背目录名,要不断问「谁创建它、它把什么交给谁」。
大白话读源码像参观工厂:第一天先看门牌和楼层,不急着拆机器。后面每节课只打开一个焦点路径,但始终知道它属于哪层、服务哪个业务动作。
01

架构全景(动起来看)

发光扫过的每一层都是一次任务可能经过的站点。不同仓库命名不同,但「接入 → 编排 → 核心能力 → 资源」的责任边界很相似。

L4 · 交互层
Flask App本层职责
api本层职责
dashboard本层职责
L3 · 函数资产
Functionz本层职责
Registrar本层职责
packs本层职责
L2 · 执行编排
Executor本层职责
依赖本层职责
触发器本层职责
L1 · 持久化
DB本层职责
Version本层职责
Log本层职责
Secret本层职责
输入用户任务组织对象 / 流程执行模型 / 工具沉淀状态 / 记忆
设计取舍分层会增加跳转文件的次数,却让每层只承担一种职责:入口容易替换,核心逻辑能测试,模型与外部工具可插拔。读代码时先沿箭头追「数据」而不是追每一个类。
02

怎么使用这份教程

⏱️

每天 30 分钟

6 讲,每讲先问问题,再给本质和大白话。

📍

真实相对路径

所有路径都从项目根目录算,不把你的机器路径写进源码引用。

🧪

先验证再推理

每页都有可复制 bash 命令;文件版本变化时以本地实际内容为准。

🧭

可迁移方法

学会从入口、数据结构、循环和扩展点读任何 AI 项目。

S1

阶段 1 · 认识 functionz

D01-D03 · 从应用入口理解函数即资产
01

应用创建与公开 API

babyagi/__init__.py:跟踪 create_app 如何把 functionz、API 和界面接在一起。

≈30 min · 6 讲开始学 →
02

Functionz 门面对象

babyagi/functionz/core/framework.py:理解一个对象如何统一管理函数、密钥、版本和执行。

≈30 min · 6 讲开始学 →
03

函数包自动加载

babyagi/functionz/packs:认识默认、草稿和插件函数包的装载方式。

≈30 min · 6 讲开始学 →
S2

阶段 2 · 函数入库

D04-D06 · 装饰器、源码提取与版本模型
04

register_function 装饰器

babyagi/functionz/core/registration.py:学习源码、元数据和依赖如何被登记。

≈30 min · 6 讲开始学 →
05

AST 参数推断

babyagi/functionz/core/registration.py:理解从函数签名和返回值提取输入输出。

≈30 min · 6 讲开始学 →
06

函数与版本数据模型

babyagi/functionz/db/models.py:阅读 Function、FunctionVersion、Import 的关系。

≈30 min · 6 讲开始学 →
S3

阶段 3 · 运行引擎

D07-D10 · 动态加载、依赖与触发器
07

数据库路由与本地存储

babyagi/functionz/db:理解框架如何隔离具体数据库实现。

≈30 min · 6 讲开始学 →
08

动态依赖解析

babyagi/functionz/core/execution.py:跟踪依赖函数与 Python 包的递归加载。

≈30 min · 6 讲开始学 →
09

受控代码执行

babyagi/functionz/core/execution.py:理解从数据库代码到 exec 和调用包装器的路径。

≈30 min · 6 讲开始学 →
10

触发器与调用链

babyagi/functionz/core/execution.py:学习父子调用、触发执行和递归保护。

≈30 min · 6 讲开始学 →
S4

阶段 4 · 持久化与安全

D11-D13 · 数据库、密钥和审计日志
11

执行日志模型

babyagi/functionz/db/models.py:查看输入、输出、耗时和调用关系的记录方式。

≈30 min · 6 讲开始学 →
12

密钥加密存储

babyagi/functionz/db/models.py:理解密钥模型与 Fernet 加密;讨论密钥文件管理风险。

≈30 min · 6 讲开始学 →
13

版本切换与回滚

babyagi/functionz/core/framework.py:跟踪激活某个函数版本的接口。

≈30 min · 6 讲开始学 →
S5

阶段 5 · 可视化运维

D14-D17 · Flask API 与 Dashboard
14

函数查询 API

babyagi/api:阅读函数列表、详情与版本的 HTTP 路由。

≈30 min · 6 讲开始学 →
15

远程执行 API

babyagi/api:理解请求 JSON 如何映射到函数执行。

≈30 min · 6 讲开始学 →
16

Dashboard 管理界面

babyagi/dashboard:把前端操作对应回 API 与数据库。

≈30 min · 6 讲开始学 →
17

默认 AI 函数包

babyagi/functionz/packs/default/ai_functions.py:观察 LLM 能力如何被封装成可注册函数。

≈30 min · 6 讲开始学 →
S6

阶段 6 · 自构建实验

D18-D20 · 函数包、Agent 草稿与风险复盘
18

自构建 Agent 草稿

babyagi/functionz/packs/drafts/self_build.py:阅读实验性自生成流程,不把它误当生产方案。

≈30 min · 6 讲开始学 →
19

生成函数草稿流程

babyagi/functionz/packs/drafts/generate_function.py:理解提示、代码生成和函数登记如何串联。

≈30 min · 6 讲开始学 →
20

安全边界与重构练习

babyagi/functionz/core/execution.py:复盘动态 pip 安装、exec、密钥输出等不适合直接生产使用的边界。

≈30 min · 6 讲开始学 →