80 lines
4.3 KiB
Markdown
80 lines
4.3 KiB
Markdown
# 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. 为视觉网络失败和权限异常补充回归测试,并保留人工接管入口。
|