
1. 老 UiPath 脚本为什么越维护越像“技术负债”如果你手上有一批 2021 到 2023 年之间上线的 UiPath 流程大概率会遇到同一个场景机器人昨天还跑得好好的今天目标系统改了个按钮位置Selector 全红流程直接卡在第三步。你打开 Studio对着几百个 Click、TypeInto、Get Text 活动心里清楚这次修完下个月还得再来一遍。这就是传统 RPA 的“三道枷锁”。第一道是 UI 变动即失效选择器依赖界面结构界面一改就崩。第二道是处理不了非结构化信息合同、手写备注、格式不统一的发票规则引擎只能优雅失败或者灾难性崩溃。第三道是缺乏自适应决策遇到未预定义的异常整条自动化链就断了。我试过最笨的办法把老 XAML 里的活动一个个读出来人工翻译成新的逻辑描述再让大语言模型帮忙生成重构方案。这个过程本身就很痛因为 XAML 里混着大量技术细节LLM 直接读容易抓不住业务意图。后来我改成“先提取语义、再交给模型推理”的两段式做法迁移效率才明显上来。这篇要解决的就是这件事把老旧商业 RPA 流程通过大语言模型辅助做一次可复现的脚本转置。你会拿到一份可复制的config.toml骨架、TaoToken 统一 Key 与 API 通道的配置方式以及转置前后的验证动作和检查清单。适合正在维护 UiPath 老脚本、想用 LLM 降低重构成本的开发者。整个演练在本地就能跑通不需要动生产环境。2. 前置准备TaoToken 统一 Key 与 API 通道做脚本转置绕不开模型调用。老流程里可能有几十个活动逐个分析需要稳定的 API 通道。我这边用的是 TaoToken 作为统一入口一个 Key 走通模型对话和代码生成省得在多个平台之间来回切。先注册并拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 完成账号后进入控制台。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在里面创建 API Key。Key 只在创建时完整显示一次复制后放到本地环境变量里别写进代码。API 的基础地址是 https://taotoken.net/api 注意这个地址不带 UTM 参数直接用于请求。模型对话入口在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 你可以先在里面试几条转置提示词确认模型对 UiPath 活动的理解程度再写进脚本。如果你后续要做长期编码或者 Agent 类迁移可以看下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Claude Code 相关的接入说明在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode-anthropicutm_campaignrewrite 做代码级重构时会用到。注意Key 属于凭证不要提交到 Git也不要写进 XAML 或 n8n 的明文节点里。用环境变量或本地密钥文件加载。3. 可复制配置config.toml 骨架与目录结构迁移演练建议单独建一个工作目录把老脚本、提取结果、模型输出分开存放避免污染原工程。下面是我实际用的目录结构rpa-migration/ ├── config.toml ├── old_scripts/ │ └── InvoiceBot.xaml ├── extracted/ │ └── activities.json ├── prompts/ │ └── migrate_prompt.txt └── output/ └── migration_plan.mdconfig.toml骨架如下把 Key 和模型参数集中管理脚本里只读配置# config.toml [api] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} # 从环境变量读取不要硬编码 timeout 60 [model] name gpt-5.3-instant # 按控制台可用模型替换 temperature 0.3 max_tokens 4096 [migration] input_dir ./old_scripts output_dir ./output max_activities_per_batch 50 # 分批送模型避免超长上下文环境变量这样设置Linux/macOS 用export TAOTOKEN_API_KEY你的KeyWindows PowerShell 用$env:TAOTOKEN_API_KEY你的Key。配置里的${TAOTOKEN_API_KEY}由读取逻辑替换不要直接把 Key 字符串写进 toml。参数说明用表格对照一下方便你按自己环境调整参数作用建议值base_urlAPI 基础地址https://taotoken.net/apitemperature输出随机性0.2–0.4迁移场景要稳max_tokens单次输出上限4096复杂流程可调高max_activities_per_batch每批活动数30–50防止上下文溢出4. 脚本转置实操从 XAML 提取语义到生成迁移方案4.1 第一步解析 XAML提取活动语义UiPath 的 XAML 本质是 XML活动节点带DisplayName、Selector、Text等属性。直接整份丢给模型噪声太大。先写个提取脚本把关键字段抽成 JSON。# extract_activities.py import xml.etree.ElementTree as ET import json def parse_uipath_xaml(path: str) - dict: tree ET.parse(path) root tree.getroot() activities [] for act in root.iter(): display act.get(DisplayName) if not display: continue activities.append({ type: act.tag.split(})[-1], display_name: display, selector: act.get(Selector, ), input: act.get(Text) or act.get(Value, ) }) return {activities: activities, total: len(activities)} if __name__ __main__: result parse_uipath_xaml(./old_scripts/InvoiceBot.xaml) with open(./extracted/activities.json, w, encodingutf-8) as f: json.dump(result, f, ensure_asciiFalse, indent2) print(f提取活动数: {result[total]})跑完你会得到一份活动清单。这一步只做“技术信息 → 结构化数据”的转换不涉及模型结果可复现。4.2 第二步构造迁移提示词让模型输出业务意图提示词的关键是让模型“说人话”而不是复述活动名。把提取出的活动分批送进去要求它输出业务逻辑、可替代步骤和迁移建议。# migrate_plan.py import json, os, tomllib from openai import OpenAI with open(./config.toml, rb) as f: cfg tomllib.load(f) client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlcfg[api][base_url] ) with open(./extracted/activities.json, encodingutf-8) as f: data json.load(f) batch data[activities][:cfg[migration][max_activities_per_batch]] prompt f你是 RPA 迁移专家。下面是一个老旧 UiPath 流程的活动列表 {json.dumps(batch, ensure_asciiFalse)} 请输出 1. 该流程的业务逻辑意图用自然语言不要复述活动名 2. 哪些步骤适合用大语言模型推理替代 3. 哪些步骤必须保留确定性执行 4. 给出重构后的工作流描述 resp client.chat.completions.create( modelcfg[model][name], temperaturecfg[model][temperature], max_tokenscfg[model][max_tokens], messages[{role: user, content: prompt}] ) plan resp.choices[0].message.content with open(./output/migration_plan.md, w, encodingutf-8) as f: f.write(plan) print(迁移方案已生成)这里用tomllib读配置Python 3.11 以上自带。如果你用 3.10 及以下换成tomli即可。模型返回的方案会明确区分“认知层”和“动作层”这正是重构的核心让 LLM 处理推理和异常降级让确定性步骤继续走原来的执行逻辑。4.3 第三步用 n8n 串起开源迁移管道可选如果团队不想写太多 Python可以用 n8n 做可视化编排。核心节点是“读文件 → 调模型 → 写结果”把上面的逻辑搬到画布上。n8n 的 HTTP Request 节点指向https://taotoken.net/apiHeader 里带Authorization: Bearer KeyBody 按 OpenAI 兼容格式传 messages。这样非开发同学也能看懂迁移流程。5. 验证请求与成功结果配置和脚本都就绪后先做一次最小验证确认 API 通道通、模型能返回、结果可落盘。# 设置环境变量后运行 export TAOTOKEN_API_KEY你的Key python extract_activities.py python migrate_plan.py预期输出提取活动数: 87 迁移方案已生成打开output/migration_plan.md你应该看到类似结构的内容业务意图概述、可 LLM 化步骤列表、需保留的确定性步骤、重构工作流描述。如果模型返回的是空内容或报 401先检查 Key 和环境变量如果报超时把timeout调到 120 再试。验证成功的三个标志活动提取数量与 XAML 中实际活动数一致迁移方案里出现了业务语义描述而非活动名堆砌方案明确区分了推理步骤和执行步骤。三条都满足说明这次转置演练跑通了。6. 本篇常见错排查报错一401 Unauthorized。多数是 Key 没读到。检查环境变量名是否和config.toml里的${TAOTOKEN_API_KEY}一致Windows 下注意 PowerShell 和 CMD 的变量语法不同。报错二model not found。模型名写错了。去模型对话页确认当前可用模型名替换config.toml里的name字段。报错三提取活动数为 0。XAML 里活动可能用了命名空间前缀act.tag.split(})[-1]取的是本地名但如果DisplayName为空会被跳过。检查你的 XAML 是否用了动态活动或自定义组件。报错四模型输出被截断。活动批次太大超出max_tokens。把max_activities_per_batch降到 30或者调高max_tokens。报错五迁移方案全是活动名复述。提示词不够强。在 prompt 里加一句“禁止直接复述活动名称必须归纳为业务动作”并把temperature降到 0.2。报错六Selector 里的敏感信息进了模型上下文。提取阶段先做一次脱敏把 URL、账号、路径替换成占位符再送模型。凭证永远不要进提示词。排障时如果卡在接入层直接看接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Key 的问题去 API Keys 页 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 重新生成一个对比测试。7. 迁移检查清单与下一步转置完成后别急着上生产。按这份清单逐项过一遍活动提取数量与原脚本一致迁移方案覆盖了所有分支逻辑确定性步骤没有被错误地 LLM 化敏感信息已脱敏新旧流程在沙箱里并行跑过至少一轮LLM 输出有审计日志回滚方案已就绪。下一步可以做两件事。一是把验证通过的流程接入长期编码通道用 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 做持续重构二是把这次演练的提示词和配置沉淀成团队模板下次迁移直接复用。模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 可以随时试新提示词控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 管理用量和 Key。老脚本迁移不是一次性工程而是把“脆弱的选择器依赖”逐步换成“可推理的认知层”的过程。先跑通一个流程再复制到下一个比一次性全量重构稳得多。