你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
借助 SRE 代理代码解释器,可以在安全隔离的沙盒环境中执行 Python 代码和 shell 命令。 使用代码解释器分析数据、创建可视化效果、生成 PDF 报表并自动执行文件作,而无需离开 SRE 代理对话。
在这篇文章中,你将学会如何:
- 执行 Python 代码以分析数据并创建可视化效果
- 执行 shell 命令以进行文件操作
- 生成和下载 PDF 报表
- 在沙盒环境中处理文件
先决条件
若要创建代理,需要向代理授予正确的权限、配置正确的设置以及授予对适当资源的访问权限:
Azure 帐户:需要一个具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户。
安全性上下文:请确保用户帐户具有
Microsoft.Authorization/roleAssignments/write或用户访问管理员的 权限。防火墙设置:在防火墙设置中将
*.azuresre.ai添加到允许列表。 默认情况下,某些网络配置文件可能会阻止访问*.azuresre.ai域。
代码解释器的工作原理
SRE 代理代码解释器在隔离的 Azure 容器应用会话中运行,具有以下特征:
- 无网络访问:沙盒无法发出出站 HTTP 或 HTTPS 请求。
-
无进程生成:命令类似
subprocess且os.system被阻止。 -
无包安装:
pip install和conda install均不可用。 -
独立文件系统:所有文件都必须保存到
/mnt/data/。
这些限制可确保代码执行安全且可预测。 已预安装常见的数据科学库,如 pandas、matplotlib 和 seaborn。
代码解释器入门
代码解释器工具在 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 代理使用以下提示创建上个月发生的所有事件的 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
工具参考
代码解释器提供以下工具:
ExecutePythonCode
在独立沙盒中运行 Python 代码。
| 参数 | 类型 | 必选 | Description |
|---|---|---|---|
pythonCode |
字符串 | 是的 | 要运行的 Python 代码(最多 20,000 个字符) |
timeoutSeconds |
整数 | 否 | 执行超时时间(单位:秒,默认值:120,最大值:900) |
输出:图像以内联 Markdown 的形式显示。 数据文件作为下载链接返回。
生成PDF报告
从 Python 代码创建 PDF 文档。
| 参数 | 类型 | 必选 | Description |
|---|---|---|---|
pythonCode |
字符串 | 是的 | 用于创建 PDF 文件的 Python 代码 |
expectedOutputFilename |
字符串 | 是的 | 保存 PDF 的路径(例如 report.pdf) |
saveAsFilename |
字符串 | 是的 | 下载文件名(例如, daily_summary.pdf) |
timeoutSeconds |
整数 | 否 | 执行超时时间以秒为单位(默认值:180,最大值:900) |
运行Shell命令
在沙盒中运行 shell 命令。
| 参数 | 类型 | 必选 | Description |
|---|---|---|---|
command |
字符串 | 是的 | 要运行的 Shell 命令 |
explanation |
字符串 | 否 | 使用命令记录的描述 |
isBackground |
布尔 | 否 | 必须是 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 笔记本、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 秒)。 - 优化代码以减少执行时间。
- 将大型作拆分为较小的区块。