Western Blot 膜灰度定量(按次付费)
对 Western Blot 膜图做 ImageJ 矩形框选法的标准化灰度定量:8-bit 灰度化 → rolling ball 背景扣除(半径 50,light background)→ 极性自动判断 → 固定尺寸矩形测量 → 按泳道输出定量表。
算法在服务端运行,本 Skill 只负责编排「请求 → 支付 → 重试 → 展示」,不接触任何私钥。
触发词
- 「分析这张 WB 图」「WB 灰度定量」「跑一下 western blot 定量」
- 「这条带比那条带亮多少」「算一下膜上各泳道的 IntDen」
- 「批量定量 WB 膜」「估算蛋白相对表达量」
输入参数
| 参数 | 必填 | 说明 |
|---|---|---|
| 膜图路径 | 是 | .tif / .tiff / .png / .jpg,单张图;多张请逐张调用 |
| 背景扣除半径 | 否 | 默认 50 px;条带很宽或膜很大时可调到 80~100 |
| 服务端地址 | 否 | 默认取环境变量 WB_A2M_URL,一般无需修改 |
单次价格
¥0.50 / 次(每次调用分析一张膜图)。
三处价格必须完全一致,否则用户无法付款:
- 支付宝 AI 付站点「服务注册」时登记的单价
- 服务端 402 账单里的
amount - SkillHub 发布表单「完善计费」里的单次调用价格
依赖安装
无需安装任何依赖,Node.js ≥ 18 即可(脚本只用内建模块)。
买家侧支付能力(在 Agent 对话内扫码付费用):
npx -y @alipay/agent-payment@latest install
调用流程
三步走,每一步都有明确的成功标志:
# 1. 取账单(不需要付款)
node scripts/wb-quant-paid.mjs probe --image "D:/data/membrane.tif"
# 2. 支付(交给支付宝支付能力,用户在对话内授权)
node scripts/wb-quant-paid.mjs pay
# 3. 携凭证重试,服务端验付后返回定量结果
node scripts/wb-quant-paid.mjs complete --proof "<Payment-Proof>"
1. probe —— 取 402 账单
请求分析接口但不带支付凭证,服务端返回 HTTP 402 与 Payment-Needed 响应头。脚本解码账单、打印金额与服务名,并把账单存到 .state/<out_trade_no>.json。
这一步不产生任何费用。 若服务端返回 200(配置为免费模式),会直接输出结果表。
2. pay —— 支付
把已保存的账单交给 alipay-bot 完成收银与授权。用户在当前对话里确认金额即可付款,不需要跳转站外页面。
若环境里没有 alipay-bot,脚本会把账单原文写到 .state/<out_trade_no>.bill.json 并提示安装命令 —— 这属于环境缺依赖,不是支付失败。
3. complete —— 携凭证重试
把 Payment-Proof 放进请求头重试同一个请求(同一张图、同样参数)。服务端会:
- 调
alipay.aipay.agent.payment.verify验证凭证 - 校验
active=true、amount与订单一致、out_trade_no与本地订单一致 - 交付分析结果并调
alipay.aipay.agent.fulfillment.confirm回报履约
成功返回 200 与结果表;凭证无效或已过期则仍返回 402,脚本退出码为 2 —— 这种情况不要重复付款,先核对订单号。
输出
泳道 Area Mean IntDen 相对最大
1 4620 126.64 585083 87.2%
6 4620 145.29 671250 100.0%
13 4620 7.15 33015 4.9%
- Area 固定(同一张图内每条泳道框尺寸一致),所以 Mean / IntDen 可直接横向比较
- IntDen = Area × Mean,是相对定量的主指标
- 相对最大 以最强条带为 100% 归一化
- 淡条带数值必然更小:测量在反相图上进行,与肉眼判断方向一致
完整 JSON 结果另存到 .state/results/<out_trade_no>.json。
边界与约定
- 不做诊断结论:只给灰度定量值,不判断蛋白表达差异是否具有生物学意义,统计检验请自行完成
- 不替代重复实验:单张膜的结果不能作为独立重复(n=1),至少 3 次独立实验才具备统计意义
- 图像不出本机以外的第三方:图片只发给本服务端用于计算,不落盘、不外传
- 图片质量要求:过曝(条带饱和)会使定量失真,脚本不做反卷积补偿
- 服务端不可用(503 / 网络错误)时不给结论,明确报错让用户重试
计费异常处理
| 情况 | 表现 | 处理 |
|---|---|---|
| 价格三处不一致 | 收银台报 SERVICE_PRICE_MISMATCH |
统一三处价格为 ¥0.50 |
| 支付后仍返回 402 | complete 退出码 2 |
核对订单号与凭证是否同一笔,勿重复付款 |
| 服务端 503 | 提示配置未完成 | 服务端密钥/服务标识未就绪,稍后重试 |
| 同一笔凭证重复调用 | already_fulfilled=true |
正常,服务端不会重复扣费也不会重复交付 |
服务端信息
协议契约与字段说明见 references/server-contract.md。私钥、appId、serviceId 全部保存在服务端环境变量,不在本 Skill 包内。