Monty

Monty は、制限されたPythonサブセットの Rust ベースのインタープリターです。 MontyCodeActProvider は、Agent Framework エージェントに 1 つの execute_code ツールを提供し、生成されたコードが型指定された非同期関数として、または call_tool(...)を介してプロバイダー所有のツールを呼び出すことができます。

この統合では、ハードウェア分離サンドボックスではなく、制限付きインタープリターで CodeAct パターンを使用します。

Hyperlight のハイパーバイザーまたは WASM ゲスト依存関係のないクロスプラットフォーム CodeAct ランタイムが必要な場合は、Monty を使用します。

Note

agent-framework-monty はベータ パッケージです。 Monty は、オペレーティング システム、サブプロセス、および直接ネットワーク アクセスを制限しますが、ハードウェアから分離された仮想マシンではありません。

Warning

および は現在 FIDES をサポートしていません。 プロバイダー管理のホスト ツール呼び出しは、エージェントの関数ごとのミドルウェア パイプラインを通過しません。

直接エージェント ツールまたは外側の execute_code 呼び出しのチェックでは、入れ子になった呼び出し、コード内部の中間値、またはファイルとネットワークの機能はカバーされません。 ホスト ツールでは、独自の認可と送信先の制御を適用する必要があります。

FIDES に依存するツールは、Monty で管理されるツールではなく、直接エージェント ツールとして保持するか、これらの保証を必要とするワークフローでは CodeAct を無効のままにする。 CodeAct の現在の制限事項を参照してください。

パッケージをインストールする

pip install agent-framework-monty agent-framework-foundry --pre

MontyCodeActProviderを追加する

エージェントに直接登録するのではなく、プロバイダーにホスト ツールを登録します。 モデルは execute_code を確認し、生成されたコードからこれらのツールを呼び出します。

async def main() -> None:
    """Run the provider-owned Monty CodeAct sample."""
    # 1. Create the Monty-backed provider and register sandbox tools on it.
    codeact = MontyCodeActProvider(
        tools=[compute, fetch_data],
        approval_mode="never_require",
    )

    # 2. Create the client and the agent.
    agent = Agent(
        client=FoundryChatClient(
            project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
            model=os.environ["FOUNDRY_MODEL"],
            credential=AzureCliCredential(),
        ),
        name="MontyCodeActProviderAgent",
        instructions="You are a helpful assistant.",
        context_providers=[codeact],
        middleware=[log_function_calls],
    )

    # 3. Run a request that should use execute_code plus provider-owned tools.
    query = (
        "Fetch all users, find admins, multiply 7*(3*2), and print the users, "
        "admins, and multiplication result. Use a single execute_code call. "
        "You may call the registered tools directly as typed async functions "
        "(`await compute(operation='multiply', a=7, b=6)`) or via "
        "`call_tool('compute', ...)`."
    )
    print(f"{_CYAN}{'=' * 60}")
    print("Monty CodeAct provider sample")
    print(f"{'=' * 60}{_RESET}")
    print(f"{_CYAN}User: {query}{_RESET}")
    result = await agent.run(query)
    print(f"{_CYAN}Agent: {result.text}{_RESET}")

コントロール ホスト ツールのパラメーターの説明

MontyCodeActProviderとtool_description_formatはMontyExecuteCodeToolを受け入れます。 既定の "compact"には、スカラー パラメーターの型、必須または省略可能な状態、説明、列挙値、および execute_code 説明と CodeAct 命令の既定値が含まれます。 完全な JSON スキーマには "json" を使用するか、正確な大文字と小文字を区別するツール名で形式を選択します。

codeact = MontyCodeActProvider(
    tools=[compute, fetch_data],
    tool_description_format={
        "compute": "json",
        "fetch_data": "compact",
    },
)

マッピングから省略されたツールでは、コンパクト形式が使用されます。 コンパクトレンダリングでは、入れ子になったオブジェクト、配列、参照、ユニオンなどを含むスキーマを、制約を失わずに表現できない場合、自動的に完全な JSON Schema にフォールバックします。 パラメーター スキーマはモデルに表示されるため、説明、列挙値、既定値、またはカスタム スキーマ フィールドに資格情報やその他のシークレットを含めないでください。

機能を設定する

MontyCodeActProvider と MontyExecuteCodeTool のサポート:

  • ホスト ツールとランタイム ツールの管理
  • never_require または always_require の execute_code に対する承認
  • ワークスペースのルートと明示的なファイル マウント
  • Monty リソースの制限
  • エージェント フレームワークのコンテンツとして読み取り/書き込みマウントから返されるファイル

実行後のファイル キャプチャは、読み取り/書き込みマウントから実際の通常のファイルのみを返します。 シンボリック リンク、Windowsジャンクション、その他の再解析ポイント、および非正規ファイルは、すべてのパス レベルでスキップされます。 ファイルを読み取る前に、Monty は、開いているディスクリプターが検証されたパスと一致することを確認し、パス コンポーネントを再確認します。 キャプチャ中にファイルまたは親ディレクトリが変更された場合、ファイルは追跡されるのではなく省略されます。

ネットワーク アクセスとPython パッケージ

Monty は、ホストのPython環境ではなく、独自のPython インタープリターを実行します。 この統合では、 pip または別のパッケージ インストール オプションは提供されません。 ホストに依存関係をインストールしても、Monty コードではインポートできません。 Monty 内で実行されるコードには、インタープリターでサポートされているモジュールを使用します。

Monty では、 allowed_domains オプションは提供されません。 ホストがインストールされたパッケージを必要とする外部 API 呼び出しまたは操作の場合は、狭いホスト ツールを登録し、Monty コードから呼び出します。 資格情報、承認、および宛先許可リストのチェックは、Monty インタープリターの外部のホストで実行されるため、その関数に保持します。

Monty または Hyperlight を選択する

ランタイム 次の場合に選択します。
Monty クロスプラットフォーム実行と制限付きインタープリターで十分です。
Hyperlight セキュリティ強化されたサンドボックス、ファイルシステムコントロール、またはアウトバウンドドメイン許可リストが必要です。

次のステップ