介绍Impri工具如何为夜间AI代理操作建立人工审批边界,将起草(可无人值守)与发送(需人确认)分离,防止代理在无人监督时自动执行有副作用的操作。
夜间运行的 AI Agent 会在你睡觉时起草邮件、工单和帖子——本文介绍如何将它们的行为排入队列,在早上进行审批,而不是盲目执行。
"无人值守通宵运行"的问题
一个 cron 作业在凌晨 2 点启动 Claude Code Agent 来分类收件箱线程、起草回复,或扫描 RSS 订阅源寻找内容创意,确实很有用——直到 Agent 决定其中某个草稿应该立即发出。凌晨 2 点没有人盯着。如果草稿有问题,或者抓取的页面中包含了注入的指令,它就在任何人注意到之前发出去了。解决办法不是"不要通宵运行 Agent",而是把起草(无人值守没问题)和发送(需要有人醒着来看)分开。
Impri 就在这个边界上。通宵运行的 Agent 把每个有副作用的行为推送到 Impri,然后停止。它不会等待——凌晨 2 点反正也没有人可以通知。早上醒来时你再审查这堆待处理项。
设置较长的过期时间以覆盖起床后的审批窗口
默认的 expires_in(72 小时)是可以的,但对于夜间批处理,你需要确保操作能够保留到早上,而不需要精确计算时间。明确设置一个较长的过期时间——凌晨 2 点运行的支持回复批处理应该在早上 9 点仍然有效,甚至可能到午餐时还有效:
import requests
import os
IMPRI_KEY = os.environ["IMPRI_API_KEY"]
def queue_overnight_draft(kind, title, body, target_url=None):
resp = requests.post(
"https://api.impri.dev/v1/actions",
headers={"Authorization": f"Bearer {IMPRI_KEY}"},
json={
"kind": kind,
"title": title,
"preview": {"format": "markdown", "body": body},
"target_url": target_url,
"expires_in": 43200, # 12h — covers an overnight run through late morning
"editable": ["preview.body"],
},
)
resp.raise_for_status()
return resp.json()["id"]
# Called once per drafted reply during the 2am batch run
for ticket in nightly_triage_batch():
queue_overnight_draft(
kind="support.reply",
title=f"Draft reply: {ticket.subject}",
body=ticket.drafted_reply,
target_url=ticket.helpdesk_url,
)
Agent 的工作在 queue_overnight_draft 就结束了。它从不轮询、不等待、不执行——这些都发生在之后,由独立的进程处理,而且只在人工审查过收件箱之后才会执行。
早上批量审查,而不是逐条处理
一次通宵运行可以产生十几个草稿。早上在喝咖啡之前在手机上逐条审查很乏味,以至于人们开始敷衍地点通过——这就失去了意义。使用批量决策端点,在早上审查时一次性批准那些明显没问题的,只打开那些需要仔细看的:
# Check one action's status before deciding
curl -s https://api.impri.dev/v1/actions/act_101 \
-H "Authorization: Bearer $IMPRI_API_KEY"
# Decide on several at once via the bulk endpoint, rather than
# one API call (or one inbox tap) per drafted reply
curl -s -X POST https://api.impri.dev/v1/actions/bulk-decision \
-H "Authorization: Bearer $IMPRI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["act_101", "act_102", "act_105"]}'
实际上,大多数人直接在手机上的收件箱网页界面做这件事——批量端点的作用在于,当你对自己已经读过的批次编写审查脚本时,这是你做出的判断,而不是 Impri 自行推断的行为。
推送通知,这样你就不需要记得去检查
没人想每天早上都打开一个应用以防万一。配置一个推送渠道,让通宵的批处理能够真正浮现出来,而不是静静地躺在收件箱里:ntfy 或 web push 可以让手机震动,或者如果你已经在用 Telegram 做分类,可以用 Telegram。参见 notifications 了解设置方式,以及 telegram-approval 如果你想直接在聊天线程中放置批准/拒绝按钮——适合在床上半睡半醒时瞥一眼。
这解决不了什么
Impri 负责保留决策结果,但不会决定你的 Agent 应该在什么时候运行,或者如何对工作进行批处理——那些调度逻辑是你自己的(cron、队列,或者你已经在用的任何东西)。它也不能事后保护你不受那些拥有发送服务直接凭证的 Agent 的影响——这个关卡只有在通宵进程的发送路径唯一地经过批准操作时才能起作用。将实际的发送/发布调用包装起来,使其硬性依赖于已批准的 final_preview,如审批指南中所述。
从 quickstart 开始获取 API key,然后将你的夜间任务配置为推送操作,而不是直接执行它们。