Qoderwork+阿里云OpenAPI MCP制作阿里云报价单

Qoderwork+阿里云OpenAPI MCP制作阿里云报价单

背景与需求

之前做阿里云的报价单是一个比较耗时的苦活。

现在全员AI了,周围好多BTE都在尝试用Qoderwork做配置报价单,但是听不少人反馈用Qoderwork默认生成的报价单价格不太准确,没办法直接使用。

最近听其他团队小伙伴说我们阿里文档部门出了一个OpenAPI的MCP,目前处于内测阶段,相关信息整理如下:
{
“mcpServers”: {
“aliyun-openapi-mcp-core”: {
“command”: “npx”,
“args”: [
“mcp-remote-alibaba-cloud”,
“https://openapi-mcp.cn-hangzhou.aliyuncs.com/id/<你的专属ID>/mcp”
]
}
}
}

reference: https://api.aliyun.com/mcp

Notes: 配置过程中,还需要进行如下操作:
请管理员账号前往 RAM 控制台 – OAuth 应用 – 第三方应用中,安装 API MCP Server 官方应用并分配。否则您在使用以下创建的 MCP 服务时,无法进行 OAuth 授权。

本文介绍借助于该MCP,用Qoderwork进行阿里云报价单制作。

操作步骤

整个操作步骤很简单,只有两步:阿里云控制台OAuth 应用配置 + MCP安装。

但是我文档写到比较细,方便大家参考操作。

阿里云OAuth 应用配置

登录全息账号;

点击如下链接 https://ram.console.aliyun.com/applications,访问到 RAM 访问控制 — OAuth 应用 — 第三方应用 — 安装官方应用,按照下图进行配置。

image.png

选择 OpenAPI MCP Server — 确定。

image.png

安装后,出现如下条目,正面安装完毕。

image.png

Qoderwork安装MCP

安装MCP,通过对话或者白屏配置都可以,可按照自己喜好进行操作。我推荐通过对话方式安装。

方式一:对话方式安装(推荐)

如下内容贴入Qoderwork对话框,模型选择“标准”即可。
安装如下MCP,名称使用默认名称:

{
“mcpServers”: {
“aliyun-openapi-mcp-core”: {
“command”: “npx”,
“args”: [
“mcp-remote-alibaba-cloud”,
“https://openapi-mcp.cn-hangzhou.aliyuncs.com/id/<你的专属ID>/mcp”
]
}
}
}

安装后,获取阿里云百炼qwen3.7-plus价格,已确保MCP可用。

image.png

任务执行中。

image.png

可见Qoderwork成功通过MCP获取了模型的价格,如下图。

image.png

此时在Qoderwork 连接器 — 已安装 中,可以看到该MCP,且为绿色开启状态。

image.png

方式二:白屏粘贴配置

Qoderwork中选择 连接器 — 添加 — 粘贴JSON配置。

image.png

贴入如下内容,并点击导入。
{
“mcpServers”: {
“aliyun-openapi-mcp-core”: {
“command”: “npx”,
“args”: [
“mcp-remote-alibaba-cloud”,
“https://openapi-mcp.cn-hangzhou.aliyuncs.com/id/<你的专属ID>/mcp”
]
}
}
}

image.png

此时在Qoderwork 连接器 — 已安装 中,可以看到该MCP,且为绿色开启状态。

image.png

效果验证

我这里正好有个场景:

需要做一个深圳到香港10Mbps内网互通的方案报价,给Qoderwork需求描述如下:
我需要做一个阿里云的配置报价单的Excel表格,包含:产品名称、组件功能简介、月租牌价(元)、数量、折扣(默认100%)、折扣月租价(元);
需求:
* 通过CEN云企业网实现阿里云深圳VPC和香港VPC(中国内地-亚太)内网互通,带宽10Mbps;
* 深圳VPC和香港VPC各包含一个ecs.c9i.xlarge ECS实例;
* 深圳和香港的ECS各添加一个10Mbps的弹性公网IP;
其他信息:
跨地域VPC网络互通费用说明可参考 https://help.aliyun.com/zh/cen/product-overview/billing-rules#b6ecef8ae4p71
价格和相关文档请参考MCP接口:aliyun-openapi-mcp-core

