首页
/ Spring AI项目中MCP工具调用的配置实践

Spring AI项目中MCP工具调用的配置实践

2025-06-10 03:26:01作者:盛欣凯Ernestine

背景介绍

在使用Spring AI项目与通义千问模型集成时,开发者遇到了MCP工具无法正常调用的问题。本文将深入分析问题原因并提供解决方案,帮助开发者正确配置ChatClient以实现MCP工具的有效调用。

问题现象

开发者在使用Spring AI 1.0.0-SNAPSHOT版本时,配置了如下ChatClient:

@Bean
ChatClient tongYiWithMcp() {
    ChatClient.Builder builder = ChatClient.builder(
                    OpenAiChatModel.builder().openAiApi(
                                    OpenAiApi.builder()
                                            .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                                            .completionsPath("/chat/completions")
                                            .embeddingsPath("/embeddings")
                                            .apiKey("")
                                            .build())
                            .build())
            .defaultOptions(
                    ChatOptions.builder().model("qwen-max").build())
            .defaultToolCallbacks(toolCallbackProvider)
            .defaultAdvisors(new SimpleLoggerAdvisor());
    return builder.build();
}

虽然日志显示工具列表能够正常获取,但在实际调用时MCP工具却未被触发。而相同的模型和MCP配置在其他场景下可以正常工作。

问题分析

通过分析问题现象,我们可以发现几个关键点:

  1. 工具列表能够正常获取,说明基础连接配置正确
  2. 工具未被调用,可能是回调机制或配置方式存在问题
  3. 开发者后续尝试了另一种配置方式可以正常工作

解决方案

正确配置方式

经过实践验证,以下配置方式可以确保MCP工具被正常调用:

@Bean
public ChatClient tongYiWithMcp2(ChatClient.Builder chatClientBuilder, 
                                List<McpSyncClient> mcpSyncClients) {
    return chatClientBuilder
            .defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients))
            .defaultAdvisors(new SimpleLoggerAdvisor(),
                    MessageChatMemoryAdvisor.builder(MessageWindowChatMemory.builder().build()).build())
            .build();
}

关键配置要点

  1. 使用ChatClient.Builder自动注入:通过Spring的依赖注入机制获取ChatClient.Builder实例,确保构建器已正确初始化。

  2. 正确配置工具回调:使用SyncMcpToolCallbackProvider并传入McpSyncClient列表,确保工具调用机制完整。

  3. 添加必要的Advisor:除了日志记录Advisor外,还添加了MessageChatMemoryAdvisor,这对工具调用流程可能有重要影响。

API路径配置建议

对于使用不同API路径的情况(如https://ark.cn-beijing.volces.com/api/v3/),应注意:

  1. baseUrl应只包含协议和主机部分(如https://ark.cn-beijing.volces.com)
  2. API版本路径(如/api/v3)应包含在completionsPath中
  3. 避免在defaultOptions中覆盖重要配置

经验总结

  1. 避免过度配置:初始问题中可能因defaultOptions的配置干扰了工具调用机制。

  2. 依赖注入优于手动构建:使用Spring提供的ChatClient.Builder自动注入更可靠。

  3. 内存管理很重要:MessageChatMemoryAdvisor的添加可能是工具能正常调用的关键因素之一。

  4. API路径分段:正确划分baseUrl和completionsPath的内容,避免路径配置错误。

通过以上实践,开发者可以顺利解决Spring AI项目中MCP工具调用的问题,实现与通义千问等模型的有效集成。

登录后查看全文
热门项目推荐
相关项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K