CrewAI 官方项目标识

CrewAI

Stars

面向生产级多智能体系统的 Python 编排框架,通过 Crews 组织具有角色和自主性的 Agent 协作,并以 Flows 构建可控的事件驱动工作流;统一 Memory 为 Agent、任务与流程提供可分层访问和复用的长期上下文。

Multi-Agent OrchestrationCrews · Flows · MemoryPython · Pydantic
AGENT MEMORY · VALIDATION OWNERSHIP

配置可以重复使用,校验不该消耗它

Memory scope 的构造过程可以抽取依赖并规范化路径,但每次校验都必须从同一份完整、未被修改的调用者配置出发。

CALLER-OWNED CONFIG
memoryMemory A
root_path/agent/1
scopes["/team/", "/"]

one dictionary · reusable input

BEFORE · SHARED MAPPING
VALIDATE 01data.pop("memory")scope → Memory A
VALIDATE 02memory = Nonescope → unbound
INPUT CONSUMED

scopes rewritten · memory_kind inserted

AFTER · PRIVATE VALIDATION COPYdata = dict(data)
MemoryScope
pop memory
MemorySlice
normalize paths
legacy config
infer kind
VALIDATE 01Memory AVALIDATE 02Memory A
ORIGINAL CONFIG UNCHANGED
隐蔽失联

第一次 Pop 掉 Memory,第二次 Scope 不再绑定

`MemoryScope.model_validate()` 与 `MemorySlice.model_validate()` 直接修改调用者传入的配置字典:`pop("memory")` 会移除运行时依赖,路径规范化会把 `scopes` 写回原映射,旧配置的判别器推断还会插入 `memory_kind`。同一份配置第一次构造后已经被消耗,第二次构造出的 scope 可能不再绑定原始 Memory,直到访问时才暴露缺失依赖。

所有权契约

模型规范化不应写回调用者配置

校验器可以从输入中抽取依赖、规范化路径并补全判别器,但这些变化只属于正在生成的模型,不能成为调用者可见的副作用。这里无需深拷贝 Memory 或整个对象图:三条路径只会增删顶层键或用新列表替换 `scopes`,因此在每个即将突变的边界创建浅拷贝,就能同时隔离输入并保留 Memory 对象身份。

隔离修复

三条突变路径都先创建浅拷贝

在 `_ensure_memory_kind()`、`MemoryScope._accept_memory()` 与 `MemorySlice._accept_memory()` 中分别于首次写操作前执行 `dict(value)` 或 `dict(data)`;后续 `pop`、路径整理和判别器注入全部落在私有副本。三组回归重复使用同一配置,分别断言原字典不变、两个 scope 都绑定同一 Memory、slice 内部路径被规范化但外部列表保持原样。

复用结果

外部配置稳定,内部模型保持规范化

Memory view 配置现在可以安全地跨工厂、依赖注入和重复校验复用,不会因调用顺序产生“第一次有 Memory、第二次失联”的隐蔽状态差异;序列化格式、规范化后的模型值和公开 API 均保持不变。完整 Memory 测试集 150 项通过,Ruff、格式化、mypy 与三项合并检查同步通过。

CrewAI 的 Crews 与 Flows 架构:Agent 通过 Memory 获得上下文,事件流通过 State 保持状态
图中信息Memory 位于 Agent 协作与长期上下文的交界处

左侧展示 Crew 以多个 Agent、工具和任务协作完成目标,Memory 为这些角色提供可持续访问的上下文;右侧则由 Flow 以显式状态和代码路径控制执行。MemoryScope 与 MemorySlice 是这层上下文的可复用视图,因此配置一旦在校验中被消耗,后续 Agent 或任务就可能拿到没有底层 Memory 的同名视图。