对话框可以按照下图指定连接器,也可以不指定,因为需求描述中已经文字说明了。

image.png

模型这里先选择旗舰,然后开始执行。

image.png

需求描述中为提到的必要信息,Qoderwork会跟用户进行对话澄清。

image.png

最终完成任务,总结如下。

image.png

生成的Excel报价单如下图。

image.png

基本直接可用。

且表格中包含了首行冻结,以及折扣公式(调整折扣后,折扣价格即时生效)。

如果有后续调整需求,也可以持续通过对话进行修改。

进阶功能-创建并使用skill

上述工作流程,可以考虑固化为一个skill,后续制作报价单,直接调用skill即可。

跟Qoderwork在之前的会话中,继续对话如下:
把上述通过MCP接口查询数据并制作报价单的能力,制作成skill,名称叫做 aliyun-price-excel-maker,skill生成后直接安装。
skill中请要求:涉及到方案和文档,请参考 https://help.aliyun.com/zh 作为官方文档来源

image.png

发现目前生成的skill的使用场景限制了特定阿里云产品,通过对话让Qoderwork调整Skill。
目前生成的skill场景太窄了,请改为阿里云通用的报价单的Skill,不限制产品为目前提到的ECS、CEN等内容。

image.png

最终得到Skill内容如下。

---
name: aliyun-price-excel-maker
description: 通过阿里云 OpenAPI MCP (aliyun-openapi-mcp-core) 实时查询任意阿里云产品的官方牌价/计费规则,并生成结构化 Excel 配置报价单(含组件功能简介、月租牌价、数量、折扣、折扣月租价、SUM 合计公式)。覆盖计算、存储、网络、数据库、大数据、AI/大模型、安全、容器、中间件、CDN、视频、IoT 等阿里云全产品线。当用户要求"做阿里云报价单"、"阿里云配置清单"、"云资源询价"、"客户方案报价"、"阿里云成本估算 Excel"、"TCO 估算"、"上云预算表"时触发。所有方案、价格、计费规则以 https://help.aliyun.com/zh 官方文档为唯一权威来源。
version: 1.1.0
---

# aliyun-price-excel-maker

阿里云**通用报价单生成器**:把"需求描述 → 阿里云资源清单 → 实时官方牌价 → 标准化 Excel 报价单"做成一次性流水线,不限定产品域。

## 适用场景(产品无关)
- 销售/解决方案输出阿里云配置清单与月度费用预估
- 任意组合询价:计算(ECS/ECI/弹性裸金属/HPC/GPU)、存储(OSS/NAS/CPFS/云盘)、网络(VPC/EIP/CEN/NAT/SLB-NLB-ALB/共享带宽/全球加速)、数据库(RDS/PolarDB/Lindorm/Tair/MongoDB/ADB)、大数据(MaxCompute/Hologres/DataWorks/Flink/EMR)、AI/大模型(百炼/PAI/灵积/通义听悟/向量检索)、容器(ACK/ACR/SAE)、中间件(MSE/RocketMQ/Kafka/Notifications)、安全(WAF/DDoS/堡垒机/KMS)、CDN/DCDN/EdgeRoutine、视频云、IoT、混合云、专有云外延等
- TCO / 上云预算 / 续费报价 / 折扣商务谈判表

## 强制原则
1. **官方文档唯一源**:方案、计费规则、产品能力一律引用 https://help.aliyun.com/zh 下页面;不采纳第三方价格;备注块必须放至少一个该域链接。
2. **实时询价优先**:优先用 `AlibabaCloud___CallCLI` 调用对应产品的 DescribePrice / GetPayAsYouGoPrice / DescribeRenewalPrice 等定价 API。无定价 API 时回退到 `SearchDocuments`+`GetDocument` 抓官方定价表。
3. **公式留接口**:折扣列默认 `100%`(数值 1,格式 `0%`),折扣月租价列固定写 `=D{row}*E{row}*F{row}`;销售可现场改折扣,SUM 自动重算。
4. **按量项必须列入但不并入 SUM**:按量后付费组件(流量费、Token 用量费、API 调用费等)月租列写"按量后付费",G 列写"按量计费"占位,备注里写清单价与计算单位。
5. **币种与精度**:统一 CNY、保留两位小数;合计行 `¥#,##0.00`;跨境地域返回值已是 CNY,不要换汇。
6. **时间戳**:执行前用 `date` 取当天日期写入备注块,标注"报价基于 YYYY-MM-DD 阿里云公开牌价"。

