RPA MCP Server 101

327 阅读3分钟

架构图

image.png

信息流转过程

  1. 用户通过网页访问web服务器

  2. web服务器通过LLM调度服务,把用户的指令分解为可执行的步骤, 并选择合适的MCP Server执行工具

  3. LLM服务把工具执行的结果返回给web服务

  4. web服务把结果返回给用户。

架构解析

LLM调度服务作为MCP Client

这是一个类似于cline, cursor, trae(MCP Client)的简单实现,只做有限度的任务分解和工具调用(MCP Server)。 我们的工具都是RPA工具,可以执行模板化的任务,但是因为多模态大模型实在是太贵了,如果是需要大量的计划,观察,反思,重试的探索性的场景我们就不支持了,请使用市场上那些成熟的工具。

MCP Server提供SSE连接

易于集成和扩展,简单通过 URL 地址配置即可使用,调用方无需安装所需类库;所有的任务都是在云端执行,不占用用户自己的电脑资源

相比于llm服务的API,RPA的优势

在于能够获取到服务方提供的联网搜索功能,是大模型的"智能"且"实时"的工具

一次执行的截屏

image.png 4月19日晚录制; 豆包 没联网,但是有4/18的信息;元宝和 kimi 都是实时的结果,元宝还提到了"天工机器人(当天全球首个人形机器人马拉松赛冠军企业)"

实现示例

LLM调度层ollama示例(本地模型太慢,推理能力也很弱,只做示例,不建议使用)

let toolCallId = 1;
  async function callLlm(messages, tools=[]){
    let response = await ollama.chat({
        model: MODEL,
        messages: messages,
        timeout: 240000,
        request_timeout: 240000,
        options: {
        num_gpus:1 
        },
        tools,
        stream: false,
      });
      console.log(response); 
      messages.push(response.message);
      if(response.message.tool_calls){
        let toolCalls = response.message.tool_calls;
        console.log(JSON.stringify(toolCalls));
        for(let toolCall of toolCalls){
            //调用MCP Server
            let toolResult = await callTool(toolCall.function );
            console.log(toolResult);
            messages.push({role:"tool",content:toolResult.content[0].text,tool_call_id:toolCall.id || toolCallId++});
        }
        let response2 = await callLlm(messages);
        return response2; 
      }else {
        return response;
      }
  }

  let MODEL = "qwen2.5";

  let messages = [
    {
        "content": query,
        "role": "user"
    },
  ]
  const response = await callLlm(messages,toolArr);
console.log(response);

执行log


{
  model: 'qwen2.5',
  created_at: '2025-04-19T08:41:09.0453176Z',
  message: { role: 'assistant', content: '', tool_calls: [ [Object] ] },
  done_reason: 'stop',
  done: true,
  total_duration: 130417346200,
  load_duration: 44686000,
  prompt_eval_count: 702,
  prompt_eval_duration: 121697414900,
  eval_count: 27,
  eval_duration: 8664851900
}
[{"function":{"name":"ask_kimi","arguments":{"question":"今天新增的股票活跃板块有哪些"}}}]
{"name":"ask_kimi","arguments":{"question":"今天新增的股票活跃板块有哪些"}}
{ content: [ { type: 'text', text: '今天的活跃股票板块是有色金属' } ] }
{
  model: 'qwen2.5',
  created_at: '2025-04-19T08:41:27.9798347Z',
  message: {
    role: 'assistant',
    content: '今天的活跃股票板块是有色金属。如果有其他问题或需要更多相关信息,请告诉我!'
  },
  done_reason: 'stop',
  done: true,
  total_duration: 18909368600,
  load_duration: 83956600,
  prompt_eval_count: 93,
  prompt_eval_duration: 13363756500,
  eval_count: 18,
  eval_duration: 5455742900
}
{
  model: 'qwen2.5',
  created_at: '2025-04-19T08:41:27.9798347Z',
  message: {
    role: 'assistant',
    content: '今天的活跃股票板块是有色金属。如果有其他问题或需要更多相关信息,请告诉我!'
  },
  done_reason: 'stop',
  done: true,
  total_duration: 18909368600,
  load_duration: 83956600,
  prompt_eval_count: 93,
  prompt_eval_duration: 13363756500,
  eval_count: 18,
  eval_duration: 5455742900
}

应用场景

  1. playwright脚本的自动测试
  2. 汇聚各个ai工具的搜索/查询
  3. 其他一些可执行的任务:例如使用kimi生成PPT