智能体MCP流程优化(已落地)
背景:根据线上的报表,MCP流程的tp99耗时达到1分钟,考虑对mcp流程进行优化。
·
背景:根据线上的报表,MCP流程的tp99耗时达到1分钟,考虑对mcp流程进行优化。
在MCP 的 Thought-Action-Observation (TAO) 流程中,优化的核心思路是“减少无效的交互轮次”
先说目前的流程,以“世界之窗到深圳欢乐谷乘坐交通工具怎么走” 这个请求为例,使用到了高德的MCP服务,TAO流程如下:
- llm输出Action(使用maps_geo工具,参数为世界之窗)
- 调用maps_geo工具获取到世界之窗坐标,将结果放入Observation
- llm输出Action(使用maps_geo工具,参数为欢乐谷)
- 调用maps_geo工具获取到欢乐谷坐标,将结果放入Observation
- llm输出Action(使用工具maps_direction_transit_integrated,参数为世界之窗和欢乐谷坐标)
- 调用maps_direction_transit_integrated工具获取到路线,将结果放入Observation
- 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" +
优化后的流程如下:
- llm输出2个Action(使用maps_geo工具,参数为 世界之窗/欢乐谷 )
- 调用maps_geo工具获取到 世界之窗/欢乐谷 坐标,将结果放入Observation
- llm输出Action(使用工具maps_direction_transit_integrated,参数为世界之窗和欢乐谷坐标)
- 调用maps_direction_transit_integrated工具获取到路线,将结果放入Observation
- llm输出最终结论,退出TAO循环
减少了1个轮次,优化的耗时是比较可观的,耗时减少了25%以上,这是在“世界之窗到深圳欢乐谷乘坐交通工具怎么走”这个场景下。如果请求是“深圳、北京、上海、成都今日天气”,这些Action都是互不依赖的,原流程需要5次迭代,而优化后仅需2次迭代。
更多推荐


所有评论(0)