13. 独立开发、团队、学习与工作流 · 资料陈述 · 教学步骤 7
自动化确定步骤,保留人工关口
重复确定动作适合自动化,异常和敏感内容需要人工负责。
原知识点:将采集、生成、翻译、组装、检查和发布等可确定环节自动化串联,减少人工逐步点击。
执行步骤
- 画出人工现状的每一步、输入、输出、失败方式和责任人,并选择规则稳定、错误可检测的步骤。
- 写成可运行的工作流配置与伪代码,定义唯一job_id、幂等键、超时、重试上限、状态机和产物版本。
- 定义结构化日志字段、成功/失败/延迟指标、告警阈值、值班责任人与人工接管动作。
- 在来源冲突、低置信、敏感内容、权限变化和发布前设置阻断式人工审批。
- 用影子批次演练成功、超时、重复、部分成功、审批拒绝与回滚;保存命令、日志和恢复结果后才逐步放量。
可复制工作表
# 工作流配置
```yaml
workflow: __
version: __
commit: __
input_manifest: __
input_hash: __
job_id_rule: __
idempotency_key: __
states: [QUEUED, RUNNING, WAITING_APPROVAL, APPROVED, PUBLISHED, REJECTED, FAILED, ROLLED_BACK]
timeout_seconds: __
max_retries: __
steps:
- id: collect
run: __
on_error: retry_then_queue
- id: validate
run: __
human_gate_when: [source_conflict, low_confidence, sensitive_content, permission_change]
- id: publish
run: __
requires_approval: true
metrics:
failure_rate: __
p95_duration_ms: __
alerts:
window: __
thresholds: __
notify: __
acknowledgement_sla: __
action: pause_workflow
rollback:
artifact_version: __
command: __
verify: __
```
# 状态与副作用规则
重复键处理:__
部分成功处理:__
审批拒绝处理:__
失败后的队列/人工接管:__
发布、扣款或通知等副作用计数规则:__
# 结构化日志
|timestamp|job_id|idempotency_key|from_state→to_state|step|attempt|status|duration_ms|input_hash|artifact_version|error_code|gate_reason|approver|side_effect_count|evidence|
|---|---|---|---|---|---:|---|---:|---|---|---|---|---|---:|---|
|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|
# 影子演练矩阵
|场景|job/注入方式|预期状态、告警与副作用|实际状态/日志/告警|回滚或人工接管|恢复验证|结论|
|---|---|---|---|---|---|---|
|成功|__|__|__|__|__|__|
|超时|__|__|__|__|__|__|
|重复|__|__|__|__|__|__|
|部分成功|__|__|__|__|__|__|
|审批拒绝|__|__|__|__|__|__|
|发布中断/回滚|__|__|__|__|__|__|
|敏感/冲突/低置信|__|__|__|__|__|__|
批次样本、成功率、失败率、p95与阈值:__
告警送达/确认/暂停证据:__
生产放量或保持暂停的最终决定:__
完整示例
示例(ID与数字非通用阈值):
工作流=content_draft_v2,版本2.3.0,commit=7e19b2a;影子输入=evidence/automation/B17/input-20.csv,SHA-256=d6cc4dd520e401752e06918d5f8e7769110303e449daed889851ca69e41de2be。job_id规则=batch-row,幂等键=sha256(source_id+template_version+target_url);状态为QUEUED→RUNNING→WAITING_APPROVAL→APPROVED→PUBLISHED,失败可进入REJECTED/FAILED/ROLLED_BACK。每步超时30秒,最多重试2次。collect=node jobs/collect.mjs;validate=node jobs/validate.mjs,来源冲突、置信度<0.80、敏感字段或权限变化均阻断;publish=node jobs/publish.mjs且要求内容负责人批准。重复键直接返回已有终态;部分成功只保存隔离草稿并进入人工队列;审批拒绝删除待发布制品。
指标窗口=最近20个已尝试job;failure_rate=(FAILED+ROLLED_BACK)/20,>5%暂停;p95总时长>25秒告警。接收人=ops-oncall@example.test,5分钟内确认,否则升级工程负责人。回滚制品=artifact-v16,命令=deploy rollback artifact-v16 --workflow content_draft_v2,验证=node scripts/verify-release.mjs artifact-v16 --manifest evidence/automation/B17/published-urls.csv。
列较多时可左右滚动;首列会固定,便于逐行比较。
| 场景 | job/注入方式 | 预期状态、告警与副作用 | 实际状态/日志/告警 | 回滚或人工接管 | 恢复验证 | 结论 |
|---|---|---|---|---|---|---|
| 成功 | B17-01,四个来源均有效 | PUBLISHED;发布1次 | PUBLISHED;attempt=1;side_effect_count=1;logs/B17-01.json | 无需接管 | 生产预览内容hash等于批准稿 | PASS |
| 超时 | B17-02,collect固定延迟31秒 | 重试2次后终态FAILED;manual_queue=true;发布0;告警 | attempt=1/2/3均TIMEOUT,最终FAILED且manual_queue=true;发布0;logs/B17-02.json | 进入manual-collect队列 | 队列含1条且原URL无新版本 | PASS |
| 重复 | B17-03,同一幂等键并发3次 | 只执行并发布1次,另2次跳过 | 1次PUBLISHED、2次SKIPPED_DUPLICATE;发布计数1;logs/B17-03.json | 无需接管 | 数据库job=1、页面版本=1 | PASS |
| 部分成功 | B17-04,4个来源中1个返回503 | 隔离已有3份结果,禁止发布,等待人工 | 状态WAITING_APPROVAL,发布0,告警PARTIAL_SOURCE;logs/B17-04.json | 编辑查看缺失来源并退队列 | 目标URL仍为artifact-v16 | PASS |
| 审批拒绝 | B17-05,两个来源事实冲突 | WAITING_APPROVAL→REJECTED;发布0 | 审批人陈拒绝,待发布制品删除;logs/B17-05.json | 返回来源核验 | 对象存储pending目录0条 | PASS |
| 发布中断/回滚 | B17-06,在8页中的第3页注入部署错误 | FAILED→ROLLED_BACK;8页全部恢复v16 | 2页曾写入v17后失败,告警到达;执行回滚;logs/B17-06.json | 值班人吴执行精确回滚命令 | 验证8/8页面hash等于v16,发布副作用归零 | PASS |
| 低置信 | B17-07,confidence=0.62 | 阻断并等待人工;发布0 | WAITING_APPROVAL,原因LOW_CONFIDENCE;logs/B17-07.json | 编辑补证,未批准 | 目标URL无变化 | PASS |
| 敏感内容 | B17-08,正文含邮箱和电话 | 阻断并拒绝;发布0 | REJECTED,原因SENSITIVE_CONTENT;logs/B17-08.json | 隐私负责人接管 | 公开索引与CDN查询均0条 | PASS |
结构化日志样例evidence/automation/B17/logs.ndjson逐行含timestamp、job_id、幂等键、状态迁移、attempt、duration、input_hash、artifact、error、gate、approver和side_effect_count。影子批次20个job的状态汇总为PUBLISHED 14、WAITING_APPROVAL 2、REJECTED 2、FAILED 1、ROLLED_BACK 1,合计14+2+2+1+1=20;失败率=(1+1)/20=10%,高于5%阈值;p95=22.4秒,未越25秒线。告警ALERT-208在14:03送达,值班人14:06确认,工作流自动PAUSED;截图与审计事件在evidence/automation/B17/alert-208/。敏感、冲突和低置信结果均0发布,重复job只有1次副作用。最终决定=KEEP_PAUSED,先修超时和发布事务,再用新的20-job影子批次复测;本轮不进入生产。
完成清单
- 配置包含状态机、幂等、超时、重试、人工门禁、版本、输入hash与可执行回滚。
- 结构化日志、指标公式、窗口、告警阈值、接收人、确认时限和暂停动作均已实填并实际触发验证。
- 成功、超时、重复、部分成功、审批拒绝、敏感/冲突/低置信阻断及发布回滚逐场景留下证据。
- 每个场景核对状态和副作用计数;重复执行不会重复发布或扣款,未获批准的产物不能进入生产。
适用条件
流程可观测、可重试、可回滚,并为异常和敏感内容保留人工关口。
来源:SEO友好的AI原生 CMS 的思考和实践