🛠️

AIエージェントの新しい武器:WassetteでOCIレジストリからWasmコンポーネントを動的に実行

に公開

Wassette

こちらに紹介されていたWassetteというツールを試してみたので紹介します。
https://opensource.microsoft.com/blog/2025/08/06/introducing-wassette-webassembly-based-tools-for-ai-agents/

Wassetteとは

WassetteはAIエージェントのためのツールで、Wassetteを組み込むことでAIエージェントは必要に応じてOCIレジストリからWasm(Web Assembly)コンポーネントを取得し、MCP経由で安全に実行することができるようになります。
OCIレジストリはコンテナの配布のためのレジストリとして規格が定められていますが、Wasmでも利用できるようにWasm OCI Artifact Layoutという規格で標準化されています。
Wasmベースであるため、ひとつひとつのツールは軽量かつ実行がサンドボックスで行われるため、AIエージェントが動的に能力を拡張する上で相性の良い組み合わせと言えそうです。

試してみました

今回はWindows + VSCodeのGitHub Copilotで確認しました。試したことは紹介記事の内容そのままです。

1. Wassetteのインストール

  • wingetでインストールする手順が案内されていました。Linuxであれば、curlでインストールする手順となります。
    ローカルマニフェストを使うには事前に管理者権限でポリシーを有効にしておく必要があります。

    winget settings --enable LocalManifestFiles
    

    ローカルマニフェストを有効にした環境で次のインストールコマンドを実行します。

    # ローカルマニフェストファイルのダウンロード
    Invoke-WebRequest -Uri https://raw.githubusercontent.com/microsoft/wassette/main/winget/Microsoft.Wassette.yaml -OutFile Microsoft.Wassette.yaml
    # マニフェストを用いてインストール
    winget install --manifest Microsoft.Wassette.yaml
    
  • GitHub CopilotにwassetteをMCPサーバーとして追加します。
    .vscode/mcp.jsonを作成し、以下のように記載しました。

    {
    	"servers": {
    		"wassette": {
    			"type": "stdio",
    			"command": "wassette",
    			"args": [
    				"serve",
    				"--stdio"
    			]
    		}
    	},
    	"inputs": []
    }    
    
  • CopilotのモードがAgentモードであることを確認し、ツールのアイコンをクリックします。

  • Wassetteが登録され、能力の一覧を確認できます。

2. timeコンポートネントで時間を取得させる

  • Copilotチャットに次のように質問しました。

    次の場所から時間用のコンポーネントを読み込んでください。
    oci://ghcr.io/yoshuawuyts/time:latest

  • 初回はwassetteを信頼して実行して良いか確認されました。「信頼する」をクリックすると続行されます。

  • Wassetteのload-componentを続行して良いか確認されます。
    続行をクリックすると継続します。
    続行の右端にあるvをクリックすると、セッション内で許可する、ワークスペースで許可する、常に許可するから許可することで、毎回の確認を省略することもできます。

  • Wasmコンポーネントを読み込むと次のような回答が返ってきました。

    OCIレジストリ「ghcr.io/yoshuawuyts/time:latest」から時間用のコンポーネントを正常に読み込みました。次に行いたい操作があれば教えてください。

  • 続いてコンポーネントを使ってもらうための問いを投げます。

    現在時刻を取得して、日本時間で教えて

  • 先ほどの読込と同様、今度は実行の確認を得てきます。

  • timeコンポーネントを実行し、結果から回答してくれました。

    現在のUTC時刻は「2025-08-12T05:33:31.318Z」です。日本時間(JST)はUTC+9なので、「2025年8月12日 14:33:31」となります。

3. fetchコンポートネントでWeb上の記事を要約してもらう

次にfetchコンポートネントでWeb上の記事を読み込んで要約してもらいます。

  • 先ほど同様、コンポーネントを読み込んでもらいます。

    • プロンプト

      このフェッチコンポーネントを読み込んで
      oci://ghcr.io/yoshuawuyts/fetch:latest

    • 回答

      フェッチコンポーネント(oci://ghcr.io/yoshuawuyts/fetch:latest)の読み込みが完了しました。次に行いたい操作があれば教えてください。

  • Copilotには元々フェッチやブラウジングを行う機能が用意されているので、追加したコンポートネントでフェッチできることを確認するために、ビルトインツールを無効化します。

  • 私の書いたZennの記事を読み込んで要約してもらいました。

    • プロンプト

      この記事を要約して。
      https://zenn.dev/serio/articles/3439599476099c

    • 回答

      この記事は、TeamsとLLM(大規模言語モデル)を連携したチャットボット開発において、会話履歴(コンテキスト)をどのようにプロンプトへ含めるかを検証した内容です。
      主なポイントは以下の通りです。
      履歴の切り取り方には「直近の発話を優先(時間的区切り)」と「話題の関連性で抽出(意味的区切り)」の2つのアプローチがある。
      全履歴渡し、Embedding+キーワード類似度、LLMによるキーワード選定、時間グループ化+Embeddingの4手法を比較。
      意味的な関連性と会話の流れを両立できる「時間グループ化+Embedding」が、網羅性とトークン効率のバランスが最も良かった。
      Embeddingや履歴抽出の都度実行は応答速度に影響するため、リアルタイム性や柔軟な抽出方法の工夫も必要。
      今後は短期履歴から長期記憶への昇華や、フレームワークのメモリ機能の再評価も検討していく。
      LLMチャットボットの履歴管理・要約の実践的な知見がまとめられています。

まとめ

Wassetteを組み込むことで、WasmコンポーネントによるAIエージェントの機能拡張が簡単にできることを確認できました。
実行中のMCPサーバーを追加するだけであれば、MCPサーバーによる拡張は簡単です。
しかし、サーバ―自体を自分で実行して利用する場合となると、今回のように軽量かつ安全にワークスペースに読み込めるWasmコンポーネントによる拡張が便利なケースもあると思います。
OCIレジストリでツールを公開でき、再利用できる点も拡張性を後押ししていると感じました。

セリオ株式会社 テックブログ

Discussion