alantech/marsha

Marsha is a functional, higher-level, English-based programming language that gets compiled into tested Python software by an LLM

Marsha – LLM駆動の「プログラミング言語」

何であるか – Marsha は、データ処理タスクの小さなマークダウンスタイルの記述を可能にします。入力と出力の「型」を宣言し、短い自然言語の説明を書き、いくつかの入出力例を提供します。Marsha コンパイラはこの仕様を LLM(デフォルトでは OpenAI の API)に送信し、Python コードを生成し、例をテストとして実行して検証し、実行可能なスクリプトを出力します。

主なアイデア

  • 宣言型構文.mrsh ファイルはマークダウンに似ています。型は CSV スタイルのテーブルで定義され、関数は # func … ヘッダーで宣言され、その後に説明と例のブロックが続きます。
  • 例に基づくテスト – 提供された例は、コンパイラが生成されたコードを検証するために使用するテストスイートになります。これにより、出力が壊れるリスクが低減されます。
  • LLM をバックエンドコンパイラとして利用 – 仕様を Python に変換する重い処理は LLM が担当します。設定、コマンドラインフラグ、環境変数でモデルを選択できます。
  • 実行可能な出力 – 生成された Python には、小さな CLI ラッパー(またはシンプルな REST サーバー)が含まれており、ターミナルから直接コンパイルされた関数を呼び出せます。

使い方

  1. リポジトリからパッケージをインストールします:
    uv pip install git+https://github.com/alantech/marsha
    
  2. Marsha 構文(型定義、# func … ブロック、説明、例)を使って my_task.mrsh ファイルを作成します。
  3. コンパイルします:
    python -m marsha my_task.mrsh
    
    コマンドは設定された LLM に接続し、Python を生成し、テストを実行して結果のスクリプトを書き出します。
  4. 生成されたスクリプトを CLI ツールとして、または小さなウェブサービスとして実行します:
    python -m my_task --help          # 生成された CLI オプションを確認
    python -m my_task -s 8080         # REST サーバーを起動
    

設定 – Marsha は標準的な OS の場所(Linux では ~/.config/marsha/config.json など)から JSON 設定ファイルを読み込みます。api_baseapi_keymodelmodel_strong を設定できます。環境変数(OPENAI_ORGOPENAI_SECRET_KEY/OPENAI_API_KEY)はデフォルトの OpenAI バックエンドに使用できます。--api-base および --model フラグは、コマンドラインでこれらの設定を上書きします。

コマンドラインオプション(主なハイライト):

  • -q – コード生成のみ、修正ステージをスキップ(安価だが信頼性は低い)。
  • -a N – 最大 N 回のコンパイル試行を行い、失敗時に再試行。
  • -n N – 各試行で N 個の並列な LLM「思考経路」を実行。最初に成功した経路が採用される。
  • --exclude-main-helper – 自動生成された CLI ラッパーを除外。
  • --exclude-sanity-check – Marsha 定義の初期整合性チェックをスキップ。
  • -s – 統計情報をファイルに書き出す。

ロードマップのハイライト

  • 平均正解率を 90% 以上に引き上げる。
  • エディタ用の構文ハイライトプラグインを追加。
  • Python 以外のターゲット言語をサポート。
  • モジュールシステムと、既存の Python を Marsha 構文に戻す「デコンパイラ」を導入。
  • グラフィカルな GUI エディタと、より洗練されたデバッグヘルパーを構築。

対象ユーザー – 手動ですべての行を書くことなく、小さなデータ処理スクリプト(例:pandas パイプライン)を、より高レベルで、例に基づいて生成したい開発者。また、テスト駆動の監視下で LLM が実装を生成することに抵抗がない方。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト