为什么不直接买服务
内置在产品里、跑你自己的 Key、留在你的审计里
按次付费在规模化时不划算;外部服务也没法审计。ai_solve_captcha 跑在你自己的租户里,用的是你本就要花的推理预算。
第三方打码服务
按次付费,慢、脆、审计黑盒
~$2 / 千次
- 截图发到外部服务器,等 10–30 秒拿结果
- 按次计费 —— 一旦跑群体规模,费用会失控
- 多了一个看不进去、查不到的外部依赖
- 只覆盖某一两种验证码形态,新变体一出就静默失败
内置 ai_solve_captcha
用你自己的 Key 跑视觉模型,在自己的审计日志里
只付你 LLM 推理那一份
- 一条宏步骤,完全跑在你自己的 Anthropic / OpenAI / OpenRouter Key 上
- 覆盖 4 种验证码:image_selection、slider、click_in_order、checkbox_terms
- 每次求解都进 agent_sub_runs,连模型名和 token 用量都记下来
- 重试预算 + 排除集 —— 失败过的选项不会再重试
覆盖范围
四种验证码,一条求解步骤
自动分类器从画面判断要用哪种策略;也可以显式锁定一种,跑得更快、更省。
图选验证码
点中匹配的格子
ai_solve_captcha kind=image_selection describe_screen tap_pixel 滑块验证码
把滑块拖到指定位置
ai_solve_captcha kind=slider swipe find_element_on_screen 按序点击
依次点 A、B、C
ai_solve_captcha kind=click_in_order find_text_on_screen tap_by_text 勾选条款
自动找到并勾上同意框
ai_solve_captcha kind=checkbox_terms tap_by_text 一次真实求解
ai_solve_captcha 在运行时长什么样
代理边讲解边调用 100 秒预算的求解工具,结果带分类器输出回到主流程 —— 审计可追。
chat / claude-sonnet-4 运行中
U
出现安全验证的时候,自动过完再继续提交。
AI
我盯着「Security Verification」屏幕,一出现就把当前帧交给 ai_solve_captcha。
find_text_on_screen
text: "Security Verification"
→ match at (140, 220)
screenshot
→ frame captured
ai_solve_captcha
auto, timeout=100s
→ { solved: true, kind: "slider", attempts: 2 }
AI
第二次重试通过了(slider 类型)。点 Log in 提交……
tap_by_text
text: "Log in" exact
嵌入方式
作为一步嵌进任意宏
用 try / catch 包起来兜底。求解失败时留下完整审计、确定性地终止宏 —— 不会留下孤儿会话。
# 登录流程里嵌一段验证码兜底
tap "Log in" exact
if visible "Security Verification" timeout=5s {
try {
ai_solve_captcha -> captcha timeout=100s
tap "Log in" exact
} catch {
# 干净地从宏里退出,让 runner 走重试
log "captcha unsolved — terminating"
terminate_app "com.example.app"
halt
}
}