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

80 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Autotrain Next
这是可独立复制、启动和维护的运行时目标是解决三件事Windows/macOS 的环境差异、不同 Android 屏幕的适配,以及 Web UI 把大脚本硬编码为流程的问题。
所有代码、配置、工作目录和项目管理文档都位于本目录;运行时不调用外部工程模块。设备档案、采样记录和任务日志由 `work/` 管理。
## 设计边界
```mermaid
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。它只创建任务`runner` 从 `tools.py` 的白名单中循环选择小工具并写入可审计 history。
- LLM 只在确定性规则无法判断时介入,只能返回已注册的工具。默认禁止它直接点击业务按钮;需要人工在任务创建时显式启用 `allow_submit`
- H5 的列表识别、名单匹配、核验、提交、确认、成功/无票归档均由本项目的独立原子工具完成。
## 新手机初次采样
`record-and-replay` 可以记录你在 macOS 上用“手机屏幕控制”完成的操作;手机页面本身由现有的 ADB 录制器保存截图/XML。两份记录互补前者解释人工意图后者建立可用的设备档案。不要把密码、验证码、身份证号等敏感内容作为采样输入。
1. 只连接一台已授权手机,启动到 12306 开票流程起点。
2. 用下面命令启动 scrcpy 与 Android 页面录制。然后在手机屏幕控制窗口中手动走一遍完整流程(列表、核验、信息页、确认、成功);结束时 `Ctrl+C`
```bash
python3 scripts/autotrain_next.py sample-record --output work/replay/20260713_my_phone
```
Windows`python3` 换成 `py -3`,并将 `adb.exe`/`scrcpy.exe` 加入 PATH也可设置 `AUTOTRAIN_ADB``AUTOTRAIN_SCRCPY`
3. 导入采样,审查生成的档案,再人工确认它可用于该设备。
```bash
python3 scripts/autotrain_next.py sample-import work/replay/20260713_my_phone --label "小米 14"
python3 scripts/autotrain_next.py profile-verify
```
导入只产生 `draft` 档案,不会自动把截图推断成按钮坐标,更不会自动执行开票。这是刻意的安全边界。
## 运行与验证
```bash
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_KEY`、`AUTOTRAIN_NEXT_LLM_API_KEY` 环境变量覆盖。密钥不能写入档案或任务日志。视觉/LLM 会向你配置的服务发送截图;先确认该服务的数据合规策略。
首次迁移名单和创建任务:
```bash
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. 为视觉网络失败和权限异常补充回归测试,并保留人工接管入口。