我基于Pi durable开发一个multi-agent的项目,有断点恢复,上下文压缩 hook机制 工具调用 mcp skill加载 sub-agent等等 还没写对应hook的skill和行为,我想往pa上发展 后续想往pa开发 有什么思路?
先把你现在的状态摆一下:断点恢复、压缩、hook、工具调用、MCP、skill 加载、sub-agent 全都搭好了,但 hook 对应的 skill 和行为还是空的。这个阶段的典型问题不是“加什么功能”,而是“这些东西怎么串成一个有边界的产品”。往 PA(personal assistant)走,思路大概是这几条。 第一,PA 和 multi-agent 框架的根本差别是“输入是异步的、任务是长期存在的”。coding agent 是你发一个请求它跑完就停;PA 是随时可能有新消息进来(群里说话、定时任务、某个监控触发),你不知道任务什么时候结束。你已经有 concurrency 和 checkpoint 了,接下来要补的是“事件源”这一层:把外部触发(定时器、webhook、IM 消息、文件变更)统一建模成 task 的 submission,带幂等 requestId 提交进 harness。这块你基于 Pi Durable 的话其实天然合适,它那套 task + ownership tree + exactly-once submission 就是为这个设计的。 第二,你说的“还没写 hook 对应的 skill 和行为”,我理解这是你目前最大的价值洼地,也是 PA 的核心。PA 的差异几乎全在“什么时候该主动做什么”——比如收到一条日程相关的消息,需不需要写进长期记忆;用户问“上次那个事”,需不需要先召回;一个工具调用是写操作,需不需要先问人。这些都不是工具能力,是拦截点和决策策略。建议你把 hook 分成三类来做,别混着写: 拦截类(beforeTool / pre-request):危险操作审批、成本保护、把审批结果写进 memo。这里有个你已经踩到点子上的细节——Pi Durable 的 hook 因为崩溃会重跑,决策必须 memo 化、第一次写入为准,所以“要不要问人”这件事本身得是幂等的,不能问两次。这个逻辑本身就值得单独抽成一个可复用的 policy 模块。 注入类(before_agent_start / 每轮前置):召回记忆、注入当前时间、注入用户画像。关键工程约束是别改 system prompt 前缀,不然前缀缓存全废,得作为本轮追加的附加块塞进去。 收割类(turn_end / subagent_stop):异步写入记忆、记录任务状态、产出日报。这类必须零阻塞,塞进队列后台跑,前台 150ms 内退出,失败了静默跳过。 这三类 hook 写完之后再去写 SKILL.md,skill 就只是“告诉模型这些钩子存在、什么场景下要主动调用对应工具”的说明书,而不是承载逻辑本身。顺序反了会很难维护。 第三,PA 的产品形态建议先从“窄场景 + 高频”切,别一上来做通用助手。你现在这套 infra 其实已经能支撑几个很具体的形态,按投入产出排一下我的建议: 一是个人知识/记忆助手,输入是聊天记录、笔记、文件,输出是“问过去的事”。这块你需要的只是召回的 hook 加一个 recall skill,边际成本最低,而且是最容易做出 demo 效果的。 二是任务型助手,比如定时巡检(邮件、群里 @ 我的、某个 repo 的 issue),检查点保证断开后接着跑。这个直接吃你 durable 的红利,coding agent 做不到这件事。 三是多入口共享会话,网页和 IM 同时接一个 agent,Pi Durable 的 viewState 和 fork 就是干这个的。 第四,几个工程上必须先想清楚的点,不然做到后面会返工: 会话的 ownership 边界。PA 里 sub-agent 应该是 background task(活过本轮 turn),不是 foreground task(用户按 Esc 就一起被带走)。你现在有了 sub-agent,得明确哪些属于哪个,否则一次用户打断会把你后台的巡检任务也干掉。 压缩策略要区分“对话压缩”和“事实沉淀”。压缩是救上下文窗口,沉淀是建长期记忆,这是两件事。Pi 那边把 compaction 建模成后台任务是对的,但你还需要一条“压缩的同时把关键事实抽出来落库”,否则压完就永久丢了。 记忆召回要做门控,不要每轮都查。用正则或者小分类器先判断这句话是不是“续接任务、指代历史、问个人偏好、问最新状态”,命中才查,其他直接跳过。否则延迟和噪音都受不了。 工具的可重放性要标注。PA 涉及大量写操作(发消息、改日程、提交工单),哪些标 safe 可以重跑、哪些必须幂等键,这个得在建工具的时候就定,不要事后补。 第五,对外讲的时候(如果是为了求职或展示),你现在的项目定位其实很清楚:不是“又一个 agent 框架”,而是“长时运行、可恢复、有主动性的个人助手运行时”。简历和面试里可以这么切:断点恢复讲 Pi Durable 的 task checkpoint 加 exactly-once submission,上下文压缩讲 compaction 建模成后台任务 + 前缀缓存友好,hook 讲三类拦截点的分工和 memo 幂等性,sub-agent 讲 ownership tree 和 abort 传播。这几个点每个都能讲出“我遇到了什么问题、为什么这么设计”,比堆功能列表值钱得多。 最后一句实话:不要等 hook 体系完美了再去做场景。先挑一个窄场景把 hook、skill、记忆三件套打通一遍,跑通之后你会发现哪些 hook 是真正需要的,剩下的都是想出来的。Pi Durable 那边有官方示例的恢复流程,建议你先照着跑一遍,再决定哪些工具标 safe。