サンドボックス化されたPythonと制御されたパッケージアクセスでAIデータアナリストを構築する

サンドボックス化されたPythonと制御されたパッケージアクセスでAIデータアナリストを構築する

AIデータアナリストがユーザー提供のデータセット、モデル生成コード、パッケージインストール、生成されたチャート、ダウンロード可能な出力を、隔離され監視可能な環境で実行する必要がある場合、サンドボックス化されたPythonが必要になります。実用的な実装フローは次のとおりです。ファイルをアップロードし、信頼できるコードでスキーマを検査し、モデルに計画を依頼し、生成されたPythonをレビューし、制約付きサンドボックスで実行し、出力アーティファクトを検証し、ユーザーに結果を表示します。

AIデータアナリストのアーキテクチャ:アップロード、分析、レビュー

製品パターンは表面上は単純です。ユーザーがCSVをアップロードし、自然言語で質問し、有用なテーブル、チャート、ダウンロード可能なファイルを期待します。内部では、アプリケーションは実際の副作用を伴う小さなエージェントワークフローを実行しています。モデルは分析計画を立案しPythonコードをドラフトしますが、アプリケーションはどのコード、パッケージ、ファイル、ネットワークアクセス、出力を許可するかを決定します。

最初のバージョンは、1つの明確なパスに沿って構築します。

  1. 1つの分析ジョブのためにCSVアップロードを受け入れる。
  2. ジョブスコープのサンドボックスワークスペースを作成する。
  3. モデルにPythonを依頼する前に、所有するスキーマ検査コードを実行する。
  4. モデルに分析計画を依頼し、次にファイルとパッケージのルールに従うスクリプトを依頼する。
  5. 時間、メモリ、ディスク、パッケージ、ネットワークの制限付きでスクリプトを実行する。
  6. 既知の出力ディレクトリから検証済みのアーティファクトのみを収集する。
  7. ユーザーに回答、チャート、警告、ログ、ダウンロード用に選択されたファイルを表示する。

この分離により、責任が明確になります。モデルは分析を提案し説明します。バックエンドは製品ポリシーとオーケストレーションを適用します。サンドボックスは、制約されたファイル、パッケージ、時間、メモリ、ネットワークアクセス、シークレットを使用してコードを実行します。

データ分析用のPythonサンドボックス内では何が実行されるのか?

分析ワークスペースはメインのアプリケーションサーバー内ではなく、サンドボックス内に配置します。サンドボックスは、1つの分析ジョブに対して、アップロードされたファイル、小さなマニフェスト、生成されたスクリプト、承認されたランタイム設定など、限られた入力バンドルを受け取る必要があります。アプリケーションバックエンドは、認証、課金、ユーザーID、長期ストレージ、および本番シークレットをそのワークスペースの外部に保持する必要があります。

AIデータアナリストの場合、サンドボックスは通常、以下のタスクを担当します。

サンドボックスタスク そこに属する理由
ファイルステージング アップロードされたCSVは、Pythonが触れる前にスキャンされ、隔離された作業ディレクトリにコピーされます。
スキーマ検査 アプリは、モデルにファイル全体を公開することなく、列名、タイプ、null率、行数、サンプル値を推測できます。
Python実行 モデル生成コードはアプリケーションサーバーから離れて実行され、タイムボックス化できます。
パッケージ準備 承認された依存関係のみがジョブにインストールまたは利用可能になります。
チャートレンダリング プロット画像はファイルとして書き込まれ、ダウンロード前にレビューされます。
結果パッケージ化 最終的なアーティファクトは、既知の出力ディレクトリから収集できます。
クリーンアップ 一時ファイル、生成されたコード、セッション状態は削除または期限切れにできます。

モデルのプロンプトはデータよりも小さく保ちます。スキーマサマリー、ポリシーで許可されていれば代表的な数行、列の説明、ユーザーの意図、および「モデルを訓練しない」や「承認されたパッケージのみを使用する」などの制約を送信します。製品に、より多くのデータを公開するための具体的でレビューされた理由がない限り、生のデータセットはサンドボックスファイルシステムに残しておく必要があります。

CSVのアップロードとスキーマ検査はどのように機能すべきか?

すべてのアップロードを信頼できない入力として扱うことから始めます。モデルが関与する前に、ファイルタイプ、サイズ、エンコーディング、区切り文字、行数、列数、および疑わしい数式を検証します。CSVには、後で開かれたときにスプレッドシートの数式実行をトリガーする値が含まれている可能性があるため、エクスポートされたファイルはターゲット形式に合わせてサニタイズする必要があります。

