Spring AI Alibaba 与 Ollama 集成初探:从环境搭建到首次调用
一、背景与目标
Ollama 作为轻量级本地大模型运行框架,支持快速部署如 Qwen、Llama 等模型;Spring AI Alibaba 则提供了丰富的 AI 能力集成组件。本文记录首次尝试通过 Spring AI Alibaba 调用本地 Ollama 服务的完整过程,包括环境配置、代码实现及问题解决。
二、环境准备与依赖配置
1. 项目初始化
基于 Spring Boot 3.5.6 创建 Maven 项目,核心依赖如下(配置于 pom.xml):
Spring Boot 基础组件:spring-boot-starter-web(提供 Web 能力)、spring-boot-starter(核心 Starter)。
JSON 处理:jackson-databind(解析 Ollama API 响应)。
Lombok:简化实体类代码(需指定版本 1.18.30 避免编译问题)。
Spring AI Alibaba BOM:统一管理 AI 组件版本(spring-ai-alibaba-bom:1.0.0.2)。
关键
pom.xml 配置片段:
<properties><java.version>17</java.version><lombok.version>1.18.30</lombok.version> <!-- Lombok 版本声明 --></properties><dependencyManagement><dependencies><!-- Spring AI Alibaba 依赖版本管理 --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>1.0.0.2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Web 能力支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Lombok 简化实体类 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- JSON 解析 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency></dependencies>
三、核心代码实现
1. 定义 API 交互模型
根据 Ollama API 文档(/api/chat 接口),创建请求/响应实体类:
OllmaChatRequest:封装请求参数(模型名称、对话消息列表)。
OllmaChatResponse:接收 API 响应(包含模型返回的消息内容)。
使用 Lombok 的 @Data 注解自动生成 Getter/Setter,避免手动编写:
package com.example.springaialibaba.entery;import lombok.Data;
import java.util.List;-------------------------------------------------------3个文件@Data // 自动生成 Getter/Setter
public class OllmaChatRequest {private String model; // 模型名称(如 qwen:1.8b)private List<Message> messages; // 对话消息列表}
@Data
public class Message {private String role; // 角色:user/assistantprivate String content; // 内容
}@Data
public class OllmaChatResponse {private String model;private Message message; // 同请求中的 Message 结构
}
2. 实现 Ollama 调用服务
创建 OllmaClient 服务类,通过 RestTemplate 调用 Ollama API
package com.example.springaialibaba.service;import com.example.springaialibaba.entery.Message;
import com.example.springaialibaba.entery.OllmaChatRequest;
import com.example.springaialibaba.entery.OllmaChatResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.List;@Service
public class OllmaClient {@Value("${spring.ai.ollma.base-url}")private String baseUrl;@Value("${spring.ai.ollma.default-model}")private String defaultModel;private final RestTemplate restTemplate = new RestTemplate();// 调用 Ollma 进行对话public String chat(String question) {// 构建请求// 构建请求OllmaChatRequest request = new OllmaChatRequest();request.setModel(defaultModel);Message msg = new Message();msg.setRole("user");msg.setContent(question);request.setMessages(List.of(msg));// 调用 Ollma APIOllmaChatResponse response = restTemplate.postForObject(baseUrl + "/api/chat",request,OllmaChatResponse.class);// 提取回答return response.getMessage().getContent();}
}
3. 配置 Ollma 连接信息
在 application.yml 中指定 Ollma 服务地址和默认模型
spring:ai:ollma:base-url: http://192.168.x.xxx:11434 # 本地 Ollma 服务地址default-model: qwen:1.8b # 已下载的模型名称
4. 大模型调用
package com.example.springaialibaba.controller;import com.example.springaialibaba.service.OllmaClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/local-ai")
public class LocalAiController {@Autowiredprivate OllmaClient ollmaClient;@GetMapping("/ask")public String ask(@RequestParam String question) {return ollmaClient.chat(question);}
}
四、首次调用与结果
启动 Spring Boot 应用后,通过 Controller 调用 OllmaClient.chat("Hello Ollama!"),成功接收模型响应:
http://localhost:8080/local-ai/ask?question=你是谁
五、总结
本次尝试成功实现了 Spring AI Alibaba 与本地 Ollma 服务的集成,核心步骤包括:
通过 Maven BOM 统一管理 AI 组件版本;
使用 Lombok 简化实体类定义,解决编译期方法缺失问题;
针对 API 响应结构调整模型类,确保 JSON 反序列化正确;
通过日志调试定位并解决网络请求与响应解析问题。