スコープ設定されたファイル、明確なパッケージポリシー、リソースと時間の制限、キャプチャされた出力、結果が表示または保存される前のアプリケーション側のレビューを備えた隔離されたサンドボックスに、モデルが要求したコード実行をルーティングすることで、AIアプリにコードインタプリタを追加します。モデルはコードが有用であるタイミングを判断できますが、アプリは実行の境界を所有する必要があります。タスクに必要なファイルのみをアップロードし、短命のサンドボックスセッションを作成または再利用し、厳格な制限でPythonを実行し、stdout、stderr、生成ファイル、ログをキャプチャし、構造化された結果をモデルに返し、ワークフローが完了したらセッションをクリーンアップします。
コードインタプリタがAIアプリにもたらすもの
コードインタプリタは、言語モデルをテキストのみのアシスタントから、計算、ファイル変換、データ検査、チャート生成、レビュー可能なアーティファクトの作成ができるツール利用アプリケーションに変えます。プロンプトからスプレッドシートについてモデルに推論させる代わりに、アプリはモデルにPythonを書かせ、アップロードされたファイルに対して実行し、出力を検査し、結果を説明させることができます。
有用なパターンは「モデルに何でも実行させる」ことではありません。有用なパターンは制御された実行です。アプリケーションはユーザータスクを受け入れ、モデルに run_python などのツール呼び出しをリクエストさせ、そのリクエストをメインのアプリケーションプロセスではなくサンドボックス内で実行します。サンドボックスは、一時ファイル、パッケージインストール、スクリプト、チャート、ログのための作業台になります。
コードインタプリタ機能は特に以下の場合に有用です:
- CSV、Excel、JSON、ログ分析
- アップロードされたデータからのチャート生成
- 形式変換とデータクリーニング
- 正確な計算が必要な数学およびシミュレーションタスク
- モデルが説明する前にテストが必要なコードスニペット
- あるステップの出力が次のステップの入力となるマルチステップエージェントワークフロー
これらは、無制限の本番環境認証情報、プライベートシステムへの長期間のアクセス、またはユーザーが確認できる監査証跡のないサイレント実行を必要とするタスクには適していません。結果が金銭、インフラストラクチャ、安全性、またはアクセス制御に影響を与える可能性がある場合は、副作用がサンドボックスから出る前にレビューゲートを追加してください。
リファレンスアーキテクチャ
実用的なコードインタプリタのアーキテクチャは5つの部分で構成されます:
| レイヤー | 責任 | 一般的な設計上の選択 |
|---|---|---|
| ユーザーインターフェース | ファイルのアップロード、進捗表示、アーティファクトの表示、承認の要求 | アップロードされたファイルを現在の会話またはプロジェクトにスコープする |
| アプリケーションサーバー | ユーザー認証、ポリシーの実施、サンドボックスセッションの作成、ログの保存 | 生のサンドボックス認証情報をブラウザに公開しない |
| モデルオーケストレーション | コードツールを呼び出すタイミングの決定と結果の要約 | 自由形式のテキストを解析するのではなく、構造化されたツール呼び出しを使用する |
| サンドボックスランタイム | Pythonの実行、一時ファイルの保持、許可されたパッケージのインストール | リソース、タイムアウト、クリーンアップの制御を適用して実行する |
| アーティファクトストア | チャート、CSV、レポート、ログなどの承認された出力を保存 | アプリまたはユーザーが承認した出力のみを保存する |
モデルはインフラストラクチャを直接制御すべきではありません。ツール呼び出しを要求するべきです。アプリケーションが、そのツール呼び出しが許可されるかどうか、どのファイルが添付されるか、どのくらい実行できるか、どのパッケージが利用可能か、どの出力が返されるかを決定します。
この分離により、モデルをセキュリティ境界にすることなく、有用性を維持します。
実装フロー
堅牢な実装フローは、コードが実行される前から始まります。
1. ユーザータスクとファイルを受け入れる
ユーザーがファイルをアップロードしたら、所有者、ワークスペース、コンテンツタイプ、サイズ、保持ポリシーを記録するアプリケーションレベルのファイルレコードとして保存します。ユーザーのアカウント内のすべてのファイルをすぐにインタプリタに公開しないでください。サンドボックスは現在のタスクに必要なファイルのみを受け取る必要があります。
例えば、ユーザーは次のように尋ねるかもしれません:
「このCSVを分析し、主要な収益ドライバーを見つけて、チャートと短い説明を返してください。」
アプリは、アップロードされたCSVを利用可能なファイルとして次のモデルターンに添付できますが、実際のファイルのバイトは、コードの実行が承認された場合にのみサンドボックスに移動する必要があります。
2. モデルにツール呼び出しをリクエストさせる
狭いツールサーフェスを定義します。典型的な最初のバージョンでは、いくつかのツールのみが必要です:
{
"name": "run_python",
"arguments": {
"code": "import pandas as pd\n...",
"input_files": ["sales.csv"],
"expected_outputs": ["summary.json", "revenue_chart.png"],
"timeout_seconds": 30
}
}
スキーマを明示的に保ちます。モデルはコード、入力ファイル、期待される出力、タイムアウトリクエストを宣言する必要があります。アプリケーションはタイムアウトを短縮したり、不明なファイルを拒否したり、ポリシーに反するコマンドをブロックしたりできます。
3. サンドボックスセッションを作成または再利用する
一回限りのアシスタント応答の場合は、新しいサンドボックスセッションを作成し、入力ファイルをアップロードし、コードを実行し、結果を収集し、セッションを終了します。ノートブックのようなユーザー体験の場合は、現在の会話中はセッションを維持し、後続のセルが以前の変数やファイルを再利用できるようにします。
短命なセッションは推論が容易です。ステートフルなセッションは分析タスクに人間工学的です。意図的に選択し、状態が存在する場合はユーザーに表示します。
4. Pythonを実行し、結果をキャプチャする
サンドボックス実行APIまたはサンドボックス内の独自のワーカーを介してコードを実行します。構造化された実行出力をキャプチャします:
{
"status": "success",
"stdout": "Loaded 12,448 rows\n",
"stderr": "",
"artifacts": [
{
"path": "revenue_chart.png",
"type": "image/png",
"size_bytes": 84231
},
{
"path": "summary.json",
"type": "application/json",
"size_bytes": 1260
}
],
"duration_ms": 1840
}
この構造化された結果をモデルに返します。モデルは何が起こったかを説明し、生成されたファイルを引用し、ユーザーが別のパスを希望するかどうかを尋ねることができます。
5. 結果をユーザーに返す
何かが失敗しない限り、ユーザーに生のログを読ませることは避けてください。優れたインターフェースは、回答、生成されたチャートやファイル、およびコードが実行されたという簡単な開示を表示します。レビューのために展開可能な実行ログを提供します。
失敗した実行の場合は、簡潔なエラーを表示し、モデルにコードを修正させます。ユーザーがデバッグしている場合を除き、長いトレースバックをメインチャットにダンプしないでください。
ファイル、出力、生成されたアーティファクトの処理
ファイル処理は、多くのコードインタプリタプロジェクトが乱雑になるところです。入力と出力を別々のオブジェクトとして扱います。
入力ファイルは、安定したサニタイズされたパスでサンドボックスにコピーする必要があります。スペース、シェル文字、またはネストされたディレクトリを含むユーザー指定のパス名を保持しないでください。表示名からサンドボックスパスへのマッピングをアプリケーションの状態に保持します。
生成されたファイルは、ダウンロード可能なアーティファクトになる前にスキャンして分類する必要があります。チャート画像、クリーニングされたCSV、JSONサマリー、PDFレポートは直接提示しても安全かもしれません。生成されたスクリプト、実行可能ファイル、アーカイブはより厳格な処理が必要です。
チャート生成の場合は、インラインディスプレイのみに依存するのではなく、モデルに画像ファイルを明示的に保存するよう依頼します。データ分析の場合は、自然言語の説明に加えて、機械可読なサマリーファイルも依頼します。これにより、アプリは検証および保存するための安定したものを得られます。
有用なアーティファクトポリシーは次のようになります:
| アーティファクトタイプ | デフォルトの処理 |
|---|---|
.png, .jpg, .webp, .svg チャート |
サイズとタイプのチェック後にUIでプレビュー |
.csv, .json, .xlsx データ出力 |
ダウンロードとして提供し、変更を要約 |
.txt, .md, .pdf レポート |
サイズに応じてプレビューまたはダウンロード |
.py, .sh, バイナリ, アーカイブ |
自動実行または自動オープンは行わず、明示的なレビューが必要 |
アプリが永続的なプロジェクトをサポートしている場合は、承認されたアーティファクトをサンドボックス外に保存します。サンドボックスは使い捨て可能なままにすべきです。
パッケージとネットワークポリシーの設定
ほとんどのコードインタプリタワークフローは、pandas、NumPy、matplotlib、seaborn、scikit-learn、openpyxlなどのパッケージを必要とします。問題は、パッケージがプリインストールされているか、オンデマンドでインストールされるか、カスタムサンドボックステンプレートに組み込まれているかです。
プリインストールされたパッケージは実行を予測可能にします。オンデマンドインストールは柔軟ですが、タスクを遅くし、依存関係のドリフトを引き起こす可能性があります。カスタムテンプレートは、一般的なワークロードがわかれば、通常は最良の本番パスです。
起動前にパッケージポリシーを設定します:
- 常に利用可能なパッケージ
- モデルがパッケージインストールをリクエストできるかどうか
- インストールが公開パッケージインデックスにアクセスできるかどうか
- バージョンの固定が必要かどうか
- インストールの実行時間
- コンパイル済みまたはネイティブパッケージが許可されるかどうか
ネットワークポリシーも同様に重要です。多くのデータタスクはファイルがアップロードされた後はインターネットアクセスを必要としません。ワークフローが外部APIを必要とする場合、広範なシークレットをサンドボックスにドロップするのではなく、アプリケーションが承認したツールを介して認証情報をルーティングします。モデルはデフォルトで無制限の環境変数を受け取るべきではありません。
制限、ログ、クリーンアップ、レビューの適用
コードインタプリタはデモ用のセルランナーではなく、本番機能です。最初から制限を設けてください。
最低限の管理項目には以下を含める必要があります:
- セルまたはツール呼び出しごとの最大実行時間
- stdoutとstderrの最大出力サイズ
- 最大アーティファクトサイズとファイル数
- タスクに適したCPUとメモリの制限
- プレビューとダウンロードに許可されるファイル拡張子
- ユーザーごとおよびワークスペースごとの同時実行制限
- 一時セッションとファイルのクリーンアップルール
ログは次の3つの質問に答える必要があります:誰が実行をリクエストしたか、どのコードが実行されたか、どのような出力が生成されたか。ワークフローをデバッグおよび監査するのに十分な情報を保存しますが、プライベートなアップロードデータを製品ポリシーが必要とする以上に保持しないでください。
人間またはユーザーのレビューが最終的な制御です。低リスクの分析では、レビューとはユーザーがチャートをダウンロードする前に見ることを意味する場合があります。チケットを更新したり、データベースに書き込んだり、外部APIを呼び出したりできるエージェントワークフローの場合、レビューは副作用の前に行われるべきであり、後ではありません。
Novita Agent Sandboxの適合箇所
Novita Agent Sandboxは、コード実行、ブラウザワークフロー、コンピュータ使用スタイルのタスク、評価、強化学習環境、長時間実行ワークフローに隔離されたランタイム環境を必要とするAIエージェント向けに設計されています。コードインタプリタ機能の場合、サンドボックスは実行レイヤーとして機能し、アプリはユーザー認証、モデルオーケストレーション、ファイルポリシー、レビュー、製品固有の保持を担当します。
Novitaのサンドボックスドキュメントには、サンドボックス内のファイルの読み取り、書き込み、アップロード、ダウンロード、監視のためのファイルシステムワークフローが含まれています。これらの機能はコードインタプリタのニーズに直接対応します:ユーザーファイルを実行環境に移動し、コードにチャートや変換データを生成させ、選択した出力をアプリに戻します。現在のファイル操作の概要については、Novitaサンドボックスファイルシステムドキュメントを参照してください。
インタプリタが単純なPythonランナーを超えて成長する場合、カスタムサンドボックステンプレートは依存関係とランタイム設定の標準化に役立ちます。これは、すべてのセッションに同じ分析スタック、内部コマンドラインツール、またはプロジェクト固有のライブラリが必要な場合に有用です。小さな許可されたパッケージセットから始め、ワークロードが安定したら、繰り返しの設定をテンプレートに移行します。
Novita固有の統合に関する決定は、一般的なアーキテクチャから分離しておきます。コードインタプリタは、ファイルの可視性、パッケージインストール、ネットワークアクセス、ログ保持、レビューに関するアプリケーションレベルのポリシーを依然として必要とします。サンドボックスは制御されたランタイムを提供します。製品はそのランタイムの使用方法を定義します。
評価チェックリスト
出荷前に、実際のワークフローと敵対的なプロンプトで機能をテストしてください。
| 質問 | 確認事項 |
|---|---|
| ユーザーは適切なファイルをアップロードできるか? | ファイルサイズ、タイプチェック、所有者チェック、明確なエラーメッセージ |
| モデルはクリーンに実行をリクエストできるか? | コード、入力、期待される出力、タイムアウトを含む構造化されたツール呼び出し |
| サンドボックスは正しくスコープされているか? | 承認されたファイルと環境変数のみが利用可能 |
| パッケージは予測可能か? | 一般的なパッケージは動作し、拒否されたパッケージは明確に失敗し、インストールには制限がある |
| 出力は使用可能か? | チャートがレンダリングされ、ファイルがダウンロードされ、サマリーが生成されたアーティファクトと一致する |
| 障害は回復可能か? | トレースバックがキャプチャされ、モデルがコードを修正可能、ユーザーは簡潔なエラーを見る |
| 制限は適用されるか? | 無限ループ、巨大な出力、メモリ集中タスク、長時間のインストールが終了する |
| レビューは組み込まれているか? | ユーザーは重要な副作用の前にコード、ログ、アーティファクトを検査できる |
| クリーンアップは信頼できるか? | 一時ファイルとセッションがスケジュールに従って削除または期限切れになる |
最良の最初のリリースは通常、狭い範囲です:Python実行、小さなパッケージセット、ファイルアップロード、チャートとダウンロード可能なファイル、明確な制限、実行ログ。基本的なループが観察可能で信頼できるようになった後にのみ、より広範なパッケージインストール、永続的なセッション、外部APIアクセス、エージェントの副作用を追加します。
結論
コードインタプリタは、モデルが実行を要求できるが、アプリがサンドボックス、ファイル、制限、レビューステップを制御する場合に最適に機能します。狭いPythonツールから始め、入出力を明示的に保ち、フローが安定した後にのみ拡張します。
FAQ
安全にコードインタプリタを追加する方法は? 隔離されたサンドボックスを使用し、入力ファイルをスコープし、ランタイムとメモリを制限し、生のシェルアクセスではなく構造化された出力を返します。
モデルはパッケージインストールを制御すべきですか? あなたが定義するポリシーの範囲内でのみです。多くのアプリは固定されたパッケージセットから始め、ワークロードが必要な場合に後でインストールを追加します。
すべてのコードインタプリタタスクにネットワークアクセスが必要ですか? いいえ。多くの分析ワークフローは、ユーザーファイルがアップロードされると完全にオフラインで動作し、実行モデルをよりシンプルに保ちます。
実行後、ユーザーは何を見るべきですか? 結果、生成されたアーティファクト、簡潔なログまたはエラーサマリー。コードを検査したりタスクを再実行したりするオプションも提供します。
