把 Skill、AI 办公、自媒体、短视频、电商并列讨论时,流行的叙事是“一套 AI 工具打通五条线”。但从工程视角看,它们的共性不在工具链,而在放行条件是否被机械执行。Codex 的 Skill 机制本质上是“可复用的工作说明书”,管“怎么做”,不管“做什么”;而五条线真正决定成败的分水岭,不是 Skill 写得多漂亮,而是每个关键节点上是否存在一道模型无法绕过的闸门。Agent Skill 的输出契约校验遵循一条硬规则:SKILL.md 声明 output: json 后,执行结果按契约校验,校验失败一律按执行失败处理(fail-closed),不把不可信输出透传给下游。这条规则应当贯穿所有业务线。
一个生产级 Skill 的 SKILL.md 同时承担四种身份:召回索引项、操作指令书、权限声明和工程资产。其中决定“能否放行”的,不是正文写得多长,而是输入输出契约是否可被机械判定。以下校验器在 Skill 执行后、结果进入下游之前强制运行,output 不符合契约即拒绝交付,而不是让模型“解释一下为什么不对”:
import jsonschema
OUTPUT_CONTRACTS = {
"daily-report": {
"type": "object",
"required": ["done", "in_progress", "decisions"],
"properties": {
"done": {"type": "array", "items": {"type": "string"}},
"in_progress": {"type": "array", "items": {"type": "string"}},
"decisions": {"type": "array", "items": {"type": "string"}},
},
"additionalProperties": False,
},
"product-seeding": {
"type": "object",
"required": ["hook", "body", "cta"],
"properties": {
"hook": {"type": "string", "maxLength": 80},
"body": {"type": "string"},
"cta": {"type": "string"},
},
"additionalProperties": False,
},
}
def validate_skill_output(skill: str, payload: dict) -> None:
jsonschema.validate(payload, OUTPUT_CONTRACTS[skill])
# fail-closed:校验失败抛异常,阻断交付,而非降级透传additionalProperties: False 堵死了模型“多输出一个看似有用的字段”的路径,maxLength 把“钩子太长”这类形式问题在进入渲染之前就拦截。Skill 的工程价值不在于封装了多少步骤,而在于交付物是否只能以契约规定的形态离开。
AI 办公场景的高危动作——发邮件、改权限、删除文件——不能与只读查询走同一条自动执行路径。风险策略应由应用代码维护并与具体工具绑定,拒绝或无法确认时一律按拒绝处理。以下审批拦截器把“默认拒绝”固化为代码语义:
from dataclasses import dataclass
from typing import Callable
@dataclass(frozen=True)
class Tool:
handler: Callable
risk: str # read / write / destructive
def gate(tool: Tool, args: dict, approved: bool) -> str:
if tool.risk == "read":
return tool.handler(**args) # 只读自动执行
if tool.risk == "write" and not approved:
raise PermissionError("write requires explicit approval")
if tool.risk == "destructive" and not approved:
raise PermissionError("destructive requires explicit approval")
return tool.handler(**args)自媒体侧的闸门形态不同,但原则一致:CreatorFlow 的发布收尾门禁要求发布文案绑定最终脚本和最终成片的 SHA-256,脚本或成片一旦变化,旧验收结论主动失效,必须重新复核;自动 QA 通过只允许进入人工关键帧复核,不允许直接收尾。验收结论不是一次性状态,而是锚定在具体产物哈希上的临时判断。
短视频脚本的失败通常不是“写不出来”,而是“写出来了但句长超限、含不可朗读字符、或触犯平台禁用词”。podcast-maker 的做法给出了可操作的纪律:门禁覆盖 JSON 合法性、字段完整性、句长区间、单句时长、禁用词和可朗读性;修补时只把门禁点名的句子交给模型,输出是按句号定位的补丁,行数保持不变,结构损坏才整篇重出。以下函数将句级门禁与定点修补绑定:
import re
def gate_lines(lines: list[dict]) -> list[dict]:
errors = []
for i, ln in enumerate(lines):
if len(ln["text"]) > 40:
errors.append({"index": i, "code": "TOO_LONG"})
if re.search(r"(赋能|抓手|闭环)", ln["text"]):
errors.append({"index": i, "code": "BANNED"})
return errors
def apply_patch(lines: list[dict], patch: list[dict]) -> list[dict]:
flagged = {e["index"] for e in gate_lines(lines)}
for p in patch:
if p["index"] not in flagged:
raise ValueError("patch index not gate-flagged")
lines[p["index"]]["text"] = p["text"]
return lines未通过门禁的脚本不进入配音和渲染,而不是先出片再回头修补。
电商与内容生产的关键差异在于副作用的不可逆性。多 Agent 电商系统采用的原则是审批效果后置:高危动作调用后只登记参数快照,不产生任何对外效果;人工批准后在一个事务内统一 apply,批内同进同退,快照漂移则整批回滚。选品的毛利计算必须使用完整字段和同一币种口径,缺一个字段就输出“无法计算”,而不是让模型估算。以下审批拦截器展示了“批准前效果不可见”的最小实现:
PENDING: dict[str, dict] = {}
def stage(action: str, params: dict, snapshot: dict) -> str:
action_id = f"{action}:{snapshot['sku']}:{snapshot['version']}"
PENDING[action_id] = {"params": dict(params), "snapshot": dict(snapshot)}
return action_id # 不产生任何对外写效果
def approve(action_id: str, current: dict) -> dict:
rec = PENDING[action_id]
if rec["snapshot"] != current:
PENDING.pop(action_id, None)
raise RuntimeError("snapshot drift: batch rollback")
return _apply_in_transaction(rec["params"])五条线的工程纪律最终收敛为同一句话:模型负责生成候选,确定性代码负责判定“能否进入下一阶段”,人工保留对不可逆动作的最终授权。Skill 的契约校验阻断不合格交付物,AI 办公的审批闸门阻断未授权副作用,短视频的句级门禁阻断不合格脚本进入渲染,自媒体的哈希绑定阻断未复核产物进入发布,电商的快照审批阻断未授权动作产生对外效果。通关的标志不是五条线都接入了模型,而是每条线都在关键节点上拥有可被机械执行、可回滚、模型无法绕过的闸门。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。