先做一条确定的流程
内容编辑提出草稿,审核通过后才发布。这个任务的顺序明确,用固定工作流就能实现,不必先引入自由决策的 Agent。本课得到一个可运行状态机,能拒绝未经批准的发布。
案例只在内存里模拟,不向任何网站发布。你可以把它类比成学习笔记审核、文案审批或报告检查。
用四个状态说清规则
draft:草稿,可编辑
review:等待审核
approved:已批准,等待发布
published:已公开
draft --submit--> review
review --approve--> approved
review --reject--> draft
approved --publish--> published
approved --revise--> draft
已批准稿被改动后回草稿,是因为审批针对具体内容。不能拿旧批准覆盖新正文。发布后的版本编辑应另建草稿,保持现有公开内容可读,本课不在原 published 对象上继续改。
先让 AI 检查缺了什么
请检查这份四状态内容流程。
不允许草稿直接发布,不允许待审稿发布,批准后修改必须回草稿。
请列出允许与拒绝的转换,给出Python标准库实现与断言。
这是本地教学模拟,不接外部发布服务,不自动发送消息。
如果助手提出审核中让模型自行判断并直接发布,指出本课要求由审核动作显式批准;“智能判断”不能替代已经确定的流程约束。
运行参考实现
保存为 workflow.py,运行 python workflow.py:
TRANSITIONS = {
("draft", "submit"): "review",
("review", "approve"): "approved",
("review", "reject"): "draft",
("approved", "publish"): "published",
("approved", "revise"): "draft",
}
def transition(state, action):
try:
return TRANSITIONS[(state, action)]
except KeyError as exc:
raise ValueError(f"不允许从{state}执行{action}") from exc
state = "draft"
for action in ["submit", "reject", "submit", "approve", "publish"]:
state = transition(state, action)
assert state == "published"
assert transition("approved", "revise") == "draft"
for state, action in [("draft", "publish"), ("review", "publish"), ("published", "publish")]:
try:
transition(state, action)
except ValueError:
pass
else:
raise AssertionError((state, action))
print("审核、退回、发布与拒绝跳步通过")
转换表把规则集中在一起,错误路径也能测试。这个小例子没有用户权限、数据库并发或外部副作用,不能直接当生产发布系统。
失败时应该恢复哪一步
审核退回就回 draft,修改后重新 submit,不从 approved 接着走。发布网络超时时结果可能未知,不能简单把状态改回 draft 再发布一次;真实系统需要查询发布记录或使用幂等标识。
如果同一个稿件被两个人同时批准和修改,内存字符串不能保护顺序。实际数据库要校验版本或使用事务锁,确保批准与发布指向同一版正文。先认识这个边界,再进入复杂实现。
什么时候加入 Agent 才有意义
在“找哪些资料支持这篇文章”这样的开放任务里,可能需要模型决定下一次检索什么、何时停止,这适合受限 Agent。审核到发布的顺序仍可以保留固定工作流。
让 Agent 帮忙补材料,不意味着它自动拥有发布权限。把“寻找信息的自由度”和“对外执行的权限”分别设计。
修订一个错误实现
若助手写成“任何状态收到 publish 都设为 published”,发送:
当前实现绕过审核。请只允许approved执行publish,draft与review都应抛ValueError;保留reject回draft。新增这三条拒绝/成功用例,不能通过在界面隐藏按钮替代函数校验。
这个反例要求后端行为改变,而不是只是让页面看起来不容易误操作。
自测与答案
流程里用了模型总结文字,就一定是 Agent 吗?不一定。固定步骤调用模型仍可以是工作流,关键看是否由模型自主决定后续行动。
加练:增加 archived,只能从 published 归档,并说明归档后恢复是回 published 还是重新审核。先确定业务规则再写转换,不能让代码替你决定。
交付状态图、代码和一条被拒绝的跳步记录。模拟通过只说明课堂状态规则正确,不证明真实发布服务已验证。
来源与内容说明
AIScope 中文手册 · AIScope 编辑
本篇为本站原创学习内容,引用资料保留参考来源。
收录:2026年10月19日
适用范围:尚未标注,请结合原文与实际环境核对
人工核验:尚无核验记录