通过


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

Azure SRE 代理中的 Python 工具

Python 工具将 Azure SRE 代理扩展到内置 Azure 功能之外。 使用 Python 代码创建连接到内部 API、本地数据库、多云平台和专有系统的自定义工具。 描述使用普通英语需要的内容、粘贴现有脚本或包装 HTTP 终结点,然后在不重启的情况下测试和部署。

小窍门

  • 扩展您的代理以能够访问那些没有内置支持的系统。
  • 连接到内部 API、本地数据库和多云平台。
  • 对自定义业务逻辑(例如 SLA 计算、成本模型和符合性规则)进行编码。

问题

代理具有强大的 Azure 内置工具,包括 Kusto 查询、Azure Monitor 和 Azure 资源管理器操作。 但你的组织并不完全生活在 Azure 中:

  • 内部系统:CMDB 数据库、自定义票证系统和仅组织使用的内部 API。
  • 多云:Datadog 仪表板、Splunk 日志和 AWS CloudWatch 指标与 Azure 一同出现。
  • 旧基础结构:没有新式 API 的本地数据库、专有协议和系统。
  • 自定义业务逻辑:特定于合同的 SLA 计算、成本分配公式和容量规划模型。

代理可以诊断 Azure 问题,但除非扩展它,否则它无法访问内部系统或应用组织的唯一逻辑。

Python 工具的工作原理

Python 工具允许你教代理新功能。 描述所需的内容、生成代码、测试代码和部署代码。 然后,代理可以访问系统并应用以前无法实现的逻辑。

Python 工具对话框的屏幕截图。

生成的代码遵循一致的模式:

  • 接受 main() 类型化参数的函数。
  • JSON 可序列化的返回值。
  • 说明逻辑的描述性文本。

在创建该工具之前,在场中使用实际输入对其进行测试。 输入参数值,选择“ 测试”并查看实际结果,而不仅仅是语法验证。

显示测试操场中成功执行并带有 SLA 计算结果的屏幕截图。

测试该工具后,选择“ 创建工具”。 代理可以立即使用它,无需重启,也无需部署管道。

Python 工具与 MCP 连接器

对于非Microsoft平台,有两个选项。

方法 最适用于 示例
MCP 连接器 具有标准 API 的热门平台 Datadog、Splunk、ServiceNow、GitHub
Python 工具 没有 MCP 的内部系统、自定义逻辑、平台 您的 CMDB、专有 API、自定义计算

当平台存在连接器时,请使用 MCP 连接器。 MCP 提供结构化架构、身份验证管理和一致行为。

如果需要访问内部系统、编码自定义业务逻辑或连接到没有 MCP 支持的平台,请使用 Python 工具

这有什么不同

下表比较了使用和不使用 Python 工具时的代理功能。

没有 Python 工具 使用 Python 工具
代理只能使用内置功能 代理可以调用任何 Python 可支持的系统
内部 API 需要单独的工作流 内部系统成为代理工具
自定义逻辑位于外部脚本中 业务规则在代理对话中执行
本地系统与代理断开连接 混合环境完全可访问

Python 工具将代理从 Azure 本机助手转换为适用于整个基础结构的可扩展平台。

前后

之前 之后
“我们的 CMDB 是本地部署的,代理无法访问它” 用于网络访问和查询内部系统的 Python 工具
“我们有自定义 SLA 公式,没有人自动执行” 将公式编码为工具;代理自动应用它们
“合规性报告需要特定的 PDF 格式” 使用 ReportLab 生成报表,通过代理发送

先决条件

  • 生成器对 Azure SRE 代理的访问权限。
  • 对于 HTTP 终结点:目标系统的 URL 和认证凭据。

创建 Python 工具

可以使用三种方法创建 Python 工具。

方法 你提供 智能体功能 最适用于
用纯英语描述 “从运行时间和停机时间计算 SLA” 生成完整的 Python 代码 快速自定义逻辑,无需编码
粘贴现有代码 您的 Python 函数 将其包装为工具 迁移现有脚本、复杂逻辑
调用 HTTP 终结点 终结点 URL 和身份验证 通过 HTTP 调用 API Azure Functions、Lambda、内部 API、Webhook

