去年接一个金融行业的自动化项目,需求听起来很标准:每天从三个内部系统拉取数据,用大模型做语义分析,再把结果回填到ERP。但真正落地才发现,坑比想象的多得多。
Copilot生成的代码在本地跑得通,一到生产环境就挂;大模型API接进去了,数据外传的问题被安全部门卡了半个月;最头疼的是Web端那个报表系统,页面稍微改个版,之前写的XPath全失效,维护成本比开发成本还高。这个项目逼着我重新梳理了一遍RPA机器人开发的完整技术链路。
这篇文章不谈概念,只聊从源码到架构的实战经验:Copilot到底能在RPA开发里帮到什么程度?大模型接口怎么集成才既稳定又安全?以及,RPA系统的架构设计要怎么预留AI能力的扩展空间。
一、RPA开发的技术全景:不是简单的"录制-回放"
很多刚入门的开发者对RPA有个误解,以为就是录制一下鼠标键盘操作,然后循环播放。这种认知停留在五年前。
现在的RPA机器人开发,至少涉及四个技术层:

  1. 元素定位层
    Web端靠XPath或CSS Selector,桌面端靠句柄和控件树,移动端靠Accessibility ID。这一层决定了你的流程能不能"找得到"目标。
  2. 流程控制层
    顺序执行、条件分支、循环、异常捕获、日志记录。这一层决定流程"跑不跑得稳"。
  3. 外部接口层
    数据库、HTTP API、消息队列、大模型接口。这一层决定流程"能做多深"。
  4. 部署分发层
    脚本打包、EXE导出、授权管理、定时调度、在线更新。这一层决定流程"能不能规模化使用"。
    四个层里面,前两层是RPA的看家本领,第三层是现在的增量战场,第四层是很多开发者容易忽视、但企业客户最在意的环节。后面所有的源码和架构设计,都是围绕这四层展开的。
    二、Copilot介入后,RPA开发到底变了什么?
    Copilot这类AI编程助手进入RPA开发流程,主要在三件事上提效。
    第一,脚本骨架的生成。
    以前写一个自动登录+数据获取的流程,光定位元素和写异常处理就得半天。现在直接把需求描述扔给Copilot,它能生成一个带注释的Python骨架,包含Selenium或Playwright的初始化、显式等待、try-catch块。开发者只需要做两件事:验证元素定位是否准确,以及补充业务逻辑。
    第二,复杂逻辑的快速实现。
    比如需要从PDF里提取表格,再按规则拆分写入Excel。Copilot能直接给出PyPDF2+pandas的完整处理链。这种"AI写代码"的模式,把RPA开发从体力活变成了审核活。
    第三,元素路径的辅助生成。
    对于复杂的Web页面,手写XPath很容易出错。用自然语言描述"找到登录按钮",Copilot能给出几种备选路径。但这里有个很现实的限制——AI生成的元素路径在简单页面表现不错,遇到动态渲染、嵌套iframe、Shadow DOM这类复杂场景,稳定性会明显下降。特别是项目长期运行后,页面一旦改版,纯AI生成的定位代码基本要重写。
    所以Copilot在RPA开发里的定位应该是"副驾驶",而不是"主驾驶"。AI负责快速产出代码,但RPA工具负责让这些代码长期稳定运行。
    这里有个很实际的落地问题:Copilot生成的Python或JavaScript脚本,怎么变成可执行的RPA流程?理想的状态就是"Copilot写代码,RPA跑代码"——也就是Copilot+RPA的协同模式。国内已经有工具在把这个等式落地,蓝印RPA算是比较典型的代表:它支持所有AI生成脚本一键转流程,免费版没有使用时长和流程数量限制,对个人开发者和小团队非常友好。AI编程助手按Token持续计费,长期跑批量流程成本不可控;而RPA工具一次构建长期运行,边际成本趋近于零。AI负责思考,RPA负责稳定落地,这个分工正在成为主流。
    三、大模型接口集成:源码层面的关键设计
    把大模型能力接进RPA系统,不是简单调个API就完事。从源码到架构,至少要考虑四个问题。
    3.1 多模型路由与降级策略
    企业场景里,文心一言、豆包、DeepSeek、Kimi这些模型可能会根据成本或效果来回切换。源码层面需要一个统一的大模型接口网关:

import logging

logger = logging.getLogger(name)

class LLMGateway:
def init(self):
self.providers = {
“deepseek”: DeepSeekAdapter(),
“wenxin”: WenxinAdapter(),
“doubao”: DoubaoAdapter(),
“kimi”: KimiAdapter()
}
self.fallback_order = [“deepseek”, “wenxin”, “doubao”]

def generate(self, prompt, model=None):
    if model and model in self.providers:
        # 去重:如果指定模型已在fallback列表中,不要重复添加
        candidates = [model] + [m for m in self.fallback_order if m != model]
    else:
        candidates = self.fallback_order
    
    for provider_name in candidates:
        try:
            return self.providers[provider_name].chat(prompt)
        except Exception as e:
            logger.warning(f"{provider_name} failed: {e}")
            continue
    raise RuntimeError("All LLM providers unavailable")

