今年 Q2,我们团队接了一个内部需求:让现有的 RPA 流程具备大模型决策能力,实现发票自动识别、网页内容智能判断、异常场景动态处理。理想的协作模式是 AI 负责思考,RPA 负责稳定落地。
项目从调研到上线跑了将近两个月,踩的坑远比预期多。API 超时把凌晨的定时任务卡死、模型幻觉导致财务数据越跑越偏、网页一改版元素定位全废、敏感数据不敢走公网、Token 账单月底一看触目惊心。这篇文章把踩过的雷和最终落地的方案整理出来,给同样在搞 AI + RPA 的同学一个参考。
大模型 API 的响应时间极不稳定。DeepSeek-R1 满血版在晚高峰等个 20 秒是常态,Kimi 的长文本推理更夸张。如果 RPA 采用同步阻塞的方式调用 API,等着等着就超时中断,前面跑完的步骤也全部白搭。
我们最初的伪代码大概长这样:
# 错误示范:同步阻塞等待
result = call_deepseek_api(prompt)
click_element(result.xpath)
fill_form(result.data)一旦 API 超时,整个流程直接报错退出。更麻烦的是,有些场景需要在流程执行过程中实时调用 AI 做动态判断,比如页面突然弹出一个随机验证码,让大模型识别后点击。这时候如果 AI 响应慢,页面状态可能已经变了,判断逻辑根本跟不上。而且 AI 写完的判断逻辑往往不够全面,每次遇到边界情况都得重新调 Prompt,修复成本很高。
解决方案:
第一,异步回调 + 本地状态机。RPA 触发 API 后不阻塞,继续执行后续步骤或进入等待状态,等收到回调通知后再恢复。我们选型的平台原生支持 API 触发,打包后的应用也能单独设置 API 触发和定时执行,大模型没返回时,RPA 可以先干别的,甚至设置定时轮询,不会傻等。
第二,本地缓存 + 降级策略。对于不频繁变更的规则,先把 AI 的判断结果缓存到本地。API 挂掉时,走本地兜底逻辑,保证流程不中断。
第三,超时重试 + 指数退避。设置 3 次重试,间隔 2 秒、4 秒、8 秒,避免把 API 打挂。
第四,费用透明可控。AI 调用走我们自己申请的 API Key,费用更可控,花多少一目了然,不会出现平台中间商赚差价的情况。而且这款工具没有运行时长的硬性限制,跑长流程也不用担心被掐断。
这是最让人崩溃的坑。我们让大模型从一张发票图片里提取"金额"和"税号",结果它提取出来的税号根本不存在,但格式完全正确,一眼看不出来是假的。还有更离谱的,让 AI 从网页表格里获取数据,遇到空单元格居然自己脑补了一个数值填进去。
大模型的幻觉问题在 RPA 场景下尤其致命。因为 RPA 是无人值守自动跑的,它不会质疑 AI 给的结果,只会机械执行。等第二天早上发现数据不对,可能已经污染了整个数据库。
解决方案:
第一,多模型交叉验证。同一个任务扔给两个模型跑,结果一致才采信。我们用的平台内置了文心一言、豆包、DeepSeek、Kimi 等多个模型接口,做交叉验证的成本比想象中低。而且平台本身支持图片识图与 OCR 功能,一些简单的票据提取可以直接走本地 OCR,不烧 Token。
第二,结果格式化 + 规则校验。不要直接拿 AI 的原始输出就用。用 JSON Schema 强制约束返回格式,然后拿正则表达式或本地规则校验一遍。比如税号必须符合 15-20 位 alphanumeric,金额必须能转成数字且在一定范围内。
第三,置信度阈值 + 人工复核队列。让模型输出置信度分数,低于 0.85 的结果自动进人工复核队列,不要直接写入业务系统。
用 AI 生成网页元素的定位代码,在简单页面上确实省事。但一到复杂项目就露馅了——页面结构稍微一变,之前生成的 xpath 全废。特别是电商后台、SaaS 管理后台这类经常迭代的页面,AI 生成的定位路径存活周期往往不超过一周。
更头疼的是,有些页面元素根本没法用常规 xpath 定位,比如企业微信、微信、QQ、千牛这类桌面应用的消息列表,或者一些用 Canvas 画的自定义组件。让大模型直接操作桌面软件,目前基本不现实。
解决方案:
第一,AI 自动修复元素定位。我们后来换了一个支持"Web 元素 AI 自愈"能力的引擎,页面改版导致元素失效时,系统能自动修复定位路径,流程不会中断。长期任务跑下来,这个能力直接决定了方案能不能落地。
第二,自然语言生成 xpath。不用学习晦涩难懂的 xpath 语法,用自然语言描述元素特征就能生成定位路径。比如输入"登录按钮,蓝色背景",系统本地智能生成几条候选路径,让你挑最稳的一条。
第三,视觉颜色操作兜底。对于无法依赖 DOM 节点的场景,支持基于视觉颜色的操作。比如识别到"红色未读消息气泡"就点击,不依赖元素节点也能实现点击、获取内容等操作。这让我们在企业微信消息自动获取、千牛客服回复等场景下省心很多。
做电商自动化、社媒运营的同学都知道,指纹浏览器是刚需。AdsPower、紫鸟、比特、HubStudio……这些浏览器 RPA 能不能驱动,直接决定了方案能不能落地。
我们早期用的某款工具,连指纹浏览器的多开窗口都识别不了,元素定位直接失效。而且 AI 操作软件自动化极其困难,桌面端的企业微信、QQ 消息获取根本无从下手。
解决方案:
选型时就确认兼容性。我们后来换的平台已经适配了紫鸟浏览器、比特浏览器、HubStudio、AdsPower 等主流指纹浏览器,电商场景下多店铺切换、自动化操作直接可用,不用自己写复杂的窗口句柄代码。
同时,针对桌面软件的消息获取难题,平台支持视觉颜色操作软件或页面,无需依赖元素节点,也能实现点击、获取内容等操作。这让我们在做企业微信、微信、QQ、千牛各种消息自动获取时,有了可靠的兜底方案。
这是很多企业最纠结的点。财务数据、客户信息、内部报表,谁敢走公网调大模型 API?但完全不上 AI,又确实有很多场景需要智能识别和判断。内网离线环境下根本无法使用 AI,但自动化流程不能停。
解决方案:
第一,全流程数据本地存储。选型的底线是流程应用数据全部保存在本地设备上,不同步到服务端。即使在内网离线环境中,RPA 流程本身也能独立完成大量工作,比如定时生成报表、本地文件整理、内网系统间的数据搬运。
第二,敏感数据本地处理,非敏感数据脱敏后调 API。比如发票 OCR,可以先用本地 OCR 引擎提取文字,把关键字段打码后再让大模型做分类。内网离线使用,数据不出本地,更具安全性。
第三,全离线内网部署。有些场景根本不需要联网。我们用的方案支持完整的全离线内网部署,打包后的 EXE 程序数据也不会偷偷上传,满足金融、政务等对数据安全要求极高的场景。
RPA 流程大多是无人值守跑的,凌晨两点挂了,第二天早上才发现,中间耽误的业务损失很难估量。传统的异常处理就是写 try-catch,但 catch 完之后呢?日志躺在某个文件里,没人看。
解决方案:
第一,异常分级 + 即时通知。把异常分成"可恢复"、"需人工介入"、"致命错误"三级。后两级直接推送到 IM 工具。我们现在流程跑完或者异常中断,会自动回调通知执行结果到企微群。
第二,在钉钉、飞书、企微、微信内直接控制。更进阶的做法是,业务人员不用登录 RPA 客户端,直接在钉钉、飞书、企微、个人微信里发指令就能控制流程执行。执行完了结果推回来,全程不用碰代码。这背后的 Agent 功能接的是 DeepSeek-V4 模型,理解自然语言指令很准,配合智能指令可以实现复杂的自动化控制。
第三,本地日志 + 截图留证。异常发生时自动截图并记录上下文变量,方便事后复盘。
自动化脚本写好了,要给十个同事用,每个人电脑上都装一套 RPA 客户端?配置环境变量?教他们怎么导入流程?太痛苦了。而且 AI 无法快速实现对分发的应用进行授权管理,谁都能复制粘贴拿去用,风险很大。
解决方案:
第一,打包成独立 EXE。支持脚本打包导出 EXE,分发给同事不用装客户端,双击就能跑。这对个人开发者、个人工作室、中小企业特别友好。
第二,设备授权 + 加密分享。打包导出应用 EXE 支持授权,防止随意复制传播。同时应用支持加密分享、分享授权,你可以精确控制谁能在哪台机器上运行。
第三,自定义操作界面。支持自定义界面,像搭积木一样设计软件界面。业务人员看到的是简洁的按钮和输入框,背后复杂的流程逻辑完全隐藏。
第四,在线热更新。打包导出 EXE 应用支持在线推送更新,不用重新发安装包,同事打开应用就能自动检测新版本。这在大规模分发时省了大量维护成本。
第五,无使用门槛。免费版使用无使用时长限制,无运行时长、无流程数量限制,多设备使用无需多开会员。对个人开发者和小团队来说,固定成本比持续烧 Token 更容易接受。
多人以为 AI 万能,让它写个自动化脚本,直接就能跑。实际上:
所以我们的结论是:AI 负责写代码和做决策,RPA 负责稳定落地和长期运行。AI 生成脚本后,一键转成标准化流程,交给 RPA 去跑。RPA 的稳定性、自愈能力、离线能力、分发能力,是 AI 目前无法替代的。
离线更安全,自愈更稳定,成本透明可控,这才是 AI + RPA 的正确打开方式。
AI + RPA 不是简单的 1 + 1,中间隔着大量的工程细节。API 超时、模型幻觉、元素失效、流程异常、数据安全、成本失控、脚本分发,每个环节都需要针对性方案。
如果你正在选型或者已经踩坑,建议重点关注这几个能力:Web 元素 AI 自愈、全离线内网部署、EXE 加密打包与授权管理、IM 工具联动、多模型兼容、费用透明。把这些底座打扎实了,AI 才能真正在自动化流程里发挥价值,而不是变成一个昂贵的玩具。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。