autotrain/nextgen/README.md
2026-07-24 10:37:32 +08:00

4.3 KiB
Raw Permalink Blame History

Autotrain Next

这是可独立复制、启动和维护的运行时目标是解决三件事Windows/macOS 的环境差异、不同 Android 屏幕的适配,以及 Web UI 把大脚本硬编码为流程的问题。

所有代码、配置、工作目录和项目管理文档都位于本目录;运行时不调用外部工程模块。设备档案、采样记录和任务日志由 work/ 管理。

设计边界

flowchart LR
  UI["Web UI :8766"] --> Task["任务 JSON"]
  Task --> Runner["任务循环"]
  Runner --> Policy["确定性策略"]
  Policy --> Tools["白名单原子工具"]
  Policy -. "页面无法分类" .-> LLM["可选 LLM 重规划"]
  LLM --> Guard["参数 / 权限校验"]
  Guard --> Tools
  Tools --> ADB["按 serial 的 ADB"]
  Sample["人工录制 + 手机屏幕控制"] --> Profile["每台手机独立档案"]
  Profile --> Runner
  • 平台差异只在 autotrain_next/platform.py:优先 AUTOTRAIN_ADB,其次 PATH再兼容 macOS/Windows 常见 SDK 路径。
  • 手机操作必须带 device_serial;同时连接多台手机时任务会拒绝运行,避免误操作。
  • 设备档案存为 nextgen/work/devices/<serial>.json,坐标只允许 0..1 归一化值;屏幕分辨率变化不需要改坐标,旋转会要求重新确认。
  • UI 不再直接拼接旧 CLI。它只创建任务runnertools.py 的白名单中循环选择小工具并写入可审计 history。
  • LLM 只在确定性规则无法判断时介入,只能返回已注册的工具。默认禁止它直接点击业务按钮;需要人工在任务创建时显式启用 allow_submit
  • H5 的列表识别、名单匹配、核验、提交、确认、成功/无票归档均由本项目的独立原子工具完成。

新手机初次采样

record-and-replay 可以记录你在 macOS 上用“手机屏幕控制”完成的操作;手机页面本身由现有的 ADB 录制器保存截图/XML。两份记录互补前者解释人工意图后者建立可用的设备档案。不要把密码、验证码、身份证号等敏感内容作为采样输入。

  1. 只连接一台已授权手机,启动到 12306 开票流程起点。
  2. 用下面命令启动 scrcpy 与 Android 页面录制。然后在手机屏幕控制窗口中手动走一遍完整流程(列表、核验、信息页、确认、成功);结束时 Ctrl+C
python3 scripts/autotrain_next.py sample-record --output work/replay/20260713_my_phone

Windowspython3 换成 py -3,并将 adb.exe/scrcpy.exe 加入 PATH也可设置 AUTOTRAIN_ADBAUTOTRAIN_SCRCPY

  1. 导入采样,审查生成的档案,再人工确认它可用于该设备。
python3 scripts/autotrain_next.py sample-import work/replay/20260713_my_phone --label "小米 14"
python3 scripts/autotrain_next.py profile-verify

导入只产生 draft 档案,不会自动把截图推断成按钮坐标,更不会自动执行开票。这是刻意的安全边界。

运行与验证

cp config.example.json config.local.json
export AUTOTRAIN_NEXT_VISION_API_KEY='你的视觉模型密钥'
python3 -m unittest discover -s tests -v
python3 scripts/autotrain_next.py device-status
python3 scripts/autotrain_next.py web

浏览器打开 http://127.0.0.1:8766。未完成采样/验证的手机,创建任务后会停在 needs_sampling;这不是运行失败。

视觉与 LLM 配置只放本项目被忽略的 config.local.json;密钥可直接放在该本地文件,或通过 AUTOTRAIN_NEXT_VISION_API_KEYAUTOTRAIN_NEXT_LLM_API_KEY 环境变量覆盖。密钥不能写入档案或任务日志。视觉/LLM 会向你配置的服务发送截图;先确认该服务的数据合规策略。

首次迁移名单和创建任务:

python3 scripts/autotrain_next.py roster-import work/passenger_roster.csv
python3 scripts/autotrain_next.py task-create --qr-image /path/to/qr.png --allow-submit

allow-submit 还需要在 nextgen/config.local.json 中将 safety.allow_submit 显式设为 true;否则任务只观察、不点击。

下一步验证顺序

  1. 用不同品牌/分辨率手机录制样本,补齐真机 dry-run 证据。
  2. 为下载权限、预览页与网络超时补充 mock ADB 回归测试。
  3. 为视觉网络失败和权限异常补充回归测试,并保留人工接管入口。