深入CrewAI源码,今天先读“项目入口层”,不碰复杂 Agent 执行逻辑。
目标是建立边界:CrewAI 源码到底由哪些包组成、运行入口在哪里、下一步应该从哪个文件进入。
第一步先吃透三个文件:
CrewAI/
├── pyproject.toml
├── lib/crewai/pyproject.toml
└── lib/crewai/src/crewai/__init__.py
这三个文件回答一个核心问题:
CrewAI 这个项目如何被组织、如何被安装、如何暴露给用户使用?
因为源码阅读的第一性原理不是“看代码”,而是要逐步确定:
项目边界
包边界
入口边界
对外 API 边界
再进入核心实现
进入根目录 pyproject.toml
可以看到:
[tool.uv.workspace]
members = [
"lib/crewai",
"lib/crewai-tools",
"lib/devtools",
"lib/crewai-files",
"lib/cli",
"lib/crewai-core",
]
你要理解:CrewAI 根仓库不是一个简单 Python 包。而是一个 monorepo。
根目录pyproject.toml文件主要负责:
管理 workspace
管理统一开发依赖
管理 lint / mypy / pytest / bandit 等工程规范
管理依赖 override 与安全约束
此外,它还配置了 ruff、mypy、pytest、bandit,这说明 CrewAI 工程上不是只追求“能跑”,而是把格式、类型、测试、安全扫描放进了项目级规范。
接下来,我们看主包。它不在根目录,而是在lib/crewai/ 。
[project]
name = "crewai"
这说明用户执行:
import crewai
导入的是这个包。lib/crewai/pyproject.toml 当前声明的项目名就是 crewai。
requires-python = ">=3.10, <3.14"
这说明 CrewAI 当前不是任意 Python 都能跑,而是限制在 Python 3.10 到 3.13 之间。
那么,用户真正接触到哪些核心对象?
打开lib/crewai/src/crewai/__init__.py。你会看到它导入并暴露了一批核心对象:
from crewai.agent.core import Agent
from crewai.crew import Crew
from crewai.task import Task
from crewai.flow.flow import Flow
from crewai.llm import LLM
from crewai.process import Process
这说明普通用户写:
from crewai import Agent, Crew, Task
本质上依赖的是 crewai/__init__.py 对外暴露的公共 API。当前 __init__.py 明确导入并导出了 Agent、Crew、Task、Flow、LLM、Process 等核心对象。
今天只掌握这张图
CrewAI
│
├── pyproject.toml
│ └── 定义 workspace / 工程规范 / 测试规范 / 依赖约束
│
├── lib/crewai/
│ ├── pyproject.toml
│ │ ├── 定义主包 crewai
│ │ ├── 定义依赖
│ │ └── 定义 CLI 映射:crewai = crewai_cli.cli:crewai
│ │
│ └── src/crewai/__init__.py
│ ├── 暴露 Agent
│ ├── 暴露 Crew
│ ├── 暴露 Task
│ ├── 暴露 Flow
│ ├── 暴露 LLM
│ └── 暴露 Process
总结
根目录不是业务入口,而是工程治理入口。
根目录pyproject.toml 主要解决:
这个大项目怎么统一管理?
怎么统一测试?
怎么统一类型检查?
怎么统一安全扫描?
怎么统一依赖版本?
这属于工程治理层。
lib/crewai/pyproject.toml 是包边界。
它解决:
这个包叫什么?
支持哪些 Python 版本?
依赖哪些库?
可选能力有哪些?
命令行入口在哪里?
如何构建?
这属于包发布层。
crewai/__init__.py 是用户 API 门面。
它解决:
用户 import crewai 后,能直接拿到什么?
哪些类是 CrewAI 希望用户感知的核心概念?
哪些内部模块被隐藏在门面之后?
这属于 API 设计层。
今天的源码阅读,我们可以体会到如下工程思想:
成熟框架不是一个文件写到底,而是分层治理:
仓库层负责工程规范;
包层负责依赖和发布;
入口层负责用户 API;
核心层负责业务机制。
夜雨聆风