以沙盒化 Python 與受控套件存取打造 AI 數據分析師

以沙盒化 Python 與受控套件存取打造 AI 數據分析師

當使用者提供的資料集、模型生成的程式碼、套件安裝、產生的圖表以及可下載的輸出,必須在隔離且可觀察的環境中執行時,AI 數據分析師就需要沙盒化的 Python。實務上的實作流程為:上傳檔案、使用受信任的程式碼檢查結構描述、向模型請求分析計畫、審查生成的 Python 程式碼、在受限的沙盒中執行它、驗證輸出成品,最後向使用者展示結果。

AI 數據分析師架構:上傳、分析、審查

產品模式表面上很簡單:使用者上傳 CSV 檔案、以自然語言提問,並期望獲得有用的表格、圖表及可下載的檔案。但在底層,應用程式正在運行一個具備真實副作用的小型代理工作流程。模型規劃分析並起草 Python 程式碼,而應用程式則決定允許哪些程式碼、套件、檔案、網路存取及輸出。

建構第一個版本時,應圍繞一條明確的路徑:

  1. 接受單一分析作業的 CSV 檔案上傳。
  2. 建立一個以作業為範圍的沙盒工作空間。
  3. 在向模型請求 Python 程式碼之前,先執行自有的結構描述檢查程式碼。
  4. 向模型請求分析計畫,接著請求一個遵循檔案與套件規則的腳本。
  5. 在時間、記憶體、磁碟、套件及網路的限制下執行腳本。
  6. 僅從已知的輸出目錄收集經過驗證的成品。
  7. 向使用者顯示答案、圖表、警告、日誌,以及可選取下載的檔案。

這樣的區隔讓責任劃分明確。模型負責提出並解釋分析。後端負責應用產品政策與編排。沙盒則在受限的檔案、套件、時間、記憶體、網路存取及機密條件下執行程式碼。

數據分析的 Python 沙盒中執行哪些作業?

將分析工作空間放在沙盒內部,而非主應用程式伺服器內。沙盒應為單一分析作業接收一個狹窄的輸入套件:上傳的檔案、一個小型清單、生成的腳本,以及任何通過核准的執行環境設定。應用程式後端應將身分驗證、計費、使用者身份、長期儲存空間及生產環境機密保留在工作空間之外。

對於 AI 數據分析師而言,沙盒通常負責以下任務:

沙盒任務 為何歸屬此地
檔案暫存 在 Python 處理之前,可先掃描上傳的 CSV 並複製到隔離的工作目錄。
結構描述檢查 應用程式可推斷欄位名稱、類型、空值率、行數及範例值,而無需將完整檔案暴露給模型。
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 匯出。封鎖非預期的副檔名、大型檔案、隱藏路徑以及不屬於輸出合約的成品。

這是否保證合規?

不。沙盒是執行架構的一部分。合規性與安全核准取決於您的資料、威脅模型、控制措施、記錄、保留、審查流程與部署環境。

推薦文章