理解了 RAG 的核心概念和工作流程后,现在动手创建项目,把基础环境搭建起来。
1. 创建项目
打开 start.spring.io,按以下配置创建项目:
- Project:Maven
- Language:Java
- Spring Boot:4.x
- Group:com.albertstack
- Artifact:rag-demo
- Package name:com.albertstack.rag
- Packaging:Jar
- Configuration:YAML
- Java:25
- Dependencies:Spring Reactive Web、Lombok
点击 Generate 下载压缩包并解压。
2. 添加 Spring AI 依赖
Spring Initializr 目前还没有直接提供 Spring AI 的 RAG 相关依赖选项,需要手动添加。打开 pom.xml,在 <dependencies> 中添加以下两项:
xml
<!-- Spring AI Ollama:提供 ChatModel 和 EmbeddingModel -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
<!-- Spring AI 向量存储 Advisor:提供 QuestionAnswerAdvisor + SimpleVectorStore -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>依赖说明:
- spring-ai-starter-model-ollama:自动配置 Ollama 连接,注册
OllamaChatModel(实现ChatModel)和OllamaEmbeddingModel(实现EmbeddingModel)两个 Bean - spring-ai-advisors-vector-store:提供
QuestionAnswerAdvisor(RAG 的核心 Advisor)和SimpleVectorStore(内存向量存储),后续构建 RAG 管道时会用到
接下来添加 Spring AI BOM 进行版本管理。在 pom.xml 的 <dependencyManagement> 中添加:
xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>2.0.0-M3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>3. 配置 Ollama
打开 src/main/resources/application.yaml,写入以下配置:
yaml
spring:
application:
name: rag-demo
ai:
ollama:
base-url: http://localhost:11434
# 启动时自动拉取缺失的模型
init:
pull-model-strategy: when_missing
chat:
model: qwen3.5:9b
embedding:
model: qwen3-embedding:8b
server:
port: 8080配置说明:
- base-url:Ollama 服务地址,本地默认是
http://localhost:11434 - pull-model-strategy: when_missing:应用启动时,如果本地没有配置的模型,Spring AI 会自动调用 Ollama 拉取,省去手动操作
- chat.model:对话模型,这里使用
qwen3.5:9b - embedding.model:嵌入模型,使用
qwen3-embedding:8b。它与 qwen3.5 同属 Qwen 系列,中文语义理解优秀,输出 4096 维向量,最大支持 32K token 上下文
4. 拉取 Embedding 模型
虽然我们配置了 pull-model-strategy: when_missing 自动拉取,但建议先手动拉取一次,确认模型可用:
bash
ollama pull qwen3-embedding:8b拉取完成后,确认两个模型都已就绪:
5. 编写配置类
和 Spring AI 专栏一样,我们需要手动把 ChatClient 注册为 Bean。
src/main/java/com/albertstack/rag/config/AiConfig.java
java
package com.albertstack.rag.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AiConfig {
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
return builder.build();
}
}6. 验证基础通信
环境配置好了,写个测试确认 Spring AI 能正常连接 Ollama。
6.1 测试 ChatClient
src/test/java/com/albertstack/rag/AiConnectionTest.java
java
package com.albertstack.rag;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.Assertions.assertThat;
@Slf4j
@SpringBootTest
class AiConnectionTest {
@Autowired
ChatClient chatClient;
@Autowired
EmbeddingModel embeddingModel;
@Test
void chatClientShouldRespond() {
// 发送简单问题,验证模型能正常回复
String response = chatClient.prompt()
.user("用一句话介绍 Spring Boot")
.call()
.content();
log.info("模型回复: {}", response);
assertThat(response).isNotBlank();
}
@Test
void embeddingModelShouldWork() {
// 嵌入一段文本,验证 EmbeddingModel 正常工作
float[] vector = embeddingModel.embed("Spring AI 是 Spring 官方的 AI 集成框架");
log.info("向量维度: {}", vector.length);
log.info("前 5 个分量: ");
for (int i = 0; i < Math.min(5, vector.length); i++) {
log.info(" [{}] = {}", i, String.format("%.6f", vector[i]));
}
// qwen3-embedding:8b 输出 4096 维向量
assertThat(vector.length).isGreaterThan(0);
assertThat(vector).isNotEmpty();
}
}如果两个测试都通过,说明:
- ChatClient:能正常连接 Ollama 并获取对话模型的回复
- EmbeddingModel:能正常调用 Embedding 模型将文本转换为向量
7. 项目结构
到目前为止,项目结构如下:
text
rag-demo/
├── pom.xml
├── src/main/java/com/albertstack/rag/
│ ├── RagDemoApplication.java
│ └── config/
│ └── AiConfig.java
├── src/main/resources/
│ └── application.yaml
└── src/test/java/com/albertstack/rag/
└── AiConnectionTest.java8. 本章小结
本章完成了 RAG 项目的初始化,配置了 Ollama 连接并通过测试验证了基础通信。
| 知识点 | 说明 |
|---|---|
| Spring Boot 4 + Spring AI | 使用 Spring Initializr 创建项目,引入 Ollama starter 依赖 |
| Ollama 模型配置 | 对话模型(qwen3.5:9b)和嵌入模型(qwen3-embedding:8b)的 YAML 配置 |
| AiConfig 配置类 | Spring AI 只提供 ChatClient.Builder,需手动注册 ChatClient Bean |
| 基础通信验证 | 通过测试确认 ChatClient 和 EmbeddingModel 都能正常连接 Ollama |
下一章我们进入 Embedding 和向量存储,理解 RAG 系统的数据基础。