十大步驟詳解Spring AI MCP機(jī)制底層實(shí)現(xiàn),小白誤入!
MCP分為MCP Client和MCP Server:
- MCP Client負(fù)責(zé)進(jìn)行工具發(fā)現(xiàn)和工具調(diào)用
- MCP Server負(fù)責(zé)提供工具和工具執(zhí)行
總體流程圖
圖片
十大步驟詳解
第一步,MCP Client接收用戶的問(wèn)題,比如“今天是幾月幾號(hào)”。
第二步,MCP Client發(fā)送tools/list
請(qǐng)求給MCP Server進(jìn)行工具發(fā)現(xiàn)。
利用Spring AI開(kāi)發(fā)的MCP Server,可以利用@Tool注解定義工具,比如:
圖片
并利用MethodToolCallbackProvider提供出去:
在MCP Server的MpcServerAutoConfiguration自動(dòng)配置類中定義了一個(gè)McpSyncServer的Bean,它會(huì)依賴注入List<ToolCallbackProvider>
,這樣McpSyncServer中就拿到了MCP Server中定義的所有Tools(調(diào)用ToolCallbackProvider的getToolCallbacks()即可拿到)。
第三步,McpSyncServer處理tools/list
請(qǐng)求,并返回工具定義給MCP Client,所謂工具定義,就是工具的描述、方法名、入?yún)⑿畔⒌取?/span>
第四步,MCP Client在拿到了工具定義后,就把用戶問(wèn)題和工具定義一起發(fā)送給大模型。
第五步,大模型分析用戶問(wèn)題和工具信息,決定要調(diào)用某個(gè)工具,大模型會(huì)確定要調(diào)用工具的方法名、入?yún)⒅档龋l(fā)送給MCP Client
第六步,MCP Client拿到了大模型的工具調(diào)用信息后,就向MCP Server發(fā)送tools/call
請(qǐng)求,并攜帶了工具調(diào)用信息。
第七步,MCP Server處理tools/call
請(qǐng)求,并通過(guò)反射執(zhí)行指定的工具方法,得到并返回工具執(zhí)行結(jié)果給MCP Client。
第八步,MCP Client拿到了工具執(zhí)行結(jié)果后,把工具執(zhí)行結(jié)果返回給大模型。
第九步,大模型拿到工具執(zhí)行結(jié)果后,繼續(xù)分析用戶問(wèn)題,如果要繼續(xù)調(diào)用工具,就執(zhí)行第五步,如果不要執(zhí)行工具了,就然后用戶問(wèn)題的最終答案給MCP Client
第十步,MCP Client拿到最終答案后,就返回給用戶。
這其中,第三步和第七步比較重要,第三步工具發(fā)現(xiàn)不再是獲取應(yīng)用自己定義的工具了,而是去獲取MCP Server定義的工具,第七步工具調(diào)用,也不是調(diào)用應(yīng)用自己的工具,而是遠(yuǎn)程調(diào)用MCP Server中的工具,但總體框架仍然是Spring AI Tool Calling機(jī)制的流程。