Spring Boot 3.x +MCP+ Ollama本地大模型实战:从零搭建支持工具调用的AI应用
在大模型浪潮席卷各行各业的今天,Java 作为企业级开发的绝对主力,如何无缝接入 AI 能力成为开发者关注的焦点。Spring AI 的诞生,正是为 Java 生态提供了统一、简洁、面向生产的大模型集成方案。本文将带你从零开始,基于 Spring Boot 3 + Spring AI + Ollama + MCP Client,搭建一个支持 本地大模型调用 与 工具函数调用(Function Ca
本文详细介绍了如何基于Spring Boot 3、Spring AI和Ollama搭建本地大模型应用,内容包括Ollama在Docker和Linux环境下的部署方法、模型选择指南、Spring AI集成实现对话功能,以及通过MCP协议实现工具调用功能。整个方案无需GPU,完全本地化运行,提供了私有化、低延迟的AI能力,适合Java开发者快速集成大模型能力到企业级应用中。
文章目录
- 简介
- Spring Boot
- Ollama 官网
- Docker 部署 Ollama (推荐)
- Linux 部署 Ollama
- Ollama 模型
- Ollama API
- Ollama 配置 Nginx
- 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
Ollama 官网
导入下载的 Docker 镜像
注: 国内网络原因无法下载镜像,百度网盘镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pwd=yjsv 提取码: yjsv。
docker load -i eclipse-temurin-17-jre-alpine.tar
Docker 部署 Ollama (推荐)
docker pull ollama/ollama:latest
docker pull ollama/ollama:0.11.4
docker run -d--name ollama -p11434:11434 \-v$PWD/ollama:/root/.ollama \
ollama/ollama:latest
- 下载 llama3.2:3b 模型
dockerexec-it ollama ollama pull llama3.2:3b
Linux 部署 Ollama
- 脚本自动安装
curl-fsSL https://ollama.com/install.sh |sh
- 下载手动安装
curl-LO https://ollama.com/download/ollama-linux-amd64.tgz
sudotar-C /usr -xzf ollama-linux-amd64.tgz
- 常用基础命令
ollama serve
ollama -v
ollama list
ollama pull llama3.2:3b
ollama run llama3.2:3b
ollama rm llama3.2:3b
Ollama 模型
# 模型大小 2.0GB
ollama pull llama3.2:3b
# 模型大小 43GB
ollama pull llama3.3:70b
注: 有些小模型是不支持 tools 调用,例如 deepseek-r1:1.5b 小模型;本示例推荐使用 llama3.2:3b 模型在本地PC端尝鲜。但因为 llama3.2:3b 模型太小 工具调用时中文容易 “幻觉” 参数值。生产环境推荐 llama3.3:70b 模型。
Ollama API
Ollama 配置 Nginx
server {
listen 80;
server_name your-domain.com;
location /ollama/ {
proxy_pass http://127.0.0.1:11434/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
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.base-url=http://your-domain.com/ollama/
spring.ai.ollama.chat.model=llama3.2:3b
- DemoApplication.java
@SpringBootApplicationpublicclassDemoApplication{@AutowiredprivateOllamaChatModel chatModel;publicstaticvoidmain(String[] args){SpringApplication.run(DemoApplication.class, args);}@BeanpublicChatResponserunner(){ChatResponse response = chatModel.call(newPrompt(newUserMessage("介绍下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.base-url=http://your-domain.com/ollama/
spring.ai.ollama.chat.model=llama3.2:3b
spring.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
@ServicepublicclassChatService{privatefinalChatClient chatClient;publicChatService(OllamaChatModel ollamaChatModel,List<McpSyncClient> mcpSyncClientList){ToolCallbackProvider toolCallbackProvider =newSyncMcpToolCallbackProvider(mcpSyncClientList);ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();for(ToolCallback toolCallback : toolCallbacks){System.out.println("toolCallback:"+ toolCallback.getToolDefinition());}// chatClient = ChatClient.builder(ollamaChatModel).defaultToolCallbacks(toolCallbacks).build();
chatClient =ChatClient.builder(ollamaChatModel).defaultToolCallbacks(toolCallbackProvider).build();}publicStringaskQuestion(Message message){return chatClient.prompt().messages(message).call().content();}publicStringaskQuestion(SystemMessage systemMessage,UserMessage userMessage){return chatClient.prompt().messages(systemMessage, userMessage).call().content();}}
- DemoApplication.java
@SpringBootApplicationpublicclassDemoApplication{@AutowiredprivateChatService chatService;publicstaticvoidmain(String[] args){SpringApplication.run(DemoApplication.class, args);}@BeanpublicStringrunner(){// String result = chatService.askQuestion(new UserMessage("查询姓名为'林俊杰'的用户信息"));String result = chatService.askQuestion(newSystemMessage("你是一个工具调用助手。"),newUserMessage("查询姓名为'林俊杰'的用户信息"));System.out.println(result);return result;}}
注: MCP 服务端接收参数时出现值错误原因,这是因为 小模型(llama3.2:3b) 对中文人名、实体的理解和拼写非常不稳,尤其是生僻字/专有名词时,容易产生乱码或替换成别的字。这不是 Spring AI/MCP 框架的问题,而是小模型自己在工具调用时 “幻觉” 了参数值。
MCP 服务端实现
MCP 服务端实现
完整项目源代码
零基础如何高效学习大模型?
你是否懂 AI,是否具备利用大模型去开发应用能力,是否能够对大模型进行调优,将会是决定自己职业前景的重要参数。
为了帮助大家打破壁垒,快速了解大模型核心技术原理,学习相关大模型技术。从原理出发真正入局大模型。在这里我和鲁为民博士系统梳理大模型学习脉络,这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码免费领取🆓**⬇️⬇️⬇️
【大模型全套视频教程】
教程从当下的市场现状和趋势出发,分析各个岗位人才需求,带你充分了解自身情况,get 到适合自己的 AI 大模型入门学习路线。
从基础的 prompt 工程入手,逐步深入到 Agents,其中更是详细介绍了 LLM 最重要的编程框架 LangChain。最后把微调与预训练进行了对比介绍与分析。
同时课程详细介绍了AI大模型技能图谱知识树,规划属于你自己的大模型学习路线,并且专门提前收集了大家对大模型常见的疑问,集中解答所有疑惑!
深耕 AI 领域技术专家带你快速入门大模型
跟着行业技术专家免费学习的机会非常难得,相信跟着学习下来能够对大模型有更加深刻的认知和理解,也能真正利用起大模型,从而“弯道超车”,实现职业跃迁!
【精选AI大模型权威PDF书籍/教程】
精心筛选的经典与前沿并重的电子书和教程合集,包含《深度学习》等一百多本书籍和讲义精要等材料。绝对是深入理解理论、夯实基础的不二之选。
【AI 大模型面试题 】
除了 AI 入门课程,我还给大家准备了非常全面的**「AI 大模型面试题」,**包括字节、腾讯等一线大厂的 AI 岗面经分享、LLMs、Transformer、RAG 面试真题等,帮你在面试大模型工作中更快一步。
【大厂 AI 岗位面经分享(92份)】
【AI 大模型面试真题(102 道)】
【LLMs 面试真题(97 道)】
【640套 AI 大模型行业研究报告】
【AI大模型完整版学习路线图(2025版)】
明确学习方向,2025年 AI 要学什么,这一张图就够了!
👇👇点击下方卡片链接免费领取全部内容👇👇
抓住AI浪潮,重塑职业未来!
科技行业正处于深刻变革之中。英特尔等巨头近期进行结构性调整,缩减部分传统岗位,同时AI相关技术岗位(尤其是大模型方向)需求激增,已成为不争的事实。具备相关技能的人才在就业市场上正变得炙手可热。
行业趋势洞察:
- 转型加速: 传统IT岗位面临转型压力,拥抱AI技术成为关键。
- 人才争夺战: 拥有3-5年经验、扎实AI技术功底和真实项目经验的工程师,在头部大厂及明星AI企业中的薪资竞争力显著提升(部分核心岗位可达较高水平)。
- 门槛提高: “具备AI项目实操经验”正迅速成为简历筛选的重要标准,预计未来1-2年将成为普遍门槛。
与其观望,不如行动!
面对变革,主动学习、提升技能才是应对之道。掌握AI大模型核心原理、主流应用技术与项目实战经验,是抓住时代机遇、实现职业跃迁的关键一步。
01 为什么分享这份学习资料?
当前,我国在AI大模型领域的高质量人才供给仍显不足,行业亟需更多有志于此的专业力量加入。
因此,我们决定将这份精心整理的AI大模型学习资料,无偿分享给每一位真心渴望进入这个领域、愿意投入学习的伙伴!
我们希望能为你的学习之路提供一份助力。如果在学习过程中遇到技术问题,也欢迎交流探讨,我们乐于分享所知。
*02 这份资料的价值在哪里?*
专业背书,系统构建:
-
本资料由我与鲁为民博士共同整理。鲁博士拥有清华大学学士和美国加州理工学院博士学位,在人工智能领域造诣深厚:
-
- 在IEEE Transactions等顶级学术期刊及国际会议发表论文超过50篇。
- 拥有多项中美发明专利。
- 荣获吴文俊人工智能科学技术奖(中国人工智能领域重要奖项)。
-
目前,我有幸与鲁博士共同进行人工智能相关研究。
内容实用,循序渐进:
-
资料体系化覆盖了从基础概念入门到核心技术进阶的知识点。
-
包含丰富的视频教程与实战项目案例,强调动手实践能力。
-
无论你是初探AI领域的新手,还是已有一定技术基础希望深入大模型的学习者,这份资料都能为你提供系统性的学习路径和宝贵的实践参考,助力你提升技术能力,向大模型相关岗位转型发展。
抓住机遇,开启你的AI学习之旅!
更多推荐
所有评论(0)