视频加载失败

小爱Agents来啦~

小爱Agents来啦~
/ 更新 34 分钟自动化 / 跨境电商 / BigSeller / Shopee / TikTok Shop / Playwright / Agent

小爱Agents来啦~

“把原本独立的小爱 Agents 接入自动上架,让同事通过 AI 聊天排查报错,也能由面向跨境电商的 DeepSeek Harness 主控规划任务、调用 Browser Use 等工具并检查结果。文章介绍新增的 11 项上架工具,以及本轮上传提速和容错更新。”

6735 字
34 分钟
小爱Agents来啦~

为什么把小爱接进自动上架#

其实,小爱 Agents 最早是一个单独的项目,早就具备了不少功能,包括 PJ 等。这次做的,是把这个已经成形的项目接入自动上架工具里的小爱窗口,让日常上架也能用上这些现成的能力。

接入它的理由很简单:很多功能,单独开发起来其实很繁琐,而且每个人的需求都不一样。这个同事用得上,另一个同事可能完全用不到。为某一个人的一次需求专门写一套功能,再补界面、处理边界、继续维护,属实有点麻烦。

既然已经有了小爱 Agents,那就简单一点,让同事直接和 AI 聊天就好了。需要检查什么、处理哪些页面、最后整理成什么结果,把需求说清楚,再让它利用已有的能力去执行。这样,一些临时、零散、因人而异的工作,就不用每次都先找我开发一个专用小工具。

而 AI 聊天模式,主要是为了解决另一件很实际的事:同事遇到报错后,不知道该怎么继续。

过去这段时间,我做了很多关于任务中断、异常恢复和报错提示的改进,希望程序遇到问题时能停在正确的位置,把原因留下来。但代码只有我看得懂,同事不懂编程,也没有办法自己修改源码。即使程序已经把异常记录得很详细,一串错误信息摆在眼前,依然可能不知道接下来该做什么。

所以,同事在页面上遇到报错后,可以直接问小爱,让 AI 结合页面上的错误信息、工具当前的运行状态,以及能够检索到的日志和源码,解释为什么会停下来,再告诉他们应该检查或调整哪里。

例如,是当前商品和表格没有对应上,还是素材缺失、图片校验没有通过;应该先核对哪项配置、补齐哪份资料,还是把具体错误交给我处理。对同事来说,需要得到的是能照着做的说明,不是一段还要自己翻译的程序日志。

我想减少的是“每次报错都得先来问我”这一步。 能通过配置或资料解决的问题,让他们知道如何调整;确实需要修改程序的问题,也能先把现象和依据说清楚。

聊天模式帮同事理解工具,Agents 模式承接各自的临时需求。这就是这次把它接进自动上架的原因。

小爱 Agents 已经能做哪些事#

除了前面提到的 PJ,小爱 Agents 作为独立项目,已经具备了一套比较完整的任务执行能力。把它接进来,也正是想复用这些已经做好的功能。

  • Agent 自主搜索、打开网址、后退:根据任务搜索资料、进入需要的网页,再返回前一个页面,衔接多页操作。
  • 执行页面 JavaScript:在页面上下文运行脚本,批量读取页面数据或填写内容,处理重复的网页操作。
  • 下载文件、保存网页 PDF:接收网页下载的文件,也可以把需要保留的页面保存为 PDF。
  • 自动规划、完成结果验收:先规划任务步骤,执行后再检查结果是否满足任务要求。
  • 一轮执行多个动作:一次模型响应可以安排多个连续动作,减少每次点击、填写都单独往返调用模型的等待。
  • 暂停后继续、历史动作重放:任务可以暂停后继续,也能读取历史动作记录,重新执行已有流程。
  • 自动切换备用模型:配置备用模型后,主模型遇到符合切换条件的接口或输出异常时,按顺序尝试备用模型。
  • 完整运行记录导出、GIF、费用统计:导出运行过程与动作记录,生成执行过程 GIF;根据接口返回的 Token 用量和配置单价估算费用。
  • 更多厂商的原生模型接口:按不同厂商选择模型适配,包括 OpenAI、DeepSeek、Anthropic、Google、Azure,以及 Ollama 本地模型。
  • 多个 Agent 同时干活:独立项目可以让多个 Agent 并行处理不同任务。

