Repository navigation
feat: 基于 Pi 的持久化全库知识助手 - #665
0xcaffebabe wants to merge 11 commits into
Conversation
Deploying note with
|
| Latest commit: |
1c91aa2
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://e3254de6.note-e01.pages.dev |
| Branch Preview URL: | https://codex-661-note-bridge.note-e01.pages.dev |
补充方案:基于 Pi 的 Agent 与薄客户端架构状态:调研提案,尚未实施。调研日期:2026-10-24。 结论与约束采用 Pi 的方向合适。对于「Agent 放到 bridge、AI 数据在 bridge 持久化、网页成为薄客户端」这个目标,有条件首选 必须明确两种数据的归属:
Bridge 读取站点数据时保存本次回答实际使用的证据,必要时使用有界 HTTP 缓存;这些是消费记录和缓存,不取代站点的数据源。本文中的「迁移文档工具」指迁移工具的定义、调度与执行,不是迁移文档发布位置。 为什么选择这一层 Pi研究基线为 Pi commit 136b87e8。源码包标记为 1.4.0,但包含 1.4.0 之后的 Unreleased 变更;本文核实的是该提交,不能直接认为 npm 1.4.0 具有完全相同 API。Pi 使用 MIT 许可证。
pi-durable 明确标注 Experimental,API 可能在版本间直接变化。采用条件是锁定依赖及 lockfile、封装一个很薄的运行时适配层,并先验证恢复和打包。不要同时使用 coding-agent SessionManager 和 durable 管理同一个会话,形成两套消息真相。 目标架构flowchart LR
UI[知识站点:聊天 UI] -->|WebSocket 产品协议| Gate[Note Bridge:Rust 网关]
Gate -->|私有进程通信| Agent[Node Agent 服务:pi-durable + pi-ai]
Agent -->|HTTP 按需读取| Data[知识站点:独立发布的静态数据与检索服务]
Agent --> DB[(本机 SQLite:AI 状态与证据)]
Agent --> Provider[用户配置的模型 API]
Gate --> Keys[系统凭据库与本地配置]
网站不再拼装完整历史、估算 agent 上下文、注册工具或回传 核心站点与 bridge 独立发布现有站点已经提供 建议站点增加一个纯数据接口入口,例如
正文与章节数据仍由站点发布。可以在站点构建时生成稳定 TOC、章节边界、锚点和 contentHash,让网页与 bridge 使用同一份定义,避免 bridge 版本变化导致引用锚点漂移。 兼容策略:
现有 Algolia 全文索引是独立更新的 live 数据,不保证与 manifest revision 一致。记录检索时间和可用的索引版本,候选仅用于发现文档,再用绑定版本的目录及正文核实;不能把搜索片段当成同一版本的引用证据。 站点断网时可展示完整聊天历史和已保存证据;未缓存的文档读取明确失败。首期不承诺全库离线检索,也不在 bridge 维护一套必须同步的正文或向量索引。 知识工具六个现有工具保持用户语义,在 bridge 注册为 Pi 自定义工具:
工具只接受目录内 docId、查询词和分页参数;从已绑定知识库的数据契约构造请求。站点地址、重定向、跨域检索目标由配置和受支持适配器约束,模型不能指定任意 URL 或本机路径。文档内容始终作为参考数据,不成为系统指令。 Pi 工具的 只读工具可以使用 Pi 的 持久化与恢复使用 pi-durable SQLite 作为 agent transcript、任务与运行中状态的唯一事实来源。应用元数据尽量通过 durable 自有 document 保存;会话列表的索引/投影应可重建,不另外复制一套完整消息日志。
网页仅需继续保存配对 token、端口和轻量 UI 偏好,以满足刷新自动重连;不再以 localStorage 保存聊天正文。会话按知识库和授权范围隔离,一个站点的配对不能读取其他站点的聊天。 恢复语义必须分清:
Pi 默认约每 100ms 提交流式进度,状态先提交再供 UI 观察。默认 SQLite 为 WAL + synchronous NORMAL,支持进程崩溃恢复,但不能承诺断电时最后提交也零丢失。可在验证后评估 FULL 的性能;首期不能将“持久化”宣传为任意故障下零丢失。 一份 SQLite 只交给一个 Node 进程写入,Rust 管理单实例及子进程生命周期。数据库升级前进行一致性备份;Pi 已存在不可向旧版本回退的 schema 迁移,应连同依赖升级一起验证。归档、删除和导出需要覆盖消息、证据与用量;永久删除的具体 Pi API/清理能力在原型中核实。 新的网站协议保留现有配对及 Origin 校验,引入带能力协商的产品协议 v2;网站不能原样调用 Pi RPC。 建议命令: 服务端持久接受后返回 submissionId/runId。clientRequestId 在会话范围内幂等;bridge 保存规范化请求的 hash,同一个 ID 携带不同正文、模型或附件必须拒绝。Pi 自带幂等提交不比较完整请求内容,hash 与提交接纳的一致性要在原型中验证。重连只重新订阅,不能自动再发一个新的生成请求。 订阅采用 持久快照 + 有序增量:首次或重连发送当前快照与订阅版本,随后传递消息、工具、压缩、运行和用量更新;缺帧/版本不符就重取快照。Pi 本身的 watch 也是当前视图加后续提交,重连不会重放所有旧网络事件,无须另造完整 token 事件日志。长会话用分页历史和受限运行快照,避免把 1M 上下文作为单个 WebSocket 帧发送。不能直接透传 Pi Conversation.watch:它会加载 activeEntries,且不自动包含自定义元数据/证据 document。适配层通过 conversation.entries 分页读取,结合相关 document/commit 生成展示投影;验证分页与订阅的一致性及 worker 内存占用,不额外保存完整消息副本。 一个会话同一时间只有一个活动运行;多个标签页可订阅同一会话。首期对忙碌会话的第二次发送明确拒绝或提示排队,不暗中开启第二个模型循环。不同会话并行度由 bridge 控制。 自定义模型与预算现有自定义 provider、Claude/Codex 配置导入、API 模型获取和手动编辑继续由 bridge 管理。Pi 只注册已启用的这些服务与模型,不能拿内置官方模型目录覆盖第三方 endpoint 的列表。
三种现有协议均有 Pi adapter:Responses、Chat Completions、Anthropic Messages;支持自定义 baseUrl、headers、窗口和输出能力。但以下必须用 mock 服务先验证:
上下文窗口按所选模型配置,不把所有模型都硬编码为 1M。Pi 负责压缩机制和工具对话结构,bridge 负责业务预算策略。初始运行预算建议为 32 个普通模型轮次、128 次工具、20 分钟;重试、恢复和压缩的成本与截止时间都要计入,不能通过刷新或重启重置。按模型窗口设置压缩阈值与保留量,不直接照搬面向小窗口的默认 20k 保留值。 Pi 没有现成的 实施顺序与验收
关键验收结果:
本方案目前仅完成源码与文档调研。没有安装 Pi、调用真实模型或验证最终包大小;这些属于第一阶段原型。 主要依据
|
知识库问答需要跨文档检索,并在刷新或关闭网页后保留会话和后台任务。本 PR 增加独立的 Note Bridge 桌面应用,用 Pi 驱动全库知识助手,网站负责交互与展示。
实现
pi-durable/pi-ai/chord1.4.0,由 Tauri 管理随包分发的 Node 子进程。SQLite 保存会话、模型 transcript、工具证据、压缩与任务状态;移除 Rust 自研 agent loop 和浏览器聊天存储/工具执行逻辑。持久请求幂等、跨 Origin 会话隔离、优先取消/撤销、有界 IPC 背压、SIGKILL 恢复,以及跨轮/跨站点内容版本的引用继承均由 bridge 处理。API 密钥只在实际发送层注入,不进入 SQLite、checkpoint 或网页。
代码组织
按核心站点的职责划分拆分契约、业务服务和平台适配:Node 分离持久化、回合准入/生命周期、模型传输、知识读取、投影和 IPC;Rust 分离网关、配置发现、模型规则、凭据事务和 worker 生命周期;桌面界面分离端口、状态控制器、页面与编辑组件。
核心站点也按相同原则整理:领域契约与端口分离,浏览器连接拆为凭证、Socket/心跳、认证、重连、RPC 与投影校验;聊天分为展示组件及会话、分页、提交、模型、附件 composable;Markdown 净化和站点知识发布独立维护。
BrowserAiBridge.ts从 441 行缩至 142 行,DocumentQA.vue从 560 行缩至 289 行。保留原导入入口和行为,代码边界写入DESIGN.md。runtime.ts从 1434 行缩至 295 行,App.svelte从 1189 行缩至 88 行,Rust crate 入口从 1118 行缩至 16 行。关键接口补充中文 TSDoc/Rustdoc,展开压缩控制流,并将 Prettier 检查纳入 CI。维护约定和事务/锁边界见note-bridge/ARCHITECTURE.md。公开 API、产品协议、SQLite 格式和页面行为保持兼容。验证
tsc仍有 8 条既有类型/依赖诊断。-D warnings通过。发布与边界
Pi durable 仍是实验性 API,依赖固定且升级需验证数据库迁移。安装包自带 Node,macOS 最低 13.5;当前为未签名评估包。Windows/Intel 打包由 CI 验证,安装后托盘与系统凭据库仍需对应平台实机验收。
需要配套更新网站与 Note Bridge 0.2.0 以使用 v2。之后知识内容发布与 bridge 发行独立。未合并 PR、部署网站或发布 Release。
设计、协议与维护约定见
note-bridge/PI_AGENT_PLAN.md、PROTOCOL.md、KNOWLEDGE_PROTOCOL.md、ARCHITECTURE.md,以及核心站点DESIGN.md。Closes #661.