## 执行步骤

### 1. 需求澄清(必须,用 AskUserQuestion)
按产品类型问足下列要素,缺一就问:
- **通用**:地域(中国内地 / 中国香港 / 亚太 / 欧洲 / 中东 / 北美)、计费方式(包年包月 / 按量付费 / 资源包 / Savings Plan)、商务折扣(默认 100%,或客户预设 0.x)
- **计算类**:实例规格族、vCPU / 内存、镜像、系统盘 + 数据盘(类型 ESSD PL0/PL1/PL2/PL3、容量)、是否需公网带宽
- **存储类**:类型(标准/低频/归档)、容量(GB/TB)、请求次数预估、地域间复制
- **网络类**:带宽 Mbps、计费模式(按带宽/按流量/95峰值)、BGP 或精品、跨地域对、TR 数量
- **数据库类**:引擎与版本、规格族、存储类型与容量、备份保留天数、是否多可用区/只读副本
- **大数据类**:计算资源单位(CU/AU/Slot)、存储 GB、调度任务数
- **AI/大模型**:模型 ID(qwen3.x / qwen-mt / embedding 等)、输入/输出 Token 月预估、是否独占算力
- **容器类**:集群类型(Pro/标准)、Worker 节点规格与数量、是否托管 etcd
- **安全类**:防护实例规格、QPS、CC 防护带宽
- **CDN/视频**:流量预估 TB、回源带宽、点播分发地域
- 是否需要"按量后付费组件单独列示"

### 2. 实时询价(按产品域选择路径)

**通用调用链**:
1. `AlibabaCloud___ListProducts` 确认产品 productCode
2. `AlibabaCloud___ListApis` / `AlibabaCloud___SearchApis(prompt=…)` 找 DescribePrice 类 API
3. `AlibabaCloud___GetApiDefinition` 取参数定义
4. `AlibabaCloud___GenerateCLICommand` 生成可执行 CLI
5. `AlibabaCloud___CallCLI` 实际询价
6. 若无询价 API → `AlibabaCloud___SearchDocuments(query=…)` 找官方定价文档 → `GetDocument(doc_id=…)` 取定价表

**已沉淀的常用片段**:

- ECS 月租:
  ```
  aliyun ecs DescribePrice --RegionId <r> --InstanceType <t> --PriceUnit Month --Period 1 \
    --ResourceType instance --IoOptimized optimized --InstanceNetworkType vpc \
    --InternetChargeType PayByTraffic --InternetMaxBandwidthOut 0 \
    --SystemDisk.Category cloud_essd --SystemDisk.Size <gb> --SystemDisk.PerformanceLevel <PLx>
  ```
  返回 `PriceInfo.Price.DetailInfos.DetailInfo[]`,`instanceType` 与 `systemDisk` 分两行列示。
- RDS:`aliyun rds DescribePrice --DBInstanceClass … --EngineVersion … --PayType Prepaid --UsedTime 1 --TimeType Month`
- PolarDB:`aliyun polardb DescribePrice --DBNodeClass … --DBType MySQL …`
- OSS / NAS 等存储:多为按量后付费,查 https://help.aliyun.com/zh/oss/product-overview/billing-overview 定价表
- 大模型(百炼 / 灵积):`SearchDocuments(query="qwen3.x 计费")` 取 doc,按 Token 单价×百万记入按量项
- EIP 包年包月(BGP多线,需公式计算 ≥6Mbps):
  - 中国内地:`125 + (n-5)×80`
  - 中国香港:`150 + (n-5)×100`
  - 新加坡/法兰克福:`115 + (n-5)×80`
  - 1–5Mbps 段为阶梯固定值,查 https://help.aliyun.com/zh/eip/subscription
- CEN:跨地域带宽包(中国内地↔亚太 0-100Mbps 档 860 元/Mbps/月)+ TR 连接费(内地 0.35 / 境外 0.40 元/h,×730h)+ 流量处理费 0.13 元/GB(按量项),见 https://help.aliyun.com/zh/cen/product-overview/billing-rules
- SLB/NLB/ALB、NAT、共享带宽、全球加速:先 SearchApis 找 DescribePrice,没有则走 SearchDocuments

