【RAG落地利器】向量数据库Qdrant使用教程

TrustRAG项目地址🌟:https://github.com/gomate-community/TrustRAG

可配置的模块化RAG框架

环境依赖

本教程基于docker安装Qdrant数据库,在此之前请先安装docker.

  • Docker - The easiest way to use Qdrant is to run a pre-built Docker image.
  • Python version >=3.8

启动Qdrant容器

1.拉取镜像

docker pull qdrant/qdrant

2.启动qdrant容器服务

docker run -d \--name qdrant_server \-v $(pwd)/qdrant_storage:/qdrant/storage \-p 6333:6333 \qdrant/qdrant
  • qdrant/qdrant 镜像创建一个名为 qdrant_server 的容器。
  • 将宿主机的 $(pwd)/qdrant_storage 目录挂载到容器的 /qdrant/storage 目录,以实现数据持久化。
  • 将宿主机的 6333 端口映射到容器的 6333 端口,以便通过宿主机访问 Qdrant 服务。
  • 容器在后台运行,不会占用当前终端。
docker logs qdrant_server

可以看到下面日志:

通过 http://localhost:6333/dashboard 地址访问web ui

基于RESTful API 操作向量数据库

第一步:创建一个集合

Qdrant向量数据库的集合概念可以类比MYSQL的表结构,用于统一存储同一类向量数据,集合中存储的每一条数据,在Qdrant中称为点(points),这里的点有数学几何空间的点类似的意思,代表向量在几何空间中的表示(你就当成一条数据看待就行)。

首先,我们需要创建一个名为 star_charts 的集合,用来存储殖民地数据。每个位置都会用一个四维向量来表示,并且我们会使用点积(Dot Product)作为相似度搜索的距离度量。

运行以下命令来创建集合:

PUT collections/star_charts
{"vectors": {"size": 4,"distance": "Dot"}
}

第二步:将数据加载到集合中

创建好集合之后,我们可以向集合添加向量数据,在Qdrant中向量数据使用point表示,一条point数据包括三部分id、payload(关联数据)、向量数据(vector)三部分。

现在集合已经设置好了,接下来我们添加一些数据。每个位置都会有一个向量和一些额外的信息(称为 payload),比如它的名字。

运行以下请求来添加数据:

PUT collections/star_charts/points
{"points": [{"id": 1,"vector": [0.05, 0.61, 0.76, 0.74],"payload": {"colony": "Mars"}},{"id": 2,"vector": [0.19, 0.81, 0.75, 0.11],"payload": {"colony": "Jupiter"}},{"id": 3,"vector": [0.36, 0.55, 0.47, 0.94],"payload": {"colony": "Venus"}},{"id": 4,"vector": [0.18, 0.01, 0.85, 0.80],"payload": {"colony": "Moon"}},{"id": 5,"vector": [0.24, 0.18, 0.22, 0.44],"payload": {"colony": "Pluto"}}]
}

第三步:运行搜索查询

现在,我们来搜索一下与某个特定向量(代表一个空间位置)最接近的三个殖民地。这个查询会返回这些殖民地以及它们的 payload 信息。

运行以下查询来找到最近的殖民地:

POST collections/star_charts/points/search
{"vector": [0.2, 0.1, 0.9, 0.7],"limit": 3,"with_payload": true
}

这样,你就可以找到与给定向量最接近的三个殖民地了!


上面命令,我们都可以在面板里面执行,

点击集合可以看到我们刚刚创建的例子:

点击可视化,我们可以看到集合里面的向量(point)

更多高级用法可以查看面板中的教程:

http://localhost:6333/dashboard#/tutorial

基于qdrant_client操作向量数据库

以下是将上述内容转换为 Markdown 格式的版本:

# Qdrant 快速入门指南## 安装 `qdrant-client` 包(Python)```bash
pip install qdrant-client

初始化客户端

from qdrant_client import QdrantClientclient = QdrantClient(url="http://localhost:6333")

创建 Collection

