AI Agent 跑全自动循环时,遇到需要人判断的步骤怎么办?Ask-a-Human 实战指南,让 Agent 一个呼叫就找到你
你跑着 30 个全自动 Agent 在循环里。部署、测试、数据清洗、代码审查——它们各司其职,99% 的时间不需要你。但总有那 1% 的情况:一个 Agent 在部署前要确认环境变量,另一个在犹豫该走分支 A 还是分支 B,还有一个发现了一个它不能单独决定的异常。
它们卡住了。你没有收到任何通知。直到第二天早上你才发现,它们等了你一整夜。
为什么这是个真问题
全自动 Agent 循环的核心理念是「无人值守」。但你很快会发现一个不可能三角:自主性越高的 Agent,越需要偶尔的人工判断。不是 Agent 能力不够,而是有些决策天然需要人类上下文——安全审批、方向选择、成本权衡。
传统方案只有三种:
| 方案 | 问题 |
|---|---|
| Agent 直接执行高风险操作 | 安全审计过不了,出事后无法追责 |
| Agent 遇到不确定就放弃 | 循环效率 = 0,浪费大量 API 调用 |
| 自己搭一个通知系统 | 开发成本高,涉及短信/推送/E2E 加密,复杂度远超预期 |
Ask-a-Human:30 秒接入的 Agent 传呼机
Ask-a-Human 是一个开源的 MCP(Model Context Protocol)服务端,它做的事情很简单:让 AI Agent 能像打电话一样找到你。Agent 调用 request_approval 工具时,你的手机收到推送通知。你点一下「批准」或「拒绝」或输入一段文字,Agent 立即收到结果,继续执行。
整个过程端到端加密,中继服务器看不到任何消息内容。没有账号注册,没有 API Key,没有数据库——只有一个 npm 包和一行配置。
30 秒安装
零安装。零账号。零配置。
在你的 MCP 客户端配置文件中加入一行(以 Cursor 为例的 ~/.cursor/mcp.json):
{
"mcpServers": {
"ask-a-human": {
"command": "npx",
"args": ["-y", "@askahuman/mcp", "serve"]
}
}
}
重启 Agent 即可。首次调用 request_approval 时,终端会打印一个配对码,并且自动打开本地页面显示它。打开手机浏览器访问 ask-a-human.ai/app,将页面添加到主屏幕(PWA),输入配对码,就完成了。
从配置到配对,全程不超过 30 秒。
实战场景一:部署审批——Agent 部署前等你点头
最直接的使用场景:Agent 在自动部署流程中,遇到生产环境变更时暂停并请求审批。
假设你的 Claude Code Agent 在 CI 中自动运行,当它检测到需要修改生产数据库 schema 时:
request_approval({
title: "生产数据库 Schema 变更",
summary: "需要在 `users` 表添加 `preferences` JSONB 列,
涉及 3 张表的外键更新。变更脚本已验证通过。",
category: "deploy",
response_kind: "yesno",
expires_in_s: 300
})
你的手机立即收到推送。点击后看到卡片:标题「生产数据库 Schema 变更」,内容详细描述了变更范围和影响。点「批准」,Agent 收到 { approved: true },继续执行。点「拒绝」,Agent 收到 { approved: false },进入回滚流程。
expires_in_s: 300 设置了 5 分钟超时——如果不操作,审批自动超时,Agent 将按超时逻辑处理(默认视为拒绝)。
实战场景二:多选项决策——Agent 拿不定方向
有时候不是简单的「行或不行」,而是多个方案选一个。Agent 可以让你在三四个选项中做选择。
request_approval({
title: "数据库迁移方案",
summary: "检测到当前 MySQL 5.7 即将 EOL,请选择迁移方向:
选项 A:原地升级到 MySQL 8.0
- 最少代码改动
- 预计停机 30 分钟
选项 B:迁移到 Aurora Serverless v3
- 自动扩缩容,运维更省心
- 预计停机 2 小时 + 两周适配
选项 C:迁移到 Supabase (PostgreSQL)
- 长期成本最优
- 需要重写全部 SQL 查询",
category: "data",
response_kind: "choice",
options: ["A: MySQL 8.0", "B: Aurora Serverless", "C: Supabase"],
expires_in_s: 3600
})
你收到卡片后浏览三个选项,点选一个,Agent 收到你的选择,自动执行对应方案。整个过程不需要你 SSH 到服务器,不需要翻聊天记录,甚至在通勤路上就能完成决策。
实战场景三:人工输入——Agent 需要你提供信息
有些场景 Agent 需要的不是「批准」而是「输入」。比如它需要你提供一个 API Key、选择一个日期、或填写一段评审意见。
request_approval({
title: "提供上游 OAuth 凭据",
summary: "新集成的支付网关需要 OAuth client secret。
该凭据不会保存到代码中,仅用于首次握手。",
category: "access",
response_kind: "text",
placeholder: "输入 client_secret...",
max_len: 256,
expires_in_s: 600
})
输入框收到你的凭据后,Agent 在内存中使用一次即丢弃,不会写入日志或磁盘。
自托管中继
如果你的 Agent 运行在内网,或者你不想使用公共中继,可以自托管:
git clone https://github.com/askahuman/askahuman.git cd askahuman
然后在 MCP 配置中加上自托管地址:
{
"mcpServers": {
"ask-a-human": {
"command": "npx",
"args": ["-y", "@askahuman/mcp", "serve", "--relay", "wss://your-relay.com/ws"]
}
}
}
安全设计
Ask-a-Human 的安全模型很简洁:
- 配对协议:使用 Magic-Wormhole 风格的 SPAKE2 密钥交换。配对的 10 位短码在本地生成,不经过网络传输,中继服务器无法获取
- 传输加密:每条消息使用 NaCl secretbox 加密。中继只看到
base64(nonce∥ciphertext),无法读取内容、决策或消息方向 - 无持久化存储:没有数据库。消息只在内存中路由,转发后即丢弃
- 拒绝不可伪造:任何失败、超时或拒绝都不会被误报为「已批准」——Agent 收到的结果在加密层就确定了
目前项目在 GitHub 上有 askahuman/askahuman 仓库,MIT 许可,代码量不大,审查起来也很轻松。
最佳实践
- 为高风险操作设置超时:部署和财务相关的审批建议设置
expires_in_s,避免 Agent 无限等待 - 善用
category标记:deploy / cash / data / access 分类让你在手机上看到通知时就知道紧急程度和类型 - 定义
response_kind严格匹配场景:二选一用 yesno,多选用 choice,需要输入用 text——不要一律用 text 让 Agent 自行解析 - 结合 Agent 的 fallback 逻辑:审批被拒或超时时,Agent 应该知道后备方案,而不是直接崩溃
- 只在真正需要时才调用:每多一次人工介入就多一分延迟。把
request_approval包在条件判断里——只在置信度低于阈值或操作达到风险等级时才触发
总结
Ask-a-Human 解决的是全自动 Agent 循环中一个看似微小但实际非常关键的缺口:当 Agent 需要「人」的时候,怎么才能真的找到人。它不试图提高 Agent 的自主性,而是提供了一个优雅的退路——让人类在最合适的时机介入,介入完后立即退场。
用作者的话说:「100 个 Agent,1 个人,一次一个呼叫。」如果你也在跑自动化的 Agent 循环,这可能是你今天花 30 秒做的最有价值的配置。
- 项目主页:ask-a-human.ai
- GitHub:github.com/askahuman/askahuman
- npm 包:
@askahuman/mcp - 为 Agent 准备的文档:ask-a-human.ai/llms.txt