AI Agent 技术正在从「单体应用」走向「集群化」。Google 开源的 Agent Substrate 框架给出了一份惊人的答卷:仅用 8 个 Kubernetes Pod,就能高效运行 250 个有状态的 AI 智能体。它能做到这点,靠的是创新的状态管理机制——分层内存缓存 + 高效上下文切换,把调度开销压到极低。本教程先讲清它的架构思想,再带你在本地 Kubernetes 上把这套大规模有状态 Agent 编排跑起来。
先搞懂:为什么需要 Agent Substrate
用一句话理解:普通 Agent 框架管「一个 Agent 怎么想」,Agent Substrate 管「250 个有状态 Agent 怎么在同一台集群上不打架、不丢记忆」。核心矛盾是:
| 维度 | 单体 Agent | Agent Substrate 集群 |
|---|---|---|
| 状态 | 单进程内存 | 分层缓存 + 持久化 |
| 规模 | 1 个 | 数百个并发 |
| 调度 | 无 | 高效上下文切换 |
| 隔离 | 天然 | 需资源隔离策略 |
「有状态」是关键词。无状态 Agent 跑完就忘,扩起来容易;有状态 Agent 要记住跨回合的上下文,规模一大,内存和调度就是噩梦。Agent Substrate 的价值就是把这个噩梦工程化解决了。
Step 1:准备本地 Kubernetes 环境
# 本地轻量 K8s(任选其一)
# 方案 A:minikube
minikube start --cpus=4 --memory=8g
# 方案 B:kind
kind create cluster --name substrate-demo
# 验证
kubectl get nodes
kubectl cluster-info
Step 2:部署 Agent Substrate 控制面
# 拉取并部署(示意命令,以官方仓库为准)
git clone https://github.com/google/agent-substrate
cd agent-substrate/deploy
kubectl apply -f substrate-controlplane.yaml
# 这会拉起:调度器 / 状态缓存层 / 消息总线
kubectl get pods -n substrate
# 期望看到 substrate-scheduler / substrate-cache / substrate-bus 等就绪
先等所有 Pod 进入 Running 再往下。状态缓存层和消息总线是后续 Agent 注册的前提,提前跑 Agent 会连不上。
Step 3:定义一个「有状态 Agent」
Agent Substrate 的核心在「状态」声明。一个 Agent 要明说它的状态存在哪、怎么恢复:
# agent-spec.yaml(示意)
apiVersion: substrate.ai/v1
kind: StatefulAgent
metadata:
name: researcher-01
spec:
model: gemini-flash
state:
store: layered-cache # 分层内存缓存
persist: true # 重启可恢复
ttl: 24h
tools: [search, read-doc]
Step 4:批量拉起 250 个 Agent
# 用 K8s 原生能力批量复制 Agent 定义
for i in $(seq 1 250); do
sed "s/researcher-01/researcher-$i/" agent-spec.yaml \
| kubectl apply -f -
done
# 观察调度:8 个 Pod 如何承载 250 个 Agent 实例
kubectl get statefulagents -n substrate | wc -l
这正是 Agent Substrate 的威力点。250 个 Agent 不是 250 个进程,而是复用在 8 个 Pod 的调度器上,靠消息总线分发任务、靠缓存层存状态——所以资源占用极低。
Step 5:验证资源隔离与消息传递
# 给某个 Agent 发任务,观察它独立回状态
kubectl exec -n substrate deploy/substrate-bus -- \
substrate send researcher-07 "总结今天 AI 头条"
# 查该 Agent 的私有状态,确认与其他 Agent 隔离
kubectl exec -n substrate deploy/substrate-cache -- \
substrate state get researcher-07
Step 6:加可观测与护栏
# 可观测:把调度指标导出
kubectl apply -f substrate-metrics.yaml # Prometheus 抓取点
# 护栏:限制单 Agent 资源与步数,防 runaway
spec:
limits:
cpu: "500m"
memory: "512Mi"
maxSteps: 50
250 个 Agent 一起失控比 1 个可怕 250 倍。务必在集群层设资源上限和步数上限,再配合本中心《Agent 预算护栏》思路做成本封顶。
Step 7:落地检查清单
□ 控制面(调度/缓存/总线)是否全部 Running?
□ Agent 状态是否分层缓存且重启可恢复?
□ 批量拉起后调度是否均衡到各 Pod?
□ 各 Agent 状态命名空间是否隔离、不串台?
□ 是否配置了资源上限与 maxSteps 护栏?
□ 是否接了可观测(指标/日志)便于排错?
常见问题速查
| 你遇到的现象 | 大概率原因 & 解决 |
|---|---|
| Agent 注册失败 | 控制面未全就绪,等 cache/bus Running 再试 |
| 重启后 Agent 失忆 | state.persist 未开,或 TTL 到期 |
| Pod 内存飙高 | 分层缓存命中低,调大热层或降 Agent 数 |
| 任务互相干扰 | 状态命名空间配错,检查隔离策略 |