當使用者提供的資料集、模型生成的程式碼、套件安裝、產生的圖表以及可下載的輸出,必須在隔離且可觀察的環境中執行時,AI 數據分析師就需要沙盒化的 Python。實務上的實作流程為:上傳檔案、使用受信任的程式碼檢查結構描述、向模型請求分析計畫、審查生成的 Python 程式碼、在受限的沙盒中執行它、驗證輸出成品,最後向使用者展示結果。
AI 數據分析師架構:上傳、分析、審查
產品模式表面上很簡單:使用者上傳 CSV 檔案、以自然語言提問,並期望獲得有用的表格、圖表及可下載的檔案。但在底層,應用程式正在運行一個具備真實副作用的小型代理工作流程。模型規劃分析並起草 Python 程式碼,而應用程式則決定允許哪些程式碼、套件、檔案、網路存取及輸出。
建構第一個版本時,應圍繞一條明確的路徑:
- 接受單一分析作業的 CSV 檔案上傳。
- 建立一個以作業為範圍的沙盒工作空間。
- 在向模型請求 Python 程式碼之前,先執行自有的結構描述檢查程式碼。
- 向模型請求分析計畫,接著請求一個遵循檔案與套件規則的腳本。
- 在時間、記憶體、磁碟、套件及網路的限制下執行腳本。
- 僅從已知的輸出目錄收集經過驗證的成品。
- 向使用者顯示答案、圖表、警告、日誌,以及可選取下載的檔案。
這樣的區隔讓責任劃分明確。模型負責提出並解釋分析。後端負責應用產品政策與編排。沙盒則在受限的檔案、套件、時間、記憶體、網路存取及機密條件下執行程式碼。
數據分析的 Python 沙盒中執行哪些作業?
將分析工作空間放在沙盒內部,而非主應用程式伺服器內。沙盒應為單一分析作業接收一個狹窄的輸入套件:上傳的檔案、一個小型清單、生成的腳本,以及任何通過核准的執行環境設定。應用程式後端應將身分驗證、計費、使用者身份、長期儲存空間及生產環境機密保留在工作空間之外。
對於 AI 數據分析師而言,沙盒通常負責以下任務:
| 沙盒任務 | 為何歸屬此地 |
|---|---|
| 檔案暫存 | 在 Python 處理之前,可先掃描上傳的 CSV 並複製到隔離的工作目錄。 |
| 結構描述檢查 | 應用程式可推斷欄位名稱、類型、空值率、行數及範例值,而無需將完整檔案暴露給模型。 |
| Python 執行 | 模型生成的程式碼遠離應用程式伺服器執行,且可設定時間限制。 |
| 套件準備 | 僅安裝或提供經核准的依賴項目給作業使用。 |
| 圖表渲染 | 圖像以檔案形式寫入,並在下載前經過審查。 |
| 結果包裝 | 最終成品可從已知的輸出目錄收集。 |
| 清理 | 暫存檔案、生成的程式碼及工作階段狀態可被刪除或允許過期。 |
模型的提示詞應小於資料。只傳送結構描述摘要、政策允許下的少數代表性行數、欄位描述、使用者意圖,以及「不要訓練模型」或「僅使用核准套件」等限制。原始資料集應保留在沙盒檔案系統中,除非您的產品有特定的審查理由需暴露更多資料。
CSV 上傳與結構描述檢查該如何進行?
首先,將每一次上傳視為不受信任的輸入。在模型介入之前,先驗證檔案類型、大小、編碼、分隔符號、行數、欄位數以及可疑的公式。CSV 檔案中仍可能包含在後續開啟時觸發試算表公式執行的數值,因此匯出的檔案也應針對目標格式進行清理。
一個實務的上傳流程如下:
- 使用者將 CSV 上傳至應用程式。
- 後端將原始檔案儲存至以作業為範圍的物件金鑰或暫存路徑。
- 後端為該作業建立一個沙盒工作階段。
- 後端將檔案複製到沙盒的工作目錄中。
- 一個小型、確定性的檢查腳本讀取檔案並產生結構描述摘要。
- 模型接收結構描述摘要、使用者問題、允許的函式庫以及輸出需求。
檢查步驟應使用您自行擁有的確定性程式碼,而非模型生成的程式碼。它可以產生如下的精簡 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 問題可以用一小組函式庫回答:pandas、numpy、matplotlib、seaborn、scipy,有時候會用到 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 匯出。封鎖非預期的副檔名、大型檔案、隱藏路徑以及不屬於輸出合約的成品。
這是否保證合規?
不。沙盒是執行架構的一部分。合規性與安全核准取決於您的資料、威脅模型、控制措施、記錄、保留、審查流程與部署環境。
