コード実行

ADK-Rustは、2つのクレートを通じてコード実行を提供します。

  • adk-sandboxProcessBackend(サブプロセス)およびWasmBackend(wasmtime)を使用した分離実行ランタイム
  • adk-codeRustExecutor(チェック、ビルド、実行のパイプライン)およびCodeToolを備えた言語対応ツールチェーン

この分離は意図的なものです。adk-sandboxは分離を処理し、adk-codeはコンパイルと言語固有のロジックを処理します。

クイックスタート

use adk_code::{CodeTool, RustExecutor, RustExecutorConfig};
use adk_sandbox::ProcessBackend;
use std::sync::Arc;

let backend = Arc::new(ProcessBackend::default());
let executor = RustExecutor::new(backend, RustExecutorConfig::default());
let tool = Arc::new(CodeTool::new(executor));

let agent = LlmAgentBuilder::new("code_agent")
    .instruction("Execute Rust code when asked to compute something.")
    .model(model)
    .tool(tool)
    .build()?;

Rustのコンパイルパイプラインを使用せずに、サンドボックスで直接実行する場合:

use adk_sandbox::{SandboxTool, ProcessBackend};
use std::sync::Arc;

let backend = Arc::new(ProcessBackend::default());
let tool = Arc::new(SandboxTool::new(backend));

アーキテクチャ

CodeToolはRustのコンパイルパイプライン(エラーのチェック、バイナリのビルド、その後の実行)を追加します。SandboxToolはコンパイルせず、バックエンドを通じてコードを直接実行します。

バックエンド機能マトリックス

機能ProcessBackendWasmBackendEmbeddedJsExecutorMonty executorsDockerExecutor
タイムアウト適用適用適用適用(VM 内)適用
メモリ制限適用なし適用適用なし適用コンテナの制限
ネットワーク分離強制なしWASI ネットワークなしAPI 使用不可API 使用不可設定可能
ファイルシステム分離強制なしWASI の事前オープンなしAPI 使用不可許可されたマウントのみ設定可能
環境分離env_clear()完全API 使用不可許可されたマップのみ設定可能
言語Rust、Python、JS、TS、コマンドWasmJavaScriptPythonPython、Node.js

ProcessBackendは、自身が強制しないことについて正直です。完全なサンドボックス化にはWasmBackendを、コンテナレベルの分離にはDockerExecutorを使用してください。

ツール

ツールCrate名前言語スコープ
CodeTooladk-codecode_execRustcode:execute, code:execute:rust
SandboxTooladk-sandboxsandbox_exec多言語code:execute
PythonCodeTooladk-toolpython_codePython(コンテナベースの CPython)code:executecode:execute:container
MontyPythonCodeTooladk-toolmonty_python_codePython(プロセス内 Monty)code:execute

CodeToolSandboxToolMontyPythonCodeToolは、エラーを情報として扱うパターンに従います。エラーは"status"フィールドを持つ構造化されたJSONとして返され、ToolErrorとして返されることはありません。これにより、エージェントは失敗について推論できます。PythonCodeToolは例外であり、code引数がない場合とエグゼキューター レベルの失敗に対してToolErrorを返します。スクリプト レベルの失敗のみがデータとして表面化します。

インプロセス Python 実行(一回限りの実行および REPL モード、OS アクセス許可、ホスト関数)については、Python コード実行を参照してください。

構造化診断

CodeToolは、Rust のコンパイル エラーについて解析済みのコンパイラー診断を返します。

{
  "status": "compile_error",
  "diagnostics": [
    {
      "level": "error",
      "message": "expected `;`",
      "code": "E0308",
      "spans": [{ "file_name": "main.rs", "line_start": 3, "column_start": 15 }]
    }
  ],
  "stderr": "error: expected `;`"
}

成功レスポンスには、ハーネスから抽出された構造化出力が含まれます。

{
  "status": "success",
  "stdout": "",
  "output": { "greeting": "hello" },
  "exit_code": 0,
  "duration_ms": 42
}

Rust コードの契約

ユーザーコードはfn run(input: serde_json::Value) -> serde_json::Valueを提供する必要があります。ハーネスは、fn main()、標準入力の解析、標準出力のシリアル化でこれをラップします。ユーザーコードではfn main()を定義したり、クレート レベルの属性(#![...])を使用したりしてはなりません。

以前のAPIからの移行

以前のadk-code型(CodeExecutorExecutionRequestRustSandboxExecutor)と、adk-toolRustCodeToolは削除されました。代わりに新しい型を使用してください。

削除対象置換後クレート
RustCodeTool(0.8.0 で削除)CodeTooladk-code
RustSandboxExecutorRustExecutoradk-code
ExecutionRequestExecRequestadk-sandbox
ExecutionResultExecResultadk-sandbox
CodeExecutorSandboxBackendadk-sandbox

完全な移行ガイドについては、adk_code::compatを参照してください。

ブラウザ JavaScript

adk-browserを介したブラウザページJavaScriptの実行は、独立した機能です。これはリモートページのコンテキスト内で実行され、コード実行基盤の一部ではありません。ウェブの自動化とページ操作にはadk-browserツールを使用してください。

Studioとの統合

ADK Studioは同じコード実行パイプラインを使用します。

  • ライブランナー: RustExecutor + ProcessBackendを介して作成したRustを実行
  • コード生成: 同じRust本体を生成されたプロジェクトに埋め込み
  • サンドボックス設定: バックエンドで適用可能な機能に対応付けます。
コード実行 - ADK-Rust ドキュメント | ADK-Rust