通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure SRE 代理中使用代码解释器运行代码

借助 SRE 代理代码解释器,可以在安全隔离的沙盒环境中执行 Python 代码和 shell 命令。 使用代码解释器分析数据、创建可视化效果、生成 PDF 报表并自动执行文件作,而无需离开 SRE 代理对话。

在这篇文章中,你将学会如何:

  • 执行 Python 代码以分析数据并创建可视化效果
  • 执行 shell 命令以进行文件操作
  • 生成和下载 PDF 报表
  • 在沙盒环境中处理文件

先决条件

若要创建代理,需要向代理授予正确的权限、配置正确的设置以及授予对适当资源的访问权限:

  • Azure 帐户:需要一个具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户

  • 安全性上下文:请确保用户帐户具有Microsoft.Authorization/roleAssignments/write用户访问管理员 权限。

  • 防火墙设置:在防火墙设置中将 *.azuresre.ai 添加到允许列表。 默认情况下,某些网络配置文件可能会阻止访问 *.azuresre.ai 域。

代码解释器的工作原理

SRE 代理代码解释器在隔离的 Azure 容器应用会话中运行,具有以下特征:

  • 无网络访问:沙盒无法发出出站 HTTP 或 HTTPS 请求。
  • 无进程生成:命令类似 subprocessos.system 被阻止。
  • 无包安装pip installconda 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

分析事件数据

使用代码解释器将原始事件数据转换为可作的见解和可视化效果。

  1. 要求 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`.
    
  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

工具参考

代码解释器提供以下工具:

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

局限性

出于安全原因,系统会阻止以下作:

类别 被阻止的操作
进程派生 subprocessos.systemos.popenos.spawn*
网络访问 出站 HTTP/HTTPS 请求
包安装 pip installconda install
文件系统 外部访问 /mnt/data/

代码解释器疑难解答

代码执行失败

  • 验证您的代码不使用被阻止的操作,例如 subprocess 或网络调用。
  • 检查所有文件路径是否指向 /mnt/data/
  • 确保代码的字符数低于 20,000 个字符。

文件未显示在输出中

  • 请确认将文件保存到 /mnt/data/
  • 使用 ListSessionFiles 验证文件创建。
  • 检查是否支持文件扩展名。

超时错误

  • 增加timeoutSeconds参数(最大 900 秒)。
  • 优化代码以减少执行时间。
  • 将大型作拆分为较小的区块。