MCP Server的多个Tools有先后调用依赖,如何解决

1、通过优化Tools描述
2、还是必须使用agent来做
3、不同的llm 效果不一样咋解决

还有其他方案么?

1 Like

最好用agent。

如果不是,建议重做mcp,制作一个复合工具函数,里面整个原本多个tools的工具。

如果也不想重做,那只能优化工具函数的描述,然后单个对话只调用一次mcp。

其实这个问题是一般的llm,训练的过程中单次对话通常仅调用1次mcp。

如果单次指令调用多个mcp,很容易执行中断

3 Likes

这个技术叫parallel function calling,所谓的parallel不是真的并行,而是一个fc的输出作为另一个fc的输入。以前没有mcp的时候由模型决定fc调用次序,现在亦如此。

2 Likes

回到你的问题

  1. 可以,但是更关键的是模型本身的能力
  2. 非必须
  3. 没办法,现在fc的能力与模型深度绑定,mcp也只是把函数描述标准化,没法让模型变得更强;现在有种思路是用推理模型(比如r1)在实际调用前check一下(类似于反思),另外一种思路是由思考模型给出CoT然后由普通模型生成函数调用(DeepFoo)——这两套流程可用agent实现。
1 Like

要看你讲的依赖是何种依赖。

若依赖,这种依赖本质只是为了让模型任务完成的质量更高。比如执行sql之前要求先检查sql的,这种可以在sample中给例子。

强依赖,一般是因为本身函数/工具执行过程是有状态的,这种情况可以考虑用单独的缓存来管理这种执行状态,然后工具加入唯一键参数,通过唯一键参数对缓存操作来判断工具调用顺序及状态,如果发现不对,抛出异常,并将这个问题反馈给模型,要求模型调用正确的工具。

当然,最直接的还是直接把强依赖的几个工具,按你自己所需的顺序包成一个大工具。