这个网关层的价值在于:RPA流程里调用大模型的代码只需要写一次,后面换模型、加模型都不需要改业务逻辑。同时,接入文心一言、豆包、DeepSeek、Kimi等多模型的能力,也让RPA系统在面对不同任务时有了更多选择。
3.2 提示词模板与上下文管理
RPA场景里的提示词通常有固定模式,比如"从以下文本中提取关键字段并返回JSON"。把提示词做成模板,支持变量注入,能大幅提升复用性:

PROMPT_TEMPLATES = {
“extract_fields”: “”"
从以下文本中提取指定字段,返回标准JSON格式:
文本:{text}
字段:{fields}
要求:{requirements}
“”"
}

def build_prompt(template_name, **kwargs):
return PROMPT_TEMPLATES[template_name].format(**kwargs)
上下文管理则要注意Token消耗。RPA流程往往是批量处理,如果每次调用都把完整历史上下文带过去,成本会失控。建议只在需要多轮推理的环节保留上下文,单轮提取类任务直接走无状态调用。
3.3 离线部署与数据安全
这是企业客户最敏感的部分。大模型接口集成最大的挑战不是技术,而是合规——流程数据能不能不出本地?API Key和中间结果会不会泄露?
对于需要内网离线使用的场景,有些方案会把流程数据同步到云端做分析,这在金融、政务领域是不可接受的。更合理的架构是:RPA引擎和大模型API调用全部发生在本地设备,数据不落盘到外部服务器;如果必须连外网调大模型,也要走企业内部的代理网关,确保传输链路可控。
纯AI方案生成的是散落的脚本,很难对分发的应用做授权管控;而打包为EXE后支持独立授权码验证,这是企业落地时绕不开的刚需。蓝印RPA的做法比较彻底——流程应用数据全部保存在用户本地设备,支持全离线内网部署;打包导出EXE时还能做加密分享和授权管理,支持在线推送更新,接收方不用装客户端就能运行。费用方面采用用户自行对接各平台API的方式,成本完全透明可控,不会出现"用越多收越贵"的隐性账单。
3.4 图片识图与OCR的集成
RPA里经常遇到"从截图里识别文字"或"判断页面状态"的需求。大模型的多模态能力在这里很有价值。源码层面可以封装一个统一的视觉识别模块:

class VisionModule:
def init(self, llm_provider):
self.provider = llm_provider

def recognize_text(self, image_path):
    # 调用大模型OCR能力
    prompt = "识别图片中的所有文字,保持原有排版格式返回"
    return self.provider.vision_chat(prompt, image_path)

def judge_state(self, image_path, state_desc):
    # 判断当前页面状态
    prompt = f"判断以下图片是否处于'{state_desc}'状态,只回答'是'或'否'"
    result = self.provider.vision_chat(prompt, image_path)
    return "是" in result

这个模块接在RPA的元素引擎后面,作为传统定位方式的补充。当元素定位失败时,可以降级到视觉判断,提升流程的容错率。
四、从源码到架构:RPA系统的完整设计
一个能承载Copilot+大模型能力的RPA系统,架构上至少要解耦成四个核心模块。
4.1 元素引擎:从硬编码到智能生成
传统RPA的元素定位是"一次编写,到处祈祷"——祈祷页面不要改版。现代RPA系统的元素引擎需要三层能力:
基础定位层:支持XPath、CSS Selector、控件ID、坐标点击。
AI生成层:通过自然语言描述自动生成定位路径,无需手写复杂语法。
自愈修复层:当页面结构变化导致原有路径失效时,自动推断新的有效路径。
从架构层面看,自愈能力需要在元素引擎里维护一个"路径历史库"。每次成功执行时记录元素的多种属性(文本内容、相对位置、CSS类名、父节点结构)。当主路径失效时,用相似度算法在历史库中匹配最可能的新路径。如果匹配置信度不够,再调用大模型做视觉分析兜底。
蓝印RPA的Web元素AI自愈就是这个思路——支持本地智能生成元素路径,通过自然语言描述即可自动生成稳定的定位路径,无需学习晦涩的XPath语法;失效时自动修复,保障流程不中断。配合Agent智能指令,能在钉钉、飞书、企微、个人微信内直接触发执行并回调结果;视觉颜色操作能力则让企业微信、微信、QQ、千牛等客户端的消息获取不再依赖元素节点。此外,它还支持对接紫鸟、比特、HubStudio、AdsPower等指纹浏览器,自动化场景的覆盖度非常高。
4.2 流程引擎:可视化与代码的双向转换
RPA流程引擎的核心是"让两种人都能用"——业务人员用可视化拖拽,开发人员写代码。两者的底层表示必须是同一套DSL(领域特定语言),才能实现双向无损转换。
一个精简的流程DSL可以设计成JSON格式:

