[控场AI]
· 6 分钟阅读· 3,462 字

Pi Durable详解:为始终在线Agent构建持久化运行框架

Pi Durable详解:为始终在线Agent构建持久化运行框架

Pi Durable是替代Pi Harness的持久化运行框架,让Agent崩溃后能从检查点恢复。

Pi Durable是一套专为应对崩溃和意外中断而设计的智能体运行框架,定位为Pi Harness层的替代实现。它通过将任务保存为包含多个检查点的Task,并持久化工具调用记录,使智能体在进程中断后能从断点恢复,避免重复已完成的外部操作。文章对比了普通Pi Coding Agent在发邮件场景中崩溃后需人工干预的缺陷,详细说明了Pi Durable在Pi生态中的层次关系、三层应用结构、SQLite/JSONL/内存三种存储后端,以及配置模型、注册表、存储、打开Harness、创建对话、提交查询六步初始化流程。实战演示用本地小模型Qwen 3.5 0.8B跑通了持久化Agent和崩溃恢复。Pi Durable目前处于早期阶段,是面向开发者的构建模块而非开箱即用产品,适合无人值守长时间运行的后台智能体场景。

在构建始终在线的AI Agent时,最棘手的问题往往不是模型能力,而是运行过程的可靠性。一次工具调用中途崩溃,可能让整个任务前功尽弃。B站UP主在最新视频中详细拆解了Pi生态下的Pi Durable——一套专为应对崩溃和意外中断而设计的智能体运行框架,并现场演示了如何用本地模型搭建可恢复的持久化Agent。

Pi Durable是什么:给Agent加一层"不死"的运行层

Pi Durable是一套智能体运行框架,核心设计目标是可靠地应对崩溃和各种意外中断。它让智能体可以在后台持续运行,比如作为服务器或本机守护进程,即使执行到一半时进程停止,也能从之前停下的位置准确接着执行。

这与普通Pi Coding Agent形成鲜明对比。UP主用一个发邮件的例子说明差异:假设让智能体给五位客户发邮件,前四封成功,第五封发送时进程崩溃。普通Pi Coding Agent会把整个会话以JSONL文件保存,重启后看到的是一个被截断、没有结果的工具调用——因为模型API要求工具调用后必须跟一条工具响应,此时只能补一条假的错误响应,用户还得自己调查发生了什么,再手动发"继续"指令。

Pi Durable的做法是:任务先被保存为Harness里的一个Task,Task内包含多个检查点。工具调用也会被持久化写入存储系统。恢复时,系统根据检查点判断哪些操作已经完成、哪些还需要继续,无需用户手动干预,也不会重复已完成的外部操作。

之后恢复时它就知道这些工作已经完成

检查点(Checkpoint)机制是持久化执行的核心。在Pi Durable中,检查点是在任务执行过程中周期性写入存储系统的状态快照,记录了哪些工具调用已开始、哪些已完成、以及执行到哪一步。与数据库事务的提交点类似,检查点使得系统在崩溃后能回滚到最近一个一致状态,而不是从头开始。区别在于,Pi Durable的检查点不仅记录内部状态,还关联外部副作用(如已发送的邮件),从而避免恢复时重复执行已完成的外部操作。检查点的粒度直接影响恢复精度与写入开销,通常需要在两者之间权衡。

在Pi生态中的位置:Harness层的替代实现

理解Pi Durable的关键,是看清它在Pi生态架构中的层次。普通Pi Coding Agent运行在Pi Harness之上,而Pi Harness本身是智能体的运行循环,负责管理会话、组织工具并执行工具。Harness之下是Pi AI,负责连接各种大语言模型、处理模型调用和提示词缓存。Pi Coding Agent则是运行在这两层之上的应用,包含终端界面、系统提示词和扩展层。

Pi Durable替代的正是Pi Harness这一层。它同样建立在Pi AI之上,沿用相同的模型集成方式,但提供了另一套可替换的Harness实现。交付的核心是一个Harness类,供开发者导入自己的程序。从应用开发者角度看,模型调用方式保持不变,只替换负责长期运行的Harness。

或者通过Pi SDK导入普通Pi Harness

UP主特别提醒:Pi Durable不是像Pi Coding Agent那样打开命令行就能用的成品应用。它不提供现成的CLI界面,真正和用户交互的界面仍需应用自己实现。它更像是开发者搭建产品的基础设施,适合需要接收多来源输入(如Telegram、Slack、电子邮件)的后台智能体场景。

