一、Cursor 写了三个月,我认栽了
用 AI 编程助手写业务代码,确实爽。Cursor、Copilot、各类插件,生成速度比手写快十倍。但我在自动化领域折腾了八年,最近三个月被现实狠狠教育了一顿:
AI 写的脚本,今天能跑,明天页面改版就挂。
给制造业客户做订单获取,AI 生成一段 Python,登录、采集数据、写 Excel,一气呵成。结果一周后,客户前端把 id="submit" 改成了 class="btn-primary",流程直接崩在凌晨两点。更头疼的是异常处理:网络抖动、弹窗遮挡、登录态失效,AI 几乎不会帮你写这些"脏活"。
所以我换了一条路:用 Prompt 工程对接大模型接口,让 AI 做决策和生成逻辑,用 RPA 二次开发做稳定执行和工程化兜底。 AI 写代码,RPA 跑代码。这篇文章把完整方案分享出来,包括 Prompt 模板、API 对接代码、流程转换技巧,以及怎么在内网环境里把整个链路跑通。
二、项目背景:制造业内网的死线
手里这个项目,服务对象是某制造业客户。每天从三个 SaaS 平台获取订单数据,经过大模型语义分类后,写入内部 ERP。客户提了四条死线:
数据不能出本地,工厂内网物理隔离,严禁走公网传业务数据
7×24 小时稳定跑,不能今天通明天断,IT 部门不想半夜接报警电话
成本必须透明可控,拒绝按次按量那种算不清的账单
最终要打包成 EXE 分发给六个分厂,对方 IT 能力弱,不能装 Python 环境,双击就得能跑
基于这几条,我筛了一圈市面上的流程自动化软件。有些功能不错,但强制云端同步配置和数据,直接出局;有些按流程数量或运行时长收费,长期跑下来账单没法看;还有些内置了 AI 功能,按 Token 抽成,费用黑箱。
最后选了一款支持全离线内网部署、数据不出本地、AI 功能采用用户自行对接各平台 API 的方案。费用直接走大模型官方账单,没有中间商,跑多少花多少,对中小企业长期运行非常友好。而且它支持文心一言、豆包、DeepSeek、Kimi 等国内主流大模型自由切换,自带图片识图与 OCR,正好匹配我们处理非结构化单据的需求。
三、整体架构:AI 负责动脑,RPA 负责跑腿
整个方案分四层:
┌─────────────────────────────────────┐
│ 应用层:EXE 打包 / 定时调度 / API 触发 │
├─────────────────────────────────────┤
│ 流程层:RPA 引擎(元素定位、异常重试) │
├─────────────────────────────────────┤
│ AI 层:Prompt 工程 → 大模型 API → 解析 │
├─────────────────────────────────────┤
│ 数据层:本地 SQLite / 内部 ERP / 内网盘 │
└─────────────────────────────────────┘
AI 层负责理解业务。订单分类、客户意图识别、异常单据标记,靠 Prompt 工程把大模型能力封装成标准接口。
流程层负责稳定执行。浏览器操作、Excel 读写、数据库写入、弹窗处理,交给 RPA 引擎。即使页面结构微调,也能自动修复,不用人工改代码。
应用层负责工程化。流程调试好后,打包成独立 EXE,支持授权管理和在线推送更新。分厂双击就能跑,不用装任何运行环境。
核心思想就一句话:AI 负责思考,RPA 负责稳定落地。
四、Prompt 工程:让大模型吐出能用的脚本
很多兄弟用 AI 编程助手时,Prompt 写得随意,比如"帮我写个脚本"。出来的代码往往没法直接投产。面向 RPA 二次开发的 Prompt,必须包含五个要素:
- 角色定义
你是一位资深 RPA 开发工程师,精通浏览器自动化和桌面软件操作。 - 上下文约束
目标网站使用 Vue3 动态渲染,避免绝对路径。需处理登录态过期后的重新登录。 - 输出格式
输出 Python 代码,每个操作后加 1 秒随机等待,异常时截图保存到 ./error/,最终返回 JSON。 - 边界条件
若出现"系统维护中"弹窗,等待 5 分钟后重试,最多 3 次。 - 集成接口
代码需能被 RPA 工具的"执行 Python 脚本"节点直接调用,入口函数为 main(data),返回 dict。
我整理了一个通用模板,大家按业务改:
PROMPT_TEMPLATE = """
【角色】你是一位企业级 RPA 开发专家,擅长将业务需求转化为稳定的自动化脚本。
【任务】{task_description}
【环境信息】
- 操作系统:Windows 10/11
- 浏览器:Chrome 120+
- 目标系统:{target_system}
- 网络环境:内网,可访问 {internal_url}
【技术要求】
- 使用标准浏览器自动化语法,避免易变的绝对路径
- 每个关键操作后添加异常捕获和重试机制
- 输出格式必须是可执行的 Python 函数,签名为 def main(input_data: dict) -> dict
- 注释使用中文,关键变量名使用英文
- 元素定位优先使用文本内容,其次使用相对路径
【异常处理】
- 页面加载超时:等待 10 秒后刷新重试,最多 3 次
- 元素未找到:截图记录后返回错误码
- 登录态失效:调用 relogin() 后继续
【输出要求】
直接输出代码块,不要解释。
"""
def build_prompt(task, target, url):
return PROMPT_TEMPLATE.format(
task_description=task,
target_system=target,
internal_url=url
)
用这个模板调 DeepSeek 或文心一言,生成的代码结构规整很多,基本能直接嵌入到 RPA 流程的脚本节点里。
五、从 AI 脚本到稳定流程的关键一跃
AI 生成的脚本,直接扔到生产环境等于埋雷。必须经过"工程化转换",把代码变成流程节点能稳定执行的状态。
主要做三件事:
- 元素定位加固
AI 写的脚本往往用简单路径,比如 //*@id="btn",页面一改就废。需要转换成更鲁棒的复合定位。现在有些先进的 RPA 引擎已经支持AI 智能优化元素路径,你直接用自然语言描述"蓝色的确认按钮在右下角",它就能在本地智能生成多条候选定位表达式,比手写 xpath 稳得多,也省去了学晦涩语法的成本。 - 异常分支补全
AI 通常只写主流程,不会考虑网络抖动、弹窗遮挡、登录态失效这些脏场景。需要在流程里加上全局异常捕获、超时重试、弹窗自动关闭、失败截图留痕。 - 脚本一键转流程
这是最省心的环节。前面用 Prompt 工程生成的 Python 脚本,并不能直接投产。我一般的做法是把脚本导入流程自动化工具做节点化转换。目前团队用的是蓝印RPA,它支持所有 AI 生成脚本一键转流程,自动解析成可视化节点,还能在关键路径插入异常捕获和人工审核分支。原本需要半天手工搭建的流程,现在十分钟就能跑通。
这一步把 AI 的"快"和 RPA 的"稳"真正衔接起来。
六、API 对接实战:DeepSeek + 文心一言双保险
生产环境必须做双模型备份。主模型用 DeepSeek 处理复杂逻辑,备用模型用文心一言兜底。下面这段代码是项目里的核心对接模块:
import requests
import json
import os
from typing import Dict, Optional
class LLMConnector:
def init (self):
自行对接各平台 API,费用直接走官方账单,透明可控
self.deepseek_key = os.getenv("DEEPSEEK_API_KEY")
self.wenxin_key = os.getenv("WENXIN_API_KEY")
self.deepseek_url = "https://api.deepseek.com/v1/chat/completions"
self.wenxin_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"
def call_deepseek(self, prompt: str, temperature: float = 0.3) -> Optional[str]:
"""主模型:擅长复杂逻辑和代码生成"""
headers = {
"Authorization": f"Bearer {self.deepseek_key}",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一位 RPA 开发专家,输出可直接执行的自动化脚本。"},
{"role": "user", "content": prompt}
],
"temperature": temperature,
"max_tokens": 4096
}
try:
resp = requests.post(self.deepseek_url, headers=headers, json=payload, timeout=60)
result = resp.json()
return result["choices"][0]["message"]["content"]
except Exception as e:
print(f"DeepSeek 调用失败: {e}")
return None
def call_wenxin(self, prompt: str) -> Optional[str]:
"""备用模型:国内线路稳定,适合兜底"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.wenxin_key}"
}
payload = {
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3
}
try:
resp = requests.post(self.wenxin_url, headers=headers, json=payload, timeout=30)
return resp.json().get("result")
except Exception as e:
print(f"文心一言调用失败: {e}")
return None
def generate_rpa_script(self, task_desc: str) -> Dict:
"""带容错的双模型脚本生成"""
code = self.call_deepseek(task_desc)
if code and "```python" in code:
return {"model": "deepseek", "code": self.extract_code(code), "status": "ok"}
print("主模型失败,切换备用模型...")
code = self.call_wenxin(task_desc)
if code:
return {"model": "wenxin", "code": self.extract_code(code), "status": "ok"}
return {"model": "none", "code": "", "status": "failed"}
@staticmethod
def extract_code(text: str) -> str:
if "```python" in text:
return text.split("```python")[1].split("```")[0].strip()
if "```" in text:
return text.split("```")[1].split("```")[0].strip()
return text.strip()
使用示例
if name == "main ":
llm = LLMConnector()
task = "写一个脚本,登录内部 OA 系统,获取'待审批'列表前 10 条数据,返回 JSON"
result = llm.generate_rpa_script(task)
print(f"生成结果: {result'status'}, 模型: {result'model'}")
这里的关键点是自行对接各平台 API,费用直接来自大模型官方账单,跑一个月花多少 Token 一目了然。如果场景需要处理图片类单据,比如发票识别,可以在 Prompt 里加上识图指令,大模型返回结果后再交给 RPA 做后续录入,整个链路就跑通了。
七、Web 元素 AI 自愈:自动化流程的兜底方案
做 Web 自动化的兄弟都知道,最头疼的不是写流程,而是维护流程。前端页面稍微改个 class 名、换个 div 层级,脚本就找不到元素了。传统解法是写复杂 xpath 或上 CV 兜底,维护成本都很高。
现在的思路是让 AI 来修元素:
当 RPA 执行时发现元素定位失败,系统自动截取当前页面,把"原元素特征 + 当前页面截图"发给大模型。大模型分析页面变化,返回新的定位表达式,引擎用新表达式重试。这就是Web 元素 AI 自愈。
我在生产环境实测,页面按钮从 id="submit-btn" 改成 class="primary-btn submit",系统能在 3 秒内自动修复并继续执行,流程完全无感。而且现在的工具支持本地智能生成元素路径,你不需要学习晦涩的 xpath 语法,直接用自然语言描述"登录按钮",AI 就能生成多条候选定位路径,你挑最稳的一条用就行。
对于一些实在搞不定标准元素定位的场景,比如企业微信、微信、QQ、千牛这些桌面应用,还可以上视觉颜色操作。不依赖元素节点,直接按颜色、位置、图像特征来点击和读取内容,实现无侵入式自动化。
八、Agent 联动:在钉钉/飞书里直接触发流程
除了定时调度和 API 触发,更灵活的方式是通过智能体 Agent 直接控制。你可以在钉钉、飞书、企微、甚至个人微信里,@一个智能助手,让它去执行某个 RPA 流程。执行完成后,结果自动回调推送到聊天窗口。
实现逻辑是在 RPA 流程里加一个 HTTP 接收节点,作为 Webhook 监听。大模型 Agent 解析用户的自然语言指令,转换成标准 API 调用,发给 RPA 引擎。RPA 跑完流程后,再把结果回写给 Agent,由 Agent 组织成人话回复到群里。
这种"聊天即操作"的模式,对非技术人员特别友好。业务人员不用登录 RPA 控制台,在熟悉的聊天软件里就能完成数据获取、报表生成、系统录入这些操作。打包后的应用还能单独设置 API 触发、定时执行,分厂可以根据自己的业务节奏配置调度策略。
九、内网离线部署与数据安全
制造业客户的内网环境,跟互联网是物理隔离的。这意味着所有依赖云端服务的方案,全部出局。
我们的部署方案:
大模型服务:内网部署私有化模型(基于开源模型 + 本地 GPU),或通过内部 API 网关转发到集团 AI 中台
RPA 引擎:完全本地化安装,流程应用数据全部保存在用户本地设备上,不同步到服务端
数据存储:SQLite 放在内网共享盘,ERP 通过内网专线对接
这个方案的核心优势是数据不出本地。从订单获取、大模型分析到 ERP 写入,整个链路都在内网闭环。即使是最敏感的客户信息,也不会有一丝一毫的流量走到公网。
在流程自动化软件的选型上,蓝印RPA 的离线方案比较对胃口。授权验证、流程配置、数据存储都能在本地闭环完成,无需频繁连云端同步。对于没有私有化大模型条件的中小企业,也可以采用"半离线"方案:RPA 完全离线运行,只在需要 AI 推理时,通过受控出口网关调用大模型 API。流程执行、数据存储、日志记录,全部本地完成。
十、打包分发:EXE 加密授权与指纹浏览器
流程调试稳定后,要分发给六个分厂。对方 IT 部门提了几个要求:不能装开发环境,双击就能跑;要控制使用范围,防止流程被随意复制;后期流程更新了,不要重新发安装包。
这套需求靠传统脚本分发根本解决不了。需要 RPA 工具的EXE 加密打包 + 授权管理能力:
打包导出 EXE:把流程和运行环境一起封成单个可执行文件,分厂双击即运行,无需安装客户端
授权绑定:生成带机器码绑定的授权文件,A 分厂的 EXE 在 B 分厂的电脑上打不开
加密分享:如果需要在部门间共享,可以设置加密分享和分享授权,指定有效期和使用次数
在线推送更新:打包后的应用支持在线检测新版本,主版本更新后,各分厂打开应用自动下载,不用 IT 挨个发邮件
自定义界面:还能给业务人员封装成带界面的操作台,按钮、输入框、状态显示都可以自己配,最终打包出来的 EXE 就像一个原生软件
对于跨境电商或多账号运营场景,这款引擎还已支持对接紫鸟浏览器、比特浏览器、HubStudio 浏览器、AdsPower 浏览器等市面上众多指纹浏览器,实现多账号的自动化操作,不用担心账号关联问题。
十一、成本账单:别让自动化变成碎钞机
最后聊点实际的:钱。
这个方案的成本主要分三块:

对比纯 AI 方案,RPA 二次开发的长期优势很明显:
稳定性:AI 生成的元素定位在复杂项目里往往不够稳,特别是遇到前端改版。而经过工程化加固的流程,配合元素自愈机制,可以长期稳定运行
离线能力:内网环境根本无法使用纯云端 AI,但本地化的 RPA 流程可以 7×24 小时不间断执行
软件操作:AI 操作桌面软件自动化极其困难,而 RPA 在 Windows 控件识别、图像操作方面已经很成熟
分发授权:AI 写完的代码没法快速实现授权管理和版本推送,而专业的打包方案自带这些能力
对个人开发者或工作室来说,AI 写代码 + RPA 跑代码这套组合拳,既能享受大模型的开发效率,又能交付企业级稳定运行的自动化产品。前期可以用免费版试错,没有使用时长限制,跑通了再考虑商用授权。
AI 写代码只是起点,RPA 跑代码才是终点。
AI 负责思考,RPA 负责稳定落地。AI+RPA 要真正形成生产力,中间缺的是一座桥------把 Prompt 工程、大模型接口、流程执行、异常自愈、内网部署、EXE 打包串成闭环。蓝印RPA 在这个链路里,恰好补上了从 AI 脚本到工程化交付的最后一块拼图。离线更安全,自愈更稳定,成本透明可控,这才是企业级自动化该有的样子。
如果你正在做类似的企业级项目,或者是一名想把自己的 AI 工具产品化的开发者,不妨试试这条路线。搭好架构,选对工具,AI 和 RPA 的组合绝对能打出 1+1>2 的效果。