读 Pi Durable
https://earendil.com/posts/pi-durable/
Pi 发布 1.0 的同时,推出了 Pi Durable。这篇文章让我们简单快速了解它的原理与正确使用姿势。
什么是 Pi Durable?
Pi 1.0 一般运行在你终端中,如果遇到进程挂了,只能人工介入手动恢复继续。
而 Pi Durable 提供了一种 harness 框架,可以让 agent 跑在任何地方,被多个用户各种客户端同时操作,支持无限的长对话,以及从故障中自动恢复(很持久)。
什么是 Harness?
每个人对 Harness 的定义不同,本文的定义:
Harness = 存储 + 运行机制(与模型交互),它提供了供模型调用的 tools & 运行环境。Agent = 模型 + 配置,例如 thinking level,可用的 tools 等
注意 tools 可以运行在任何环境,例如你的笔记本,远程虚拟机,或一个运行在内存的沙箱,不需要 Harness 跑在同一台机器上。
p.s. Pi Durable 和 Pi 一样极简,仅包含15,000 行代码,方便 Agent 直接阅读和理解它。
Long runs anywhere
目标:我们希望 agent 可以在任意地方持久运行。
关于存储,Pi Durable 原生支持内存、SQLite 和 JSONL。接口也非常轻量,方便接入任意实现(注意同一份存储同时只由一个进程管理,其他客户端通过连接这个进程来访问)。
export interface Storage {
// 原子写入:会话、消息、任务、请求、文档等
commit(writes: readonly StorageWrite[], context: Context): Promise;
// 分配 ID
mintId>(): Promise;
// 读取会话
conversation(
id: ConversationId,
context: Context,
): Promise;
// 其余接口省略:
// entry / scanEntries 消息记录
// task / scanTasks 任务状态
// submission / scanSubmissions 提交的请求
// submissionByRequest 按 requestId 查重
// document / scanDocuments 应用状态
close(context: Context): Promise;
以 SQLite 为例,完整记录持久化保存在磁盘中,harness 只把当前所需的数据放在内存中,例如活跃对话、正在运行的任务、待提交的任务。一个对话天然对应一个模型的 context window,值得注意的是 Pi Durable 会在快到窗口上限时,提前总结上下文,然后丝滑继续,所以即使上万条消息也不会有内存问题。
评论
?
参与讨论