这些能力里,我尤其看重规划、验收和运行记录。把任务交给 AI 后,既要知道它打算怎么做,也要能回头检查实际做了什么、最后是否完成。模型接口没有返回用量,或没有配置价格时,费用统计会保留缺项提示,不能把未知费用当成零。

这里的多 Agent 并行指独立项目的能力。当前接入自动上架的版本仍然一次执行一个网页 Agent 任务,并与正式上架、批量工具保持互斥,避免同时操作同一套商品页面。

小爱的两种工作方式#

目前,小爱提供 AI 聊天模式和Agents 模式,两者在同一个窗口里切换。聊天模式主要帮同事读懂上传流程中的报错;Agents 模式则由小爱智能体主控负责推进任务。这个主控基于 DeepSeek Harness 开发,是面向跨境电商场景的 Harness:它会先思考和规划,再调用工具执行,随后检查结果、更新计划与记忆,并据此继续下一步。

聊天模式:结合源码和日志检查问题#

聊天模式可以帮助检查上传流程中的报错、定位可能的 bug。它能通过只读工具列出项目文件,搜索错误信息或代码标识符,再读取相关源码和运行日志。

例如,遇到“上传结束了,为什么没有继续发布”,可以让它查找对应日志,再对照上传完成判断、图片校验和发布前复核的代码,解释停在哪个条件上。这样给出的排查方向就有了本地项目的依据。

这一模式适合解释错误、梳理流程和提出修复建议。是否确实修好了问题,仍需要修改后的代码和运行结果来验证。

Agents 模式:由主控规划并调用浏览器工具#

Agents 模式可以调用自研的 小爱 Agents Browser Use 模块来操作浏览器。主控根据任务规划选择工具,在选定网页中读取页面结构、点击、填写或切换关联页面;每轮操作后再检查页面反馈,并决定是否更新计划、继续执行。执行过程和结果会显示在同一个聊天窗口里。

这使小爱的工作范围可以从上架工具自身的固定按钮,延伸到用户选定的其他网页。当前重点仍然是网页任务,以及为网页任务提供支持的本地资料读取和受限脚本处理。

目前已经具备的能力包括:

  • 选择已有的目标网页及关联页面,在任务范围内逐页操作;
  • 读取指定资料目录中的文本、图片、Excel 和 CSV;
  • 查询项目内真实的 PH/ID 型号表,为型号匹配提供依据;
  • 将选定的图片、视频和表格上传到网页;
  • 在当前聊天的会话目录内创建辅助脚本、整理结果,并通过受控接口调用资料和网页操作能力。

这些能力对电商场景很有用。一项工作往往同时涉及表格、型号表、图片目录和多个编辑页,现在可以把相关资料与页面放到同一次任务中,让 Agent 按要求衔接处理。

图片上传也沿用内容校验思路:上传前固定文件并记录 SHA-256,上传后检查主图、SKU 图和页面标签;没有完成检查的页面,会阻止保存、更新或发布。Agent 与正式上架任务、批量工具之间也有互斥,避免同时控制页面。

需要注意,“停止任务”会停止后续操作,已经完成的网页操作不会自动撤销;切回聊天或关闭小爱窗口,也不会直接取消正在执行的任务。使用时可以在任务记录里查看进度,并通过停止按钮结束后续执行。

小爱自动上架工具:从资料检查到结果记录#

在原有 Agent 能力上,这次又为小爱自动上架补充了一组专用工具。它们注册在原来的小爱网页 Agent 内,让同事在熟悉的聊天窗口里完成检查与准备;不需要单独安装一套新应用,也不需要重启浏览器。接入不修改 Shopee、TK 和 Temu 原有的 worker,只补上资料检查、页面核对与结果记录能力。

