Spring AI Alibaba 项目搭建实战教程
摘要
如何在 Spring Boot 项目中快速接入本地大模型?这是许多开发者在尝试将 AI 能力集成到自身
如何在 Spring Boot 项目中快速接入本地大模型?这是许多开发者在尝试将 AI 能力集成到自身应用时绕不开的第一个关卡。实际上,流程比想象中直接。今天,我们以本地部署的 Ollama 驱动通义千问模型(qwen3.5)为例,逐步拆解集成全过程。
一. 本地Ollama方式接入
开始编码前,先确认两个前提:你已在本地机器或服务器上安装并运行 Ollama,并且已拉取目标模型。若未完成,可参考相关部署文档先行配置。
1. 环境
确保环境符合要求。
JDK 17 + Spring Boot 3.4.0
2. 引入依赖
在项目中添加 Spring AI Alibaba 的 Starter 依赖,它封装了与 Ollama 交互的核心能力。
<dependency>
<groupId>com.alibaba.cloud.aigroupId>
<artifactId>spring-ai-alibaba-starterartifactId>
dependency>
3. 配置application.yml
配置 Ollama 访问地址与模型名称。若 Ollama 部署在其他服务器,记得将 localhost 替换为实际 IP。
spring:
ai:
ollama:
base-url: http://localhost:11434 # 参考上一章服务器部署,localhost改成对应IP即可
chat:
model: qwen3.5
4. 建造控制器提供调用大模型接口
接下来是核心步骤:编写控制器,将大模型能力暴露为 HTTP 接口。
4.1 简单问答模式
最简洁的用法:直接注入 ChatClient,将用户输入原样传递,获取回答。
@RestController
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder
//.defaultSystem("你是一个各种数据库sql优化大师") // 提示词
.build();
}
@GetMapping("/chat")
public String chat(@RequestParam(value = "input") String input) {
return this.chatClient.prompt()
.user(input)
.call()
.content();
}
}
调用接口后,大模型表现为通用问答机器人,回答覆盖广泛。
4.2 增加限制提示词模式
但实际场景中,我们往往需要模型扮演特定角色。比如希望它专门解决数据库 SQL 优化问题,只需在 build 前添加 .defaultSystem("你是一个各种数据库sql优化大师") 即可。这样模型不再泛泛而谈,而是直接输出专业的 SQL 优化建议与调整方案。
// 在构造器中builder后面增加
.defaultSystem("你是一个各种数据库sql优化大师") // 增加提示词操作
再次调用同一 API,回复内容明显偏向专业领域。
4.3 增加RAG检索模式
重点来了。当提问涉及模型知识库中未存储的信息(如“你今天都做了什么”),模型无法作答。这时需要引入知识库——让模型先读取自有数据,再基于检索到的知识回答。
理解原理后,直接上代码。
首先创建配置类,定义 ChatClient、向量库等核心 Bean。
package com.example.springai.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.ollama.OllamaEmbeddingModel;
import org.springframework.ai.ollama.api.OllamaApi;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ja va.io.File;
import ja va.io.IOException;
@Configuration
public class AiConfig {
@Value("${spring.ai.ollama.base-url}")
private String ollamaBaseUrl;
@Value("${spring.ai.ollama.chat.model}")
private String ollamaModel;
// 默认提示词
@Bean
public ChatClient chatClient(OllamaChatModel chatModel) {
return ChatClient.builder(chatModel)
.defaultSystem("你是一个智能助手,回答简洁准确,不编造内容")
.build();
}
// 本地持久化向量库(重启不丢数据)
@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) throws IOException {
SimpleVectorStore vectorStore = SimpleVectorStore.builder(embeddingModel).build();
// 数据持久化到项目目录的 vector-store.json 文件
File persistFile = new File("vector-store.json");
if (persistFile.exists()) {
// 启动时加载已有数据
vectorStore.load(persistFile);
} else {
// 首次启动创建空文件
persistFile.createNewFile();
}
// 注册关闭钩子,项目停止时自动保存数据
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
vectorStore.sa ve(persistFile);
}));
return vectorStore;
}
}
这里采用 SimpleVectorStore 作为本地向量存储。生产环境可替换为 Milvus、Qdrant 等专业向量数据库,但本地开发验证已足够。
接下来添加文档读取依赖,以便上传 txt、pdf、word 等文件并转换为向量知识。
<dependency>
<groupId>org.springframework.aigroupId>
<artifactId>spring-ai-tika-document-readerartifactId>
<version>0.8.1version>
dependency>
另外,还需要拉取一个向量模型用于将文本转为向量表示。在终端中执行:
ollama pull mxbai-embed-large
该模型体积小,专用于嵌入向量存储,资源占用低。
有了向量库和文档读取能力,就可以将知识数据上传至向量数据库。然后在控制器中编写接口,基于用户查询从知识库中检索相关片段,将片段与用户问题拼接后交由大模型回答。
由于测试时间节点问题(4月1日提问,知识库仅包含3月31日及之前的数据),接口问题改为“昨天吃了什么”,模型成功从知识库中提取信息并作答。
至此,从零搭建到 RAG 接入的完整流程已演示完毕。后续还可深入探索 Function Calling、MCP 服务等高级能力,值得持续跟进。
持续更新中……
来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。