影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成
影刀RPA深度实战大模型Fine-tuning定制RPA专用Prompt与指令生成一、技术背景大模型LLM在通用场景下表现强大但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时准确率通常只有 40%-60%。原因有三影刀RPA有独有的指令体系与其他 RPA 工具如 UiPath、影刀的指令选型逻辑不同模型没有见过足够的影刀格式样本。XPath 生成依赖页面 DOM 上下文通用模型不了解国内企业常用系统金蝶、用友、钉钉后台等的 DOM 结构特征。操作序列规划是领域特定任务先点击新建按钮再填写表单最后提交审核这种结构化输出需要模型理解 RPA 执行流程的约束。我的解决方案用LoRA 微调让开源大模型Qwen2.5-7B成为影刀RPA专用模型。二、为什么与RPA结合RPA 开发中最耗时的环节是什么不是流程设计而是反复调整元素选择器和操作步骤。一个登录流程可能需要试 3-5 次 XPath 才能稳定定位到按钮。当流程数量从几十个扩展到几百个这个时间成本是指数级的。微调后的模型可以直接输入打开金蝶ERP的采购订单页面找到今日待审核列表→ 输出准确的影刀指令序列 稳定的 XPath将 RPA 开发效率提升 3-5 倍新人无需记忆几百个指令的差异用自然语言描述即可三、具体落地方法第一步数据收集200 条高质量样本我在项目中收集了三类数据数据类型数量来源影刀指令映射对80 条手动标注已有流程XPath 生成样本70 条各系统页面 DOM 分析操作序列规划50 条真实业务流程拆解每条数据的格式{instruction:在金蝶云星空ERP系统中打开采购管理模块点击新增采购订单,input:当前页面URL: https://erp.example.com/home, 系统类型: 金蝶云星空,output:【步骤1】使用指令: 点击元素, XPath: //a[contains(class,menu-item) and contains(text(),采购管理)]\n【步骤2】使用指令: 点击元素, XPath: //button[idnew-purchase-order or contains(text(),新增)]\n【步骤3】使用指令: 等待页面加载, 等待条件: 元素可见 //form[idpo-form]}第二步数据预处理脚本# data_preprocess.py - 数据预处理与格式转换# 依赖安装: pip install datasets transformers pyarrowimportjsonimportosfromdatasetsimportDataset,DatasetDict# 1. 读取原始标注数据defload_raw_data(data_dir:str)-list: 从目录中加载所有 JSON 标注文件 每个文件是一个对话对 {instruction: ..., input: ..., output: ...} samples[]forfnameinos.listdir(data_dir):iffname.endswith(.json):withopen(os.path.join(data_dir,fname),r,encodingutf-8)asf:datajson.load(f)# 合并 instruction 和 input 作为模型输入samples.append({instruction:data[instruction],input:data[input],output:data[output]})print(f共加载{len(samples)}条样本)returnsamples# 2. 构建 Alpaca 格式的 Prompt 模板defformat_alpaca_prompt(instruction:str,input_text:str,output:strNone)-str: 使用 Alpaca 指令模板格式化数据 这是微调 Qwen/ChatGLM 等模型的标准格式 ifinput_text:promptf|im_start|system 你是一个影刀RPA指令生成专家。根据用户描述的自然语言需求生成准确的影刀RPA操作指令序列和XPath定位表达式。 |im_end| |im_start|user{instruction}上下文信息:{input_text}|im_end| |im_start|assistant{outputifoutputelse}else:promptf|im_start|system 你是一个影刀RPA指令生成专家。根据用户描述的自然语言需求生成准确的影刀RPA操作指令序列和XPath定位表达式。 |im_end| |im_start|user{instruction}|im_end| |im_start|assistant{outputifoutputelse}returnprompt# 3. 转换为 HuggingFace Dataset 格式defcreate_dataset(samples:list)-DatasetDict:将样本列表转换为训练/验证集 (8:2 分割)formatted[]forsinsamples:textformat_alpaca_prompt(s[instruction],s[input],s[output])formatted.append({text:text})# 创建 Dataset 对象datasetDataset.from_list(formatted)# 按 8:2 分割训练集和验证集splitdataset.train_test_split(test_size0.2,seed42)returnDatasetDict({train:split[train],validation:split[test]})# 4. 执行预处理if__name____main__:# 修改为你的数据目录路径data_dir./rpa_training_datasamplesload_raw_data(data_dir)# 数据质量检查确保每条数据都有必要字段valid_samples[]forsinsamples:iflen(s[output])20:# 排除过短的无效输出valid_samples.append(s)print(f有效样本数:{len(valid_samples)}/{len(samples)})dataset_dictcreate_dataset(valid_samples)# 保存为 Arrow 格式供训练脚本读取dataset_dict.save_to_disk(./rpa_finetune_dataset)print(数据集已保存到 ./rpa_finetune_dataset)第三步LoRA 微调训练脚本# train_lora.py - Qwen2.5-7B LoRA微调脚本# 依赖安装:# pip install transformers datasets peft accelerate bitsandbytes torch# 硬件要求: 单卡 A100-40G 或 RTX 4090-24G (使用 4bit 量化后仅需 ~12G 显存)importtorchfromtransformersimport(AutoModelForCausalLM,AutoTokenizer,TrainingArguments,Trainer,BitsAndBytesConfig,DataCollatorForLanguageModeling)frompeftimportLoraConfig,get_peft_model,TaskType,prepare_model_for_kbit_trainingfromdatasetsimportload_from_disk# 超参数配置 MODEL_NAMEQwen/Qwen2.5-7B-Instruct# 基座模型OUTPUT_DIR./rpa-lora-qwenLORA_R8# LoRA秩越大模型容量越大但更容易过拟合LORA_ALPHA16# LoRA缩放因子通常设为 r 的 2 倍LORA_DROPOUT0.05# Dropout 防止过拟合BATCH_SIZE4GRAD_ACCUM4# 梯度累积步数等效于 batch_size16LEARNING_RATE2e-4NUM_EPOCHS3MAX_LENGTH2048# 1. 加载数据集 datasetload_from_disk(./rpa_finetune_dataset)# 使用预处理脚本的输出print(f训练集:{len(dataset[train])}条, 验证集:{len(dataset[validation])}条)# 2. 加载 Tokenizer tokenizerAutoTokenizer.from_pretrained(MODEL_NAME,trust_remote_codeTrue)# Qwen 的 tokenizer 需要设置 pad_tokentokenizer.pad_tokentokenizer.eos_token tokenizer.padding_siderightdeftokenize_function(examples):将文本分词并填充到固定长度resulttokenizer(examples[text],truncationTrue,max_lengthMAX_LENGTH,paddingmax_length,)# labels 设为 input_ids模型会自回归学习result[labels]result[input_ids].copy()returnresult# 对数据集进行分词tokenized_datasetdataset.map(tokenize_function,batchedTrue,remove_columns[text])print(f分词完成每条样本长度:{MAX_LENGTH})# 3. 配置 4bit 量化 (降低显存占用) # 这是关键步骤7B 模型全量微调需要 ~60G 显存4bit 量化后仅需 ~12Gbnb_configBitsAndBytesConfig(load_in_4bitTrue,# 启用 4bit 量化bnb_4bit_compute_dtypetorch.float16,# 计算时使用 float16bnb_4bit_use_double_quantTrue,# 双重量化进一步节省显存bnb_4bit_quant_typenf4# 使用 NF4 量化类型)# 4. 加载模型 modelAutoModelForCausalLM.from_pretrained(MODEL_NAME,quantization_configbnb_config,# 传入量化配置device_mapauto,# 自动分配设备trust_remote_codeTrue,torch_dtypetorch.float16)# 准备模型进行 k-bit 训练冻结量化参数modelprepare_model_for_kbit_training(model)# 5. 配置 LoRA # LoRA 的核心思想只训练少量低秩矩阵不更新原始权重# 参数量约为原始模型的 0.1%-1%但效果接近全量微调lora_configLoraConfig(rLORA_R,# LoRA 秩lora_alphaLORA_ALPHA,# 缩放因子target_modules[q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj],# Qwen 的注意力层 FFN 层lora_dropoutLORA_DROPOUT,# Dropout 比率biasnone,# 不训练 biastask_typeTaskType.CAUSAL_LM# 因果语言模型任务)modelget_peft_model(model,lora_config)# 打印可训练参数占比trainable_paramssum(p.numel()forpinmodel.parameters()ifp.requires_grad)total_paramssum(p.numel()forpinmodel.parameters())print(f可训练参数:{trainable_params:,}/{total_params:,}{100*trainable_params/total_params:.2f}%)# 6. 配置训练参数 training_argsTrainingArguments(output_dirOUTPUT_DIR,per_device_train_batch_sizeBATCH_SIZE,gradient_accumulation_stepsGRAD_ACCUM,learning_rateLEARNING_RATE,num_train_epochsNUM_EPOCHS,logging_steps10,# 每 10 步输出日志save_steps50,# 每 50 步保存检查点evaluation_strategysteps,eval_steps50,save_total_limit3,# 只保留最近 3 个检查点fp16True,# 混合精度训练加速warmup_ratio0.03,# 预热步数比例lr_scheduler_typecosine,# 余弦学习率衰减report_totensorboard,# TensorBoard 可视化load_best_model_at_endTrue,# 训练结束加载最优模型metric_for_best_modeleval_loss,)# 7. 数据整理器 data_collatorDataCollatorForLanguageModeling(tokenizertokenizer,mlmFalse# 不使用 Masked Language Modeling使用因果语言建模)# 8. 启动训练 trainerTrainer(modelmodel,argstraining_args,train_datasettokenized_dataset[train],eval_datasettokenized_dataset[validation],data_collatordata_collator,)print(开始训练...)trainer.train()# 9. 保存模型 # 保存 LoRA 适配器权重 (不大通常只有几十MB)model.save_pretrained(OUTPUT_DIR/final)tokenizer.save_pretrained(OUTPUT_DIR/final)print(fLoRA 模型已保存至{OUTPUT_DIR}/final)# 10. 推理测试 defgenerate_rpa_instruction(model,tokenizer,prompt:str,max_new_tokens:int512):使用微调后的模型生成 RPA 指令formattedf|im_start|system\n你是一个影刀RPA指令生成专家。|im_end|\n|im_start|user\n{prompt}|im_end|\n|im_start|assistant\ninputstokenizer(formatted,return_tensorspt).to(model.device)outputsmodel.generate(**inputs,max_new_tokensmax_new_tokens,temperature0.3,# 低温度保证生成稳定性do_sampleFalse,# 贪心解码确保输出确定pad_token_idtokenizer.eos_token_id)responsetokenizer.decode(outputs[0],skip_special_tokensTrue)# 提取 assistant 部分ifassistantinresponse:responseresponse.split(assistant)[-1].strip()returnresponse# 测试示例test_prompt在钉钉管理后台的考勤管理页面导出本月所有员工的考勤明细报表resultgenerate_rpa_instruction(model,tokenizer,test_prompt)print(f\n 生成结果 \n{result})第四步准确率对比微调前后在 50 条未见过的测试样本上的表现指标微调前 (Qwen2.5-7B 原版)微调后 (LoRA)提升指令选型准确率47.3%86.2%38.9%XPath 有效性35.8%79.5%43.7%操作序列合理性52.1%88.6%36.5%综合可用率41.2%82.4%41.2%数据来源我在项目中实际测试的 50 个真实业务流程场景。四、我在实践中的思考探索这个方向时我的一个深刻体会是数据质量远大于数据数量。前两轮微调我用的是自动生成的数据从文档中提取指令描述准确率只提了 15% 左右。第三轮换成人工标注的 200 条真实案例后效果直接跃升。还有一个容易被忽略的点System Prompt 的设计。在 Alpaca 格式中system 部分一定要明确描述输出格式约束。我最初写的是你是RPA专家换成你是影刀RPA指令生成专家输出格式为【步骤N】使用指令xxx, XPathxxx后输出稳定了很多。五、常见问题速查Q1: 显存不足 (CUDA Out of Memory)现象: 训练开始后抛出 OOM 错误原因: 7B 全量微调需要约 60G 显存解决:确认load_in_4bitTrue已启用 4bit 量化减小BATCH_SIZE到 1-2增大GRAD_ACCUM到 8-16等效批次不变设置MAX_LENGTH1024缩短序列长度Q2: 训练 Loss 不下降现象: 训练 100 步后 loss 仍在 2.0 以上原因: 学习率设置不当或数据格式错误解决:检查 tokenizer 的pad_token是否设置Qwen 需要手动设置尝试增大LEARNING_RATE到 5e-4检查数据中output字段是否为空Q3: 生成结果胡言乱语现象: 模型输出与 RPA 完全无关的内容原因: 训练数据中混入了通用对话数据解决: 清洗数据集确保所有样本的 output 都包含 RPA 相关术语指令/XPath/元素/页面等关键词Q4: 模型对未见过系统的 XPath 生成不准现象: 训练数据是金蝶系统测试用友系统时 XPath 全错原因: LoRA 学习的是 DOM 结构模式跨系统的泛化需要多样性数据解决: 训练数据中至少包含 3-5 种不同系统的样本增加input字段中的 DOM 上下文多样性Q5: 推理速度太慢现象: 生成一条指令需要 10 秒原因: 7B 模型推理需求较大解决:使用 vLLM 或 llama.cpp 加速推理对于简单任务如仅生成XPath换用 Qwen2.5-1.5B 微调启用 FlashAttention-2pip install flash-attnQ6: LoRA 权重无法加载到原模型现象:from_pretrained报错 key mismatch原因:target_modules配置与实际模型层名不匹配解决: 打印model.state_dict().keys()确认实际的层名称不同基座模型的 attention 层名不同如 ChatGLM 用query_key_valueQwen 用q_proj/k_proj/v_proj六、推荐资源Qwen 官方微调文档: https://github.com/QwenLM/Qwen查最新的模型版本和微调示例PEFT 库文档: https://huggingface.co/docs/peftLoRA/QLoRA 的详细参数说明BitsAndBytes 量化指南: https://huggingface.co/docs/bitsandbytes4bit/8bit 量化的最新用法影刀RPA开放平台: 用于获取最终指令格式的官方参考七、内容标签#影刀RPA#大模型微调#LoRA#Qwen#XPath生成#指令微调#RPAAI#自动化开发作者林焱

相关新闻

2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里

2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里

2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里钢铁企业的AI转型采购决策在2026年面对三项刚性约束:吨钢利润承压,要求AI直接作用于采购成本与排产效率;多基地、多产线…

2026/10/15 0:02:51 阅读更多 →
防关联浏览器哪个好?三款产品实测差异解析

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:51 阅读更多 →
SpringBoot+Vue3社区养老服务平台全栈项目实战解析

SpringBoot+Vue3社区养老服务平台全栈项目实战解析

1. 项目背景与整体技术选型近两年社区养老信息化一直是个热门的落地方向,特别是“人口老龄化社区服务与管理平台”这种系统,典型的SpringBoot 2 Vue 3组合,配合MyBatis-Plus和MySQL 8.0,基本就是Java Web全栈项目的标准答案。我前…

2026/10/15 0:00:46 阅读更多 →

最新新闻

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

区间DP解“拿糖果”:从贪心误区到最优策略实战解析

说实话,我第一次看到“拿糖果”这道题的时候,差点把它当成热身题给秒了。题面本身非常朴素:有 n 堆糖果排成一行,每堆糖果数量用一个整数数组表示,两个人轮流从最左端或最右端拿走一整堆,直到全部取完&…

2026/10/15 0:46:40 阅读更多 →
光通信技术突破:陶瓷封装与智能光功率控制解析

光通信技术突破:陶瓷封装与智能光功率控制解析

1. 光通信行业现状与易天定位光纤通信作为现代信息社会的基石,其市场规模在过去五年保持着年均12%的复合增长率。根据行业调研数据显示,2023年全球光模块出货量已突破1.8亿只,其中数据中心互连场景占比达到47%。在这个快速扩张的市场中&#…

2026/10/15 0:46:40 阅读更多 →
CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

CEC2010到CEC2017:进化计算基准测试集完整指南与避坑经验

简介:面向进化计算与智能优化领域的研究者、工程师及高校学生,这份测试集汇总了CEC2010、CEC2013、CEC2014、CEC2015、CEC2017等历届单目标实参数优化竞赛的基准问题,可用于验证和对比各类新颖优化算法的寻优能力与收敛性能。压缩包内共516个…

2026/10/15 0:45:39 阅读更多 →
Z源逆变器仿真建模与PWM控制策略详解

Z源逆变器仿真建模与PWM控制策略详解

1. Z源逆变器概述与仿真意义Z源逆变器作为电力电子领域的重要拓扑结构,近年来在新能源发电、电动汽车和工业驱动等领域展现出独特优势。与传统电压源型和电流源型逆变器不同,Z源网络通过独特的阻抗网络实现了升降压功能,同时避免了传统拓扑中…

2026/10/15 0:45:39 阅读更多 →
普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

普通程序员有没有必要学习 Agent 开发?从零手写 ReAct Agent 到 LangGraph 实战

一、先说结论:有必要,而且窗口期就在当下 如果你是一个每天写 CRUD、调接口、改 Bug 的普通后端 / 前端 / 全栈程序员,看到「Agent」「智能体」这些词,第一反应很可能是:“这不就是调一下大模型 API 吗?跟我…

2026/10/15 0:45:39 阅读更多 →
深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

深入理解 Claude Code:CLAUDE.md、Hooks、Skills、Subagents 全解析

1. 引言 Claude Code 是 Anthropic 推出的命令行 AI 编程助手,它不仅能理解自然语言指令,还能通过一系列机制实现高度可定制、可扩展的自动化编码工作流。对于想要真正驾驭 Claude Code 的开发者来说,仅仅会提问远远不够,理解其四…

2026/10/15 0:45:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →