背景:根据线上的报表,MCP流程的tp99耗时达到1分钟,考虑对mcp流程进行优化。

在MCP 的 Thought-Action-Observation (TAO) 流程中,优化的核心思路是“减少无效的交互轮次

先说目前的流程,以“世界之窗到深圳欢乐谷乘坐交通工具怎么走” 这个请求为例,使用到了高德的MCP服务,TAO流程如下:

  1. llm输出Action(使用maps_geo工具,参数为世界之窗)
  2. 调用maps_geo工具获取到世界之窗坐标,将结果放入Observation
  3. llm输出Action(使用maps_geo工具,参数为欢乐谷)
  4. 调用maps_geo工具获取到欢乐谷坐标,将结果放入Observation
  5. llm输出Action(使用工具maps_direction_transit_integrated,参数为世界之窗和欢乐谷坐标)
  6. 调用maps_direction_transit_integrated工具获取到路线,将结果放入Observation
  7. llm输出最终结论,退出TAO循环

在目前的流程下,耗时主要来源于大模型的请求,而且随着循环数的增加,TAO的过程数据也会增加,导致输入大模型的token越来越大,大模型响应的越来越慢。

那么优化的思路就是减少无效的迭代轮次。轮次1(步骤1、2),轮次2(步骤3、4)是没有依赖关系的,这两个轮次可以合并为一轮,通过大模型的预判一次性给出两个不互相依赖的Action,即可减少一个轮次。可以通过修改提示词实现

首先需要将工具分类:

"### 一、工具调用核心规则\n" +
"#### 1. 工具分类与调用策略\n" +
"- **无依赖工具**:无需其他工具结果即可调用(如并行查询多源数据、多维度分析),需一次性批量调用\n" +
"- **有依赖工具**:需基于前置工具结果(如数据清洗→建模分析、坐标获取→路线规划),需串行单工具调用\n" +
"- **混合场景**:同一任务中既有依赖又无依赖工具时,先批量调用所有无依赖工具,再处理有依赖工具\n" +

然后规定返回的json格式:

"##### 【单工具调用】(1个工具或有依赖工具)\n" +
"     ```\n" +
"     {\n" +
"     \"action\": $TOOL_NAME,  \n" +
"     \"action_input\": $ACTION_INPUT  \n" +
"     }\n" +
"     ```\n" +
"##### 【批量工具调用】(2 个及以上无依赖工具)\n" +
"     ```\n" +
"     {\n" +
"     \"batch_actions\": [  \n" +
"       {\n" +
"       \"action_input\": $ACTION_INPUT_1  // 第一个工具的完整参数\n" +
"       },\n" +
"       {\n" +
"       \"action\": $TOOL_NAME_2,  // 第二个无依赖工具名\n" +
"       \"action_input\": $ACTION_INPUT_2  // 第二个工具的完整参数\n" +
"       }  // 可扩展更多无依赖工具\n" +
"     ]\n" +
"     }\n" +
"     ```\n" +

优化后的流程如下:

  1. llm输出2个Action(使用maps_geo工具,参数为 世界之窗/欢乐谷 )
  2. 调用maps_geo工具获取到 世界之窗/欢乐谷 坐标,将结果放入Observation
  3. llm输出Action(使用工具maps_direction_transit_integrated,参数为世界之窗和欢乐谷坐标)
  4. 调用maps_direction_transit_integrated工具获取到路线,将结果放入Observation
  5. llm输出最终结论,退出TAO循环

减少了1个轮次,优化的耗时是比较可观的,耗时减少了25%以上,这是在“世界之窗到深圳欢乐谷乘坐交通工具怎么走”这个场景下。如果请求是“深圳、北京、上海、成都今日天气”,这些Action都是互不依赖的,原流程需要5次迭代,而优化后仅需2次迭代。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