数据截至 (上游 commit eaf1040642b2)
演员、线程与放大:多智能体、依赖调度、记忆与持久化
30 秒导读: 第 2 章讲清了"一个演员被驱动一次"是怎 么回事。本章讲的是把它放大:同一套回合循环,如何扩成多智能体协作、依赖任务的自动排程、跨进程的会话持久化、以及可召回的长期记忆。这四组部件彼此正交,但组合起来就是 Marvin 支撑真实工作流的骨架。
1. 这是什么(先建立全局观)
前面几章的主角是一次回合:编排器挑一个演员、给它工具、让它跑一轮、用一个类型化的 EndTurn 收尾。够用来做一个单任务。
但真实工作流不止一个任务、不止一个智能体、也不止一次进程:
- 你想让几个不同角色的智能体分工(一个写、一个审)。
- 你的目标要拆成有先后依赖的子任务(先抓数据,再分析,最后写报告)。
- 你希望关掉进程再打开时,对话还在。
- 你希望智能体能记住跨会话的事实,并在需要时自动想起来。
本章讲的就是支撑这四件事的四组部件。它们的关系可以先记成一句话:
Actor 是"谁在做",Task 是"做什么、按什么顺序",Thread 是"说过的话存在哪",Memory 是"记住的事实怎么召回"。
┌───────────────────────────────────────┐
目标 / 一组任务 ──▶│ 编排器(第 2 章的回合循环,这里被放大) │
└───────────────────────────────────────┘
│ │ │
┌────────────┘ │ └────────────┐
▼ ▼ ▼
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ Actor │ │ Task 调度 │ │ Thread │
│ 谁在做这一轮 │ │ 拓扑收集+门控 │ │ 持久会话/用量 │
│ Agent/Team │ │ 独立→并发 │ │ SQLAlchemy │
└─────────────┘ │ 依赖→串行 │ └──────────────┘
│ └──────────────┘ ▲
│ auto_use 自动召回 │ 写回消息
▼ │
┌─────────────┐ │
│ Memory │────────── 召回结果作为 info 消息 ──────────▶│
│ 向量记忆 │
└─────────────┘
四组部件各自独立,你可以只用 Task、不碰 Memory;也可以只用 Agent、不用 Team。本章逐个拆开讲部件本身,以及它们如何拼成规模化工作流——不重复第 2 章的回合内部机制。