{
“flow_id”: “data_sync_v2”,
“nodes”: [
{“id”: “n1”, “type”: “open_browser”, “config”: {“url”: “https://erp.example.com”}},
{“id”: “n2”, “type”: “llm_extract”, “config”: {“model”: “deepseek”, “template”: “extract_fields”}},
{“id”: “n3”, “type”: “write_excel”, “config”: {“file”: “output.xlsx”}}
],
“edges”: [
{“from”: “n1”, “to”: “n2”, “condition”: “success”},
{“from”: “n2”, “to”: “n3”, “condition”: “success”}
]
}
Copilot生成的代码,本质上也是输出这种DSL。流程引擎解析DSL后,调度执行器逐个节点运行。这种设计的好处是:AI生成的脚本、人工编写的代码、可视化拖拽的流程,最终都落到同一个执行层,维护成本大幅降低。
4.3 执行引擎:稳定性优先
执行引擎不追求花哨,追求"稳"。几个关键设计:
沙箱隔离:每个流程实例运行在独立进程,一个流程崩溃不影响其他流程。
资源监控:CPU、内存、句柄数超过阈值自动熔断。
日志追踪:每个节点的前后状态、输入输出、异常堆栈全量记录,方便事后复盘。
定时与触发:支持Cron表达式定时执行,也支持API触发和消息队列触发。
对于需要分发给非技术用户使用的场景,EXE打包还要支持自定义界面——让最终用户看到的是一个简洁的操作面板,而不是复杂的流程编辑器。同时,如果工具本身没有运行时长和流程数量限制,多设备使用也无需额外购买会员,那么个人开发者或小团队就能把更多精力放在业务逻辑上,而不是纠结授权问题。
如果后续流程有更新,最好支持在线推送——打开EXE时自动检测新版本,下载增量更新,不用重新手动分发。
4.4 Agent层:RPA的"神经中枢"
Agent不是简单的"调用大模型",而是让RPA具备自主决策能力。一个基础的Agent层包含:
感知模块:获取当前系统状态(页面截图、窗口句柄、日志内容)。
推理模块:用大模型分析当前状态,决定下一步操作。
执行模块:调用RPA执行具体的点击、输入、API调用。
记忆模块:记录本轮执行的关键信息,供下一轮推理使用。
比如一个智能客服场景:Agent感知到企微有新消息,推理出用户要查询订单状态,执行模块调用RPA登录ERP查询,再把结果通过企微发回去。整个过程无需人工干预。更关键的是,RPA流程执行过程中可以实时调用大模型做动态决策,而不是像纯AI方案那样只能按预设脚本走。比如遇到异常弹窗时,流程可以现场截图传给大模型判断类型,再决定是点击"确定"还是"取消"。
但Agent层目前有个现实约束——纯AI驱动的自动化在复杂软件操作上仍然不够稳定,特别是遇到弹窗拦截、权限申请、网络波动这类异常情况,AI的判断逻辑往往不够全面,每次遇到问题都得重新调整提示词,修复成本不低。所以现阶段更务实的做法是让Agent做"决策",让传统RPA做"执行",两者互补。
五、实战:一个Copilot+RPA的完整开发流程
最后用一个实际场景串一下全文:自动从电商平台获取竞品价格,用大模型分析价格趋势,生成日报邮件。
Step 1:Copilot生成骨架
把需求描述给Copilot:"写一个Python脚本,用Playwright登录某电商后台,获取商品价格表格,处理分页,返回JSON列表。“Copilot生成基础代码,包含登录、翻页、表格解析。
Step 2:导入RPA流程
将Copilot生成的脚本一键转为RPA流程节点。此时需要验证每个元素定位的稳定性,对于动态加载的表格,补充显式等待逻辑。
Step 3:接入大模型分析
在流程中插入一个大模型调用节点,使用前面封装的LLMGateway。提示词模板定义为:“分析以下商品价格数据,指出异常波动项并给出原因推测。”
Step 4:本地调试与打包
在开发机上完整跑通流程,确认数据不外传。然后打包成EXE,设置授权码和API触发接口,发给运营同事使用。运营同事的机器上无需安装Python或RPA客户端,直接运行EXE即可。
Step 5:上线监控
通过API触发或定时任务启动流程。如果目标电商页面改版导致元素失效,自愈机制尝试自动修复;修复失败则记录日志并通知维护人员。
RPA机器人开发正在从"录制回放"走向"AI协同”。Copilot和大模型的加入,让开发效率有了数量级提升;但从源码到架构的完整设计,决定了这些效率提升能不能真正落地到生产环境。
核心就三点:元素层要具备自愈能力,应对页面变化;接口层要支持多模型路由和离线安全,应对合规要求;架构层要保持可视化与代码的双向互通,应对长期维护。把这三件事做好,RPA+AI的组合才能真正从Demo走向工业级应用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