Spring AI实战进阶:Spring Boot联合OpenAI连接本地Chroma向量数据库

系列篇章💥

No. 文章
1 [大模型领域中Spring AI实战系列(其一):基础认知层面 -
开启智能应用开发新旅程](https://xundaomalu.blog.csdn.net/article/details/147889838?spm=1011.2415.3001.5331)
2 [大模型领域里Spring AI实战系列(其二):Spring Boot与OpenAI协作
打造聊天应用全面指南](https://xundaomalu.blog.csdn.net/article/details/147890592?spm=1011.2415.3001.5331)
3 [大模型领域内Spring AI实战系列(其三):Spring Boot结合OpenAI
实现聊天应用上下文记忆功能](https://xundaomalu.blog.csdn.net/article/details/147928342?spm=1011.2415.3001.5331)
4 [大模型领域下Spring AI实战系列(其四):Spring Boot联合OpenAI
运用OpenAI Embedding达成文本向量化](https://xundaomalu.blog.csdn.net/article/details/147928677?spm=1011.2415.3001.5331)
5 [大模型领域中Spring AI实战系列(其五):Spring Boot携手OpenAI
构建带角色设定的智能对话系统](https://xundaomalu.blog.csdn.net/article/details/147929117?spm=1011.2415.3001.5331)
6 [大模型领域里Spring AI实战系列(其六):Spring Boot搭配OpenAI
借助PromptTemplate构建动态提示词体系](https://xundaomalu.blog.csdn.net/article/details/147961136?spm=1011.2415.3001.5331)
7 [大模型领域内Spring AI实战系列(其七):Spring Boot结合OpenAI
构建结构化输出的AI响应系统](https://xundaomalu.blog.csdn.net/article/details/147961235?spm=1011.2415.3001.5331)
8 [大模型领域下Spring AI实战系列(其八):Spring Boot联合OpenAI
利用Whisper实现语音转文本功能](https://xundaomalu.blog.csdn.net/article/details/148006786?spm=1011.2415.3001.5331)
9 [大模型领域中Spring AI实战系列(其九):Spring Boot携手OpenAI
运用TTS达成文本转语音功能](https://xundaomalu.blog.csdn.net/article/details/148007053?spm=1011.2415.3001.5331)
10 [大模型领域里Spring AI实战系列(其十):Spring Boot联合OpenAI
使用DALL·E实现文本生成图像功能](https://xundaomalu.blog.csdn.net/article/details/148007206)
11 大模型领域中Spring AI实战系列(其十一):Spring Boot联合OpenAI 集成本地向量数据库Chroma

目录

  • 系列篇章💥
  • 前言
  • 一、开发环境准备
    • (一)Java 版本要求
    • (二)Maven 构建工具
    • (三)OpenAI API 密钥
    • (三)本地部署 Chroma 数据库
  • 二、POM依赖引入
    • (一)Spring AI与OpenAI集成依赖包
    • (二)集成向量数据库chroma依赖包
    • (三)SpringAI相关依赖包版本管理
  • 三、配置文件详解
  • 四、核心代码详解
    • (一)Application启动类
    • (二)向量数据库配置类
    • 1.RestClient.Builder:构建 HTTP 请求客户端
    • 2.ChromaApi:封装对 Chroma 服务的访问接口
    • 3.ChromaVectorStore:集成到 Spring AI 的向量数据库适配器
    • (三)向量检索控制器
    • 1.add() 方法:添加文档至向量数据库
    • 2.similaritySearch() 方法:执行相似性搜索
    • 3.Document 类介绍
  • 五、Chroma 向量数据库详解
    • (一)什么是向量数据库?
    • (二)Chroma 简介
    • (三)Chroma 核心概念
  • 六、Spring AI 中的 VectorStore 抽象层
  • 七、Chroma 本地部署全流程详解
    • (一)安装 Chroma
    • (二)启动 Chroma 服务
    • (三)创建 Collection(集合)
    • (四)Spring AI 配置与接入
  • 八、Chroma 与 Spring AI 的整合实践
    • (一)向量数据库的基本应用场景
    • 1.文档向量化存储
    • 2.语义相似性检索
    • 3.多模态检索(未来拓展方向)
    • (二)示例:文档入库 + 相似性查询流程演示
    • 步骤 1:添加文档
    • 步骤 2:执行语义搜索
  • 九、部署与测试
    • (一)部署准备
    • (二)启动 Chroma 服务(本地)
    • (三)启动 Spring Boot 应用
    • (四)测试接口功能
    • 1.请求方式
    • 2.请求参数说明
    • 3.预期返回结果
  • 总结

前言

在前述的文章里,我们已经掌握了运用 Spring AI 构建基础聊天服务、流式对话、上下文记忆、角色设定、动态提示词模板、结构化输出、语音识别与合成、图像生成等诸多能力。本篇文章将把焦点放在向量数据库(VectorStore)的集成与运用之上。

我们会依托 spring-ai-openai-vectorStore 示例项目,并且结合本地部署的
Chroma 向量数据库,细致地阐述怎样借助 Spring AI 来集成 Chroma,以此达成文档的存储以及相似性检索,为后续构建 RAG(Retrieval-Augmented Generation)系统筑牢根基。

一、开发环境准备

(一)Java 版本要求

本项目采用Java 17来进行编译与运行,务必保证你的开发环境已成功安装JDK 17。你能在命令行中输入下述命令进行检查:

java -version

输出应该类似下面的内容:

openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)

(二)Maven 构建工具

确保你已安装 Maven 并配置好环境变量:

mvn -v

输出应类似如下内容:

Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

(三)OpenAI API 密钥

你需要注册 OpenAI 官网 获取 API
Key(国内可以直接使用中转地址),并设置为环境变量:

export OPENAI_API_KEY="your_openai_api_key"
export OPENAI_API_URL="https://api.openai.com/v1"

注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。

(三)本地部署 Chroma 数据库

你可以通过如下命令安装并启动 Chroma:

pip install chromadb

启动服务:

chroma run --path "D:/Program Files/chromadb" --host 0.0.0.0 --port 8000

创建集合:

curl -v -X POST http://localhost:8000/api/v1/collections -H "Content-Type: application/json" -d "{\"name\": \"TestCollection\"}"

二、POM依赖引入

(一)Spring AI与OpenAI集成依赖包

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。

(二)集成向量数据库chroma依赖包

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-chroma-store</artifactId>
</dependency>

此依赖包用于实现Spring AI与Chroma的集成,为后续与Chroma进行交互提供了必要的支持。

(三)SpringAI相关依赖包版本管理

版本管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

部分通过引入spring-ai-bom,实现了对SpringAI相关依赖包版本的统一管理。这样,在项目中使用Spring
AI相关依赖时,无需在每个依赖声明中单独指定版本号,只需遵循spring-ai-
bom中定义的版本即可,极大地简化了依赖管理工作,同时确保了项目中依赖版本的一致性和稳定性。

三、配置文件详解

在配置文件 application.yml 中,对openai相关参数加以配置:

server:
  port: 8893
spring:
  ai:
    openai:
      base-url: ${OPENAI_API_URL}
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-3.5-turbo
          temperature: 0.7
      embedding:
        model: text-embedding-ada-002
  • 默认采用的是 OpenAI 的 text-embedding-ada-002 模型;
  • 也能够替换成其他可支持的 Embedding 模型(例如 HuggingFace 的 SBERT 模型);
  • 若想要运用企业级私有模型,则需自行对 Embedding Model 的实现进行替换。

四、核心代码详解

(一)Application启动类

这是 Spring Boot 的启动类,极为简洁:

@SpringBootApplication
public class SpringAiApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringAiApplication.class, args);
    }
}

Spring
Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring
Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。

(二)向量数据库配置类

该配置类用于对 Chroma 向量数据库的连接以及初始化进行配置。

@Configuration
public class ChromaConfig {

    @Bean
    public RestClient.Builder builder() {
        return RestClient.builder().requestFactory(new SimpleClientHttpRequestFactory());
    }

    @Bean
    public ChromaApi chromaApi(RestClient.Builder restClientBuilder) {
        String chromaUrl = "http://localhost:8000";
        ChromaApi chromaApi = new ChromaApi(chromaUrl, restClientBuilder);
        return chromaApi;
    }

    @Bean
    public VectorStore chromaVectorStore(EmbeddingModel embeddingModel, ChromaApi chromaApi) {
        return ChromaVectorStore.builder(chromaApi, embeddingModel)
               .collectionName("TestCollection")
               .initializeSchema(true)
               .build();
    }
}
1.RestClient.Builder:构建 HTTP 请求客户端
  • SimpleClientHttpRequestFactory 是 Spring 提供的一个简单的 HTTP 客户端工厂。
  • 用于构建访问 Chroma REST API 的请求对象。
2.ChromaApi:封装对 Chroma 服务的访问接口
  • 通过构造方法传入 Chroma 服务地址 http://localhost:8000
  • 封装对集合、文档的增删改查操作;
  • 可以自定义超时、重试策略等。
3.ChromaVectorStore:集成到 Spring AI 的向量数据库适配器
  • 提供与 Spring AI 的统一接口 VectorStore
  • 支持添加文档、删除文档、查询相似文档等功能;
  • 会自动调用 OpenAI 的 Embedding 模型对文本进行向量化处理;
  • 支持指定集合名称(如 TestCollection)、是否初始化 Schema 等参数。

(三)向量检索控制器

该控制器借助 VectorStore 接口来达成文档的添加以及相似性检索操作。

@RestController
@RequestMapping("/vectorStore")
public class VectorStoreController {

    @Autowired
    VectorStore vectorStore;

    @GetMapping("/vectorQuery")
    public List<Document> vectorQuery() {
        List<Document> documents = List.of(
                new Document("Spring AI rocks!! ...", Map.of("meta1", "meta1")),
                new Document("The World is Big...", null),
                new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));

        vectorStore.add(documents);

        List<Document> results = vectorStore.similaritySearch(SearchRequest.builder()
               .query("Spring")
               .topK(5)
               .build());

        return results;
    }
}
1.add() 方法:添加文档至向量数据库
vectorStore.add(documents);
  • 接收一个 List<Document> 对象作为输入;
  • 自动调用 OpenAI 的 Embedding API 生成向量;
  • 存储到 Chroma 的指定集合中;
  • 支持元数据字段(metadata),便于后续筛选或过滤。
2.similaritySearch() 方法:执行相似性搜索
@GetMapping("/vectorQuery")
public List<Document> vectorQuery() {
   ...
   List<Document> results = vectorStore.similaritySearch(...);
   return results;
}
  • 使用 SearchRequest 构造查询请求;
  • 指定 query("Spring") 表示要查找与“Spring”语义最接近的文档;
  • 设置 topK(5) 表示返回最相关的前5个结果;
  • 最终返回一个 List<Document> 对象。
3.Document 类介绍

org.springframework.ai.document.Document 是 Spring AI 提供的标准文档结构类,具有以下属性:

字段 描述
content 文本内容,是被 Embedding 转换的对象
metadata 元数据字段,支持 Map 结构
id 可选字段,用于唯一标识文档

五、Chroma 向量数据库详解

(一)什么是向量数据库?

向量数据库是一种专门用于存储与查询向量数据(也就是
Embedding)的数据库系统。鉴于大语言模型(LLM)擅长处理文本之间的语义关联,而向量数据库专注于高效开展近似最近邻(ANN)搜索,二者结合能够实现强大的语义检索能力。

(二)Chroma 简介

Chroma 是一个轻量级、易部署、适合本地使用的开源向量数据库,它具备以下特点:

特点 描述
✅ 开源免费 社区活跃,易于扩展和定制
✅ 易部署 可一键启动,无需复杂依赖
✅ 支持REST API 方便与各类语言集成
✅ 支持多集合管理 不同业务模块可划分独立集合
✅ 支持持久化存储 支持本地磁盘保存数据

Chroma 非常适合在开发阶段或中小型知识库场景下使用。

(三)Chroma 核心概念

概念 说明
Collection 类似传统数据库的“表”,用于组织多个文档
ID 每个文档的唯一标识符

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12923.html

(0)
LomuLomu
上一篇 2025 年 7 月 21 日
下一篇 2025 年 7 月 21 日

相关推荐

  • 2025年最新DataGrip激活码分享 | 永久破解教程(支持2099年)

    前言 本教程适用于JetBrains系列开发工具,特别是DataGrip数据库管理软件,同时也兼容PyCharm、IDEA等其他产品。以下是最新DataGrip版本成功破解至2099年的效果展示: 本文将分步骤指导您完成DataGrip的永久激活,该方法具有以下显著特点:- 跨平台支持(Windows/Mac/Linux系统均可使用)- 版本兼容性强(新旧版…

    DataGrip激活码 2025 年 7 月 20 日
    22700
  • 2025年最新DataGrip永久破解教程(附激活码/注册码)🔥

    🚀 本教程适用于Jetbrains全家桶,包括IDEA、PyCharm、DataGrip、Golang等所有产品! 先给大家看看最新版本的破解成果,直接破解到2099年,简直不要太爽!😎 下面我就手把手教你如何永久激活DataGrip,这个方法同样适用于旧版本哦~ 无论你用的是Windows、Mac还是Linux系统,都能完美破解! 💪 第一步:下载Data…

    DataGrip激活码 2025 年 6 月 13 日
    18900
  • 锚点效应在独立站价格优化中的实践-《认知偏差指南》

    锚点效应在独立站价格优化中的实践-《认知偏差指南》 优化前后的价格呈现对比 原始促销价格展示方式 改进后的价格展示方案 理解锚点效应的本质 人们在做出判断时,往往会过度依赖最初获得的信息(即锚点),即便这些信息与当前决策并无直接关联。在决策过程中,人们习惯性地以这些初始信息为参照,迅速形成判断。 — 《认知偏差指南》 实施优化的心路历程 最初在搭建的几个独…

    2025 年 5 月 13 日
    19700
  • 2025年最新DataGrip永久破解教程 | 附激活码&注册码一键获取 🚀

    大家好!今天给大家带来一篇超详细的DataGrip破解教程,适用于2024-2025年最新版本,亲测可用!✨ 本教程支持Jetbrains全家桶(IDEA、PyCharm、Goland等)全系列激活哦! 先上成功破解后的效果图,可以看到有效期已经延长到2099年啦!🎉 📥 第一步:下载DataGrip安装包 如果你已经安装可以跳过这一步~ 访问官网下载:ht…

    2025 年 6 月 2 日
    1.1K00
  • 2025年最新DataGrip激活码与永久破解教程(支持2099年)

    JetBrains数据库工具破解全攻略(含DataGrip/PyCharm/IDEA等) 先展示最新DataGrip版本成功破解的截图,有效期直达2099年,经过严格测试! 下面详细介绍如何将DataGrip激活至2099年的完整流程。该方法适用于所有版本,包括最新和旧版! 全平台兼容:Windows/Mac/Linux均可使用 版本全覆盖:任何DataGr…

    DataGrip激活码 2025 年 8 月 3 日
    17800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信