选项 1:让 AI 编写代码

描述对话框中所需的内容,然后选择“ 生成”。 AI 使用类型化参数、错误处理和文档创建一个工作 Python 函数。

你描述: “通过计算正常运行时间和停机时间的分钟数来判断SLA合规性,并返回其是否达到99.9%的阈值”

代理生成: 准备测试和部署的完整 main() 函数。

选项 2:自带代码

将现有 Python 粘贴到 “代码 ”选项卡中。该函数必须遵循以下模式:

def main(param1: str, param2: int) -> dict:
    # Your logic here
    return {"result": "value"}

选项 3:调用 HTTP 终结点

将任何 HTTP 终结点(Azure Functions、AWS Lambda、内部 API 或 Webhook)包装为 Python 工具:

def main(input_data: str) -> dict:
    import requests

    # Azure Function with function key
    response = requests.post(
        "https://<FUNCTION_APP_NAME>.azurewebsites.net/api/<ENDPOINT>?code=<FUNCTION_KEY>",
        json={"data": input_data}
    )

    # Or internal API with bearer token
    # response = requests.get(
    #     "https://internal-api.corp/resource",
    #     headers={"Authorization": "Bearer <API_TOKEN>"}
    # )

    return response.json()

注释

Python 工具具有出站网络访问权限。 可以调用网络允许的任何 HTTP 终结点。 对于经过身份验证的终结点,请在标头或查询参数中包含 API 密钥或令牌。

示例方案

以下示例演示 Python 工具的常见用例。

内部 CMDB 查询:

def main(server_name: str) -> dict:
    """Query internal CMDB for server configuration."""
    import requests
    response = requests.get(f"https://cmdb.internal.corp/api/servers/{server_name}")
    return response.json()

自定义 SLA 计算:

def main(uptime_minutes: int, downtime_minutes: int) -> dict:
    """Calculate SLA using your organization's formula."""
    total = uptime_minutes + downtime_minutes
    sla = (uptime_minutes / total) * 100 if total > 0 else 100.0
    return {"sla_percent": round(sla, 4), "meets_target": sla >= 99.9}

合规性报告生成:

def main(incidents: list, month: str) -> dict:
    """Generate PDF compliance report."""
    from reportlab.platypus import SimpleDocTemplate
    doc = SimpleDocTemplate(f"/mnt/data/compliance-{month}.pdf")
    # Build report...
    return {"report_path": f"/api/files/compliance-{month}.pdf"}

验证工具是否正常工作

创建该工具后,在新的聊天中对其进行测试:

Calculate SLA for 43185 minutes uptime and 15 minutes downtime

代理应识别任务是否与工具匹配,并自动调用它。

执行环境

下表介绍了 Python 工具的执行环境。

财产 价值
超时 5 到 900 秒(默认值:120)
隔离 每次执行使用全新容器
文件系统 /mnt/data 用于临时文件
Network 已启用出站连接
700 多个预安装包(pandas、requests、azure-identity、reportlab 等)
调用之间无持久性

Azure 资源的身份验证

Python 工具可以使用具有预设范围的托管标识向 Azure 资源进行身份验证。

Scope Access
ARM Azure 资源管理器 (management.azure.com
密钥保管库 机密、密钥、证书 (vault.azure.net
存储 Blob、队列、表存储(storage.azure.com

创建工具时,在 “标识 ”选项卡中启用身份验证。

局限性

  • 无持久性状态:每次执行都启动全新。 根据需要将结果存储在外部。
  • 超时最大值:长时间运行操作的超时为 900 秒(15 分钟)。
  • 无 GPU:仅限 CPU 的执行环境。
  • 需要 JSON 输出:返回值必须是 JSON 可序列化的。
能力 新增的内容
工具概述 代理可以使用的所有工具类型
连接器 常见平台的内置集成