> 上述片段是**示例非穷举**。遇到新产品按"通用调用链"4 步走,永远先实时调用 API,不要拍脑袋写数字。

### 3. 生成 Excel(标准模板,与产品无关)

使用 openpyxl,固定 7 列结构:

| A 序号 | B 产品名称 | C 组件功能简介 | D 月租牌价(元) | E 数量 | F 折扣 | G 折扣月租价(元) |
|--------|-----------|--------------|--------------|--------|--------|----------------|

- 标题行(merge A:G,深蓝底白字 14pt 加粗)
- 需求描述行(merge A:G,灰色斜体 9pt)
- 表头行(蓝底白字 11pt 加粗,居中)
- **分组小标题行**(merge A:G,浅蓝底)按需自定义分类:如"一、计算资源"、"二、存储与备份"、"三、网络与互联"、"四、数据库"、"五、大模型与AI"、"六、安全与合规"、"七、容器与中间件"、"八、按量后付费组件"……
- 数据行:D 列右对齐 `#,##0.00`,F 列居中 `0%`,G 列写 `=D{r}*E{r}*F{r}`
- 按量项:D 列写"按量后付费",G 列写"按量计费";备注里补充"<单价>/<计量单位>"
- 合计行:黄底红字加粗,`=SUM(G{start}:G{end})`,格式 `¥#,##0.00`,标签"固定月租合计 (含税·CNY) — 不含 X 项按量后付费"
- 备注块:merge A:G,wrap_text;必须包含计费公式说明、所引用 help.aliyun.com/zh 链接、报价日期
- 列宽:A=6, B=22, C=56, D=16, E=8, F=10, G=18
- 冻结表头 `ws.freeze_panes = "A5"`

参考脚本骨架可基于 `~/.qoderwork/workspace/*/build_quote.py` 复用并扩展产品分类。

### 4. 输出与交付
- 文件路径:`<workspace>/outputs/阿里云<场景关键词>报价单.xlsx`
- 用 `present_files` 卡片交付
- 文本输出复述固定月租合计 + 按量后付费项列表
- 结尾 Sources 段附上所有引用的 help.aliyun.com 文档链接

## 常见坑(跨产品通用)
1. **MCP 参数名差异**:`SearchApis` 用 `prompt`,`SearchDocuments` 用 `query`,搞反报"Parameter is required and cannot be empty"。
2. **并非所有产品都有 DescribePrice CLI**:VPC、OSS、CDN、大模型等大量产品无询价 API,必须走文档。不要尝试不存在的 CLI 命令。
3. **ECS 公网带宽**:`InternetMaxBandwidthOut=0` 表示不含公网(与单独购 EIP 解耦),避免双重计费。
4. **多组件分行**:DescribePrice 返回的 instanceType / systemDisk / dataDisk / bandwidth 等子项应分行列示,方便客户看结构。
5. **按量项绝不并入 SUM**:流量、Token、请求次数、CC包等按量项独立标注,避免假月租。
6. **币种**:跨境地域返回值默认 CNY,不要换汇。
7. **时效**:阿里云价格随时调整,每次执行都重新调用 API;执行前 `date` 取实时日期写入备注;不要硬编码记忆中的数字。
8. **资源包 vs 后付费**:OSS/CDN/带宽等可购资源包预付优惠,需问清是否计入"包年包月"还是单独资源包行项。
9. **限时折扣**:百炼/灵积等存在阶段性折扣文档(如 doc_id=3042139 Qwen3.7 系列折扣),需在备注块单列。
10. **多地域报价**:同一产品不同地域价格不同,每个地域都得单独 DescribePrice。

## 验证
- 用 `openpyxl.load_workbook(..., data_only=False)` 检查 G 列公式存在
- 用 `data_only=True` 配合 LibreOffice 重算一次确认 SUM 与各行乘积一致
- 备注块至少包含一个 `https://help.aliyun.com/zh/` 链接
- 至少一行按量后付费项目(如客户场景中确实没有按量项,备注块需写明"本次报价无按量后付费组件")

