8 月月报里我们写过一句:助手这一版先不开放。
那不是偷懒。那时第一代 Agent 已经能在整理页里对话、搜曲、出预览;真正卡住的是底座。再往上堆功能,等于把编排、会话、密钥和音乐写回焊死在同一个进程里。第二个产品还要再做一遍。我们选择把能跑的那套拆掉,换一层可以嵌入、可以审核、可以隔离崩溃的运行时。
这一换,比从零写一个聊天框难得多。
🛠 第一代已经能跑,这才是麻烦的开始
7 月那套不是原型。它是嵌在 PureLab 进程里的完整助手:多轮流式、会话落库、取消与串行锁、用户自带模型密钥、曲库搜索和标签预览,写回仍然走产品自己的确认门。领域安全是强项——模型不能直接改文件,路径要脱敏,套餐门控不能因为走了对话就被绕过。
问题不在「能不能聊」,问题在形状。
编排、事件通道、会话表、密钥解密、工具调用,全在产品进程里。界面只认这一条事件流。库一换、栏一切、生成一对撞,状态机就要在前端和后端各写一遍。更麻烦的是:下一款桌面产品如果也要助手,等于再复制一套 Host。那不是嵌入,是每个 App 自己养一个 Agent。
我们不是没有试过「留下旧的、再接一套新的」。
🚧 更难的弯路:为对比效果留下双引擎,设计却写了四千行,然后整份作废
8 月上旬有过一条看起来更稳的路:右侧栏同时挂「经典 AI」和「智能助手」。起初保留旧内核,仅仅是为了在接入新底座时有个基准来“对比效果”。我们希望新的隔离进程慢慢补齐 Windows 兼容、打包和密钥通道的过程中,可以通过旧引擎来验证模型输出的质量。
纸面上这叫平稳过渡,但写进设计之后,它变成了一场灾难。
为了维持这种“对比”,两套对话命令不能混用,两套会话不能对账,同一把密钥却要同时喂给进程内编排和隔离进程。更要命的是密钥还不能写进环境变量、不能写进配置文件。预览、确认、写回、回滚必须继续走产品自己的安全链,新内核又不能拥有任意文件权限。Windows 当时明确关死隔离进程,入口还得在,文案还得是人话,不能空白也不能崩溃。
那份为了“对比效果”而做的双入口设计,硬生生堆了三十多条硬决策,正文超过四千行。还没开始按它实现,我们就知道:这根本不是对比,是同时养两个助手、两本账、两套故障域。任何「兼容一下旧会话」的念头都会把两边锁死。
8 月 13 日,整份作废。
新的合同只有几句,但每一句都贵:Kit 全部写新代码、新命令、新事件通道。不为旧路径做兼容、不对账、不迁历史、不共用表。旧 Agent 的“对比使命”直接终结。删的时候只删产品旧入口,不改新合同。
这意味着用户侧看不到「把以前的聊天记录接过来」。不是漏了,是故意的。把旧会话迁进新运行时,看似体贴,实际是让两套生命周期永远绑在一起。我们付不起这个利息。
⛰️ 换底座要同时搬走的几座山
作废只是许可。真正费力的是把「产品里的聊天功能」拆成三层,还要在一个月内接到 PureLab 上。
- 📦 第一座山是进程:模型循环不能再和整理页、写回、分析抢同一个崩溃域。对话跑在隔离进程里;产品只负责拉起、监督、在失败时收回。隔离进程崩了,曲库和标签流水线还应在。反过来,产品也绝不能把通用终端、任意文件系统、外部工具塞给模型,音乐库的写权限不归助手。
- 🔌 第二座山是协议:界面不准讲底层会话协议,产品也不准在壳里手写一轮「发 prompt、听事件、自己拼历史」。中间必须有一层稳定的产品协议:发、停、列会话、恢复、配置通道。运输可以是桌面命令,协议本身不属于某一个 App。第二个产品要做的是挂面板、给当前曲库身份、注册领域能力,而不是再实现一遍 Host。
- 🔑 第三座山是密钥:用户的模型 Key 继续密封在产品里。隔离进程的磁盘和环境变量里都不能出现这把 Key。请求从隔离进程回到本机回环,由产品进程短时解封、转给用户填写的接口,然后丢掉。复制数据库文件可能仍能恢复密文,这是已知风险,我们没有假装已经用系统钥匙串解决。
- 🛠 第四座山是领域工具:助手能搜当前授权库、读曲目、预览重命名和标签补丁,也能生成草稿。但它不能启动写回,不能启动重命名,不能启动流水线,也不能做分析。业务流程必须是:先对 1 到 5 首做预览,样本对了再生成最多 50 条草稿,工作台弹出写回框,你点 Apply 才动文件。模型不准发明路径,不准要求你提供库的内部编号,更不准声称「已经改好了」。
- 🚀 第五座山是跨平台打包:同一套合同,macOS 要过沙箱签名,Windows 一度整段不可用,只能显示「当前系统不可用」。直到 9 月,Windows 才把隔离进程的家目录、能力开关和调试 / 发布目录对齐。桌面软件的 Agent,有一半工作不在对话,而在「装得上、起得来、崩不了主程序」。
这五座山要一起搬。先做能聊再补安全,或者先做安全再补 Windows,都会在对照期把旧入口拖回来。我们把旧入口拖回来的资格也删掉了。
⚙️ 这一个月真正耗在哪
8 月中旬到 9 月 10 日,日历上是「接入」。日子里却是一连串不让人省心的边界处理:
- 通道与状态机的纠缠:设置里必须有一条人找得到的「AI 助手」入口。没有配置时,面板不能画成已经就绪;对话栏默认英文空态,产品再注入「去设置」,把人带到设置页;内部错误码也不能随意甩到界面上。改接口地址时,一度强制重新提交 Key,后来才允许「Key 还在、只改地址或模型」这种真人会做的事。这些不是文案问题,是通道状态机和密钥解封绑在了一起。
- 比聊天框更难的会话管理:新建一条会话不能被「恢复最新非空」盖掉。切到另一个曲库,会话列表必须跟着换,不能串;关掉右侧栏再打开,同一次运行里应该补屏,而不是把对话打成打字机重放;关掉软件再开,才走冷恢复。切走再切回时甚至丢过历史,后来才改成按会话记住已经投影过的事件。删除会话要同时关掉底层会话、清掉磁盘目录,还不能在生成中途让人误点。
- 极其磨人的写回机制:旧 Agent 的确认门是对的,新底座不能因为换了运输就变软。聊天里不会再问「允许这次工具」——批准过的查询由宿主放行。9 月初才把「填参 → 小样本预览 → 生成草稿 → 你点 Apply」收成产品事件,改文件的确认仍在写回框,而不是聊天弹窗。重命名没有补丁,只能先出路径对照,你在操作区核对后再应用。任何「助手已经帮你改好文件」的句子,在这套合同里都是 bug。
- 面板的独立性与嵌入妥协:面板自己也要像工作台,而不是像演示。Markdown 只做标题和列表,没有代码高亮;流式输出和失败、取消走同一套渲染。面板内部是英文硬编码,产品只改得了设置入口那一句——这是三仓嵌入的代价之一。它嵌在整理页右侧,最近才沉到底部,免得和提取、替换、流水线抢同一条视线。
这些事情没有一件能单独上线。协议一改,宿主、面板、产品适配器三边都要动。漏改一边,表现就是「有时候能聊、有时候丢历史、有时候密钥被送错地方」。
👀 现在你在工作台里会看到什么
产品已经更新到 6.0。整理页最右侧,AI 入口固定在活动栏底部。打开后是一个完整的对话工作台:支持多会话、可恢复、能随时中止。对照 8 月 5.0 月报,入口已经常驻;商店是否已发出这一版,本文不写成已上架。
- 灵活的配置:先到设置里填你自己的接口、模型和密钥。我们不把对话绑死在某一家云上,也不在没配置时偷偷落到内置模型。
- 克制的领域能力:配好之后,可以对当前打开的曲库说话。例如按艺术家和专辑预览重命名,或先看一小批标签草稿。助手可以查、可以预览、可以生成草案;文件会不会改,仍然由你在写回框或重命名对照里决定。8 月上线的标签流水线还在,助手不会替你按「开始」。
- 坚守的边界:分析、封面、歌词、联网补全元数据,这一轮仍然不给它。不是还没想到,是边界必须先硬,再谈更会做。
💡 我们愿意付的成本,和还没付清的账
换底座最贵的不是写新代码,是承认第一代已经能跑、为了对比效果而保留的双引擎看起来很稳,然后仍然果断将它们整份作废。不迁历史,是对老对话不负责任;迁历史,是对新合同不负责任。我们选了后者,并在产品里把旧入口删干净,避免两套助手永远对照下去。
还没付清的账也要说清。通道切换到自家中转、用系统钥匙串替代数据库密文、让 Windows 的发布形态和 macOS 一样省心,这些都还在路上。助手现在是工作台里的试点,绝不是「智能助手正式上线」的广告语。
8 月我们把标签整理收成一条流水线,因为重复劳动不该靠人手切栏。这个月我们把助手从产品进程里拆出去,因为对话、密钥和写回不该共享同一个故障域。两条线做的是同一件事:让本地曲库工作站既敢自动化,又敢在改文件之前停下来。
底座换完,才谈得上让它真正帮你整理。
