メインコンテンツにスキップ
2026-09-10開発ログAI Agentアーキテクチャ

動く Agent を解体する:PureLab が土台を換えたこの一か月

7 月、製品プロセス内で第一世代のアシスタントを完成させました。8 月は比較のために旧エンジンを残し、三十を超える硬い決定を書き上げた後、設計全体を破棄しました。 続く一か月は旧経路との互換性を持たせず、履歴も移行せず、対話を製品プロセスから切り離しました。

動く Agent を解体する:PureLab が土台を換えたこの一か月

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 を押したときだけファイルを動かす、というものです。モデルはパスを捏造してはならず、ライブラリ内部の ID を求めてもならず、「もう変更しました」と主張してもなりません。
  • 🚀 第五の山はクロスプラットフォームのパッケージング:契約は同じでも、macOS ではサンドボックス署名を通す必要があります。Windows は一時期、全体が利用不能で、「現在のシステムでは利用できません」と表示するしかありませんでした。9 月になってようやく、Windows で隔離プロセスのホームディレクトリ、能力スイッチ、デバッグ/リリースの配置を揃えました。デスクトップソフトウェアの Agent は、仕事の半分が会話ではなく、「インストールできる、起動できる、メインプログラムを巻き添えにしてクラッシュしない」ことにあります。

この五つの山は一緒に運ばなければなりません。先に会話できるようにして安全性を後回しにしても、先に安全性を作って Windows を後回しにしても、比較期間中に古い入口を引き戻すことになります。私たちは古い入口を引き戻す資格も削除しました。

⚙️ この一か月、本当に時間を奪われたところ

8 月中旬から 9 月 10 日まで、カレンダー上では「接続」です。しかし実際の日々は、気を抜かせてくれない境界処理の連続でした。

  • 通路と状態機械のもつれ:設定には、人が見つけられる「AI アシスタント」への入口が必要です。設定がないとき、パネルを準備完了のように描いてはいけません。会話欄の既定状態は英語にし、製品が「設定へ」を注入して設定ページへ誘導します。内部エラーコードも、そのまま画面に投げてはいけません。エンドポイントを変更するとき、一時期は Key の再提出を強制していましたが、後になって「Key はそのまま、アドレスかモデルだけを変更する」という現実のユーザーが行う操作を許可しました。これは文言の問題ではなく、通路の状態機械と鍵の復号が結びついているという問題です。
  • チャットボックスより難しいセッション管理:新しいセッションが「最新の空でないセッションを復元する」処理に上書きされてはいけません。別の曲庫に切り替えれば、セッション一覧もそれに合わせて切り替わり、混ざってはいけません。同じ起動中に右側のパネルを閉じて再び開いた場合は、画面を補うべきであり、タイプライターのように対話を再生してはいけません。ソフトウェアを終了して再度開いたときにだけ、コールドリカバリーを行います。切り替えて戻ると履歴が失われることさえあり、後になってセッション単位で投影済みイベントを記憶するように変更しました。セッションの削除では、基盤のセッションを閉じ、ディスク上のディレクトリを消し、生成途中に誤クリックできないようにする必要があります。
  • 非常に手間のかかる書き戻し機構:旧 Agent の確認ゲートは正しいものであり、新しい土台も転送手段を変えたからといって緩めてはいけません。チャットで「このツールを許可しますか」と尋ねることはもうありません——承認済みの照会はホストが許可します。9 月初旬になってようやく、「パラメータを入力 → 小さなサンプルをプレビュー → 下書きを生成 → あなたが Apply を押す」を製品イベントとしてまとめました。ファイル変更の確認は書き戻しダイアログに残し、チャットのポップアップにはしません。リネームにはパッチがなく、まずパスの対照を出し、操作領域で確認してから適用するしかありません。「アシスタントがすでにファイルを変更しました」という文は、この契約ではすべてバグです。
  • パネルの独立性と埋め込みによる妥協:パネル自体もデモではなくワークベンチのように動く必要があります。Markdown は見出しとリストだけに対応し、コードハイライトはありません。ストリーミング出力、失敗、キャンセルは同じレンダリング経路を通します。パネル内部は英語のハードコードで、製品が変更できるのは設定入口の一文だけです——これが三つのリポジトリに埋め込む代価の一つです。整理ページの右側に埋め込まれ、最近になって底部へ移されました。抽出、置換、パイプラインと同じ視線を奪わないためです。

これらはどれ一つとして単独ではリリースできません。プロトコルを一つ変えれば、ホスト、パネル、製品アダプターの三者すべてを動かす必要があります。一方を変更し忘れれば、「ときどき会話でき、ときどき履歴を失い、ときどき鍵が間違った場所へ送られる」という状態になります。

👀 いまワークベンチで見えるもの

製品はすでに 6.0 に更新されています。整理ページのいちばん右側で、AI 入口はアクティビティバーの底部に固定されています。開くと、完全な会話ワークベンチです。複数セッションに対応し、復元でき、いつでも中止できます。8 月の 5.0 月報と比べると、入口は常駐するようになりました。この版がストアに公開済みかどうかは、本稿では公開済みとは書きません。

  • 柔軟な設定:まず設定で、自分のエンドポイント、モデル、鍵を入力してください。対話を特定のクラウドに縛り付けず、未設定時に内蔵モデルへひそかにフォールバックすることもありません。
  • 抑制された領域能力:設定が済めば、現在開いている曲庫について話せます。たとえばアーティストとアルバムに基づくリネームをプレビューしたり、少量のタグ下書きを確認したりできます。アシスタントは検索し、プレビューし、草案を生成できます。しかしファイルを変更するかどうかは、書き戻しダイアログまたはリネーム対照で、あなたが決めます。8 月に公開したタグパイプラインは残っており、アシスタントが「開始」を代わりに押すことはありません。
  • 守り続ける境界:分析、カバー、歌詞、ネットワーク経由のメタデータ補完は、今回も与えません。まだ思いついていないからではなく、まず境界を硬くしてから、より多くできることを話すためです。

💡 私たちが払うと決めたコストと、まだ払い終えていない勘定

土台を換えるうえで最も高価なのは、新しいコードを書くことではありません。第一世代がすでに動いていて、比較のために残した二重エンジンのほうが安全に見えたと認めたうえで、それでも全体を果断に破棄することです。履歴を移行しないのは、古い対話に対して無責任です。履歴を移行するのは、新しい契約に対して無責任です。私たちは後者を選び、製品内の古い入口をきれいに削除し、二つのアシスタントが永遠に比較され続けることを避けました。

まだ払い終えていない勘定も明確にしておきます。通路を自前の中継へ切り替えること、データベースの暗号文をシステムキーチェーンに置き換えること、Windows のリリース形態を macOS と同じくらい安心して使えるものにすること。これらはすべてまだ途中です。アシスタントは現在、ワークベンチ内の試験運用であり、「スマートアシスタント正式リリース」という広告文では決してありません。

8 月にはタグ整理を一つのパイプラインにまとめました。繰り返しの作業を、人が手作業でパネルを切り替えて行うべきではないからです。今月はアシスタントを製品プロセスから切り離しました。対話、鍵、書き戻しが同じ障害領域を共有すべきではないからです。二つの取り組みがしていることは同じです。ローカルの曲庫ワークステーションに自動化を任せながら、ファイルを変更する前には立ち止まれるようにすることです。

土台を換え終えて初めて、本当に整理を手伝わせる話ができます。