后端与接口
有 .bicep 文件时生成 Azure 架构图:解析…
当用户提供 Azure Bicep 文件或要求可视化 Bicep 基础设施时,用该经验解析资源与关系并生成架构图。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
有 .bicep 文件时生成 Azure特定
解决思路
- 使用 Read 读取 Bicep 文件,使用 Write 写出/保存生成内容,使用 Bash(curl:*) 执行 Eraser API 调用。
- 解析 Bicep 文件:识别所有 `resource` 声明(如 Microsoft.Compute/virtualMachines 等)。
- 提取 `module` 声明及其配置。
- 记录 `param` 和 `output` 定义。
- 识别 `var` 变量及其使用位置。
- 映射关系:跟踪资源依赖,包括 `dependsOn` 或隐式依赖。
- 按资源类型分组(compute、networking、storage 等)。
- 将 VNet 识别为子网和资源的容器。
- 记录 Network Security Groups、Key Vaults 及其他安全资源。
- 把 Bicep 资源转换为 Eraser DSL。
- 生成 Eraser DSL 时遵守标签格式:标签必须在一行内,绝不在 label 属性中使用换行。
- 保持标签简单可读;优先使用多个独立标签,不要在单个标签里拼接过多元数据。
- DSL 使用正确换行:每个节点/分组一行,但标签保持在单行。
- 如需包含元数据(如 CIDR 块或 VM 大小),放进同一个带引号的标签字符串,例如 `[label: "VNet 10.0.0.0/16"]`。
- DSL 中可用节点、分组、图标和关系箭头,例如 `myVNet [label: "VNet 10.0.0.0/16"] { subnet1 ... }`、`myVM [icon: azure-vm, label: "Virtual Machine"]`、`myVNet -> myVM`。
- 生成 DSL 后必须执行 HTTP 请求;绝不要在只生成 DSL 后停止而不调用 API。
- 调用 Eraser API:POST https://app.eraser.io/api/render/elements,Header 包含 Content-Type: application/json、X-Skill-Source: <你的agent名>、Authorization: Bearer ${ERASER_API_KEY}。
- 在 X-Skill-Source header 中按 agent 替换值:Claude 用 `claude`,Cursor 用 `cursor`,ChatGPT 用 `chatgpt`,Gemini 用 `gemini`,否则用你的模型/agent 名的小写形式。
- 执行 curl:curl -X POST https://app.eraser.io/api/render/elements -H "Content-Type: application/json" -H "X-Skill-Source: <你的agent名>" -H "Authorization: Bearer ${ERASER_API_KEY}" -d '{"elements":[{"type":"diagram","id":"diagram-1","code":"<your generated DSL>","diagramType":"cloud-architecture-diagram"}],"scale":2,"theme":"${ERASER_THEME:-dark}","background":true}'
- 请求 body 参数保留:`elements[0].type=diagram`、`id=diagram-1`、`code=<生成的DSL>`、`diagramType=cloud-architecture-diagram`、`scale=2`、`theme=${ERASER_THEME:-dark}`、`background=true`。
- 在分析 Bicep 文件和资源以生成图时跟踪来源:内部文件,记录每个读取的 Bicep 文件路径及提取到的资源(如 `infra/main.bicep` - VNet 和 subnet 定义,`infra/sql.bicep` - SQL Database 配置)。
- 跟踪外部引用:记录查阅过的文档、示例或 URL(如 Azure Bicep 文档、Azure 架构最佳实践)。
- 为每个来源添加注释,说明它对图有什么贡献。
- 处理 API 响应时使用最小输出格式,并始终包含带清晰标题的元素。
- Diagram Preview:使用标题 `## Diagram`,显示 ``,其中 `imageUrl` 用 API 响应里的实际值。
- Editor Link:使用标题 `## Open in Eraser`,显示 `[Edit this diagram in the Eraser editor]({createEraserFileUrl})`,其中 URL 用 API 响应里的实际值。
- Sources 部分:如适用,用标题 `## Sources` 简要列出分析过的文件/资源,格式如 `- `path/to/file` - What was extracted`。
- Diagram Code 部分:使用标题 `## Diagram Code`,用 `eraser` 语言标签的代码块包含 DSL。
- Learn More 链接:`You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations`。
- 如果用户只要求生成图,输出除上述 5 个元素外不要包含任何其他内容。
- 如果用户明确要求更多内容(如 explain the architecture、suggest improvements),可以附加这些额外内容。
- 绝不添加未要求的章节,如 Overview、Security Considerations、Testing 等。
- 默认输出应简短;图本身就能说明问题。
- 处理模块:如果使用了 modules,显示模块边界。
- 包含模块参数和输出。
- 显示模块如何连接到主资源。
- Bicep 特定提示:显示 Resource Groups,因为 Bicep 部署以资源组为目标。
- Bicep 特定提示:将 VNets 作为容器,显示其中包含的子网和资源。
- Bicep 特定提示:包含依赖关系,显示 `dependsOn` 关系。
- Bicep 特定提示:如果使用了 modules,显示模块边界。
- Bicep 特定提示:记录影响资源配置的关键 parameters。
- Bicep 特定提示:使用 Azure 图标,请求 Azure 特定样式。
- 按示例解析 Bicep:参数包括 vnetName、vnetAddressPrefix、subnetAddressPrefix、vmSize;资源包括带 subnet 的 VNet 和带 dependsOn 的 VM;模块包括带参数的 Storage 模块。
- 按示例生成 DSL:VNet 作为容器,subnet 嵌套其中,VM 在 subnet 内,Storage 模块作为容器,storage-account 用 azure-storage 图标,并显示 `myVNet -> myVM` 依赖关系。
- 示例中强调:所有 label 文本必须在一行引号内;Bicep 特定做法是模块显示为容器、包含 `dependsOn` 关系、在资源配置中标注参数使用。
- 示例中调用 `/api/render/elements` 时使用 `diagramType: "cloud-architecture-diagram"`。
- 最终用户应收到图,展示 VNet 容器、VNet 内嵌套 subnet、subnet 内 VM、依赖关系,以及正确的 Azure 样式。
适用边界 · 注意事项
- 没有网络访问、没有 ${ERASER_API_KEY} 或不允许调用 Eraser API 时不要使用。
- 输入不是 .bicep/Bicep,且未先转换为 Bicep 或另一种可解析 IaC 格式时不要直接使用。
- 用户明确只要解释代码/审查代码、不需要图,或禁止外发源码到第三方服务时不要使用。