心が開かれました! MCPを使ってp5.jsをいじれば、話すだけでクリエイティブなプログラミングができる? !

今日は、さらにクレイジーなアイデアをお伝えしたいと思います。
大きなモデルを使って p5.js を制御し、話すだけでクリエイティブなプログラミングを実現できるでしょうか?

p5.j​​sとは何ですか?

始める前に、p5.js について簡単に紹介します。フロントエンド開発者、またはクリエイティブプログラミングに興味がある人なら、きっと聞いたことがあるはずです。

p5.j​​s は、非常にシンプルで直感的なコードを使用して、さまざまなグラフィック、アニメーション、インタラクティブな効果を作成できる JavaScript ライブラリです。 p5.j​​s の目標は、特にアーティスト、デザイナー、教育者、初心者にとって、プログラミングをよりアクセスしやすく表現力豊かにすることです。

大規模なモデルを p5.js と組み合わせる理由は何ですか?

p5.j​​s (https://github.com/processing/p5.js) をなぜ大規模モデルに関連付ける必要があるのか​​と疑問に思うかもしれません。

実際、これには 2 つの理由があります。

  1. 1. クリエイティブプログラミングの敷居を下げる: p5.js は非常にシンプルですが、プログラミングの基礎がまったくない人にとっては、依然として一定の学習コストがかかります。自然言語を使用して必要な視覚効果を記述し、大きなモデルで p5.js コードを自動的に生成できれば、誰もがアーティストになれるのではないでしょうか。
  2. 2. 新しいインタラクション方法の探求: 大規模モデルは自然言語を理解できるだけでなく、さまざまなクリエイティブコンテンツを生成することもできます。大規模モデルの「想像力」とp5.jsの表現力を組み合わせれば、これまでにないインタラクティブな体験を生み出すことができます。

私のアイデア: MCP + WebSocket

Unity MCP パッケージに触発されて、大規模なモデルを p5.js で接続するためのソリューション、MCP + WebSocket を思いつきました。

全体的なアーキテクチャ

  1. 1.  LLM/クライアント: これは、Claude、Cursor、または単純なコマンド ライン インターフェイスなど、テキスト コマンドを送信できる任意のソースになります。
  2. 2.  Python MCP サーバー:
    • • WebSocket サーバーとして機能し、LLM/クライアントからコマンドを受信します。
    • • 指示を解析し、主要なパラメータ(色、形状、位置など)を抽出します。
    • • WebSocket メッセージを介して p5.js スケッチにパラメータを送信します。
  3. 3.  p5.js スケッチ:
    • • Python MCP サーバーに接続する WebSocket クライアントが含まれています。
    • • サーバーからメッセージを受信し、メッセージの内容に基づいて図面を更新します。
    • • 描画結果をブラウザに表示します。
  4. 4. ディスプレイ: p5.js スケッチの出力を表示するために使用されるユーザーのブラウザ。

なぜ WebSocket なのか?

  • • リアルタイム: WebSocket は双方向のリアルタイム通信機能を提供するため、頻繁なやり取りが必要なシナリオに非常に適しています。
  • • クロスプラットフォーム: WebSocket は Web 標準であり、さまざまなプラットフォームやさまざまな言語で使用できます。
  • • 使いやすい: Python と JavaScript の両方に成熟した WebSocket ライブラリがあるため、開発が非常に簡単になります。

 概念実証: コード実装

このアイデアの実現可能性を検証するために、非常にシンプルなプロトタイプを作成しました。

Python MCP サーバー (簡易版)

# server.py
import asyncio
import websockets
import json

asyncdefhandler(websocket, path):
    print(f"New connection from {websocket.remote_address}")
    try:
        asyncfor message in websocket:
            print(f"Received: {message}")
            try:
                data = json.loads(message)
                # 假设指令格式: {"command": "draw", "shape": "circle", "x": 100, "y": 100, "color": "red"}
                if data.get("command") == "draw":
                    # 简单起见,直接将收到的数据转发给 p5.js
                    await websocket.send(json.dumps(data))
            except json.JSONDecodeError:
                print("Invalid JSON format")
    except websockets.exceptions.ConnectionClosedError:
        print("Connection closed")

asyncdefstart_server():
    server = await websockets.serve(handler, "localhost"6500)
    print("WebSocket server started on ws://localhost:6500")
    await server.wait_closed()

if __name__ == "__main__":
    asyncio.run(start_server())

このコードは、ローカル コンピューターのポート 6500 をリッスンする単純な WebSocket サーバーを実装します。クライアントからメッセージを受信すると、JSON 形式のデータを解析し、データに含まれている場合は "command": "draw"、接続された p5.js クライアントにデータ全体を転送します。

p5.j​​s スケッチ(シンプル版)

// sketch.js
let socket;

functionsetup() {
createCanvas(400400);
  socket = newWebSocket("ws://localhost:6500");

  socket.onopen = function(event) {
    console.log("Connected to server");
  };

  socket.onmessage = function(event) {
    let data = JSON.parse(event.data);
    console.log("Received from server:", data);
    if (data.command === "draw") {
      drawShape(data.shape, data.x, data.y, data.color);
    }
  };

  socket.onclose = function(event) {
    console.log("Disconnected from server");
  };
}

functiondrawShape(shape, x, y, color) {
fill(color);
if (shape === "circle") {
    circle(x, y, 50);
  } elseif (shape === "square") {
    rect(x, y, 5050);
  }
}

functiondraw() {
// 可以根据需要添加动画或其他交互
}

この p5.js コードは WebSocket クライアントを作成し、ローカル ポート 6500 (Python サーバー) に接続します。サーバーからメッセージを受信すると、JSON データを解析し、 command 正しい 場合は 対応するグラフィックを描画する関数drawを呼び出します 。drawShape

仕組み

  1. 1.  Python サーバーを起動します。コマンド ラインで実行します python server.py
  2. 2.  p5.js スケッチを開きます。 sketch.js コードを HTML ファイルに入れて、ブラウザーで HTML ファイルを開きます。
  3. 3. 指示を送信する: これで、WebSocket メッセージを送信できる任意のツール (単純な Python スクリプトでも) を使用して、  ws://localhost:6500 JSON 形式の指示をクライアントに送信できるようになりました。次に例を示します。
{"command": "draw", "shape": "circle", "x": 100, "y": 100, "color": "red"}

p5.j​​s キャンバスに赤い円が表示されます。

今後の展望

これは非常に基本的なプロトタイプですが、MCP プロトコルを使用して大規模なモデルを p5.js に接続できることを証明しています。

次に、次のことができます。

  • • 命令セットを改善します: より多くのグラフィック、プロパティ、アニメーション効果などをサポートします。
  • •  LLM を統合: このプロトタイプを Claude などの LLM に接続して、真の自然言語制御を実現します。
  • • エラー処理: より堅牢なエラー処理メカニズムを追加します。
  • • 双方向通信: p5.js がサーバーにメッセージを送信できるようにします (例: 現在のステータスの報告、イベントのトリガーなど)。
  • • ユーザー インターフェイス: ユーザーの設定と使用を容易にするために、より使いやすいユーザー インターフェイスを開発します。
  • • パッケージ化: Python サーバーと p5.js コードを、使いやすいライブラリまたはツールにパッケージ化します。

この方向に興味がある方は、ぜひコミュニケーションを取り、一緒に探求しましょう!おそらく、近い将来、私たちは自然言語を使ってあらゆる種類の素晴らしい視覚芸術を作成できるようになるでしょう。

 

 

 

 

Leave a Comment

Your email address will not be published. Required fields are marked *