程序员节不一定要用代码行数来纪念。可以挑一个常被忽略的小功能:助手已经开始整理笔记、生成提醒或者续写手账时,人能不能让它停下来?
停止键不只是一个按钮。界面显示“已停止”,后台却继续请求模型,或者重试队列稍后又发来提醒,使用者仍然失去了对工作节奏的控制。
停止是一条贯穿流程的状态
我更愿意把生活助手设计成几种可读的状态:等待、生成草稿、等待确认、完成、停止。生成和写入分开,进入停止后不再接收新动作。已经完成的外部写入不能假装被取消,应明确显示实际状态。
2026 年 10 月 22 日,Anthropic 宣布把 Agent Skills 标准交给 Agentic AI Foundation。工作流程能以文件和脚本被复用后,停止条件、允许的工具和失败处理也应成为流程的一部分,而不是只留下一个成功步骤列表。官方公告
用一个小状态机检查“真的停了”
以下是内存中的教学助手,不连接消息、日历或模型服务。保存为 stop.py 运行。
class Helper: def __init__(self): self.state = "IDLE" self.writes = [] def draft(self): if self.state != "IDLE": raise RuntimeError("当前不能生成") self.state = "DRAFT" return "待确认的休息提醒" def review(self): if self.state != "DRAFT": raise RuntimeError("没有可复核草稿") self.state = "REVIEW" def stop(self): self.state = "STOP" def confirm(self, text): if self.state != "REVIEW": raise RuntimeError("缺少确认状态") self.writes.append(text) self.state = "DONE" helper = Helper() text = helper.draft() helper.review() helper.stop() try: helper.confirm(text) except RuntimeError: pass else: raise AssertionError("停止后仍写入") assert helper.writes == [] print("停止后未产生写入")真实异步程序还要把取消信号传到网络请求、工具调用与重试队列。取消到达时,请求可能已经被服务接受,因此需要请求编号、幂等键和结果核对。不能看到超时就认定操作未发生,也不能不查结果便重新提交。
让界面说实话
“草稿已停止,未创建提醒”“取消已发送,正在核对日历结果”“提醒已创建,可打开查看”表达的是三种不同状态。含糊的一句“处理好了”会把需要判断的工作留给用户。
本文实跑的只是状态转移与停止后阻止写入,没有验证流式连接取消、平台提醒撤销或后台任务重试。把这些边界写清楚,才知道下次该测哪里。
愿我们在二进制之外,也能保留自己的节奏。做一个随时可以放下的工具,是很实在的节日礼物。