试下调用Skill生成报价单,因为Skill中已经包含了部分要求,需求描述就不用像之前那么细致了。

新开一个Qoderwork对话框,选择上新安装的Skill aliyun-price-excel-maker,贴入如下内容:
做一个阿里云的配置报价单,
需求:
* 通过CEN云企业网实现阿里云深圳VPC和香港VPC(中国内地-亚太)内网互通,带宽10Mbps;
* 深圳VPC和香港VPC各包含一个ecs.c9i.xlarge ECS实例;
* 深圳和香港的ECS各添加一个10Mbps的弹性公网IP;

image.png

任务完成。

image.png

生成报价单表格跟之前一致,证明之前需求的内容已经固化到Skill中。

image.png

Notes:本章节主要是展示Skill创建的过程和思路,各位BTE可以按照自己的需求定制自己的Skill。

最终交付物

MCP:aliyun-openapi-mcp-core

{
“mcpServers”: {
“aliyun-openapi-mcp-core”: {
“command”: “npx”,
“args”: [
“mcp-remote-alibaba-cloud”,
“https://openapi-mcp.cn-hangzhou.aliyuncs.com/id/<你的专属ID>/mcp”
]
}
}
}

Skill:aliyun-price-excel-maker

Notes:本Skill可作为样例或基础版本,各位BTE可以按照自己的需求定制自己的Skill。

---
name: aliyun-price-excel-maker
description: 通过阿里云 OpenAPI MCP (aliyun-openapi-mcp-core) 实时查询任意阿里云产品的官方牌价/计费规则,并生成结构化 Excel 配置报价单(含组件功能简介、月租牌价、数量、折扣、折扣月租价、SUM 合计公式)。覆盖计算、存储、网络、数据库、大数据、AI/大模型、安全、容器、中间件、CDN、视频、IoT 等阿里云全产品线。当用户要求"做阿里云报价单"、"阿里云配置清单"、"云资源询价"、"客户方案报价"、"阿里云成本估算 Excel"、"TCO 估算"、"上云预算表"时触发。所有方案、价格、计费规则以 https://help.aliyun.com/zh 官方文档为唯一权威来源。
version: 1.1.0
---

# aliyun-price-excel-maker

阿里云**通用报价单生成器**:把"需求描述 → 阿里云资源清单 → 实时官方牌价 → 标准化 Excel 报价单"做成一次性流水线,不限定产品域。

## 适用场景(产品无关)
- 销售/解决方案输出阿里云配置清单与月度费用预估
- 任意组合询价:计算(ECS/ECI/弹性裸金属/HPC/GPU)、存储(OSS/NAS/CPFS/云盘)、网络(VPC/EIP/CEN/NAT/SLB-NLB-ALB/共享带宽/全球加速)、数据库(RDS/PolarDB/Lindorm/Tair/MongoDB/ADB)、大数据(MaxCompute/Hologres/DataWorks/Flink/EMR)、AI/大模型(百炼/PAI/灵积/通义听悟/向量检索)、容器(ACK/ACR/SAE)、中间件(MSE/RocketMQ/Kafka/Notifications)、安全(WAF/DDoS/堡垒机/KMS)、CDN/DCDN/EdgeRoutine、视频云、IoT、混合云、专有云外延等
- TCO / 上云预算 / 续费报价 / 折扣商务谈判表

## 强制原则
1. **官方文档唯一源**:方案、计费规则、产品能力一律引用 https://help.aliyun.com/zh 下页面;不采纳第三方价格;备注块必须放至少一个该域链接。
2. **实时询价优先**:优先用 `AlibabaCloud___CallCLI` 调用对应产品的 DescribePrice / GetPayAsYouGoPrice / DescribeRenewalPrice 等定价 API。无定价 API 时回退到 `SearchDocuments`+`GetDocument` 抓官方定价表。
3. **公式留接口**:折扣列默认 `100%`(数值 1,格式 `0%`),折扣月租价列固定写 `=D{row}*E{row}*F{row}`;销售可现场改折扣,SUM 自动重算。
4. **按量项必须列入但不并入 SUM**:按量后付费组件(流量费、Token 用量费、API 调用费等)月租列写"按量后付费",G 列写"按量计费"占位,备注里写清单价与计算单位。
5. **币种与精度**:统一 CNY、保留两位小数;合计行 `¥#,##0.00`;跨境地域返回值已是 CNY,不要换汇。
6. **时间戳**:执行前用 `date` 取当天日期写入备注块,标注"报价基于 YYYY-MM-DD 阿里云公开牌价"。

