场景
SpringBoot+LangChain4j+Ollama实现本地大模型语言LLM的搭建、集成和示例流程:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/160340066
在上面使用LangChain4j集成Ollama的基础上,如何使用SpringAI快速实现效果。
Spring AI 是什么?
Spring AI 是 Spring 官方推出的 AI 应用开发框架,定位:
像 SpringBoot 封装 Web、MyBatis 封装数据库一样,统一封装大模型、向量库、RAG、Agent、工具调用、MCP 协议,
做到一套代码、无缝切换任意大模型。
支持:
国产模型:通义千问、文心一言、讯飞星火、智谱
海外模型:OpenAI、Anthropic
本地模型:Ollama、LocalAI
协议:
OpenAI 兼容接口、MCP 模型控制协议(Streamable HTTP/SSE)
设计思想:抽象统一接口,底层厂商自由替换,业务代码不用改。
Spring AI 顶层核心架构
分层理解:
应用层:Chat 对话、RAG 知识库问答、Agent 智能体、工作流编排
核心抽象层:ChatModel、EmbeddingModel、Prompt、Advisor、Tool、VectorStore
适配层:对接各厂商(OpenAI/Ollama/ 通义千问 / 阿里云百炼)
基础设施层:向量数据库、MCP 服务、内存、日志、可观测性
ChatModel 对话模型
Spring AI 最核心抽象,所有大模型都实现这个接口。
能力:同步对话、流式对话、多轮上下文、函数调用
实现类举例:
OpenAiChatModel
OllamaChatModel
DashScopeChatModel(通义千问)
特点:切换模型只改配置,不改业务代码
ChatClient 聊天客户端(开发首选)
Spring AI 推荐业务层入口,封装 ChatModel,链式调用。
优势:
内置 Prompt 模板、记忆、工具注入
流式返回、拦截器扩展
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
Spring AI 零基础最小入门 Demo
环境前提
JDK 17
SpringBoot 3.4.5
本地已装 Ollama,并拉取模型:ollama pull qwen2.5:7b-instruct
不用复杂依赖、不搞 MCP,先跑通 Spring AI 核心基础:ChatClient + 普通对话
pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version> <!-- 降级为稳定版,解决冲突 -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-ai-ollama-demo</artifactId>
<version>1.0</version>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M1</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Ollama 核心 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>${spring-ai.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
application.yml 配置
server:
port: 886
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
model: qwen2.5:7b-instruct
配置类:注册 ChatClient(Spring AI 标准入口)
package com.badao.ai.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringAiConfig {
/**
* 注入统一聊天客户端,全局使用
*/
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
return builder.build();
}
}
Controller(最简单对话)
package com.badao.ai.controller;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SimpleChatController {
private final ChatClient chatClient;
public SimpleChatController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/chat")
public String chat(@RequestParam String msg) {
// 链式调用:发提示词 -> 调用模型 -> 返回内容
return chatClient.prompt(new Prompt(msg))
.call()
.content();
}
}