所有的向量数据(vector data)都存储在 Qdrant Collection 上。创建一个名为 test_collection 的 collection,该 collection 使用 dot product 作为比较向量的指标。

from qdrant_client.models import Distance, VectorParamsclient.create_collection(collection_name="test_collection",vectors_config=VectorParams(size=4, distance=Distance.DOT),
)

添加带 Payload 的向量

Payload 是与向量相关联的数据。

from qdrant_client.models import PointStructoperation_info = client.upsert(collection_name="test_collection",wait=True,points=[PointStruct(id=1, vector=[0.05, 0.61, 0.76, 0.74], payload={"city": "Berlin"}),PointStruct(id=2, vector=[0.19, 0.81, 0.75, 0.11], payload={"city": "London"}),PointStruct(id=3, vector=[0.36, 0.55, 0.47, 0.94], payload={"city": "Moscow"}),PointStruct(id=4, vector=[0.18, 0.01, 0.85, 0.80], payload={"city": "New York"}),PointStruct(id=5, vector=[0.24, 0.18, 0.22, 0.44], payload={"city": "Beijing"}),PointStruct(id=6, vector=[0.35, 0.08, 0.11, 0.44], payload={"city": "Mumbai"}),]
)print(operation_info)

运行查询

search_result = client.query_points(collection_name="test_collection", query=[0.2, 0.1, 0.9, 0.7], limit=3
).pointsprint(search_result)

输出

[{"id": 4,"version": 0,"score": 1.362,"payload": null,"vector": null},{"id": 1,"version": 0,"score": 1.273,"payload": null,"vector": null},{"id": 3,"version": 0,"score": 1.208,"payload": null,"vector": null}
]

添加过滤器

from qdrant_client.models import Filter, FieldCondition, MatchValuesearch_result = client.query_points(collection_name="test_collection",query=[0.2, 0.1, 0.9, 0.7],query_filter=Filter(must=[FieldCondition(key="city", match=MatchValue(value="London"))]),with_payload=True,limit=3,
).pointsprint(search_result)
[{"id": 2,"version": 0,"score": 0.871,"payload": {"city": "London"},"vector": null}
]

语义搜索入门实现

以官方教程为例,我在TrustRAG中对Qdrant进行了封装改造:

官方教程:https://qdrant.tech/documentation/beginner-tutorials/neural-search/
TrusRAG实现代码QdrantEngine:https://github.com/gomate-community/TrustRAG/blob/main/trustrag/modules/engine/qdrant.py

以下为使用完整代码:

