向量数据库Qdrant
向量数据库,顾名思义,它以高维向量的形式存储数据。这些向量是一串数字,代表了某个对象的特征或属性。每一个向量都对应着一个独一无二的实体,比如一段文字、一张图片或一段视频。
Java AI 开发工具与向量数据库:构建智能应用的技术基石
在人工智能(AI)快速迭代的今天,Java 作为一门成熟稳定的编程语言,依然在企业级 AI 应用开发中占据重要地位。从模型调用到数据处理,Java 生态提供了丰富的工具链;而向量数据库作为 AI 时代的 “新基建”,则成为连接模型与现实数据的关键纽带。本文将深入解析 Java AI 开发的核心工具与向量数据库的技术原理,并探讨二者如何协同构建高效智能的应用系统。
什么是向量数据库?
向量数据库,顾名思义,它以高维向量的形式存储数据。这些向量是一串数字,代表了某个对象的特征或属性。每一个向量都对应着一个独一无二的实体,比如一段文字、一张图片或一段视频。
为什么选择向量呢?
向量的魅力在于它们能够精准捕捉到数据的语义含义和相似度。
向量数据库核心
向量数据库的核心在于相似性搜索(Similarity Search)。将文本转换成向量,然后将向量存储在数据库中,当用户输入问题时,将问题转换成向量,然后在数据库中搜索最相似的向量和上下文,最后将文本返回给用户。
为何向量数据库受到青睐?
近年来,随着机器学习和人工智能领域的迅速发展,向量数据库的需求日益增加。AI 和 ML 模型需要处理的非结构化数据量巨大,这就需要一种有效的存储、检索和搜索方法。
重点:
采用了专门的搜索和索引算法,能够迅速地在数十亿条数据中找到相似的向量。
向量数据库的应用场景
向量数据库的出现极大地扩展了 AI 和 ML 应用的可能性
一些典型的应用场景包括:
- RAG 系统:将向量数据库与大型语言模型结合,可构建出基于知识的语言 AI 应用。
- 推荐系统:利用向量数据库构建个性化推荐引擎,通过向量来表示用户偏好和商品特性。
- 基于内容的检索:向量数据库能够搜索视觉上相似的图像或视频,彻底改变了内容检索方式。
- 自然语言处理:通过将文本转换为向量,向量数据库支持语义搜索、主题建模和文档分类。
- 欺诈检测:向量数据库能够帮助识别金融交易中的异常模式和趋势。
Qdrant向量数据库
目前常见的向量数据库有 Qdrant, Milvus, Faiss 等等。
什么是Qdrant
"Qdrant "是一个向量相似性搜索引擎,提供生产就绪的服务,并配有方便的 API,用于存储、搜索和管理点(即向量)以及附加的有效负载。” 你可以将有效负载视为额外的信息片段,这些信息可以帮助你优化搜索,并向用户提供有用的信息。
由 Rust 编写的向量数据库, 在性能上自然是第一梯队的。
Qdrant 目前实现了 4 种距离算法
• 余弦相似度:适用于比较向量的方向,而不考虑向量的大小. 比如文本相似度, 信息检索等.
• 欧氏距离:适用于度量两点之间的直线距离,考虑向量的大小和方向. 用于几何计算, 图像处理等.
• 点积:适用于度量向量的相对位置和方向. 常用于线性代数和信号处理等离散数据计算.
• 曼哈顿距离:适用于度量两点之间的网格距离,适合网格状或离散空间. 用于路径规划, 特征工程等.
Qdrant 架构概览

概念:
- 集合 (collections): 可以类比为 MySQL 中的表, 里边存储了一条条的记录
- Points: 这个结构类似 MySQL 中的一条记录, 这是一个实体, 由三部分组成
- • 唯一 ID
- • vector: 固定长度的向量, 在创建集合的时候, 就已经确定好的
- • payload: 记录里携带的 json 对象, 我们也是我们要利用的核心数据
- Storage: 向量的存储方式, 向量和 payload 会分开存储, 通过 payload 索引进行关联, 为了保证数据完整,
Qdrant向量库安装
使用Docker安装Qdrant:
docker run -d -p 6333:6333 -p 6334:6334 qdrant/qdrant
参数说明:
- 端口6333:用于HTTP API
- 端口6334:用于gRPC API
访问
http://192.168.47.120:6333/dashboard#/welcome

集成LangChain4j与Qdrant_创建索引
添加Maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springai</groupId>
<artifactId>Ai</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>LangChain4jQdrant</artifactId>
<packaging>jar</packaging>
<name>LangChain4jQdrant</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-qdrant</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-zhipu-ai</artifactId>
<version>0.35.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--SpringbootTest-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
创建Qdrant客户端
package com.springai.config;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore;
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
@Configuration
public class QdrantConfig {
//创建qdrant客户端
@Bean
public QdrantClient qdrantClient() {
QdrantGrpcClient.Builder grpcClient =
QdrantGrpcClient.newBuilder("192.168.66.99", 6334, false);
return new QdrantClient(grpcClient.build());
}
创建索引
SpringBootTest
public class AppTest {
@Autowired
QdrantClient qdrantGrpcClient;
//创建qdrant索引
@Test
public void testApp() {
var vectorParams = Collections.VectorParams.newBuilder()
.setDistance(Collections.Distance.Cosine)
.setSize(1024)
.build();
qdrantGrpcClient.createCollectionAsync("testv", vectorParams);
System.out.println("创建成功");
}
访问可视化模板查看是否创建成功

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)