実用的なアップロードフローは次のようになります。

  1. ユーザーがアプリにCSVをアップロードします。
  2. バックエンドは、ジョブスコープのオブジェクトキーまたはステージングパスの下に元のファイルを保存します。
  3. バックエンドは、ジョブ用のサンドボックスセッションを作成します。
  4. バックエンドは、ファイルをサンドボックスの作業ディレクトリにコピーします。
  5. 小さな決定論的な検査スクリプトがファイルを読み取り、スキーマサマリーを生成します。
  6. モデルは、スキーマサマリー、ユーザーの質問、許可されたライブラリ、および出力要件を受け取ります。

検査ステップは、モデル生成コードではなく、あなたが所有する決定論的なコードである必要があります。次のようなコンパクトなJSONサマリーを生成できます。

{
  "file": "sales.csv",
  "rows": 84231,
  "columns": [
    {"name": "order_date", "type": "date", "null_rate": 0.01},
    {"name": "region", "type": "string", "sample_values": ["NA", "EMEA", "APAC"]},
    {"name": "revenue", "type": "number", "null_rate": 0.0}
  ],
  "safe_sample_rows": 5
}

このサマリーは、データセット全体を渡すことなく、モデルが分析をドラフトするための十分なコンテキストを提供します。機密性の高いワークロードの場合は、サンプル値を減らすか削除し、列をマスクするか、使用できる列をユーザーが承認することを要求します。

モデルはどのようにしてPythonを安全に生成し実行するのか?

モデルはコードを生成する前に計画を生成する必要があります。適切な計画は、使用する列、実行する変換、作成するチャート、および書き込む出力ファイルに名前を付けます。これにより、アプリケーションにポリシーとユーザーレビューのためのチェックポイントが提供されます。

計画が承認された後、狭い契約に従うPythonを要求します。

  • input/ ディレクトリからのみ入力ファイルを読み取る。
  • アーティファクトは output/ ディレクトリにのみ書き込む。
  • 承認されたパッケージのみを使用する。
  • ジョブポリシーで明示的に許可されていない限り、ネットワーク呼び出しを避ける。
  • 最後に構造化されたサマリーを出力する。
  • 必要な列が欠落している場合は明確に失敗する。

概念レベルでは、オーケストレーションループは次のようになります。

job = create_analysis_job(user_id, uploaded_file)
sandbox = create_sandbox(job_id=job.id, timeout_seconds=300)

copy_file_to_sandbox(uploaded_file, sandbox_path="/work/input/data.csv")
schema = run_owned_schema_inspector(sandbox, "/work/input/data.csv")

plan = ask_model_for_analysis_plan(
    user_question=job.question,
    schema=schema,
    allowed_packages=["pandas", "numpy", "matplotlib"],
    output_contract={"directory": "/work/output", "formats": ["png", "csv", "json"]},
)

review_policy(plan)

script = ask_model_for_python(plan=plan, schema=schema)
review_static_code_policy(script)

result = run_python_in_sandbox(
    sandbox=sandbox,
    script=script,
    working_dir="/work",
    timeout_seconds=120,
    memory_limit_mb=1024,
)

artifacts = collect_outputs(sandbox, "/work/output")
review_outputs(artifacts)
return_answer_to_user(result.summary, artifacts)

これは擬似コードであり、製品SDKの契約ではありません。重要なのは境界です。生成されたコードはレビューされ、タイムアウト付きで実行され、既知のディレクトリに制約され、その後に出力の収集とレビューが続きます。

スクリプトが失敗した場合は、エラーメッセージと小さなコード抜粋をモデルに送り返して修復を依頼します。無制限のログを送信しないでください。エラー修復は、最初の試行と同じパッケージ、ファイル、ネットワーク、出力ポリシーを維持する必要があります。

AIデータ分析のための制御されたPythonパッケージアクセス

パッケージアクセスは、多くのAIデータアナリストのデモがリスクを伴うポイントです。モデルは、チュートリアルで見たから、パッケージ名がもっともらしく見えるから、またはユーザーのプロンプトがそれを示唆したから、ライブラリを要求する可能性があります。アプリは、それらの提案を無制限のパッケージインストールに変えるべきではありません。

データの機密性に一致するポリシーを使用します。

パッケージポリシー 最適な用途 トレードオフ
プリビルドイメージのみ 予測可能な分析ニーズを持つ本番ワークロード 最低限の柔軟性、最も単純なレビュー対象範囲
許可リストに登録されたパッケージ ほとんどのCSV分析アシスタント pandas、プロット、一般的な統計パッケージに適したバランス
バージョン固定インストール 再現可能な分析ジョブ パッケージメンテナンスと脆弱性レビューが必要
キャッシュされた内部ミラー エンタープライズまたは規制対象データワークフロー より多くの運用作業、サプライチェーンのより良い制御
ユーザー承認インストール 信頼されたユーザー向けの探索ツール より柔軟ですが、遅くなり、明確な警告が必要

