场景

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,下载前应确认模型的支持情况。

更多推荐