你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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 工具允许你教代理新功能。 描述所需的内容、生成代码、测试代码和部署代码。 然后,代理可以访问系统并应用以前无法实现的逻辑。
生成的代码遵循一致的模式:
- 接受
main()类型化参数的函数。 - JSON 可序列化的返回值。
- 说明逻辑的描述性文本。
在创建该工具之前,在场中使用实际输入对其进行测试。 输入参数值,选择“ 测试”并查看实际结果,而不仅仅是语法验证。
测试该工具后,选择“ 创建工具”。 代理可以立即使用它,无需重启,也无需部署管道。
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 可序列化的。
相关内容
| 能力 | 新增的内容 |
|---|---|
| 工具概述 | 代理可以使用的所有工具类型 |
| 连接器 | 常见平台的内置集成 |