指出AI辅助任务需同时服务AI Agent与人类队友,分别提供技术细节与高层意图,避免大段统一提示词导致的表达失效。
大多数 AI 辅助任务仍然是按照只有一个读者的方式撰写的。有时任务写给开发者看,有时像是给 AI 智能体的提示。当一个团队成员和一个 AI 编码智能体被期望共同完成工作时,这种方式开始失效。实际上有两位读者,他们需要不同的信息。
编码智能体需要一份详细的工作简报。
对于软件任务,这可以包括:预期结果、仓库上下文、相关文件、技术约束、现有模式、测试、已知边界情况以及不能变更的事项。这部分任务可以写得很详细,这很有用。智能体不需要一段简短的动力性摘要,它需要足够的信息来避免猜测。如果必须复用某个现有的辅助函数,要说明白;如果修改某个特定 API 不在任务范围内,要说明白;如果结果必须同时适配移动端和桌面端,要说明白;如果某个特定的测试套件需要通过,要包含它。
缺失上下文不会让智能体更灵活,它通常会让结果更不可预测。
监督任务的人有不同的工作。他们可能不需要重新阅读每一个实现细节。他们需要的是操作指引。应该打开哪个环境?应该使用哪个智能体?应该检查什么?他们负责判断什么结果?什么情况下应该停下来?什么时候应该向任务作者求助?这些是人类指引,与发送给编码智能体的技术提示不同。
一种常见做法是把所有内容放进一个大段描述里。这样会产生一份妥协文档。人类开始略读,因为任务包含了太多技术细节,重要的监督指引被埋没了。然后任务作者开始缩短描述,因为没人想读它。现在 AI 智能体失去了有用的上下文。两位读者都收到了更差的任务版本。将指引分开更清晰——智能体获得执行所需的内容,人类获得监督所需的内容。
想象任务是:
"为发票表格添加 CSV 导出。"
这句话听起来很清晰,直到有人真正开始实现它。编码智能体可能需要知道:导出必须遵守当前的筛选条件;可能需要使用现有的发票查询;可能需要保留当前的日期格式;可能需要正确转义逗号和引号;可能需要包含发票 ID;可能需要添加测试;可能还需要一条明确的指令——不要修改发票计算逻辑。这些是给智能体的指令。人类执行者需要的是不同的东西。他们可能需要打开测试账号,生成几个 CSV 文件,在电子表格中打开它们,检查总数,检查带重音的名字,检查筛选功能,验证预期行是否存在,如果税务计算看起来有变化就停下来。两条指令指向同一个结果,只是描述了不同的职责。
一旦任务按这种方式结构化,原作者就不需要亲自监督每一个智能体会话了。他们可以把技术知识写入任务,另一个团队成员可以执行它。这个成员不需要从 Slack 消息、旧的工单和仓库历史中重建作者的想法。AI 获得实现上下文,人类获得操作指引。审查者之后可以检查证据。这就非常接近一次proper的工作交接了。Wagglet 使用这种双受众方法来处理 AI 任务交接。https://wagglet.com 这个想法有用的原因在于:它把人类执行者和 AI 智能体当作独立的参与者,而不是假设他们需要相同的提示。
任务能包含的最有用的东西之一,就是一条清晰的停止规则。
这些规则很重要,因为 AI 智能体通常被优化为不断向完成状态推进。当任务触及意外的边界时,这也可能引发问题。监督工作的人类需要知道什么时候继续不再是正确的操作。
停止条件不应该只存在于人类指引中。
智能体也应该理解任务边界。
一个好的任务不只是解释应该发生什么,也解释不应该发生什么。
一个强有力的 AI 任务应该定义最终交付物需要包含什么。"告诉我什么时候完成"太模糊了。更好的交付物可能包括:变更的文件、运行的测试、测试结果、截图、已知限制以及执行者无法验证的任何内容。
这给审查者提供了可以检查的具体证据,也使得虚弱的任务完成更容易被发现。如果任务需要截图但没有提供任何截图,交付物就不完整。如果任务需要特定的测试套件而执行者无法确认它被执行了,这会立即显现。
有一种糟糕的人类监督版本:人只是启动智能体,然后批准它返回的任何结果。这不是有意义的监督。人类应该承担一项 AI 无法自行声明完成的职责。
他们可能检查视觉结果,在真实浏览器中确认行为,检查预发布环境,判断用户流程是否有意义,审查安全敏感变更,将结果与设计进行比较。人类角色应该是明确的,否则"人在回路"就只是一个标签而不是实际的控制。
人们非常关注模型选择。团队比较编码智能体、上下文窗口、基准测试和订阅计划。但很多失败在模型介入之前就开始了。没有人写下约束条件。人类角色未定义。成功是主观的。审查者收到的是自信的完成消息,而不是有用的证据。为两位读者撰写任务能修复大量此类问题。
给 AI 技术简报。给人类操作指引。给两者清晰的边界。然后定义在工作可以被视为完成之前必须存在什么证据。这产生了一个比粘贴到编码聊天中的提示强大得多的 AI 辅助工作单元。