SpringAI整合Ollama实现多MCP Server调用示例及指定某MCP Server调用示例
场景
SpringAIAlibaba整合百炼平台实现多MCP Server调用示例及指定某MCP Server调用示例:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160987523
上面整合阿里的百炼平台实现多MCP Server的调用。
下面将其修改为调用本地Ollama大模型的方式实现。
随着大语言模型(LLM)应用的快速发展,许多开发者希望将基于商业云端 API(如阿里云百炼 DashScope)开发的项目,
迁移到本地部署的 Ollama 模型上。这不仅有利于降低调用成本、提升数据隐私性,还能在无网络环境下继续开发与测试。
本文将基于一个已经集成了 多个免费 MCP Server(Hacker News 和 NWS Weather)的 Spring AI Alibaba 项目,
详细记录将其从 DashScope 切换至本地 Ollama 的完整过程、核心知识点以及遇到的典型问题与解决方案。
Spring AI 的模型抽象层
Spring AI 为不同的大模型提供商提供了统一的 ChatModel 接口,通过 Starter 依赖注入不同的实现。
切换模型时,只需替换对应的 Starter 并修改配置,业务逻辑代码无需变更。
Ollama 的优势
免费、本地运行:无需 API Key,所有推理都在本地完成。
统一接口:提供兼容 OpenAI 的 HTTP API,方便集成。
丰富的模型生态:支持 Qwen、Llama、Mistral 等众多开源模型,只需一条 pull 命令即可下载。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
从 DashScope 到 Ollama 的完整切换步骤
修改 pom.xml 依赖
移除所有 DashScope 相关依赖(包括 spring-ai-alibaba-starter-dashscope 以及显式声明的 dashscope-sdk-java),
添加 Ollama Starter。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.5</version>
</parent>
<groupId>com.badao</groupId>
<artifactId>spring-ai-ollama-mcp-third-multipart</artifactId>
<version>1.0.0</version>
<properties>
<java.version>17</java.version>
<maven.compiler.release>17</maven.compiler.release>
<spring-ai.version>1.1.2</spring-ai.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Ollama Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
<version>${spring-ai.version}</version>
</dependency>
<!-- Spring AI MCP 客户端 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
调整 application.yml
将原先的 spring.ai.dashscope 配置全部移除,替换为 Ollama 的配置。
server:
port: 8082
spring:
ai:
ollama:
base-url: http://localhost:11434 # Ollama 服务地址
chat:
model: qwen2.5:7b-instruct # 建议使用支持工具调用的模型
options:
temperature: 0.7
mcp:
client:
enabled: true
request-timeout: 60s
toolcallback:
enabled: true
streamable-http:
connections:
hacker-news:
url: https://hn.caseyjhand.com
nws-weather:
url: https://nws.caseyjhand.com/mcp
logging:
level:
org.springframework.ai.mcp: DEBUG
代码层面——零改动
所有 Java 代码(AiConfig, AiService, SelectiveAiService, AiController 等)完全无需修改。
Spring AI 通过 ChatClient.Builder 自动注入当前激活的 ChatModel,实现了业务逻辑与模型实现的彻底解耦。
测试效果
询问两个问题:
{
"message": "回答我两个问题,一个是:Hacker News 最热文章是什么?另一个是:纽约的天气如何?"
}

询问单个问题:
常见问题与排查方法
1、启动报 DashScope API key must be set
pom.xml 中仍残留 DashScope 的 Starter 依赖,导致 Spring Boot 自动配置尝试创建 DashScopeChatModel,而找不到 API Key。
解决:彻底删除 spring-ai-alibaba-starter-dashscope 依赖,执行 mvn clean 清除编译缓存后重新启动。
2、依赖版本缺失:'dependencies.dependency.version' for ... is missing
原因:部分 Spring AI 的 Starter 在 BOM 中可能未被完全管理,Maven 无法自动推断版本。
解决:显式指定版本 ${spring-ai.version}。
3、找不到 spring-ai-ollama-spring-boot-starter:1.1.2
原因:在 1.1.2 版本中,Ollama Starter 的正确 artifactId 是 spring-ai-starter-model-ollama。
解决:引用正确的 artifactId
4、启动后网络报错 Connection reset
原因:MCP 客户端与远程服务的 HTTP/2 或 SSE 连接被远端或中间网络设备重置。
解决:
增加超时配置:request-timeout: 60s,并为每个连接设置 timeout。
此警告通常不影响功能,框架会自动重连。若服务仍可用,可忽略或调高日志级别。
检查防火墙或代理是否干扰长连接。
5、大模型不支持工具调用
现象:AI 从不调用 MCP 工具,直接返回文字回答。
原因:所选 Ollama 模型不具备 Function Calling 能力(如早期的 llama2)。
解决:使用明确支持工具调用的模型,例如 qwen2.5:7b、llama3.1:8b 或 mistral:7b。
知识点总结
依赖隔离:Spring AI 的项目应仅保留一个模型 Starter,避免多个自动配置互相冲突。
配置驱动:模型切换主要在 application.yml 中完成,业务代码完全无感。
BOM 管理:始终使用 spring-ai-bom 管理依赖版本,若个别包未受管理,手动添加版本号。
网络弹性:MCP 客户端具备自动重连机制,偶发的 Connection reset 通常无害。
模型能力:工具调用要求模型原生支持 Function Calling,下载前应确认模型的支持情况。
更多推荐


所有评论(0)