让智能体在生产环境活下来:Restate 的持久化执行之道
关联
这一集是一段技术演讲,主题是怎么在生产环境里可靠地运行 AI 智能体——不讲智能体本身怎么写,专讲它底下的基础设施层。演讲者是开源框架 Restate 的人(本集没有给出姓名),这个框架的理念来自分布式流处理引擎 Apache Flink,也来自几位前 Meta 事件基础设施的架构师。
演讲开头引用了 Andrej Carpathy 对人机交互三波演进的描述,作为整场的立论基础:第一波,LLM 像个网站,你问一句它答一句;第二波,变成智能体,是个装在电脑上的应用,拿着一些工具在人的交互下干活;第三波,则越来越走向持久化和异步的实体——智能体成了基础设施里长期运行的进程,能访问工具、组织里的其他智能体和上下文。演讲者的推论是:用例从单个智能体演进成连接组织各处的智能体平台,基础设施层也必须跟着演进。
现有工具缺的那一层
目前市面上的智能体 SDK 和记忆方案,做 POC、快速上手确实很酷,但它们帮不了你连接组织内分布式的各个部分。真要做复杂的智能体系统,你得自己部署额外的基础设施,写重试逻辑、恢复逻辑——这些做对相当复杂,却是运行长期运行、有状态、分布式进程的必需品。Restate 就是来填这一层的。
Restate 是什么:四个组成部分
演讲者把它定位成一个灵活、持久的后端地基——不专为智能体设计,但智能体本来就是一类后端,所以照样适用。它管四件事:
- 单次运行的韧性(业界叫「持久化执行」,即把每一步都记下来,进程崩溃后能从失败点精确续跑):一个智能体跑了一周然后崩了,你要的是把它从失败那一点拉起来继续,而不是从头再来。
- 高并发会话:同时跑数千个智能体会话,保证状态一致、互不干扰。
- 通信:智能体之间、智能体与 MCP 服务器及其他工具之间。
- 控制:智能体做了不该做的事或卡住了,能真正取消或终止。
架构上,Restate 是一个跑在你智能体服务前面的独立服务器,有点像消息代理或代理。请求来了它推给你的服务,之后两者之间保持一条开放连接——这条连接就是智能体的「生命线」:智能体干活时不断把事件发给 Restate,形成一份事件日志(journal),故障后就靠这份日志恢复进程。一句话概括:它把你应用里的一个普通函数,变成一个长期运行、持久化、有状态的东西,而不用你自己去写那些复杂 plumbing。
现场 Demo:一个接 Slack 的深度研究智能体
整场演讲主体是一个演示:给全公司员工用的 Slack 研究智能体。在 Slack 里问一句「AI 有什么新动态」,底层就走经典的深度研究工作流——一个规划器智能体先列研究子题,你按 Approve 后解锁,再并行启动一组子研究智能体,最后写作智能体出报告。
Restate 的 UI 像个「智能体驾驶舱」,能看到所有已注册智能体和正在发生的执行,左边的 journal 就是发给 Restate 服务器的实时事件流。演讲者还故意注入了工具错误:子智能体做网页搜索时 API 挂了,你可以看到它如何被自动重试并最终成功——不是从头开始,而是用 journal 恢复进度。
代码层面也很轻:你在 Restate 里写应用就是写 HTTP handler,把普通步骤(比如一次 LLM 调用)用 restate.run 包起来,它就成了持久化步骤——哪怕两小时或两个月后在某处失败,也会恢复到恰好那个点。
持久化执行还有个妙用:人工审批。审批可能要等几周甚至一个月,进程得能扛过这段时间的重启和重新部署。做法是创建一个存在 journal 里的持久 promise,相当于一个挂起点;等待期间进程真的挂起,如果跑在无服务器环境上,这段时间不占用函数执行时间;人一点 Slack 按钮,响应进来,进程从上次中断处继续。
比工作流更进一步:有状态的持久实体
工作流只是一组被持久化执行的步骤,但智能体更像一个存活很久、有记忆、能交互的有状态实体。Restate 用 virtual object 来建模:它像一个有状态的 actor,有唯一 ID(比如 session ID),有一份针对该会话隔离的键值状态(比如消息历史),还有一组能为这个会话执行持久化函数的 handler。
高并发下有个关键保证:两条消息同时进来,不能让两个智能体互相覆盖对方的会话状态——virtual object 保证同一时间只有一个执行在跑,第二个排队在后面。
更有意思的是对「运行中进程」的交互:每个执行有唯一标识符,其他进程可以用它连接过去——取输出、取消它,或者给一个正在运行的智能体循环发信号、注入状态。Demo 里这么用:用户在研究进行中补充一句「专注于前沿模型」,一个 LLM 会先判断这条新输入跟当前循环相不相关——相关就作为信号注入进行中的研究,不相关就取消当前执行、带着新信息重新开始。发一句「忘掉那个,研究 AI 政策」,协调器就取消当前运行、开新主题。
这里的取消是一个沿调用链向下传播的信号:如果主智能体已经启动了子智能体,子智能体先被取消,然后是控制器本身,整个栈被回退,等于给了智能体回滚的能力。
半路改需求?这正是它擅长的
最后一部分 Demo 展示可扩展性:设想上线几个月后,新的模型供应商推出一款又好又贵的模型(演讲里戏称 Fabulous),研究智能体成本开始爆炸。这种项目半路冒出来的问题,通常逼你部署一堆额外基础设施。
Restate 不把你钉死在某种写法上:原来内联的 LLM 调用可以提取成独立 handler,先做策略检查再调用;其他智能体改用 Restate 的分布式通信原语去调这个 LLM 网关。这套服务间的通信还带流控,比如规定某部门对 LLM 网关同时最多 300 次调用。底层的韧性也覆盖更高级的故障类型,比如网络分区和僵尸故障。
内部架构与落地形态
实现上,Restate 是一个事件驱动的分布式日志:盒子一边是客户端、一边是服务,内部是一个持久化所有 journal 事件的日志加一个事件循环——事件来了,要么写入内嵌状态存储,要么设定时器,要么向另一个智能体发请求,由此构成任何应用的持久化地基。分布式日志的设计深受 Meta 核心事件基础设施层的启发,算是它之上的一次迭代,由几位当年的架构师做成了开源通用方案。
两个值得注意的设计点:
- 推送而非拉取:大多数工作流编排器从服务器拉取新任务,Restate 是把调用推送过去。好处是延迟低得多——一个 10 步的工作流,p99 延迟可以做到约 45 毫秒,所以你能在应用外围的普通函数上也用上工作流级保证;推送模式也天然契合无服务器(发请求唤醒函数)。
- 好运维:状态存储和 UI 都包含在内,单个二进制文件;要高可用就多起几个实例,快照到对象存储。
它有六个 SDK,集成市面大多数流行的智能体框架;也可以直接用任何 LLM SDK,把步骤包进 SDK 构造里实现自定义智能体。开源可自托管,另有 BYOC(部署在你自己的云账户里,数据不出账户)和托管云两种服务。
本集带走
- 智能体的第三波形态是长期运行的持久进程,所以基础设施必须提供持久化执行:每步记进 journal,崩溃后从失败点精确续跑,绝不从头重来。
- 把普通函数变持久的成本很低:写 HTTP handler,用
restate.run包一下关键步骤,就能获得「两小时或两个月后失败也能恢复到那个点」的保证。 - 人工审批这类长等待要靠「挂起」而不是「占着」:持久 promise 当挂起点,等待期进程不占执行时间,响应来了自动续跑。
- 要跟运行中的智能体交互,给它唯一标识符:可取输出、可取消、可注入信号;新输入先让 LLM 判断相关性,相关就注入、不相关就取消重开;取消会沿调用链回退整栈。
- 并发会话要串行化:virtual object 保证同一时间每个会话只有一个执行,防止状态互相覆盖。
- 架构选型看延迟:推送模型比拉取式编排器延迟低一个量级(10 步工作流 p99 约 45 毫秒),还能顺带做好无服务器友好和流控。
现在,第三波会越来越走向持久化和异步的实体,也就是智能体成为我们基础设施中长期运行的进程,可以访问工具、组织中其他的智能体以及上下文。
Now, the third wave will be going more and more towards persistent and asynchronous entities, so agents being long-running processes in our infrastructure with access to tools and other agents around the organization and context.
—— Giselle van Dongen · [01:00]
顺着「智能体」挖下去
- 当 AI 智能体成为云的主要用户:Render CEO 谈云的下一次重建同概念:持久化执行 (durable execution)、智能体 (agent)、MCP
- RAMP 的 GTM 编排实验:一句话意图,全渠道自动执行同概念:持久化执行 (durable execution)、智能体 (agent)、MCP
- 为什么 90% 的 AI 原型死在了演示阶段?同概念:持久化执行 (durable execution)、智能体 (agent)
换个口味
- 一封邮件睡出一万七千美金:Every 的 Builder Pack 内幕同概念:智能体 (agent)、MCP
- SaaS增长该抄电商作业:付费广告立刻开打同公司:Meta · 同概念:智能体 (agent)
- AI 写代码翻倍之后:Honeycomb 的审查、信任与主人翁意识同概念:智能体 (agent)、MCP