这些工具把上架前最容易遗漏的信息核对和上架后的记录接了起来。工具本身不替人猜字段、编价格、补库存或确认最终成交;页面读到什么、当前操作拿到了什么回执,报告就记录什么。

先检查素材、表格和计划#

  • scan_listing_materials 只读扫描授权的资料目录,识别图片、视频和表格;检查图片能否读取及其尺寸,按文件名列出分组内缺号、重号,并将完整清单写入当前会话目录。一次最多检查 3000 个支持的文件;清单被截断时,需要继续检查对应子目录。
  • inspect_listing_workbook 读取指定表格范围,寻找唯一表头,列出候选列与分页原始数据。若价格、型号或其他列存在歧义,只展示候选项,不会自行选定。
  • validate_listing_workbook 检查必填变种字段、重复 SKU、重复的 Color 与 Model 组合,以及价格、库存、重量和尺寸。Shopee 单商品 100 个变种的限制只应用于 Shopee,不会套到 TK 或 Temu 上。
  • create_listing_plan 根据已明确的店铺、地区、品牌、币种、商品名、图片顺序和变种生成会话内计划。必要信息缺失或有歧义时,会列出阻塞项,等信息补齐后再继续。

表格检查按明确指定的范围进行,每次最多处理 10,000 行;超出当前范围的数据会在报告里标明尚未检查。

按计划核对实际编辑页#

  • inspect_listing_page 读取当前编辑页的标题、店铺与商品 ID 证据、表单字段、动态 VXE 表头和可见行;排除密码、密钥输入框与隐藏提示,避免把页面里不可见或不相关的内容当成实际商品数据。
  • compare_listing_page_with_plan 按页面实际列标识,核对标题、店铺 ID、Color、Model、SKU、价格和库存。遇到虚拟表没有完整渲染全部数据行时,会明确标记未覆盖,不会给出“核对通过”的结论。

保存本次回执,再记录进度#

  • capture_listing_checkpoint 在提交前记录当前页面和已有反馈,划定后续结果核对的起点。
  • wait_listing_result 提交后等待检查点之后出现的新反馈,要求指定的成功文本全部出现;不会因为旧提示看起来像成功,就再次提交或当作本次结果。
  • read_listing_failures 提取当前页面实际出现的错误、登录和验证码信息,照实报告证据,不猜原因,也不自动删除商品。
  • record_listing_progress 按商品记录“计划中、处理中、跳过、失败、未确认”等状态。page_confirmed 只表示当前 ERP 页面出现了本次任务的新反馈;它不能证明电商平台最终已经上线,且必须关联同一个商品的真实回执。
  • export_listing_report 将进度和页面反馈导出为 CSV 或 JSON,文件写入当前会话目录,之后可以从运行文件入口下载;CSV 中的公式文本会先转义。

实际使用时,通常先扫描素材、检查表格,再查询真实型号表并生成计划;网页任务执行后,先比对计划与编辑页,沿用原有服务器图片哈希和标签校验,再保存本次提交前的检查点,最后等待新的页面反馈、记录进度并导出报告。登录页、验证码、页面关闭、超时、旧通知、未知店铺或不完整的虚拟表格,都不能当成商品处理成功的证据。一次提交对应一次新的检查点,不能把之前的回执重复用于下一次提交。

会话脚本也可以调用这套工具。下面展示如何查看表格候选列,再按人工明确确认的列号校验一段数据;字段映射里没有确认的列,需要先解决歧义再继续:

const api = require(process.env.XIAOAI_SDK_PATH);
const preview = await api.listing.workbook('资料表格的完整路径.xlsx');
const check = await api.listing.validateWorkbook('资料表格的完整路径.xlsx', 'shopee', {
header_row: 1,
start_row: 2,
end_row: 20,
column_map_json: JSON.stringify({sku: 4, model: 3, color: 2, price: 5, stock: 6}),
});

