版本、发布与监控
版本号怎样区分兼容与破坏;指标与运行历史;谁能跑;AIDC 用语义版本、应用版本、运行记录和用量。

本课目标
读完这一课,你将能够
- 用 X.Y.Z 三段版本号区分兼容的改动和破坏性的改动
- 说出函数的指标与运行历史看什么,以及谁能运行、看到什么
- 说出 AIDC 里对应的语义版本、应用版本、运行记录与用量,以及怎样用工作流做告警
版本:源码与签名发布后不可改
函数版本写成 X.Y.Z:主版本、次版本、补丁。同一版本的签名与源码不能改,但可以更新超时或内存配置。Automate 的函数效果指定 version,也可以设 autoUpgrade。智能体只能发预发布版本,例如 1.1.0-rc.1。
| 兼容的改动 | 破坏性的改动(升主版本) | |
|---|---|---|
| 输入 | 加一个可选输入 | 加必填输入、删输入(哪怕可选)、调换输入顺序 |
| 输出 | 改进性能,行为不变 | 输出类型从整数改成字符串 |
| 函数本身 | 修一个不改变预期行为的 bug | 删除函数 |
主版本 0 是初始开发期,随时可能变,调用方不该当它稳定。发布前平台会做兼容检查,但检查并不完整:内部实现上的破坏它查不到,所以不能因为检查通过就发补丁。如果不小心把破坏性改动当次版本发了,不能改已发的版本,要恢复兼容,再发一个新的次版本。示例工厂的 supplierScore 可以这样演进:
- 1.0.0
输入一个供应商,输出一个分数。
- 1.1.0
加一个可选输入
windowDays:兼容,升次版本。 - 2.0.0
输出从一个数变成
{ score, reasons }:破坏性,升主版本。
监控与权限:看得见,才管得住
标准模型给两样东西。指标:近乎实时地显示最近 30 天每种函数的成功与失败次数,以及 P95 时长(95% 的调用不超过的时长)。运行历史:最近 7 天每一次执行。失败分成几类,比如运行时错误、资源超限、面向用户的错误、输入无效、输出无效、加载数据不被允许、改了没声明的对象类型,一眼能看出是代码、调用方还是资源的问题。
监控规则可以对「P95 时长超过阈值」和「窗口内失败次数超过阈值」告警,还能只看面向用户的失败,或只看非面向用户的失败——后者多半是基础设施的问题。
权限有四点要记住:
- 运行函数需要对它有查看权限,看指标同理;
- 函数读对象时用的是调用者的权限,同一个函数对不同的人可能返回不同的结果;
- 函数驱动的 Action 是特例:使用者不需要能读那个函数,由 Action 自己的权限管;
- 行、列级的读限制只管读,不延伸到函数的输出。
在 AIDC 里:版本号、运行记录、用量
AIDC 已支持 Function 的语义化版本发布、列表和隔离执行。用 aidc semantic functions publish 发布,用 aidc semantic functions list 查看。新文档没有说明专用函数指标页和监控规则。其他版本与运行记录看下面三处:
语义版本
aidc semantic publish --notes "…" 发一个语义版本 vN,只增,定义没变不占号。破坏性改动(删类型、删属性、改类型、改主键、Action 删参数或新增必填参数)在定义时返回,发布时记 changeKind: breaking。
应用版本
工作流就是应用:aidc app deploy 到 test 通道(版本号是清单的 version,内容变了就要升),aidc app publish 到正式,aidc app rollback order-risk --version 1.1.0 回退。提示词和 models 都在清单里,改一句提示词、换一个模型,都是一个新版本。
运行记录
每次运行留下每一步的状态、耗时、输出和 token,保留 180 天。超过 5 分钟没有进展的运行标为「中断」,可以重跑。看 aidc semantic automate runs、status、watch。
改一句提示词之后的一轮发布,大致是这样:先部署到 test 通道,用评测集预演,没有变差再发布,变差了就回退。
aidc app deploy ./order-risk --notes "Clarify the at_risk rule in the prompt"
aidc semantic automate run order-risk --param order_no=SO-2001 --preview --channel test
aidc app publish order-risk --version 1.2.0
aidc app rollback order-risk --version 1.1.0 # only if the new version is worse
用量看 aidc app usage order-risk:本月计算分钟(缺省 2000 / 月,用完之后数据变化和定时都不再开跑,下月恢复)、定时和今天的通知。模型花了多少,看 aidc semantic usage summary --app order-risk。开了 actionLog 的 Action 每次成功提交还会写一个日志对象(例如 log.adjust-seats),谁在什么时候用什么参数改了什么,一查便知。
告警靠工作流自己。notify 步骤的收件人写死在清单里,必须是本公司账号;dedupe 与 cooldown(缺省 6 小时)防止告警风暴,每个应用每天最多 20 封(limits.notificationsPerDay)。「ERP 数据两小时没来」这类看门狗,用定时触发加 hoursSince 判断。
谁能运行,由 trigger.manual.roles 决定。别的应用调用它的能力时,以「提供方应用 × 成员角色」执行,只有发布到正式通道的版本才对外可见。
模型参与的逻辑变好,走的是同一条路:证据、提案、新版本(aidc evolve evidence order-risk),改前改后用同一份评测集对比。
要点
- 版本号 X.Y.Z:加可选输入是兼容的;加必填输入、删输入、改输出类型、删函数是破坏性的,要升主版本。
- 同一版本的源码与签名不能改,超时或内存配置可以更新。误发破坏性改动,要恢复兼容,再发新版本。
- 监控看指标(30 天成功、失败、P95)和运行历史(7 天);函数读对象用的是调用者的权限。
- AIDC 今天用语义版本、应用版本、180 天的运行记录、计算分钟用量和
notify告警对应这些事。
练一练
给「供应商评分」定版本,再设计一条告警
版本号是给调用方看的承诺,告警是给运维看的承诺。
下面五个改动各升哪一段:加可选输入 windowDays;输出类型从数变成结构;删除一个可选输入;修一个不改变行为的 bug;调换两个输入的顺序。
对你有权限的一个工作流应用(下面以 order-risk 为例)运行 aidc semantic automate runs order-risk 与 aidc app usage order-risk,记下最近一次运行每一步的耗时和本月已用的计算分钟。
为「采购价格数据两小时没来」设计告警:用定时还是数据变化触发?条件怎么写?dedupe 用什么?cooldown 设多久?
小测
选一个答案,马上看解析。
Q1给 supplierScore 加一个可选输入 windowDays,版本从 1.0.0 该升到?
加可选输入不打扰现有调用方,属于兼容的新功能,升次版本;加的是必填输入才要升主版本。
Q2你把一个破坏性改动当作 1.1.0 发布了,怎么补救?
不能修改 1.1.0 的源码或签名。恢复兼容后发布 1.2.0。同版本的相同内容可重复发布;超时或内存配置也可以更新。
Q3在 AIDC 里,你改了工作流 AI 分析步骤的一句提示词,应该怎么做?
提示词写在清单里,改它就是改应用,内容变了版本号就要升;用同一份评测集对比改前改后,再发布。