🤖

ブラウザで Python AI エージェントが動く話

に公開

最近見つけた Mozilla AI のwasm-agents-blueprintがなかなか面白かったので、触ってみました。

ブラウザ上で直接 Python AI エージェントを実行していて、興味深いです。

動かすとこんな感じです。

どういうこと?

今までの AI アプリは、だいたいこんな感じでした:

フロントエンド → バックエンドサーバー → OpenAI API → レスポンス

でも、これは:

ブラウザ(Pyodide + Python) → OpenAI API → レスポンス

サーバーがありません。これがどういうことか説明してみます。

Pyodide って何?

Pyodideは、Python を WebAssembly(WASM)でブラウザ上で動かすやつで、こんな感じです。

  • ブラウザで Python コードが実行できます
  • NumPy、Pandas、scikit-learn とかの有名どころも使えます
  • クライアント側のコード(HTTP や JavaScript)の中でmicropipってのを使って PyPI からパッケージをインストールできます

で、OpenAI Agents ライブラリもブラウザで動くみたいです。すごい。

実際のコードはこんな感じです

初期化部分:

// Pyodideを読み込み
pyodide = await loadPyodide();

// micropipでopenai-agentsをインストール
await pyodide.runPythonAsync(`
import micropip
await micropip.install("openai-agents")
`);

エージェント実行部分:

from agents import Agent, Runner, ModelSettings
import os

# APIキーを設定
os.environ['OPENAI_API_KEY'] = "your-api-key"

# エージェントを作成
agent = Agent(
    name="Assistant",
    instructions="あなたは親切なアシスタントです",
    model_settings=ModelSettings(extra_args={"timeout": 30})
)

# 実行
result = await Runner.run(agent, "こんにちは!")

これがブラウザで動きます。JavaScript 関数の中で Python コードを実行して、OpenAI API を直接呼び出してます。

ちょっと気になったこと

インストールは openai-agents なのに、インポートは agents になってます:

# インストール時
await micropip.install("openai-agents")

# インポート時
from agents import Agent, Runner, ModelSettings

これは Python パッケージの命名規則で、PyPI パッケージ名とインポート名が違うのはよくある話らしいです(例:pip install scikit-learnimport sklearn)。

何がいいん?

サーバーレスがかなりサーバーレス

今までの「サーバーレス」は、サーバー管理をクラウドにお任せするってことでした。でもこれは本当にサーバーがありません。

  • バックエンドサーバー不要
  • 静的サイトとしてデプロイできます
  • CDN で配信するだけで OK です

プライバシーが良い感じ

ユーザーのプロンプトがサーバーを経由しません。ブラウザから直接 OpenAI API を呼び出すので、良くも悪くもサービス提供者のサーバーにデータが残りません。

レスポンスが早い

サーバーを経由しないので、ネットワークの往復が減ります。

開発しやすい

Python の AI ライブラリがそのままブラウザで使えます。JavaScript で頑張らなくても済みます。

でも課題もある

パフォーマンス面

  • 初回読み込み時間: Pyodide とライブラリのダウンロードで数十 MB(ライブラリによりますが)
  • メモリ使用量: ブラウザのメモリをけっこう使います
  • 実行速度: WebAssembly ですがネイティブ Python より遅いと思います

開発・運用面

  • API キー管理: クライアントサイドで API キーを扱うのはかなり制約が大きいです
  • エラーハンドリング: ネットワークエラーの処理が面倒かもしれません
  • デバッグ: ブラウザで Python デバッグするのは慣れが必要そうです

使いやすさ

一般ユーザーに API キーの設定や Ollama (Local で LLM を動かせて今回のサンプルコードも対応してる) の導入をお願いするのは、なかなかハードルが高いです。

今どんなところで使えそう?

使えそうなケース

開発者・研究者向け

  • AI エージェントの試作
  • 教育・学習用途
  • 技術デモ

社内利用

  • 社内の AI 実験環境
  • 研究開発チーム向けツール

しんどそうなケース

一般ユーザー向けサービス

  • IT リテラシーが高くないと使えません
  • API キー管理が個人に委ねられます

大規模・商用サービス

  • セキュリティ要件が厳しいです

これからどうなりそう?

この技術が本領発揮するのは、ブラウザがネイティブで AI をサポートするようになったときかもしれません。

ブラウザネイティブ AI

Chrome、Edge、Safari などが、ローカル LLM の API を提供するようになったら、こんな感じで良さそうです。

  • API キー不要
  • オフライン動作
  • プライバシー完璧
  • 高速レスポンス

WebGPU を使った高速推論ができるようになれば、ブラウザ上での AI 処理がもっと実用的になりそうです。

まとめ

今の wasm-agents-blueprint は、技術デモとしては面白いですが、実用的なサービスにするにはまだ課題が多いです。

作者も「素晴らしいアイデアか面白いハックかまだ分からない」と言ってます。

でも、将来的には、ブラウザの AI 機能が充実してきたら、クライアントサイドでの AI 処理が普通になる可能性もあります。

そういう意味で、今のうちから触っておくと面白いかもしれません。

参考文献

GitHubで編集を提案
cepe-jp

Discussion