基于 Spring AI + Ollama + MCP Client 打造纯本地化大模型应用
文章目录
- 简介
- Spring Boot
- Ollama 模型
- llama3.2 聊天示例
- MCP 客户端示例
- MCP 服务端实现
简介
在大模型浪潮席卷各行各业的今天,Java 作为企业级开发的绝对主力,如何无缝接入 AI 能力成为开发者关注的焦点。Spring AI 的诞生,正是为 Java 生态提供了统一、简洁、面向生产的大模型集成方案。
本文将带你从零开始,基于 Spring Boot 3 + Spring AI + Ollama + MCP Client,搭建一个支持 本地大模型调用 与 工具函数调用(Function Calling) 的完整 AI 应用。
- 如何在本地部署 Ollama 并运行轻量级模型(如 llama3.2:1b、llama3.2:3b)
- 如何使用 Spring AI 集成 Ollama,实现自然语言对话
- 如何通过 MCP(Model Context Protocol)Client 实现模型对工具的动态调用,例如查询天气、访问数据库等
- 无需 GPU、无需联网调用第三方 API、数据完全本地化,真正实现私有化、低延迟、高安全的 AI 能力集成。
Spring Boot
- https://start.spring.io/
Ollama 模型
- https://ollama.com/library/llama3.2/tags
# 模型大小 1.3 GB
ollama pull llama3.2:1b
# 模型大小 2.0GB
ollama pull llama3.2:3b
注: deepseek-r1:1.5b 是不支持 tools 调用;MCP应用推荐使用 llama3.2:1b 模型。
llama3.2 聊天示例
- build.gradle
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.ai:spring-ai-starter-model-ollama'testImplementation 'org.springframework.boot:spring-boot-starter-test'testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
- application.properties
spring.application.name=demo
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=llama3.2:3b
- DemoApplication.java
@SpringBootApplication
public class DemoApplication {@Autowiredprivate OllamaChatModel chatModel;public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Beanpublic ChatResponse runner() {ChatResponse response = chatModel.call(new Prompt(new UserMessage("介绍下Spring AI")));System.out.println(response);return response;}}
MCP 客户端示例
- build.gradle
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.ai:spring-ai-starter-mcp-client'implementation 'org.springframework.ai:spring-ai-starter-model-ollama'testImplementation 'org.springframework.boot:spring-boot-starter-test'testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
- application.properties
spring.application.name=demo
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=llama3.2:3bspring.ai.mcp.client.name=spring-ai-mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.type=sync
spring.ai.mcp.client.sse.connections.server1.url=http://localhost:9800
spring.ai.mcp.client.toolcallback.enabled=true
- ChatService.java
@Service
public class ChatService {private final ChatClient chatClient;public ChatService(OllamaChatModel ollamaChatModel, List<McpSyncClient> mcpSyncClientList) {var mcpToolCallbackProvider = new SyncMcpToolCallbackProvider(mcpSyncClientList);ToolCallback[] toolCallbacks = mcpToolCallbackProvider.getToolCallbacks();for (ToolCallback toolCallback : toolCallbacks) {System.out.println("toolCallback:" + toolCallback.getToolDefinition());}chatClient = ChatClient.builder(ollamaChatModel).defaultToolCallbacks(toolCallbacks).build();}public String askQuestion(String prompt) {return chatClient.prompt(prompt).call().content();}}
- DemoApplication.java
@SpringBootApplication
public class DemoApplication {@Autowiredprivate ChatService chatService;public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Beanpublic String runner() {String res = chatService.askQuestion("查询姓名:“林俊杰”的用户信息");System.out.println(res);return res;}}
MCP 服务端实现
- 将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据