from trustrag.modules.engine.qdrant import QdrantEngine
from trustrag.modules.engine.qdrant import SentenceTransformerEmbedding
if __name__ == "__main__":# Initialize embedding generatorslocal_embedding_generator = SentenceTransformerEmbedding(model_name_or_path="all-MiniLM-L6-v2", device="cpu")# openai_embedding_generator = OpenAIEmbedding(api_key="your_key", base_url="https://ark.cn-beijing.volces.com/api/v3", model="your_model_id")# Initialize QdrantEngine with local embedding generatorqdrant_engine = QdrantEngine(collection_name="startups",embedding_generator=local_embedding_generator,qdrant_client_params={"host": "192.168.1.5", "port": 6333},)documents=[{"name": "SaferCodes", "images": "https:\/\/safer.codes\/img\/brand\/logo-icon.png","alt": "SaferCodes Logo QR codes generator system forms for COVID-19","description": "QR codes systems for COVID-19.\nSimple tools for bars, restaurants, offices, and other small proximity businesses.","link": "https:\/\/safer.codes", "city": "Chicago"},{"name": "Human Practice","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/373036-94d1e190f12f2c919c3566ecaecbda68-thumb_jpg.jpg?buster=1396498835","alt": "Human Practice -  health care information technology","description": "Point-of-care word of mouth\nPreferral is a mobile platform that channels physicians\u2019 interest in networking with their peers to build referrals within a hospital system.\nHospitals are in a race to employ physicians, even though they lose billions each year ($40B in 2014) on employment. Why ...","link": "http:\/\/humanpractice.com", "city": "Chicago"},{"name": "StyleSeek","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/3747-bb0338d641617b54f5234a1d3bfc6fd0-thumb_jpg.jpg?buster=1329158692","alt": "StyleSeek -  e-commerce fashion mass customization online shopping","description": "Personalized e-commerce for lifestyle products\nStyleSeek is a personalized e-commerce site for lifestyle products.\nIt works across the style spectrum by enabling users (both men and women) to create and refine their unique StyleDNA.\nStyleSeek also promotes new products via its email newsletter, 100% personalized ...","link": "http:\/\/styleseek.com", "city": "Chicago"},{"name": "Scout","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/190790-dbe27fe8cda0614d644431f853b64e8f-thumb_jpg.jpg?buster=1389652078","alt": "Scout -  security consumer electronics internet of things","description": "Hassle-free Home Security\nScout is a self-installed, wireless home security system. We've created a more open, affordable and modern system than what is available on the market today. With month-to-month contracts and portable devices, Scout is a renter-friendly solution for the other ...","link": "http:\/\/www.scoutalarm.com", "city": "Chicago"},{"name": "Invitation codes", "images": "https:\/\/invitation.codes\/img\/inv-brand-fb3.png","alt": "Invitation App - Share referral codes community ","description": "The referral community\nInvitation App is a social network where people post their referral codes and collect rewards on autopilot.","link": "https:\/\/invitation.codes", "city": "Chicago"},{"name": "Hyde Park Angels","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/61114-35cd9d9689b70b4dc1d0b3c5f11c26e7-thumb_jpg.jpg?buster=1427395222","alt": "Hyde Park Angels - ","description": "Hyde Park Angels is the largest and most active angel group in the Midwest. With a membership of over 100 successful entrepreneurs, executives, and venture capitalists, the organization prides itself on providing critical strategic expertise to entrepreneurs and ...","link": "http:\/\/hydeparkangels.com", "city": "Chicago"},{"name": "GiveForward","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/1374-e472ccec267bef9432a459784455c133-thumb_jpg.jpg?buster=1397666635","alt": "GiveForward -  health care startups crowdfunding","description": "Crowdfunding for medical and life events\nGiveForward lets anyone to create a free fundraising page for a friend or loved one's uncovered medical bills, memorial fund, adoptions or any other life events in five minutes or less. Millions of families have used GiveForward to raise more than $165M to let ...","link": "http:\/\/giveforward.com", "city": "Chicago"},{"name": "MentorMob","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/19374-3b63fcf38efde624dd79c5cbd96161db-thumb_jpg.jpg?buster=1315734490","alt": "MentorMob -  digital media education ventures for good crowdsourcing","description": "Google of Learning, indexed by experts\nProblem: Google doesn't index for learning. Nearly 1 billion Google searches are done for \"how to\" learn various topics every month, from photography to entrepreneurship, forcing learners to waste their time sifting through the millions of results.\nMentorMob is ...","link": "http:\/\/www.mentormob.com", "city": "Chicago"},{"name": "The Boeing Company","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/49394-df6be7a1eca80e8e73cc6699fee4f772-thumb_jpg.jpg?buster=1406172049","alt": "The Boeing Company -  manufacturing transportation", "description": "","link": "http:\/\/www.boeing.com", "city": "Berlin"},{"name": "NowBoarding \u2708\ufe0f","images": "https:\/\/static.above.flights\/img\/lowcost\/envelope_blue.png","alt": "Lowcost Email cheap flights alerts","description": "Invite-only mailing list.\n\nWe search the best weekend and long-haul flight deals\nso you can book before everyone else.","link": "https:\/\/nowboarding.club\/", "city": "Berlin"},{"name": "Rocketmiles","images": "https:\/\/d1qb2nb5cznatu.cloudfront.net\/startups\/i\/158571-e53ddffe9fb3ed5e57080db7134117d0-thumb_jpg.jpg?buster=1361371304","alt": "Rocketmiles -  e-commerce online travel loyalty programs hotels","description": "Fueling more vacations\nWe enable our customers to travel more, travel better and travel further. 20M+ consumers stock away miles & points to satisfy their wanderlust.\nFlying around or using credit cards are the only good ways to fill the stockpile today. We've built the third way. Customers ...","link": "http:\/\/www.Rocketmiles.com", "city": "Berlin"}]vectors = qdrant_engine.embedding_generator.generate_embedding([doc["description"] for doc in documents])print(vectors.shape)payload = [doc for doc  in documents]# Upload vectors and payloadqdrant_engine.upload_vectors(vectors=vectors, payload=payload)# Build a filter for city and categoryconditions = [{"key": "city", "match": "Berlin"},]custom_filter = qdrant_engine.build_filter(conditions)# Search for startups related to "vacations" in Berlinresults = qdrant_engine.search(text="vacations", query_filter=custom_filter, limit=5)for result in results:print(result)