**Harness(运行循环)**在智能体架构中扮演"执行引擎"的角色:它接收用户或系统提交的查询,调用大语言模型生成响应,解析模型返回的工具调用请求,执行对应工具,再将结果回传给模型,如此循环直至任务完成。Harness并不负责模型本身的能力,而是管理会话状态、工具注册与调度、以及多轮交互的编排。不同Harness实现的差异主要体现在持久化策略、并发模型和错误恢复方式上。Pi Durable之所以能替代Pi Harness,是因为它遵循相同的运行循环抽象,但在循环的每一步都加入了状态持久化,从而获得崩溃恢复能力。

构建应用:从存储选型到六步初始化

基于Pi Durable构建应用,整体结构分为三层:输入渠道(Slack、邮件等入口)、应用层(接收请求、选择对话、路由消息)和底层Harness。应用层需要自行开发,对话管理最好放在应用层完成——虽然Pi Durable提供了管理对话的API,但它不是完整的CRUD接口,不会替开发者处理所有用户和对话管理逻辑。

在Pi Durable中,Conversation大致相当于Pi Coding Agent里的Session。每个对话都有自己的系统提示词、工作目录、工具和技能,可以彼此隔离。UP主强调一个容易踩坑的细节:Pi Durable不会自动读取工作目录中的PI文件夹或agents.md等配置文件,所有配置都必须在初始化对话时显式加载。

存储是持久化的基石。Pi Durable目前支持SQLite后端、JSONL文件存储和内存存储三种方式。内存存储仅适合快速试验,关闭进程数据即丢失。UP主表示SQLite是自己试验中最喜欢的方案,初始化后数据库表会自动创建并由框架管理。

sqli是我最喜欢的一种存储方案

实际初始化Harness分为六步:配置模型Provider、打开工具注册表、设置存储、打开Harness、创建或取回对话、提交查询。提交后返回Submission ID,开发者可以选择等待最终结果(适合长时间后台任务),也可以订阅事件流实时读取模型生成内容和工具调用(适合聊天交互界面)。

SQLite作为嵌入式数据库在此场景中的优势值得说明。SQLite无需独立服务器进程,数据以单文件形式存储,支持ACID事务,适合单机或边缘部署的智能体应用。对于Pi Durable而言,SQLite的事务特性保证了检查点写入的原子性——即使写入过程中崩溃,也不会留下半写状态。与JSONL文件存储相比,SQLite支持更细粒度的查询和更新,便于按任务或对话检索检查点;而JSONL更适合追加写入和简单调试。内存存储则完全不具备持久性,仅用于开发阶段验证逻辑。选择存储后端时需考虑并发写入频率、数据量和部署环境。

实战演示:本地小模型跑通持久化Agent

视频中,UP主在本机运行Ollama(原文提及llama.cpp服务器)加载一个极小的模型Qwen 3.5 0.8B,演示了完整流程。脚本连接到本地模型后,智能体调用Read工具读取README文件,找出了藏在里面的秘密短语。模型很小,响应极快,这段演示的重点在于确认Harness能连接模型并通过工具完成实际请求,而非测试模型能力上限。

这段示范主要是为了证明智能体本身可以正常工作

第二个示例Chatrism更进一步:程序启动时先检查持久化状态,发现存在未完成的任务。UP主让智能体读取项目文档,在刚调用完Read工具后中断程序,然后重新运行。框架从SQLite读取已保存的检查点,接着完成那次Read工具调用,最终返回了项目描述。整个过程无需手动干预,直观展示了Pi Durable的恢复能力。

本地模型的自主权与早期阶段的取舍

Pi Durable最直接的价值在于解除模型绑定。UP主在演示中使用了llama.cpp Provider,同时保留OpenAI API Key便于切换,说明开发者可以按实际需求组合底层模型运行环境和应用交互方式,而不是只能使用某个封装好的产品——不必绑定OpenAI的模型,也不必绑定Grok的模型或GrokBot。

需要客观看待的是,Pi Durable目前处于早期开发阶段,接口今后很可能发生变化。它是一套底层构建模块而非开箱即用的产品,UI交互和部署方式都需要应用开发者自行决定。对于要让智能体在无人值守时长时间运行、且需要跨进程崩溃恢复的场景,这套持久化Harness值得关注;如果只是构建普通Coding Agent,常规Pi Harness SDK可能就够用了。

#Pi Durable#AI Agent持久化#智能体运行框架#Pi Harness#本地模型Agent#SQLite检查点#始终在线智能体
分享:

相关推荐