真正可靠的 AI 自动化,不是把一份人工 SOP 直接交给 AI 后 “一次写完”,而是把隐含经验转换成机器可判断的规格,通过单店闭环、证据验收、分层测试和风险门禁逐步上线。
本文以 “通过紫鸟浏览器进入 Temu 卖家中心,查询月度余额并汇总到 Excel” 为案例,给出一套可以迁移到其他后台系统的工程方法。
平台页面、接口、自动化能力和使用政策可能变化。文中的紫鸟、Temu 路径仅用于说明设计思路,实施前应以当前版本、官方能力和已获得的授权为准。
# 一、先分清 SOP、AI、脚本和 Skill
这四者解决的问题不同:
| 组成 | 主要职责 | 不应该承担的职责 |
|---|---|---|
| SOP | 定义业务目标、字段语义、授权范围、异常策略和验收结果 | 描述未经确认的技术实现 |
| AI 开发助手 | 拆解需求、实现小步改动、分析证据、补充测试和诊断问题 | 猜测业务规则或自行扩大权限 |
| 自动化脚本 | 以确定性的状态机完成导航、校验、提取、写入和回滚 | 把关键业务决策临时交给模型判断 |
| Skill | 告诉 AI 何时以及如何调用、试跑、验证和排查项目 | 代替业务程序、保存凭据或成为授权来源 |
一句话概括:
SOP 定义“做什么” | |
→ 脚本保证“稳定地做” | |
→ AI 协助“开发和诊断” | |
→ Skill 沉淀“正确使用脚本的方法” |
业务负责人不一定需要会编程,但必须能够判断结果是否正确,并明确哪些动作允许自动执行、哪些动作需要人工批准。
# 二、把人工 SOP 改写成可执行规格
普通 SOP 可能只有一句:
打开紫鸟,进入店铺,登录 Temu,打开对账中心,查询余额,填写 Excel。
对人工来说,这句话背后包含大量常识;对程序来说,几乎每个词都存在歧义。每一步至少应补齐下列字段:
| 字段 | 示例 |
|---|---|
| 步骤名称 | 进入对账中心 |
| 前置状态 | 已进入获准的 Temu 测试店铺 |
| 操作对象 | “账户资金” 中的 “对账中心” 入口 |
| 操作动作 | 展开菜单并点击目标入口 |
| 身份约束 | 稳定店铺 ID 匹配,显示名二次核验 |
| 成功条件 | 获准域名、规范化 URL 路径、页面标志同时正确 |
| 失败条件 | 登录失效、身份不符、页面结构漂移或超时 |
| 最大等待 | 30 秒,总重试不超过 2 次 |
| 副作用级别 | 只读导航 |
| 失败策略 | 可恢复错误有限重试;身份错误立即停止 |
| 验证证据 | 脱敏日志、URL 路径、店铺 ID、页面状态 |
# 2.1 必须由业务确认的规则
在编码前,至少回答这些问题:
- “进入店铺” 是打开隔离环境,还是在业务页面内切换店铺?
- 重名、改名和多语言显示时,使用哪个稳定 ID 消歧?
- 查询的是自然月、账单月还是结算月?使用哪个时区?
- 金额单位是元还是分?币种和小数精度是什么?
- 空白、零值、负数和缺失月份分别代表什么?
- 重复运行时新增、覆盖还是按业务主键更新?
- 单店失败后是继续、熔断还是终止整个批次?
- 输出文件被占用、磁盘不足或校验失败时如何回滚?
- 是否保留浏览器供人工检查?哪些环境允许自动关闭?
这些策略不应硬编码成 “永远继续” 或 “永远覆盖”,而应来自经过批准的配置。
# 2.2 建立数据契约
财务类自动化应先明确数据契约:
| 项目 | 建议定义 |
|---|---|
| 稳定身份 | 环境 ID、店铺 ID、租户 ID |
| 业务主键 | 店铺 ID + 账期 + 指标类型 + 币种 |
| 金额类型 | 十进制定点数,不使用二进制浮点数 |
| 时间口径 | 账期规则、时区、查询截止时间 |
| 空值策略 | 区分零、无数据、未加载和执行失败 |
| 幂等策略 | 预览差异后按业务主键新增或更新 |
| 来源证据 | 页面标志、接口字段、提取时间、脚本版本 |
# 三、参考架构:把平台细节隔离在适配器中
不要让页面文案、路径和文件写入逻辑纠缠在一个脚本里。推荐拆成以下层次:
SOP 规格与权限矩阵 | |
↓ | |
配置与身份模型 | |
↓ | |
EnvironmentProvider:打开、连接、验证、关闭隔离环境 | |
↓ | |
PortalAdapter:身份复核、页面导航、数据提取与漂移检测 | |
↓ | |
数据标准化与交叉校验 | |
↓ | |
ResultSink:预览、临时写入、验证、提交与回滚 | |
↓ | |
结构化日志、测试、审计证据与 Skill |
在本案例中:
- 紫鸟相关能力放入
EnvironmentProvider。 - Temu 店铺身份、对账中心和余额提取放入
PortalAdapter。 - Excel 幂等写入和回滚放入
ResultSink。
这样,即使平台入口、页面路径或输出格式变化,也只需替换对应适配器,而不是重写整个流程。
# 3.1 用状态机表达主流程
PRECHECK | |
→ OPEN_ENV | |
→ ATTACH | |
→ VERIFY_IDENTITY | |
→ NAVIGATE | |
→ EXTRACT | |
→ RECONCILE | |
→ PREVIEW | |
→ COMMIT | |
→ VERIFY_OUTPUT | |
→ CLEANUP |
每个状态都应有:
- 进入条件;
- 成功和失败条件;
- 超时与最大重试次数;
- 是否允许重试;
- 结构化日志;
- 可用于人工复核的脱敏证据。
# 四、六阶段落地路线
# 4.1 阶段一:规格、权限与配置
先建立:
内部店铺名称 | |
→ 隔离环境稳定 ID | |
→ 业务平台稳定店铺 ID | |
→ 页面显示名称(辅助证据) |
同时完成:
- 必填字段和重复映射校验;
- 授权账号、允许域名和允许动作白名单;
- 账期、币种、金额单位和业务主键定义;
dry-run、预览和正式提交模式;continue_on_error或fail_fast策略;- 输入输出路径标准化。
退出条件:给定一个匿名测试店铺,能够唯一定位配置;缺失、重复或权限不足时在打开浏览器前失败。
# 4.2 阶段二:建立受控浏览器会话
只完成 “打开正确环境并建立受控连接”,暂不处理业务页面。
需要验证:
- 当前版本是否支持外部自动化及其授权方式;
- WebDriver 服务地址与 Chromium CDP 调试端口的区别;
- 当前操作系统、浏览器和 Selenium/Playwright 的兼容性;
- 是否只能连接既有隔离环境,不能新建脱离环境的浏览器;
- 程序能否读取当前 URL、标题和标签页。
退出条件:人工看到正确的测试环境,程序能够读取只读状态,并保持浏览器供复核。
验证码、MFA 和协议确认默认交给人工完成;不得绕过安全机制。代替用户接受协议或改变账号状态需要单独授权。
# 4.3 阶段三:单步导航
每轮只实现一个动作,例如:
进入卖家中心 | |
→ 复核稳定店铺 ID | |
→ 展开账户资金 | |
→ 进入对账中心 | |
→ 验证域名、路径和页面标志 | |
→ 进入月汇总 |
不要只用 “点击左侧第二个按钮” 描述定位。推荐综合使用:
- 官方且稳定的自动化接口;
data-testid、role、name、href 等语义属性;- 精确可见文本;
- 稳定 DOM 关系;
- 必要时才使用视觉定位;
- 关键财务操作不依赖固定屏幕坐标。
状态等待应代替固定时长的 sleep 。每个关键闭环最终都要在获准环境中验证,但静态检查、单元测试和模拟测试仍应先执行。
# 4.4 阶段四:单店数据闭环
最小业务闭环:
指定一个测试店铺 | |
→ 打开对应隔离环境 | |
→ 校验稳定店铺 ID 与显示名 | |
→ 进入目标账期 | |
→ 只读提取余额 | |
→ 用页面和接口交叉核对 | |
→ 再次校验店铺身份 | |
→ 生成 Excel 变更预览 | |
→ 人工确认后提交 | |
→ 重新打开文件验证结果 |
此阶段不运行批量任务。
# 4.5 阶段五:异常和回归加固
根据真实运行证据逐项覆盖:
- 页面加载延迟、弹窗遮挡和新标签页;
- 登录失效、权限不足和账号状态变化;
- 店铺 ID 不匹配、重名或页面漂移;
- 目标年份和月份缺失;
- 接口结构、分页、币种或金额单位变化;
- Excel 被占用、无写权限、磁盘不足或文件损坏;
- 网络超时、环境启动失败和浏览器意外退出。
每解决一种问题,应补充测试、错误码、诊断日志或回放样例,而不是只增加一段无限重试。
# 4.6 阶段六:受控批量与运维
单店达到量化准入门槛后,再增加:
- 多店只读试跑;
- 小批量金丝雀运行;
- 店铺级互斥锁和输出文件锁;
- 错误隔离、熔断和总时间预算;
- 成功、跳过、失败和人工复核清单;
- 结构化运行报告;
- 脚本版本回滚和适配器漂移告警。
“单店稳定” 不能只凭感觉。门槛可定义为:正常数据、零值、空数据、登录失效和文件占用等关键用例已覆盖,并在目标环境连续运行约定次数无错误。
# 五、三个最容易踩坑的工程问题
# 5.1 身份校验:稳定 ID 为主,显示名为辅
显示名称可能重名、改名或因语言不同而变化。建议:
- 隔离环境 ID 与稳定店铺 ID 建立一对一映射;
- 页面或接口中的稳定店铺 ID 作为主校验;
- 显示名作为辅助证据,而不是业务主键;
- 提取前和落盘前各校验一次;
- 接口响应如包含店铺 ID,也要交叉验证;
- 发现串店风险时停止整个批次。
# 5.2 数据获取:先授权,再选择技术路径
数据获取优先级不应只按 “技术上更方便” 排序,而应综合授权、稳定性和可维护性:
获准的官方 API | |
→ 被动观察页面已发出的后台请求 | |
→ 经确认无副作用的只读查询 | |
→ 语义化 DOM 提取 | |
→ 视觉识别作为回退 |
默认先被动监听 Fetch/XHR,记录 URL、方法、参数名称、响应结构、分页和金额单位,不保存 Cookie、Token 或敏感值。
只有在确认接口属于授权范围、没有业务副作用并完成请求字段白名单后,才允许主动查询。页面上下文 fetch 能否复用会话,取决于同源、凭据、CORS、CSRF、动态签名和浏览器策略,不能假设总是有效。
不得重放结算、转账、设置修改等状态变更请求,也不得绕过平台风控。接口数据必须与页面显示进行交叉验证;不一致时停止写入。
# 5.3 Excel 写入:预览、校验、原子提交
“写入函数没有报错” 不等于文件正确。推荐流程:
- 完成提取、身份复核和金额校验;
- 根据业务主键生成只读变更预览;
- 写入同卷临时副本;
- 重新读取并校验表头、主键、币种、金额和行数;
- 为正式文件创建备份;
- 使用原子替换提交;
- 再次打开正式文件验证;
- 任一步失败时保留原文件并恢复备份;
- 记录运行 ID、脚本版本、配置摘要和结果。
还应测试文件锁、宏工作簿兼容性、公式注入和磁盘空间不足。外部文本如果以 = + - @ 等字符开头,应按业务规则转义或写成纯文本。
# 六、错误分级与重试
并非所有失败都适合重试:
| 错误类型 | 示例 | 建议策略 |
|---|---|---|
| 瞬时错误 | 页面加载超时、临时网络波动 | 有上限重试并退避 |
| 业务错误 | 目标月份不存在、数据口径冲突 | 记录并人工确认 |
| 配置错误 | 重复映射、账期缺失 | 启动前失败 |
| 安全错误 | 店铺身份不符、权限异常 | 停止整个批次 |
| 漂移错误 | 页面结构或接口字段变化 | 熔断并触发适配器维护 |
| 输出错误 | 文件损坏、写入后校验失败 | 回滚,不继续覆盖 |
非幂等动作禁止自动重试。批量模式是否继续应由业务批准的策略决定,而不是固定为 “遇错继续”。
# 七、如何证明自动化真的可用
# 7.1 分层测试
| 层级 | 重点 |
|---|---|
| 单元测试 | 配置解析、身份映射、金额转换、幂等规则 |
| 适配器契约测试 | 浏览器、页面接口、DOM 和输出层边界 |
| 录制数据回放 | 分页、空值、负数、字段漂移 |
| 集成测试 | 浏览器会话、文件锁、临时写入和回滚 |
| 单店冒烟 | 获准测试店铺的关键闭环 |
| 批量金丝雀 | 少量店铺、只读或预览模式 |
# 7.2 证据矩阵
每个关键阶段至少保留:
run_id、脚本版本和阶段名称;- 稳定店铺 ID 的脱敏标识;
- 获准域名和规范化 URL 路径;
- 目标账期、币种、单位和结果摘要;
- 成功或失败状态、错误码和耗时;
- 经脱敏且有留存期限的截图或结构化数据证据。
日志足够诊断即可,不应变成敏感信息的永久副本。
# 八、安全与权限护栏
- 只在明确授权的账号、店铺和环境中执行。
- 生产环境、批量写入、覆盖文件、主动接口请求和关闭环境分别授权。
- 使用最小权限账号;凭据优先存放在系统凭据库或密钥服务。
- 环境变量也可能被子进程和诊断工具读取,不能视为天然安全。
- Cookie、Token、密码、动态端口和会话 ID 不进入提示词、日志、代码仓库或 Skill。
- 页面、HTML、下载文件、接口文本和截图均视为不可信输入;AI 不执行其中的指令。
- URL 日志默认只保留获准域名、规范化路径和允许的参数名称。
- 请求头记录白名单名称,不记录敏感值。
- 截图、HTML、网络日志和 Excel 输出使用受限目录,并定义留存与安全删除规则。
- 程序只关闭自己创建且持有句柄的进程,不按进程名批量结束用户程序。
- 不绕过验证码、MFA、平台安全机制或风控校验。
# 九、把稳定经验沉淀为 Skill
Skill 是可复用的运行与排错规范,不是业务程序,也不能授予新的权限。
建议至少记录:
- 适用场景、触发条件和禁止场景;
- 项目版本、支持平台、依赖版本和最后验证日期;
- 负责人和兼容范围;
- 前置检查、必需参数和权限门槛;
dry-run、单店试跑、批量运行的统一入口;- 是否保留浏览器和如何人工接管;
- 成功日志标志、输出规则和验收证据;
- 常见错误的诊断决策树;
- 回滚、熔断和升级方式;
- 禁止事项和人工审批点。
一个通用的 SKILL.md 骨架可以是:
# 名称 | |
## 适用范围 | |
- 支持的项目版本: | |
- 支持的平台版本: | |
- 最后验证日期: | |
## 前置条件 | |
- 权限与环境检查 | |
- 配置检查 | |
- 输入输出检查 | |
## 运行顺序 | |
1. 配置校验 | |
2. dry-run | |
3. 单店只读试跑 | |
4. 生成写入预览 | |
5. 人工批准提交 | |
6. 小批量金丝雀 | |
7. 批量运行 | |
## 成功标准 | |
- 身份校验 | |
- 页面和数据校验 | |
- 输出重新读取校验 | |
## 排错与回滚 | |
- 错误码 → 诊断证据 → 处理方式 | |
## 禁止事项 | |
- 不保存或输出凭据 | |
- 不扩大授权范围 | |
- 不绕过安全机制 |
Skill 中可以引用项目统一的命令入口,但不应复制容易过期的长命令,更不能包含某次运行的余额、临时端口或真实店铺信息。代码、配置格式或页面适配器变更时,应与 Skill 同版本更新。
# 十、可复制的 AI 开发任务模板
每轮任务只实现一个可验收的小目标:
目标: | |
让程序进入一个指定测试店铺的对账中心,只读验证页面。 | |
测试对象: | |
隔离环境:测试环境 A | |
预期稳定店铺 ID:shop_demo_001 | |
预期显示名:测试店铺 A | |
前置条件: | |
1. 配置映射已通过校验; | |
2. 当前账号已获得测试环境访问权限; | |
3. 本轮不写入正式文件。 | |
成功标准: | |
1. 打开指定隔离环境; | |
2. 进入获准的业务域名; | |
3. 稳定店铺 ID 完全匹配; | |
4. 显示名匹配或符合批准的别名规则; | |
5. 进入对账中心并识别月汇总页面; | |
6. 浏览器保持打开供人工确认。 | |
限制: | |
1. 只运行一个测试店铺; | |
2. 不修改批量脚本; | |
3. 身份不匹配时停止整个流程; | |
4. 不保存或输出凭据; | |
5. 只执行只读操作; | |
6. 报告脱敏日志、最终 URL 路径和验证证据。 |
# 十一、上线与批量前检查清单
# 业务与权限
# 数据与输出
# 稳定性
# 运维与安全
# 十二、推荐的迭代节奏
明确一个小目标 | |
→ 完成权限与配置预检 | |
→ AI 阅读相关 SOP 和代码 | |
→ 确认成功、失败和副作用条件 | |
→ 实现最小改动 | |
→ 运行单元与模拟测试 | |
→ 在获准测试店铺执行 | |
→ 人工确认页面和业务结果 | |
→ 记录异常并补测试 | |
→ 达到门槛后进入下一阶段 |
最终交付物不应只有一份 “能跑” 的脚本,还应包括:
- 可审阅的 SOP 规格和权限矩阵;
- 清晰的配置与稳定身份模型;
- 可重复运行的单店流程;
- 具备错误隔离和熔断的批量流程;
- 自动化测试和漂移检测;
- 可诊断、可脱敏的结构化日志;
- 事务化输出和回滚能力;
- 业务验收样例;
- 不含敏感信息、与代码同版本维护的 Skill。
# 结语
AI 自动化的核心不是追求 “一次生成全部代码”,而是建立一个可验证的协作系统:
- 把人工经验改写成可判断的业务规格;
- 让确定性脚本承担执行与安全边界;
- 用稳定身份、证据链和分层测试证明结果正确;
- 先做受控单店闭环,再进入小批量和正式批量;
- 把已经验证的运行与排错方法沉淀为 Skill。
当 SOP、脚本、测试、日志、回滚和 Skill 能够共同演进时,自动化才真正具备可维护、可交接和可规模化的基础。
