SRE 代理程式直譯器讓你能在安全且隔離的沙盒環境中執行 Python 程式碼和 shell 指令。 使用 Code Interpreter 分析資料、建立視覺化、產生 PDF 報告,並自動化檔案操作,同時不離開與 SRE Agent 的對話。
在本文中,您將學會如何:
- 執行 Python 程式碼來分析資料並建立視覺化
- 執行 shell 指令進行檔案操作
- 產生並下載 PDF 報告
- 在沙盒環境中處理檔案
先決條件
若要建立代理程式,您需要授與代理程式正確的權限、設定正確的設定,以及授與正確資源的存取權:
Azure 帳戶:您需要具有作用中訂用帳戶的 Azure 帳戶。 若您還沒有帳戶,可以免費建立帳戶。
資訊安全內容:請確定您的使用者帳戶具有
Microsoft.Authorization/roleAssignments/write權限,無論是角色型存取控制系統管理員或使用者存取系統管理員。防火牆設定:在防火牆設定中將
*.azuresre.ai新增至允許清單。 某些網路設定檔預設可能會封鎖對網域的*.azuresre.ai存取。
程式碼直譯器的運作方式
SRE Agent 程式碼直譯器在隔離的 Azure 容器應用會話中執行,具備以下特性:
- 無網路存取:沙盒無法發出 HTTP 或 HTTPS 外站請求。
-
沒有程序生成:像
subprocess和os.system的指令會被封鎖。 -
沒有套件安裝:
pip install和conda install都不存在。 -
孤立檔案系統:所有檔案必須儲存至
/mnt/data/。
這些限制確保程式碼執行安全且可預測。 常見的資料科學函式庫如 pandas、matplotlib 和 seaborn 都已預先安裝。
開始使用 Code 直譯器
程式碼解譯工具會自動在你的 SRE 代理對話中提供。 請代理人使用自然語言執行任務。
範例提示
試試以下提示開始:
- 「分析這些CSV資料,並製作一張按類別顯示事件的圖表。」
- 「產生今天事件的PDF摘要。」
- 「解析這個 JSON 檔案,並提取錯誤模式。」
- 「列出會話中的所有檔案並顯示大小。」
你的第一個 Python 腳本
以下範例示範如何建立視覺化:
import matplotlib.pyplot as plt
import numpy as np
# Generate sample data
categories = ['Critical', 'High', 'Medium', 'Low']
counts = [5, 12, 28, 45]
# Create bar chart
plt.figure(figsize=(10, 6))
plt.bar(categories, counts, color=['red', 'orange', 'yellow', 'green'])
plt.title('Incidents by Severity')
plt.xlabel('Severity Level')
plt.ylabel('Count')
plt.savefig('/mnt/data/incidents_by_severity.png', dpi=150)
當程式碼成功執行時,代理會直接在對話中回傳該影像。
Scenarios
分析事故資料
使用程式碼解譯器將原始事件數據轉化為可行的洞察與視覺化。
請 SRE Agent 使用以下提示建立過去一個月內所有事件的 CSV 檔案:
Create a CSV file of all the incidents that occurred in the last month. Name the file `incidents.csv` and save it to `/mnt/data`.使用 Python 分析事件模式並識別趨勢:
import pandas as pd # Load incident data df = pd.read_csv('/mnt/data/incidents.csv') # Calculate summary statistics summary = df.groupby('category').agg({ 'id': 'count', 'resolution_time': 'mean' }).rename(columns={'id': 'count', 'resolution_time': 'avg_resolution_hours'}) # Export results summary.to_csv('/mnt/data/incident_summary.csv') print(summary)
建立視覺效果
產生圖表以傳達洞見。
import matplotlib.pyplot as plt
import seaborn as sns
# Load data
df = pd.read_csv('/mnt/data/incidents.csv')
# Create visualization
plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='category', y='count', palette='viridis')
plt.title('Incidents by Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('/mnt/data/category_chart.png', dpi=150)
產生 PDF 報告
為利害關係人建立格式化的 PDF 文件。
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
# Create PDF
c = canvas.Canvas('/mnt/data/weekly_report.pdf', pagesize=letter)
# Add content
c.setFont('Helvetica-Bold', 18)
c.drawString(72, 750, 'Weekly Incident Report')
c.setFont('Helvetica', 12)
c.drawString(72, 720, 'Period: January 10-17, 2026')
c.drawString(72, 700, 'Total incidents: 90')
c.drawString(72, 680, 'Critical incidents: 5')
c.drawString(72, 660, 'Average resolution time: 4.2 hours')
c.save()
客服會回傳一個產生的 PDF 下載連結。
流程日誌檔案
使用 shell 指令搜尋並分析日誌檔案。
# Count error occurrences by type
grep -E "ERROR|WARN|FATAL" application.log | sort | uniq -c | sort -rn
# Find the most recent log entries
tail -100 application.log
工具參考
Code Interpreter 提供以下工具:
ExecutePythonCode
在一個獨立的沙盒中執行 Python 程式碼。
| 參數 | 類型 | 為必填項目 | Description |
|---|---|---|---|
pythonCode |
字串 | Yes | 執行的 Python 程式碼(最多 20,000 字元) |
timeoutSeconds |
整數 | 否 | 執行逾時時間(預設:120,最大:900) |
輸出:圖片以 Markdown 內嵌顯示。 資料檔案會以下載連結的形式回傳。
生成PDF報告
用 Python 程式碼建立 PDF 文件。
| 參數 | 類型 | 為必填項目 | Description |
|---|---|---|---|
pythonCode |
字串 | Yes | Python 程式碼可建立 PDF 檔案 |
expectedOutputFilename |
字串 | Yes | 儲存 PDF 的路徑(例如, report.pdf) |
saveAsFilename |
字串 | Yes | 下載檔名(例如, daily_summary.pdf) |
timeoutSeconds |
整數 | 否 | 執行逾時時間(秒數)(預設:180,最大:900) |
執行Shell命令
在沙盒中執行 shell 指令。
| 參數 | 類型 | 為必填項目 | Description |
|---|---|---|---|
command |
字串 | Yes | 要執行的殼層命令 |
explanation |
字串 | 否 | 隨命令記錄的描述 |
isBackground |
boolean | 否 | 必須為 false (不支援背景工作) |
timeoutSeconds |
整數 | 否 | 執行逾時(預設:120,最高:240) |
備註
指令從 /mnt/data/開始。 使用相對路徑並用鏈式指令 ; 代替 &&。
檔案操作
| Tool | Description |
|---|---|
ReadSessionFile |
從/mnt/data/讀取檔案內容。 |
SearchSessionFiles |
使用 grep 風格的模式搜尋檔案中的文字。 |
ListSessionFiles |
列出會話中所有檔案並附上元資料。 |
GetSessionFile |
從工作階段下載檔案。 |
UploadFileToSession |
上傳檔案以供進一步處理。 |
支援的檔案類型
- 圖片來源:PNG、JPG、GIF、SVG、WEBP、BMP、TIFF、EPS
- 資料:CSV、TSV、Excel、JSON、XML、YAML、HDF5、NetCDF、pickle
- 文件:PDF、HTML、Markdown、Office 格式
- 程式碼:Python、Jupyter notebooks、R、SQL
- 檔案:ZIP、TAR、GZ
局限性
出於安全考量,系統會阻擋以下操作:
| 類別 | 已封鎖的作業 |
|---|---|
| 程序產生 |
subprocess、os.system、os.popen、os.spawn* |
| 網路存取 | 外發 HTTP/HTTPS 請求 |
| 套件安裝 |
pip install、conda install |
| 檔案系統 | 存取 /mnt/data/ 之外的路徑 |
故障排除程式碼直譯器
程式碼執行失敗
- 確認你的程式碼沒有使用像是網路呼叫這類被阻擋的操作
subprocess。 - 檢查所有檔案路徑是否都指向
/mnt/data/。 - 確保你的程式碼不超過20,000字元。
檔案不會出現在輸出中
- 確認你已將檔案存檔至
/mnt/data/。 - 用
ListSessionFiles來驗證檔案建立。 - 確認副檔名是否支援。
逾時錯誤
- 增加
timeoutSeconds參數(最大900秒)。 - 優化你的程式碼以縮短執行時間。
- 將大型作業拆分成較小的部分。