在 Azure SRE Agent 中使用程式碼解譯器執行程式碼

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

分析事故資料

使用程式碼解譯器將原始事件數據轉化為可行的洞察與視覺化。

  1. 請 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`.
    
  2. 使用 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秒)。
  • 優化你的程式碼以縮短執行時間。
  • 將大型作業拆分成較小的部分。