Wippyについて

Wippyは、実行中に変更可能なソフトウェアのためのエージェントプラットフォームおよびランタイムです。自動化システム、AIエージェント、プラグインアーキテクチャなど、コアを一度設計した後、再ビルドや再デプロイなしに繰り返し適応させる必要があるアプリケーションに適しています。

基盤となるのはアクターモデルです。コードはメッセージを通じて通信する分離されたプロセスで実行され、各プロセスは自身の状態を管理します。何かが失敗しても、その影響は分離されます。スーパービジョンツリーがリカバリを自動的に処理し、クラッシュ時にプロセスを再起動します。

local worker = process.spawn("app.workers:handler", "app:processes")
process.send(worker, "task", {id = 1, data = payload})
process.monitor(worker)

設定は中央レジストリに保存され、変更はイベントとして伝播されます。設定ファイルを更新すると、実行中のプロセスがその変更を受け取ります。システムを稼働させたまま、再起動なしで適応します。新しい接続、更新された動作など、必要なものは何でも対応できます。

local db = registry.get("app.db:postgres")
local cache = registry.get("app.cache:redis")

インフラストラクチャ障害を乗り越える必要がある操作(決済フロー、マルチステップワークフロー、長時間実行されるエージェントタスクなど)については、ランタイムが自動的に状態を永続化します。操作中にサーバーがダウンしても、ワークフローは別のマシンで中断した場所から再開されます。

システム全体が単一のファイルから実行されます。オーケストレーションするコンテナも、調整するサービスもありません。1つのバイナリ、1つの設定で、残りはランタイムが処理します。

背景

アクターモデルはErlangに由来し、1980年代から通信交換機で稼働してきました。「クラッシュさせろ」という哲学(障害を分離し、素早く再起動する)もそこから来ています。Goは、チャネルとメッセージパッシングによって並行コードを読みやすくできることを示しました。Temporalは、耐久性のあるワークフローがフレームワークとの格闘を意味しないことを証明しました。

私たちがWippyを構築したのは、AIエージェントには実行中に変更可能なインフラストラクチャが必要だからです。新しいツール、更新されたプロンプト、異なるモデルは、デプロイサイクルを待つことができません。エージェントが新しいアプローチを試す必要があるとき、その変更はリリース後ではなく、数秒で動作する必要があります。

エージェントはレジストリにアクセスできるアクターとして実行されるため、これらの変更を自分自身で行うことができます。コードを生成し、新しいコンポーネントを登録し、自身のワークフローを調整します。十分な権限があれば、エージェントは人間の介入なしに自身の動作を改善できます。システムは自分自身を書き換えることができます。