智能体在闭环里
智能体读 Semantic、判断、起草,先预演再提交;模型给理由,公式给边界,人来批准。

本课目标
读完这一课,你将能够
- 说出智能体在自动化里的位置:判断、起草、执行,各自的边界
- 用「先读说明书,再预演,再提交」的顺序写出一次智能体调用
- 用「模型给理由,公式给边界,人来批准」设计三道关口,并说出今天各种凭证的身份
智能体放在闭环的哪一处
让模型逻辑接在自动化的效果上是标准做法:它读数据、做判断、产出改动。改动可以直接执行,也可以先暂存成提案,等人审过再执行,审核的人还能看到模型是怎么得出这个提案的。
一个稳妥的分工:条件要确定,判断交给智能体,写入交给 Action。 条件里不放模型,因为同一份数据求两次值,结果应该一样。
- 01读说明书,和触发的那个对象
- 02判断给出结论和理由
- 03预演只校验,Action 返回计划
- 04提交或交人过了边界检查才写,批准类交给人
AIDC 里有两种「智能体」,别混。工作流里的 model 步骤读前面步骤查到的数据,按 output 声明的字段返回结论,自己不调用工具,也写不了数据。外部智能体(数字员工,或你自己框架里的智能体)能读说明书、调应用的 API,先预演再提交。模型调用按工作流应用计费,每天的 dailyTokens 缺省封顶 1,000,000。
先读说明书,再预演,再提交
外部智能体每次先读说明书:有哪些对象、属性怎么叫、能做哪些 Action;再读触发它的那个对象;然后只用应用登记的 API 做事。为低库存物料建采购草稿,最短的一轮是这样:
aidc semantic describe --markdown # read the guide first
aidc semantic object material M-1042 --json # the object that triggered the run
aidc app apis cell-factory/factory-ops # which APIs may I call?
aidc app call cell-factory/factory-ops create_purchase_order \
--param po_no=PO-M-1042-2026-09-29 --param material_code=M-1042 \
--param supplier_id=S-07 --param qty=400 --preview --json
# show the plan to a person; after a yes, run the same call without --preview
- 写入一律先
--preview:读、算、分析照跑,写入只返回计划;把计划给人看,确认后再正式调用。 - 结论只用 API 返回的内容,不凭记忆补数字。
- 凭证只来自人交给你的 Key;遇到额度或权限错误就停下来告诉人,不要换 Key 重试。
预演之后给人看的,不只是计划,还有依据:读到的对象、算出的缺口、模型写的理由。人批准的是这一整包,而不是一个孤零零的数字。预演也不是免费的:模型分析真的会跑,占用 token 和计算分钟。
模型给理由,公式给边界,人来批准
② 里的智能体只做一件事:从候选供应商里挑一个,给数量,写理由。它挑的东西,有三道关:
- 公式
compute步骤检查供应商在候选名单里、数量是正数,再把数量压在上限内(这里是安全库存的两倍)。检查不过,后面的步骤不执行。 - Action
参数有最小值和最大值,提交条件检查供应商评分(示例:不低于 3)。
- 人
订单以草稿状态建出。批准用另一个 Action。若要求只由人执行,提交条件必须检查
authorKind等于human;只放在人用应用里不够。
前面还有四步:mat 读物料,open 读在途订单,sup 读候选供应商,rule 算缺口和上限。没有缺口时,下面这些步骤一个都不执行:
{ "id": "review", "kind": "model", "title": "Pick supplier and quantity",
"when": "=steps.rule.needs_order", "model": "deepseek-flash",
"system": "You are a purchasing analyst. Use only the numbers you are given. Pick a supplier from the list and propose a quantity.",
"prompt": "Material: {{ steps.mat.row }}\nOpen orders: {{ steps.open.rows }}\nSuppliers: {{ steps.sup.rows }}\nGap: {{ steps.rule.gap }}\nLimit: {{ steps.rule.cap }}",
"output": { "supplier_id": "text", "qty": "number", "reason": "text" } },
{ "id": "bound", "kind": "compute", "title": "Check and clip",
"fields": {
"ok": "=steps.rule.needs_order && (steps.review.qty ?? 0) > 0 && contains(pluck(steps.sup.rows, 'supplierId'), steps.review.supplier_id)",
"qty": "=min(round(steps.review.qty ?? 0), steps.rule.cap)"
} },
{ "id": "draft", "kind": "use", "title": "Create the draft order",
"when": "=steps.bound.ok", "use": "factory-ops/create_purchase_order",
"with": { "po_no": "=concat('PO-', input.material_code, '-', today())", "material_code": "=input.material_code",
"supplier_id": "=steps.review.supplier_id", "qty": "=steps.bound.qty" } }
最后一道关在 Action 自己身上,下面是 create-purchase-order 的相关片段:
"parameters": [
{ "name": "supplier", "type": "object", "objectType": "supplier", "required": true },
{ "name": "qty", "type": "integer", "required": true, "min": 1, "max": 100000 }
],
"submissionCriteria": [{
"condition": { "type": "comparison", "left": { "param": "supplier", "property": "rating" }, "operator": "gte", "right": { "literal": 3 } },
"failureMessage": "Supplier rating is below 3"
}]
reason 字段不是装饰:它随通知发给采购员,也留在运行记录里,批准的人看它,事后复盘的人也看它。但别把模型自己报的「把握有多大」当成关口,它不是边界。边界要能被复算,也要能被审计。
谁的身份在动手
Agent Key(智能体密钥)
受限 Agent Key 用 operations、objectTypes、actionTypes 限定读写和 Action。它只能在所代表主体的权限与 Key 限制的交集内执行。没有限制配置的普通 Agent Key 仍只读。
无人值守的工作流
以「提供方应用 × 成员角色」执行:只能用提供方登记的类型和 Action,不是某个人的权限。
开发者 Key
权限同本公司开发者。别把它交给无人值守的智能体去直接改数据。
经应用的 API 调用时,身份是「应用 × 调用人的角色」:读只能读应用登记过的类型,Action 过它自己的角色规则,调用人拿不到应用本来拿不到的东西,留痕记的是调用人。所以让智能体改数据的稳妥路径,是应用的 API,而不是把大权限的 Key 交给它。
要点
- 条件要确定,判断交给智能体,写入交给 Action;条件里不放模型。
- AIDC 里有两种智能体:工作流的
model步骤只返回字段、不写数据;外部智能体读说明书、调应用的 API。 - 智能体的顺序是先读说明书,再预演,再提交;写入一律先
--preview,把计划给人看。 - 模型给理由,公式给边界,Action 的参数与提交条件守最后一道,批准由人来做。
- 受限 Agent Key 用
operations、objectTypes、actionTypes限定读写和 Action。它只能在所代表主体的权限与 Key 限制的交集内执行。没有限制配置的普通 Agent Key 仍只读。应用工作流按提供方应用的成员身份执行。
练一练
把智能体放进 ⑤ 和 ②
第一个练习设计,第二个动手,第三个找漏洞。
为⑤「每天早上提醒可能延期的订单」安排智能体:它读什么(如 salesOrder 的 promisedDate、workOrder 的 status 与 dueAt),model 步骤的 output 声明哪几个字段,通知里哪个数字必须来自 compute 而不是模型。
运行 aidc app apis cell-aidc/quote-workflow(换成你有权限的工作流应用),再用 aidc app call cell-aidc/quote-workflow run --param rfq_no=RFQ-2609-006 --preview --json 预演一次,看返回的计划里哪些写入会发生。
指出这个设计的两处危险:「模型输出的 qty 直接传给 create-purchase-order;approve-purchase-order 也登记在同一个应用里,让智能体自己批准起草的单。」
小测
选一个答案,马上看解析。
Q1为什么让模型只输出字段,再由公式和 Action 来限制,而不是让模型直接决定写什么?
model 步骤能输出数字,也读得到前面的结果。问题在于结论不可复算:边界要放在能复算、能审计的公式与 Action 上。
Q2外部智能体要为一个低库存物料建采购草稿,最合适的顺序是?
受限 Agent Key 用 operations、objectTypes、actionTypes 限定读写和 Action。它只能在所代表主体的权限与 Key 限制的交集内执行。没有限制配置的普通 Agent Key 仍只读。写入先预演,再按授权提交。
Q3无人值守的工作流运行,写入时用的是什么身份?
能力以提供方应用与成员角色执行,工作流拿不到提供方自己拿不到的东西。