参考资料

  • 官方教程:https://qdrant.tech/documentation/beginner-tutorials/search-beginners/
  • Qdrant向量数据库介绍:https://www.tizi365.com/topic/8144.html
  • Qdrant官方快速入门和教程简化版:https://www.cnblogs.com/shizidushu/p/18385637
  • 【RAG利器】向量数据库qdrant各种用法,多种embedding生成方法
    :https://www.cnblogs.com/zxporz/p/18336698

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-单例模式

定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全,调用效率高,但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐,但如何将其转换为易于分享和打印的 PDF 格式,是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法,并探讨…

汽车网络信息安全-ISO/SAE 21434解析(上)

目录 概述 第四章-概述 1. 研究对象和范围 2. 风险管理 第五章-组织级网络安全管理 1. 网络安全治理(cybersecurity governance) 2. 网络安全文化(cybersecurity culture) 3. 信息共享(Information Sharing) 4. 管理体系…

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制(也称为私钥密码体制、对称密码体制)和公钥密码体制(也称为非对称密码体制、公开密钥加密技术)。 一、对称密钥密码体制 定义: 对称密钥密码体制是一种传…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言:在当今数字化时代,分布式系统和大数据处理变得愈发普遍,消息队列作为其中的关键组件,承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测

OpenCV中边缘检测四种常用算子: (1)Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度,并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核,分别用于计…

C语言编程笔记:文件处理的艺术

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、为什么要用文件二、文件的分…

头歌答案--爬虫实战

目录 urllib 爬虫? 第1关:urllib基础 任务描述 第2关:urllib进阶? 任务描述 requests 爬虫 第1关:requests 基础 任务描述 第2关:requests 进阶 任务描述 网页数据解析 第1关:XPath解析网页? 任务描述…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下:2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

Sqlmap入门

原理 在owasp发布的top10 漏洞里面,注入漏洞一直是危害排名第一,其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄漏 分类 按注入类型 常见的sql注入…

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式(Simple Queue)2.2 工作队列模式(Work Queues)2.3 发布/订阅模式(Publish/Subscribe)2.4 路由模式(R…

javaEE初阶————多线程初阶(2)

今天给大家带来第二期啦,保证给大家讲懂嗷; 1,线程状态 NEW安排了工作还未开始行动RUNNABLE可工作的,或者即将工作,正在工作BLOCKED排队等待WAITING排队等待其他事TIMED_WAITING排队等待其他事TERMINATED工作完成了 …

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节我们主要来学习单个函数的声明与定义,static和extern… 这里写目录标题 一、单个函数…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景:当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的&…

HTML应用指南:利用GET请求获取全国特斯拉充电桩位置

随着电动汽车的普及,充电基础设施的建设变得至关重要。作为电动汽车领域的先驱,特斯拉不仅在车辆技术创新上持续领先,还积极构建广泛的充电网络,以支持其不断增长的用户群体。为了提升用户体验和服务质量,开发人员和数…

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量:质量评估与改进策略 引言:数据质量的概念 在大数据时代,数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途,确保数据的准确性、完整性、一致性和及时性是数据质量的…