最初の本番バージョンでは、プリビルド環境または短い許可リストから始めます。ほとんどのCSVの質問は、少数のライブラリセット(pandasnumpymatplotlibseabornscipy、場合によってはscikit-learn)で回答できます。ジョブに別のパッケージが必要な場合は、モデルに理由を説明させ、そのリクエストを人間の承認またはパッケージレビューワークフローにルーティングします。

パッケージ名、バージョン、ソースレジストリ、インストール時間、パッケージが要求された理由をログに記録します。セキュリティチームが依存関係スキャナーまたはプライベートレジストリを使用している場合は、エージェントにそれをバイパスさせるのではなく、そのプロセスと統合します。

チャートと出力ファイルの検証方法

生成されたファイルは製品エクスペリエンスの一部ですが、信頼境界の一部でもあります。チャートが間違っている可能性があります。CSVに数式のような値が含まれている可能性があります。ノートブックに隠されたコードが含まれている可能性があります。ZIPに予期しないパスが含まれている可能性があります。出力をダウンロードするだけのファイルではなく、検査するアーティファクトとして扱います。

単純な出力契約を定義します。

{
  "required_files": ["summary.json"],
  "optional_files": ["chart-*.png", "filtered-data.csv"],
  "blocked_extensions": [".exe", ".sh", ".bat", ".html"],
  "max_total_size_mb": 25
}

完了したジョブごとに、期待される出力ディレクトリからのみファイルを収集します。MIMEタイプ、拡張子、サイズ、パスを検証します。画像の場合は、プレビュー用のサムネイルを生成します。CSVエクスポートの場合は、ファイルがExcelやGoogle Sheetsで開かれる可能性がある場合、スプレッドシートの数式をエスケープします。JSONサマリーの場合は、UIで使用する前にスキーマに対して検証します。

ユーザーが結果をダウンロードまたは共有する前に、レビューステップを提供します。レビュー画面には以下を表示する必要があります。

  • 元の質問。
  • 使用されたデータセット名とスキーマ。
  • 平易な言葉での分析手順。
  • 生成されたチャートとテーブル。
  • ポリシー上の理由で除外された列。
  • 警告、エラー、再試行、またはパッケージリクエスト。

モデルは説明文を書くことができますが、アプリはその説明をサンドボックス実行からのファイルとログに基づいて裏付ける必要があります。

本番環境前のセキュリティチェックポイント

AIデータアナリストは、セキュリティチームとプラットフォームチームがその許可内容を理解できる場合にのみ、有用な内部ツールになります。レビューでは、分離、リソース制限、パッケージポリシー、ネットワーク動作、シークレット、ログ、および削除をカバーする必要があります。

プロトタイプを超えて進む前に、このチェックリストを使用します。

チェックポイント 回答すべき質問
分離境界 あるユーザーのコードとファイルをホストや他のユーザーから分離しているものは何か?
ファイルアクセス 生成されたコードはジョブディレクトリのみを読み取れるか、それともより広範なストレージを見ることができるか?
リソース制限 CPU時間、メモリ、ディスク、プロセス数、ウォールクロック時間の上限は何か?
ネットワークポリシー 送信ネットワークアクセスはオフか、許可リスト登録済みか、プロキシ経由か、完全にオープンか?
パッケージポリシー どのパッケージを、どこから、どのようなバージョン管理でインストールできるか?
シークレット境界 APIキー、データベース資格情報、サービス トークンは、明示的にスコープされない限り、サンドボックス外に保持されるか?
ログ コマンド、パッケージインストール、エラー、ファイル読み取り/書き込み、出力アーティファクトは記録されるか?
人間によるレビュー どの計画、コードスニペット、パッケージリクエスト、出力が承認を必要とするか?
クリーンアップ サンドボックス状態、アップロードされたファイル、生成されたスクリプト、ログ、出力はいつ削除されるか?

「コードは脱出できない」や「データは漏洩しない」などの絶対的な主張は避けてください。実用的な基準はより具体的です。境界を定義し、制御を文書化し、障害モードをテストし、予期しない動作を調査するための十分な監査証跡を保持します。

ネットワークとパッケージポリシーについては、依存関係のインストールは、パッケージがプリビルドイメージまたは制御されたミラーから提供されない限り、ネットワーク出力の一種であることを忘れないでください。データセットが機密性の高いものである場合、ネットワークアクセスはデフォルトでブロックされるか、厳密に許可リストに登録される必要があります。アナリストがライブの外部データを必要とする場合は、独自の承認とログ記録パスを持つ別のツールにします。

