读 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 会在快到窗口上限时,提前总结上下文,然后丝滑继续,所以即使上万条消息也不会有内存问题。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论