
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。
前言
Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。
- 项目地址
gitcode平台:https://gitcode.com/Var_ya/springAI_ollama_chatInterfaceApi
- 核心技术官网地址
Spring AI Alibaba 官网地址:https://java2ai.com/
**knife4j官网地址: **https://doc.xiaominfo.com/
ollama官网地址:https://ollama.com/
一、技术选型说明
1. 核心组件
- Spring Boot 3.4.5:后端服务基础框架
- spring-ai-ollama-spring-boot-starte:alibaba官方AI集成框架(1.0.0-M6版本)
- knife4j 4.5.0:可视化展示后端接口页面
- Ollama:本地大模型运行环境(支持Llama2、Mistral等模型)
2. 环境要求
- JDK 17+
- 8GB+ 内存(运行大模型需要)
- ollama version is 0.5.13
二、环境准备
1. 安装Ollama
- Ollama官网安装
官网地址:https://ollama.com/
官网下载window版本地址:https://ollama.com/download
- 百度网盘下载安装
百度网盘地址:https://pan.baidu.com/s/1mx_3R4NVjOSC9D8BaGdYHg?pwd=9eg7
- 运行OllamaSetup安装包
- 双击OllamaSetup.exe
- 安装包点击:Install
- 安装成功
(截图示例:终端执行ollama --version
)
2. 下载模型
本教程使用的模型:deepseek-r1:8b
模型运行下载命令:ollama run deepseek-r1:8b
ollama run deepseek-r1:8b
2. 模型运行效果
三、创建Spring Boot项目
注意 :类型修改为:Maven
1. 项目初始化
使用start.spring.io创建项目:
- 添加依赖:
- Spring Web
- spring-ai-ollama-spring-boot-starter
- knife4j-openapi3-jakarta-spring-boot-starter
2. 配置核心POM.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 阿里巴巴ollama-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
<!-- Swagger3-knife4j依赖 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
四、配置Ollama连接
application.yml
server:
port: 9999
spring:
ai:
ollama:
base-url: http://localhost:11434 # 哦llama地址
chat:
model: deepseek-r1:7b # 模型
options:
temperature: 0.8 # 温度越高,回答越有创意
top-p: 0.9 # 数值越高,回答越多样
top-k: 100 # 数值越高,回答越多样
# knife4j的增强配置,不需要增强可以不配
knife4j:
enable: true # 开启knife4j,无需添加@EnableKnife4j注解
setting:
language: zh_cn #中文
# swagger-model-name: 实体列表 #默认为: Swagger Models
basic: # 开启Swagger的Basic认证功能,默认是false
enable: false
username: varya
password: varya
五、编写AI对话接口
1. 创建Controller
package cn.varin.springai_ollama_chatinterfaceapi.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import reactor.core.publisher.Flux;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.stream.Stream;
@RestController
@Tag(name="客户端实例")
@RequestMapping("/client")
public class OllamaChatClientController {
private static final String DEFAULT_PROMPT = "你好,介绍下你自己!请用中文回答。";
private final ChatClient ollamaiChatClient;
public OllamaChatClientController(ChatModel chatModel) {
// 构造时,可以设置 ChatClient 的参数
this.ollamaiChatClient = ChatClient.builder(chatModel)
// 实现 Logger 的 Advisor
.defaultAdvisors(
new SimpleLoggerAdvisor()
)
// 设置 ChatClient 中 ChatModel 的 Options 参数
.defaultOptions(
OllamaOptions.builder()
.topP(0.7)
.model("deepseek-r1:1.5b")
.build()
)
.build();
}
/**
* ChatClient 简单调用
*/
@Operation(summary = "无参数调用")
@GetMapping("/simple/chat")
public String simpleChat() {
return ollamaiChatClient.prompt(DEFAULT_PROMPT).call().content();
}
/**
* ChatClient 流式调用
*/
@Operation(summary = "流式调用")
@GetMapping("/stream/chat")
public Flux<String> streamChat1(@RequestParam String message) {
return ollamaiChatClient.prompt(message).stream().content();
}
@GetMapping("/stream")
public SseEmitter streamChat2(@RequestParam String message) {
SseEmitter emitter = new SseEmitter();
Flux<String> content = ollamaiChatClient.prompt(message).stream().content();
try {
emitter.send(content);
System.out.println(emitter.toString());
} catch (IOException e) {
throw new RuntimeException(e);
}
return emitter;
}
}
2. 支持流式响应(可选)
/**
* ChatClient 流式调用
*/
@Operation(summary = "流式调用")
@GetMapping("/stream/chat")
public Flux<String> streamChat1(@RequestParam String message) {
return ollamaiChatClient.prompt(message).stream().content();
}
六、knife4j测试接口
访问Url:http://localhost:9999/doc.html
1. 无参数接口测试
接口:/client/simple/chat
2. 流式调用接口测试
接口:/client/stream/chat
七、扩展功能建议
- 多模型切换:通过@RequestParam动态选择模型
- 对话历史管理:使用Redis存储上下文
- 速率限制:添加Bucket4j限流
- API鉴权:集成Spring Security
八、常见问题排查
问题现象 | 解决方案 |
---|---|
连接Ollama超时 | 确认ollama serve 正在运行 |
模型加载失败 | 检查ollama list 确认模型存在 |
内存不足 | 尝试更小参数的模型版本 |
九、项目效果展示
十、总结
本文演示了如何通过:
- 本地部署Ollama服务
- Spring AI集成LLM能力
- 构建RESTful API接口
优势:数据隐私性强、无需API密钥、支持离线环境
完整代码示例:https://gitcode.com/Var_ya/springAI_ollama_chatInterfaceApi
更多推荐
所有评论(0)