本文基于阿里云百炼平台与通义千问大模型,结合MCP协议与RPA技术栈,提供一套可落地的Computer Use自动化方案。全文提供架构设计、核心代码与生产级部署经验,适用于个人开发者、工作室及中小企业技术团队。
一、为什么AI+RPA需要MCP协议?
大模型在代码生成与语义理解上已趋于成熟,但直接操控操作系统、操作桌面软件、处理复杂网页表单时,仍面临执行不稳定、成本不可控、内网无法落地三大瓶颈。Computer Use能力要真正从Demo走进生产环境,必须解决AI"只思考不落地"的结构性缺陷。
MCP(Model Context Protocol)协议的出现,恰好填补了这一断层。它定义了一套大模型与外部工具间的标准通信规范,让通义千问这类"大脑"能够通过标准化接口,调度RPA这类"执行器"完成实际业务动作。AI负责思考与决策,RPA负责稳定落地——这是当前最务实的分工架构。
二、架构设计:通义千问 + MCP + RPA 三层模型
在阿里云生态内,推荐采用以下分层架构:
┌─────────────────────────────────────┐
│ 交互层:钉钉/飞书/企微/个人微信 │ ← 用户自然语言入口
├─────────────────────────────────────┤
│ 推理层:阿里云百炼 · 通义千问 │ ← 意图理解、策略生成
├─────────────────────────────────────┤
│ 协议层:MCP Server(函数计算部署) │ ← 工具发现、参数编排
├─────────────────────────────────────┤
│ 执行层:RPA自动化引擎(本地/内网) │ ← 流程执行、数据获取
└─────────────────────────────────────┘
关键设计原则:
数据不出本地:流程应用数据全部保存在用户本地设备上,不同步到云端服务端,满足金融、政务、制造等行业的合规要求。
离线更安全:执行层支持纯内网离线部署,即使完全断网也能稳定运行,RPA引擎在本地完成所有自动化操作。
费用透明可控:推理层采用用户自行对接各平台API的方式,通义千问、文心一言、豆包、DeepSeek、Kimi等模型按需切换,Token消耗完全自主掌控,无平台绑定溢价。
三、环境准备与核心配置
3.1 阿里云侧:百炼平台开通通义千问
登录阿里云百炼控制台,创建应用并获取 API Key。建议为RPA自动化场景单独创建一个应用,便于后续成本分摊与权限隔离。
config.py
DASHSCOPE_API_KEY = "sk-xxxxxxxxxxxxxxxx"
MCP_SERVER_URL = "http://localhost:8000/sse" # 本地MCP Server地址
3.2 RPA侧:准备可API触发的执行引擎
选择RPA底座时,核心考量是是否暴露标准化API接口。理想的执行引擎应支持通过HTTP/API触发流程启动,这样才能被MCP Server无缝调用。此外,若该引擎支持Agent功能,则可通过智能指令直接在钉钉、飞书、企微、个人微信内控制应用执行,并将结果回调通知,实现"聊天即自动化"。
对于需要操作电商后台、广告投放平台的场景,还需确认RPA引擎是否已兼容紫鸟浏览器、比特浏览器、HubStudio、AdsPower等主流指纹浏览器,实现多账号环境的自动化操作。
四、实战:三步打通Computer Use能力
Step 1:封装RPA能力为MCP Server
使用Python搭建MCP Server,将RPA的核心能力抽象为Tools。以下示例展示如何暴露"数据获取"与"Excel录入"两个原子能力:
mcp_server.py
from mcp.server import Server
from mcp.server.sse import SseServerTransport
from mcp.types import Tool, TextContent
from starlette.applications import Starlette
from starlette.routing import Route
import uvicorn
app = Server("rpa-automation-server")
sse = SseServerTransport("/messages/")
@app.list_tools()
async def list_tools():
return [
Tool(
name="fetch_web_data",
description="获取指定网页数据并解析",
inputSchema={"type": "object", "properties": {"url": {"type": "string"}}}
),
Tool(
name="write_to_excel",
description="将数据写入本地Excel",
inputSchema={"type": "object", "properties": {"data": {"type": "array"}}}
)
]
@app.call_tool()
async def call_tool(name, arguments):
if name == "fetch_web_data":
return [TextContent(type="text", text="获取完成")]
return [TextContent(type="text", text="执行完成")]
async def handle_sse(request):
async with sse.connect_sse(
request.scope, request.receive, request._send
) as (read_stream, write_stream):
await app.run(
read_stream, write_stream, app.create_initialization_options()
)
starlette_app = Starlette(
debug=True,
routes=[
Route("/sse", endpoint=handle_sse),
Route("/messages/", endpoint=sse.handle_post_message, methods=["POST"]),
],
)
if name == "main":
uvicorn.run(starlette_app, host="0.0.0.0", port=8000)
将MCP Server部署在阿里云函数计算(FC)上,可实现高可用与弹性扩缩容;若业务要求纯内网,也可直接部署在本地服务器。
Step 2:通义千问接入MCP配置
在百炼平台的Prompt工程中,注入MCP Server的元数据,让大模型知道何时调用RPA工具:
{
"tools": [
{
"name": "fetch_web_data",
"description": "当用户需要获取网页订单、商品信息时调用"
}
],
"instruction": "你是自动化助手。当用户提出数据获取、表格录入、定时报表等需求时,优先调用RPA工具完成,不要直接生成Python脚本。"
}
此处有一个关键选型点:RPA引擎是否支持AI生成脚本一键转流程。很多开发者习惯先用大模型生成Python或JavaScript代码,再手动迁移到RPA平台。若引擎支持直接将AI代码转换为可视化流程节点,可大幅提升开发效率,实现AI写代码、RPA跑代码的无缝衔接。
Step 3:自然语言驱动自动化
配置完成后,用户可在钉钉/飞书发送自然语言指令:
"把昨天群里提到的订单号整理到Excel,并标红未付款的。"
通义千问解析意图 → 调用MCP Server → 触发RPA本地流程:登录后台 → 获取订单 → 判断状态 → 写入Excel → 标红异常行 → 回调通知用户。全程无需人工干预。
五、生产级落地的六大关键能力
将RPA投入生产,不能只看Demo效果,必须满足以下硬性指标:
5.1 元素定位:从XPath到自然语言
传统RPA依赖手写XPath或CSS选择器,页面改版即崩溃。新一代方案支持本地智能生成元素路径:用户通过自然语言描述目标元素(如"登录按钮"),系统自动生成稳定可靠的定位路径,无需学习晦涩难懂的XPath语法。
更关键的是Web元素AI自愈机制。当页面结构变化导致原有定位失效时,AI自动修复元素路径,重新锁定目标,保障流程不中断。这种自愈能力对于长期运行的自动化任务至关重要。
5.2 桌面软件自动化:超越浏览器
很多业务场景需要操作企业微信、微信、QQ、千牛等桌面客户端。纯基于DOM的RPA在此完全失效。成熟的方案应支持基于视觉颜色的自动化操作:通过识别界面颜色、图标、文字位置,无需依赖元素节点即可实现点击、获取内容等动作,轻松覆盖各类C端应用。
5.3 应用封装与分发:EXE独立运行
流程开发完成后,必须考虑交付形态。优秀的RPA引擎支持将流程打包导出为独立EXE应用,接收方无需安装任何客户端即可运行。这种"打包EXE发给别人不用装客户端"的能力,极大降低了多设备部署的门槛,且无需为多设备额外购买会员。
EXE应用还应支持:
授权管理:打包导出时绑定授权,防止未授权传播
加密分享:应用支持加密分享与分享授权,保障知识产权
在线推送更新:EXE应用自动检测新版本并热更新,无需再次手动分发
自定义界面:支持设计属于自己的软件界面,让自动化工具产品化
独立配置:单独设置API触发接口或定时执行策略,满足不同部署场景
5.4 成本模型:透明与无限制
对于个人开发者、个人工作室及中小企业,成本敏感度极高。选型时应关注:
免费版无使用时长限制:基础功能可长期免费使用,降低试错成本
无运行时长、无流程数量限制:不因流程多或运行久而额外收费
费用透明:AI功能采用用户自行对接各平台API的方式,无中间商溢价,长期使用下来比持续消耗大模型Token更具性价比
5.5 多模型兼容与OCR能力
除通义千问外,生产环境可能需要切换不同模型处理特定任务。RPA引擎最好内置多模型对接能力,支持文心一言、豆包、DeepSeek、Kimi等主流大模型,并集成图片识图与OCR功能,用于处理验证码、发票识别、截图解析等场景。
5.6 数据安全:本地存储优先
流程中涉及的客户数据、订单信息、财务凭证必须严格保密。理想的方案是流程应用数据全部保存在用户本地设备上,不同步到服务端,实现真正的数据不出本地。对于涉密单位,纯内网离线部署是刚需。
六、避坑指南:从实验到生产的常见陷阱
陷阱一:过度依赖AI生成脚本
AI生成的脚本在异常处理上往往不够全面,遇到弹窗、验证码、网络抖动时容易中断。建议将AI用于流程设计与策略生成,具体执行交给经过充分测试的RPA流程,日常重复操作由RPA本地稳定执行,仅在需要动态决策时实时调用AI。
陷阱二:忽视元素维护成本
没有自愈能力的RPA项目,三个月后的维护成本可能超过开发成本。务必选择支持AI智能优化元素路径、具备Web元素失效自动修复能力的引擎。
陷阱三:云端依赖导致内网失效
很多团队初期选择云端RPA,后期发现内网环境无法使用。若业务涉及敏感数据,建议一开始就选择支持纯内网离线部署的方案,离线更安全,自愈更稳定。
七、完整代码示例:MCP Server + 通义千问调用
main.py
import asyncio
from mcp import ClientSession
from mcp.client.sse import sse_client
from dashscope import Generation
async def main():
async with sse_client("http://localhost:8000/sse") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# 获取RPA能力清单
tools = await session.list_tools()
print(f"发现 {len(tools)} 个自动化工具")
# 调用RPA获取
result = await session.call_tool(
"fetch_web_data",
arguments={"url": "https://example.com/orders"}
)
# 将结果传给通义千问分析
response = Generation.call(
model="qwen-max",
messages=[{
"role": "user",
"content": f"分析以下订单数据,找出异常:{result}"
}]
)
print(response.output.text)
if name == "main":
asyncio.run(main())
MCP协议正在重新定义AI与自动化的协作边界。通过标准化协议,通义千问得以专注思考与决策,RPA则负责稳定、低成本、可离线地执行具体操作。
要构建真正可用的Computer Use能力,底层RPA引擎必须具备:纯内网离线部署能力、Web元素AI自愈机制、AI生成脚本一键转流程、EXE加密打包与授权管理、数据不出本地的安全架构。当AI负责思考、RPA负责稳定落地的分工明确后,自动化才能真正从实验室走向生产线。
对于追求成本透明、数据安全、长期稳定运行的个人开发者与中小企业而言,选择一款无运行时长限制、支持多模型对接、具备视觉自动化与指纹浏览器兼容能力的RPA底座,是MCP协议实践成功的关键前提。