其他脚本入口包括 api.listing.materials、createPlan、page、comparePlan、checkpoint、waitResult、failures、progress 和 report。脚本只写入当前会话目录,读取资料与操作页面仍由父进程的受控接口完成。资料目录和项目源码保持只读,执行中继续使用冻结后的图片文件以及原有服务器 SHA-256 与页面标签校验。

这批工具使用临时图片、CSV/表格和单独的无头浏览器进行测试,没有读取真实 API Key,也没有连接或发布真实商品。对应测试入口为:

Terminal window
& '.\.venv\Scripts\python.exe' -X utf8 test-listing-tools.py
node test-listing-page.cjs

10.19:自动上架的速度与容错更新#

接入小爱之外,这次 10 月 19 日的 V4.2.1 更新也继续优化了 BigSeller 内的 Shopee(虾皮)和 TikTok Shop(TK)上架流程。

上次在《最近,来交作业了》里,写到了自动上架新增的图片哈希值校验。那次更新补上了一个长期被低估的问题:图片数量正确,并不能证明主图和 SKU 图真的上传到了对应的位置。

有了上传后的内容校验,接下来就可以更细地处理速度和容错。哪些等待是必须的,哪些只是过去为了少出错而多留的缓冲;遇到异常时,应该重新读取、重传某个槽位,还是停止当前任务,都需要重新梳理。

图片校验保留,上传节奏重新整理#

这轮提速建立在之前的 SHA-256 校验之上。程序会在上传前固定本次选定的文件内容,上传完成后读取服务器原图,再与本地快照比较,避免运行过程中本地文件变化,让上传依据和校验依据出现偏差。

目前的校验范围是:

  • 商品图先单独上传主图,再批量上传剩余图片;整组完成后检查图片总数,并核对第一张主图的服务器原图哈希。
  • SKU 图先完成全部槽位的上传,再并发读取服务器原图,统一核对每个槽位的哈希、图片地址和页面变种标签。槽位里原本已有的图片也会参与检查。
  • 发布前再次复核主图、全部 SKU 图和图片绑定关系,每次发布重试也重新检查。

这里需要说明一个具体边界:商品辅图仍做数量和加载检查,没有逐张做哈希校验;逐槽位检查覆盖的是全部 SKU 图。

这次优化主要落在上传过程中的等待方式。以前一些步骤依赖固定间隔,页面已经准备好了仍要继续等;现在会结合上传请求是否结束、服务器是否返回图片地址、目标槽位是否完成绑定,以及必要的图片加载状态,判断能否进入下一步。上传完成状态的轮询间隔最短为 100 毫秒,实际仍要等上述条件满足。

SKU 图也不再每上传一张就单独停下来读取服务器原图、计算哈希,而是完成这一轮上传后统一并发校验。这样可以减少校验过程的串行等待,也便于一次看清哪些槽位通过、哪些槽位需要修复。

并发校验和商品之间的等待衔接,是这次两个不同层面的提速点。 SKU 的上传仍按确定的槽位顺序进行,同一平台也只准备一个商品的图片。

重试机制:先判断异常,再决定怎么恢复#

这次重新整理了图片上传的重试机制。一次上传失败,可能是入口没有打开、请求暂时失败、图片没有绑定到目标槽位,也可能是服务器图片内容不一致。这些情况需要采取不同的恢复动作。

遇到的情况当前处理方式
SKU 本地上传菜单没有打开,或文件选择框没有出现先在当前位置重试;仍失败才尝试有限次数的滚动恢复
上传请求已经结束,但图片缺失或校验不通过汇总异常槽位,仅删除并重传需要修复的 SKU 图
服务器原图读取失败先重试读取;持续失败则保留页面并停止,不能直接认定图片错误后删除
当前商品身份、变种标签或图片绑定关系发生变化阻止后续操作,保留编辑页供检查

SKU 图最多进行 3 轮上传与修复。每轮结束后仍然检查全部槽位,避免只盯着刚刚重传的那一张,而漏掉页面其他位置的变化。

一个重要调整是:删除和重传之前,必须确认旧上传请求已经结束。 如果旧请求还在运行,新一轮上传就开始了,迟到的响应可能重新覆盖槽位,让页面状态和程序记录不一致。现在无法确认请求已经收尾时,会停止当前操作。

入口重试也有独立的次数限制。程序会先在当前位置不滚动重试 3 次;仍然无法操作,才在确认请求结束、商品身份和 SKU 标签正确后,尝试回到顶部再定位目标槽位。每个槽位最多允许 3 次这样的恢复,而且后续哈希修复不会重置这个计数。

这样,一次临时的菜单失灵有机会自行恢复;持续异常则会明确停下来,不会让一个商品无限消耗时间。

按照本轮测试记录,累计 10,000 条商品链接的分批上架测试中,上架率达到 99.8%。这组数据记录的是本轮测试批次内的上架结果;图片是否正确,仍由主图和 SKU 图各自的校验结果判断,不能只看一个总成功率。

修复 SKU 上传时界面反复跳动的问题#

之前上传 SKU 图时,页面有时会在多个位置之间来回跳动。尤其是 SKU 比较多、上传区域存在嵌套滚动容器的时候,连续定位、悬停和菜单点击会让这个问题更明显。

本次把滚动行为收敛到了必要的位置:

  1. 槽位已经可见、上传入口可以操作时,直接在当前位置完成上传,不重复居中。
  2. 槽位在视口外或被局部遮挡时,先确认上传请求结束,再进行一次必要定位。
  3. 等待上传期间不反复滚动,也不通过侧边锚点来回跳转。
  4. 上传期间临时关闭滚动锚定和平滑滚动,完成或异常退出后恢复原来的样式。

菜单点击也会检查实际位置是否可见、是否被遮挡,减少自动定位引起的额外滚动。前面提到的“回顶部再返回槽位”,只在原地重试失败后作为恢复手段触发。

这个修复一方面让界面稳定下来,另一方面也减少了重复定位和菜单重新打开所消耗的时间。

链接并行处理:把发布等待用起来#

单个商品的处理流程里,有一段时间花在等待 BigSeller 返回发布结果上。已经点击提交之后,程序仍要确认成功;原来的串行流程会等到这个商品全部结束,再开始处理下一条链接。

这次新增的链接并行处理,主要把这段等待与下一商品的准备过程重叠:

商品 A:填写与上传 → 图片复核 → 提交 → 等待发布结果 → 确认成功
↓ 同时进行
商品 B: 填写与上传 → 图片复核 → 提交
↑
先确认 A 已成功

每个平台的队列最多保留一个等待发布结果的商品和一个准备中的商品。A 实际点击提交后,B 可以开始填写标题、上传图片;B 自己提交之前,必须先确认 A 成功,并完成自身的图片总复核。如果 A 失败,就阻止后续提交,保留未发布的页面。

对应实现集中在 bigseller-publish-pipeline.js,两个平台的 Worker 分别创建自己的队列。当前队列的核心约束可以从这段源码看出来:

async drain() {
if (this.pending) await this.pending;
return !this.failed;
}
async submit(publish, { onSettled = () => {} } = {}) {
if (!await this.drain()) return null;
// 后续才启动当前商品的提交与结果等待。
}

上面摘取了方法开头,并省略后续实现。submit() 首先等待上一商品收尾,再判断是否允许继续;下一商品的准备工作可以提前进行,提交顺序依然受这个检查约束。

Shopee 还优化了当前批次编辑页的打开方式:按商品顺序快速发起开页,各页同时加载并核对身份,取消过去每打开一页固定等待 1.5 秒的间隔。核对后仍按原顺序处理,只打开当前批次需要的页面。