## 执行步骤

### 1. 需求澄清(必须,用 AskUserQuestion)
按产品类型问足下列要素,缺一就问:
- **通用**:地域(中国内地 / 中国香港 / 亚太 / 欧洲 / 中东 / 北美)、计费方式(包年包月 / 按量付费 / 资源包 / Savings Plan)、商务折扣(默认 100%,或客户预设 0.x)
- **计算类**:实例规格族、vCPU / 内存、镜像、系统盘 + 数据盘(类型 ESSD PL0/PL1/PL2/PL3、容量)、是否需公网带宽
- **存储类**:类型(标准/低频/归档)、容量(GB/TB)、请求次数预估、地域间复制
- **网络类**:带宽 Mbps、计费模式(按带宽/按流量/95峰值)、BGP 或精品、跨地域对、TR 数量
- **数据库类**:引擎与版本、规格族、存储类型与容量、备份保留天数、是否多可用区/只读副本
- **大数据类**:计算资源单位(CU/AU/Slot)、存储 GB、调度任务数
- **AI/大模型**:模型 ID(qwen3.x / qwen-mt / embedding 等)、输入/输出 Token 月预估、是否独占算力
- **容器类**:集群类型(Pro/标准)、Worker 节点规格与数量、是否托管 etcd
- **安全类**:防护实例规格、QPS、CC 防护带宽
- **CDN/视频**:流量预估 TB、回源带宽、点播分发地域
- 是否需要"按量后付费组件单独列示"

### 2. 实时询价(按产品域选择路径)

**通用调用链**:
1. `AlibabaCloud___ListProducts` 确认产品 productCode
2. `AlibabaCloud___ListApis` / `AlibabaCloud___SearchApis(prompt=…)` 找 DescribePrice 类 API
3. `AlibabaCloud___GetApiDefinition` 取参数定义
4. `AlibabaCloud___GenerateCLICommand` 生成可执行 CLI
5. `AlibabaCloud___CallCLI` 实际询价
6. 若无询价 API → `AlibabaCloud___SearchDocuments(query=…)` 找官方定价文档 → `GetDocument(doc_id=…)` 取定价表

**已沉淀的常用片段**:

- ECS 月租:
  ```
  aliyun ecs DescribePrice --RegionId <r> --InstanceType <t> --PriceUnit Month --Period 1 \
    --ResourceType instance --IoOptimized optimized --InstanceNetworkType vpc \
    --InternetChargeType PayByTraffic --InternetMaxBandwidthOut 0 \
    --SystemDisk.Category cloud_essd --SystemDisk.Size <gb> --SystemDisk.PerformanceLevel <PLx>
  ```
  返回 `PriceInfo.Price.DetailInfos.DetailInfo[]`,`instanceType` 与 `systemDisk` 分两行列示。
- RDS:`aliyun rds DescribePrice --DBInstanceClass … --EngineVersion … --PayType Prepaid --UsedTime 1 --TimeType Month`
- PolarDB:`aliyun polardb DescribePrice --DBNodeClass … --DBType MySQL …`
- OSS / NAS 等存储:多为按量后付费,查 https://help.aliyun.com/zh/oss/product-overview/billing-overview 定价表
- 大模型(百炼 / 灵积):`SearchDocuments(query="qwen3.x 计费")` 取 doc,按 Token 单价×百万记入按量项
- EIP 包年包月(BGP多线,需公式计算 ≥6Mbps):
  - 中国内地:`125 + (n-5)×80`
  - 中国香港:`150 + (n-5)×100`
  - 新加坡/法兰克福:`115 + (n-5)×80`
  - 1–5Mbps 段为阶梯固定值,查 https://help.aliyun.com/zh/eip/subscription
- CEN:跨地域带宽包(中国内地↔亚太 0-100Mbps 档 860 元/Mbps/月)+ TR 连接费(内地 0.35 / 境外 0.40 元/h,×730h)+ 流量处理费 0.13 元/GB(按量项),见 https://help.aliyun.com/zh/cen/product-overview/billing-rules
- SLB/NLB/ALB、NAT、共享带宽、全球加速:先 SearchApis 找 DescribePrice,没有则走 SearchDocuments

