AutoGLM Take_over——登录验证码和二次验证的人工接管机制
什么时候触发
模型在推理时识别到当前界面包含以下类型的元素,会主动返回 Take_over 动作:
- 登录页面的手机号 / 验证码输入框
- 支付密码输入界面
- 人脸验证 / 指纹验证界面
- 二次确认弹窗(比如微信的"确认转账给 XXX")
Take_over 的含义是:"我这个 AI 搞不定这个,等人类来处理完我再继续"。
回调函数用法
def my_takeover(message: str) -> None:
"""人工接管回调——暂停 Agent 等人类介入"""
print(f"🔐 模型请求人工接管:{message}")
print("请手动完成上述操作,完成后按回车继续 Agent 执行...")
input()
agent = PhoneAgent(
model_config=model_config,
takeover_callback=my_takeover,
)
运行时:
[Agent 正常执行中...]
🔐 模型请求人工接管:微信登录需要输入手机号验证码
请手动完成上述操作,完成后按回车继续 Agent 执行...
[你在手机上手动完成登录]
[回到终端按回车]
[Agent 继续执行剩余任务...]
和 confirmation_callback 的对比
| 方面 | confirmation_callback | takeover_callback |
|---|---|---|
| 触发者 | 框架(每个动作前都检查) | 模型主动输出 Take_over 动作 |
| 检查点 | 每一步 | 仅模型判断需要时 |
| 典型场景 | "所有发送消息都要过审" | "登录验证码我搞不定" |
| 人工介入后 | 无需额外操作,返回 True 继续 | 等人类在手机上操作完,按回车 |
| 回调签名 | message -> bool | message -> None |
message 参数示例
模型输出的 Take_over message 会包含具体场景描述,比如:
- "微信登录需要输入手机号验证码"
- "支付宝支付需要输入支付密码"
- "银行 App 需要短信验证码"
- "当前页面显示支付确认弹窗"
这个 message 可以用来给人工操作者提示该做什么。
超时自动恢复(进阶)
如果担心人工接管后忘记按回车,可以在回调里加超时:
import time
def takeover_with_timeout(message: str) -> None:
print(f"🔐 {message}")
print("300 秒内未操作将自动超时退出...")
start = time.time()
while time.time() - start < 300:
if input().strip() == "":
print("检测到回车,恢复 Agent")
return
print("超时,Agent 任务中止")
raise Exception("Takeover timeout")
常见问题
Take_over 没触发但应该触发 → 模型可能没识别到是敏感页面,检查 System Prompt 里有没有明确告诉模型哪些场景需要 Take_over。
Take_over 触发了但回调没被调用 → 检查 PhoneAgent 构造函数是否正确传了 takeover_callback 参数。