并行之后,日志和结果的归属也需要一起处理。现在事件会携带独立的 workerProductId,上一商品的发布结果、截图和耗时不会因为下一商品开始准备而被归到下一条记录里。TK 的成功判断也继续收紧,只接受本次更新后新增或内容发生变化的成功通知。

6 个商品少等约 61 秒,具体怎么算#

本地保留了 10 月 19 日一轮 Shopee 运行的速度分析记录。当时已有 6 个商品完成,可以比较各商品独立耗时之和与这一段实际经过的时间:

指标记录结果
已完成商品数6 个
各商品从开始到完成的耗时之和552.225 秒
从第一个商品开始到第六个商品完成的实际用时491.117 秒
两者差值,即被重叠利用的时间61.108 秒
差值占各商品耗时之和的比例约 11.1%
平均每个商品摊薄的等待约 10.2 秒

因此,这组记录可以表述为:6 个商品少等了约 61 秒,平均每个商品减少约 10 秒,连续处理阶段耗时减少约 11%。 这是同一轮运行中的耗时重叠分析,没有将旧版和新版各自复跑同一批商品作对照。

只计算这段连续处理时间,6 个商品用时约 8 分 11 秒,折算约 44 个商品链接/小时;计入本轮搜索、开页等时间后,约为 36 个/小时。安排日常任务时,目前可以按 35~40 个商品链接/小时估算。

不添加视频的情况下,本次更新给出的速度参考约为 44~56 个/小时。视频上传和处理会占用额外时间,关闭视频后能够省下这一部分等待;这项参考范围与上面的 6 商品样本折算是不同口径。

这里的“一个商品”指一个商品链接,不按 SKU 变种数量计数。上述短时实测来自 Shopee;并行机制也已用于 TK,但目前没有对应的 TK 同口径速度数据。实际产能仍会随图片与 SKU 数量、视频大小和网络状况变化。

接下来,尝试把零散工具串成工作流程#

此前的“偷懒小工具”,大多围绕一个明确动作开发:扫描、检查、提取、修改,或者导出某类数据。需求足够稳定时,这样的固定工具很好用;但临时任务一多,就要继续加按钮、补界面,再把几个工具的结果手动接起来。

小爱 Agents 带来的可能性,是让这些动作能够按任务组合。例如先读取一份表格,检查指定链接的某些字段,再整理出需要人工处理的清单。将来如果能把常用步骤保存下来,就可以继续探索自定义工作流程。

我希望它后续能承接大部分临时的“偷懒”需求,让固定工具更集中地负责稳定、重复、需要严格验证的工作。自定义工作流程和大范围替代现有小工具,目前仍是后续方向,这一版先把聊天诊断、资料读取和网页执行接起来。

对这次更新,我最直接的感受是:图片检查补齐之后,终于可以逐步减少那些凭经验留下来的等待。上传时少跳几次页面,异常时少重做几个槽位,发布时把十来秒的空档用起来,积累到一批商品里,就能看到实际的时间变化。


本文对应 2026 年 10 月 19 日的更新记录。实现参考本地项目的 image-upload-verifier.js、bigseller-publish-pipeline.js、batch-worker.js、tk-worker.js、aimisi-readonly-agent.js、aimisi-readonly-workspace.js,以及“小爱 Agents Browser Use”模块的 sidecar.py、agent_tools.py、model_runtime.py、llm_compat.py、run_archive.py 和使用说明。速度分析参考当日保存的 latest-speed-comparison.json;10,000 条链接、99.8% 上架率和无视频速度区间采用本轮测试与更新记录口径。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
小爱Agents来啦~
https://rainzt.cn/posts/auto-listing-update-2026-10-19/
作者
Rain
发布于
2026-10-19
许可协议
CC BY-NC-SA 4.0

评论区

跳到正文
朝朝听雨
主题

站点主题

字体样式

‹ 返回
本文使用 AI 辅助创作,请注意甄别。
本文目录

文章目录

WELCOME欢迎来到朝朝听雨

很高兴在这里遇见你。