本地部署Ollama
说明:添加 Spring Web 依赖确保 HTTP 接口正常提供,指定 Ollama 依赖版本可避免版本冲突。
·
本地部署Ollama
环境准备:下载与启动 Ollama
- 下载 Ollama 客户端:访问Ollama官网,根据操作系统(Windows/Mac/Linux)下载对应安装包并完成安装。
- 获取模型启动命令:
- 打开 Ollama 官网的「Models」栏目,搜索目标模型(如deepseek-r1:1.5b、llama3:8b等)。
- 复制模型对应的启动命令(示例:ollama run deepseek-r1:1.5b)。
- 启动本地 AI 服务:
- 打开系统控制台(CMD/PowerShell/Terminal),粘贴启动命令并执行。
- 首次启动会自动下载模型文件,耐心等待下载完成后,服务将默认运行在 http://localhost:11434。
快速入门:Spring AI 整合步骤
导入核心依赖
<dependencies>
<!-- Spring AI Ollama 核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
<!-- 建议指定版本,与Spring Boot版本匹配(示例:0.17.0) -->
<version>0.17.0</version>
</dependency>
<!-- Spring Web 依赖(用于提供HTTP接口) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
说明:添加 Spring Web 依赖确保 HTTP 接口正常提供,指定 Ollama 依赖版本可避免版本冲突。
yaml配置
spring:
application:
name: ollama-ai-demo
# Ollama 核心配置
ai:
ollama:
base-url: http://localhost:11434 # Ollama默认服务地址,无需修改(除非自定义端口)
chat:
model: deepseek-r1:1.5b # 已启动的模型名称,必须与控制台启动命令一致
options:
temperature: 0.7 # 随机性:0-1,值越高回复越灵活(搞笑场景建议0.7-0.9)
top_p: 0.9 # 采样阈值:过滤低概率词汇,建议0.8-0.9
# 日志基础配置
logging:
level:
root: info
org.springframework.web: info
配置聊天客户端
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OllamaConfig {
/**
* 配置带有角色设定的ChatClient
* 依赖Spring自动注入的OllamaChatModel(由spring-ai-starter-model-ollama提供)
*/
@Bean
public ChatClient chatClient(OllamaChatModel ollamaChatModel) {
return ChatClient.builder(ollamaChatModel)
// 系统提示词:明确角色、性格、回复风格
.defaultSystem("""
你是搞笑助手,名字叫邓超,说话风格幽默风趣、接地气,带点综艺感。
回复要简洁不啰嗦,尽量用网络热梗、谐音梗或夸张的表达,避免生硬说教。
遇到用户提问,优先用搞笑方式回应,同时保证信息准确(若有实际问题)。
""")
.build();
}
}
提供HTTP聊天接口
/**
* 聊天接口:支持实时流式输出(类似ChatGPT的打字效果)
* @param prompt 用户提问内容
* @return 流式回复(text/event-stream格式,前端可直接渲染)
*/
@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> chat(@RequestParam(value = "prompt", required = true) String prompt) {
// 校验用户输入,避免空请求
if (prompt == null || prompt.trim().isEmpty()) {
return Flux.just("请输入有效的提问内容哦~");
}
// 流式调用Ollama模型,返回实时回复
return chatClient.prompt()
.user(prompt) // 传入用户提问
.stream() // 开启流式输出
.content(); // 提取回复内容(过滤无关元数据)
}
进阶配置:开启会话日志(调试 / 审计用)
配置日志增强的 ChatClient
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OllamaLogConfig {
/**
* 带会话日志的ChatClient(可与基础客户端共存,通过Bean名称区分)
*/
@Bean(name = "loggableChatClient")
public ChatClient loggableChatClient(OllamaChatModel ollamaChatModel) {
return ChatClient.builder(ollamaChatModel)
.defaultSystem("你是搞笑助手邓超,回复幽默接地气")
.defaultAdvisors(new SimpleLoggerAdvisor()) // 开启会话日志:记录请求/响应内容
.build();
}
}
日志详细配置(application.yml)
logging:
level:
root: info
# Spring AI 会话日志:DEBUG级别会打印完整的请求/响应内容
org.springframework.ai.chat.client.advisor: DEBUG
# 自定义包日志:根据项目实际包名修改(示例:com.example.ollama)
com.example.ollama: DEBUG
# 日志输出格式(可选:优化可读性)
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
使用说明与注意事项
- 模型启动验证:启动 Ollama 后,可访问 http://localhost:11434,若页面显示「Ollama API」则服务正常。
- 接口调用示例:
- 浏览器访问:http://localhost:8080/api/ai/chat?prompt=讲个冷笑话
- 性能优化:
- 小模型(如 1.5B 参数)适合开发测试,生产环境建议使用 7B/13B 参数模型(需充足内存)。
- 调整temperature参数:搞笑场景建议 0.7-0.9,需要精准回复时可设为 0.3-0.5。
- 常见问题:
- 接口报错「Connection refused」:检查 Ollama 服务是否启动,或base-url配置错误。
- 回复缓慢:模型参数越大越耗资源,可切换更小模型(如llama3:8b-instruct)。
更多推荐
所有评论(0)