> 上述片段是**示例非穷举**。遇到新产品按"通用调用链"4 步走,永远先实时调用 API,不要拍脑袋写数字。

### 3. 生成 Excel(标准模板,与产品无关)

使用 openpyxl,固定 7 列结构:

| A 序号 | B 产品名称 | C 组件功能简介 | D 月租牌价(元) | E 数量 | F 折扣 | G 折扣月租价(元) |
|--------|-----------|--------------|--------------|--------|--------|----------------|

- 标题行(merge A:G,深蓝底白字 14pt 加粗)
- 需求描述行(merge A:G,灰色斜体 9pt)
- 表头行(蓝底白字 11pt 加粗,居中)
- **分组小标题行**(merge A:G,浅蓝底)按需自定义分类:如"一、计算资源"、"二、存储与备份"、"三、网络与互联"、"四、数据库"、"五、大模型与AI"、"六、安全与合规"、"七、容器与中间件"、"八、按量后付费组件"……
- 数据行:D 列右对齐 `#,##0.00`,F 列居中 `0%`,G 列写 `=D{r}*E{r}*F{r}`
- 按量项:D 列写"按量后付费",G 列写"按量计费";备注里补充"<单价>/<计量单位>"
- 合计行:黄底红字加粗,`=SUM(G{start}:G{end})`,格式 `¥#,##0.00`,标签"固定月租合计 (含税·CNY) — 不含 X 项按量后付费"
- 备注块:merge A:G,wrap_text;必须包含计费公式说明、所引用 help.aliyun.com/zh 链接、报价日期
- 列宽:A=6, B=22, C=56, D=16, E=8, F=10, G=18
- 冻结表头 `ws.freeze_panes = "A5"`

参考脚本骨架可基于 `~/.qoderwork/workspace/*/build_quote.py` 复用并扩展产品分类。

### 4. 输出与交付
- 文件路径:`<workspace>/outputs/阿里云<场景关键词>报价单.xlsx`
- 用 `present_files` 卡片交付
- 文本输出复述固定月租合计 + 按量后付费项列表
- 结尾 Sources 段附上所有引用的 help.aliyun.com 文档链接

## 常见坑(跨产品通用)
1. **MCP 参数名差异**:`SearchApis` 用 `prompt`,`SearchDocuments` 用 `query`,搞反报"Parameter is required and cannot be empty"。
2. **并非所有产品都有 DescribePrice CLI**:VPC、OSS、CDN、大模型等大量产品无询价 API,必须走文档。不要尝试不存在的 CLI 命令。
3. **ECS 公网带宽**:`InternetMaxBandwidthOut=0` 表示不含公网(与单独购 EIP 解耦),避免双重计费。
4. **多组件分行**:DescribePrice 返回的 instanceType / systemDisk / dataDisk / bandwidth 等子项应分行列示,方便客户看结构。
5. **按量项绝不并入 SUM**:流量、Token、请求次数、CC包等按量项独立标注,避免假月租。
6. **币种**:跨境地域返回值默认 CNY,不要换汇。
7. **时效**:阿里云价格随时调整,每次执行都重新调用 API;执行前 `date` 取实时日期写入备注;不要硬编码记忆中的数字。
8. **资源包 vs 后付费**:OSS/CDN/带宽等可购资源包预付优惠,需问清是否计入"包年包月"还是单独资源包行项。
9. **限时折扣**:百炼/灵积等存在阶段性折扣文档(如 doc_id=3042139 Qwen3.7 系列折扣),需在备注块单列。
10. **多地域报价**:同一产品不同地域价格不同,每个地域都得单独 DescribePrice。

## 验证
- 用 `openpyxl.load_workbook(..., data_only=False)` 检查 G 列公式存在
- 用 `data_only=True` 配合 LibreOffice 重算一次确认 SUM 与各行乘积一致
- 备注块至少包含一个 `https://help.aliyun.com/zh/` 链接
- 至少一行按量后付费项目(如客户场景中确实没有按量项,备注块需写明"本次报价无按量后付费组件")