実行レイヤーとしてのNovita Agent Sandboxの使用

Novita Agent Sandbox は、AIエージェント向けの分離されたステートフルな実行環境を提供します。現在のNovitaドキュメントでは、コードの実行、依存関係のインストール、ファイルへのアクセス、ブラウザの使用、セッション間での実行状態の保持のサポートについて説明されています。AIデータアナリストの場合、これらのプリミティブはアーキテクチャの実行部分に直接マッピングされます。ジョブワークスペースを作成し、ファイルを移動し、分析コードを実行し、アーティファクトを収集し、セッション設計に基づいて状態をクリーンアップまたは保持します。

Novita Agent Sandbox SDKおよびCLIドキュメント には、PythonとJavaScript/TypeScriptの公式SDKサポートがリストされており、一般的なアプリケーションバックエンドに適合します。サンドボックス ファイルシステムのドキュメント は、サンドボックス用に固定の20 GBストレージスペースを持つ分離されたファイルシステムについて説明しており、ジョブスコープのワークスペース内でCSVファイルと生成されたアーティファクトをステージングするのに役立ちます。

区別を明確に保ちます。

  • この記事の実装ガイダンスは、AIデータアナリストアプリの一般的なアーキテクチャを説明しています。
  • Novita Agent Sandboxは、これらのワークフローにサンドボックス実行レイヤーを提供できます。
  • あなたのアプリケーションは、ユーザー認証、データ保持ポリシー、パッケージ承認、ネットワークポリシー、出力レビュー、公開/デプロイメントの決定を依然として担当します。

この分離は、チームが明確な責任モデルで構築するのに役立ちます。モデルは分析を提案し説明します。アプリケーションは製品ポリシーを適用します。サンドボックスは、コード、ファイル、パッケージ、チャート、ログをメインのアプリケーションサーバーから離れて処理できる制御されたランタイムを提供します。

結論

最強のAIデータアナリストの設計は、「モデルにPythonを実行させる」ことではありません。それは制御されたループです。データセットを検査し、モデルに計画を依頼し、生成されたコードをレビューし、サンドボックスで実行し、検証済みのアーティファクトを収集し、ユーザーに何が起こったかを表示し、ジョブが完了したら状態をクリーンアップします。この構造により、ユーザーエクスペリエンスは高速に保たれ、エンジニアリングチームとセキュリティチームは本番環境前に評価するための具体的なチェックポイントを得ることができます。

このパターンを構築するチームは、CSVアップロード、スキーマ検査、短いパッケージ許可リスト、チャート出力、厳格なタイムアウト、および可視的なレビュー画面から小規模に始めてください。境界が文書化されテストされた後にのみ、より広範なパッケージアクセス、ネットワークツール、永続性、および自動化を追加します。

よくある質問

AIデータアナリストにサンドボックスが必要なのはなぜですか?

ワークフローが信頼できないファイル、モデル生成のPython、パッケージリクエスト、チャート生成、ダウンロード可能なアーティファクトを組み合わせているため、サンドボックスが必要です。その作業を別の環境で実行することで、アプリはファイル、リソース、パッケージ、ネットワーク、ログ、クリーンアップの制御を適用できる場所を得られます。

モデルは完全なCSVを見るべきですか?

通常はいいえ。まず、モデルにスキーマサマリー、安全なサンプル、列の説明、およびユーザーの質問を送信します。製品に、より多くのデータをモデルに公開するためのレビュー済みの理由がない限り、生のファイルをサンドボックス内に保持します。

パッケージのインストールは許可できますか?

はい、ただし制御される必要があります。プリビルドイメージ、許可リスト、ピンバージョン、プライベートミラー、または承認ワークフローを使用します。モデル生成コードに、レビューなしでパブリックインターネットから任意のパッケージをインストールさせないでください。

アプリはどのファイルをユーザーに返すべきですか?

チャート画像、サマリーJSON、サニタイズされたCSVエクスポートなど、既知の出力ディレクトリからの検証済みファイルのみを返します。予期しない拡張子、大きなファイル、隠しパス、および出力契約の一部ではなかったアーティファクトをブロックします。

これはコンプライアンスの保証ですか?

いいえ。サンドボックスは実行アーキテクチャの一部にすぎません。コンプライアンスとセキュリティの承認は、データ、脅威モデル、制御、ログ、保持、レビュープロセス、およびデプロイメント環境に依存します。

おすすめ記事