首页 > 数据库 >向量数据库 及 LangChain 用法

向量数据库 及 LangChain 用法

时间:2023-12-13 09:01:44浏览次数:45  
标签:12 数据库 LangChain qdrant https Qdrant 向量

当今科技领域的发展日新月异,向量数据库成为了热门的话题之一。

这些数据库以其高效的向量检索和相似度搜索功能,为各种应用场景提供了强大的支持。

本文旨在汇总向量数据库

Milvus、Zilliz、Faiss、Qdrant、LlamaIndex、Chroma、LanceDB、Pinecone、Weaviate、

 

基本介绍

1. Milvus

Milvus是一个开源的向量相似度搜索引擎,由Zilliz团队开发。它提供了高性能的向量检索和相似度搜索功能,支持海量数据的快速查询。Milvus支持多种向量类型和距离度量方法,并提供了易于使用的API和丰富的功能,使得开发者可以轻松构建各种应用,如图像搜索、推荐系统和自然语言处理。

2. Zilliz:

Zilliz是一家专注于大规模向量数据分析的公司,他们开发了多个与向量相关的开源项目,其中包括Milvus和Chroma。Zilliz致力于提供高效的向量数据处理和分析解决方案,帮助用户在海量数据中进行快速的相似度搜索和数据分析。

3. Faiss:

Faiss是Facebook AI Research开发的一个高性能向量相似度搜索库。它支持多种向量索引结构和距离度量方法,并提供了高效的搜索算法,能够在大规模数据集上进行快速的相似度搜索。Faiss被广泛应用于图像识别、语音识别和自然语言处理等领域。

4. Qdrant:

Qdrant是一个开源的向量搜索引擎,由Qdrant团队开发。它提供了高性能的向量检索和相似度搜索功能,支持多种向量类型和距离度量方法。Qdrant还提供了丰富的查询语法和灵活的配置选项,使得用户可以根据自己的需求进行定制化的搜索。

Qdrant 因其易用性和用户友好的开发者文档,面世不久即获得关注。

Qdrant 以 Rust 语言构建,提供 Rust、Python、Golang 等客户端 API,能够满足当今主流开发人员的需求。

不过, Qdrant 作为后起之秀,和其他竞品仍然存在一定差距,例如界面及查询功能不够完善。

5. LlamaIndex:

LlamaIndex是一个基于向量的数据库引擎,由Llama Labs开发。它提供了高效的向量存储和检索功能,支持多种向量类型和距离度量方法。LlamaIndex还提供了易于使用的API和丰富的功能,使得开发者可以快速构建各种应用,如推荐系统、广告投放和智能搜索。

6. Chroma:

Chroma是Zilliz团队开发的一个开源的向量数据管理系统。它提供了高效的向量存储和查询功能,支持多种向量类型和距离度量方法。Chroma还提供了可扩展的架构和分布式计算能力,能够处理大规模的向量数据集。

 

Qdrant Cloud VS Zilliz Cloud

--这两个都是云服务,不同点在于

Qdrant 更适合追求低成本基础设施维护的开发人员。

而如果应用系统更注重性能和可扩展性,Zilliz Cloud/Milvus 是更合适的选择。因为 Zilliz Cloud/Milvus 具备可扩展性极强、性能更佳、延时更低的特点,适用于对性能指标有着严格要求的场景。

 

每秒查询次数(QPS)

测试结果显示,在 10,000,000 条 768 维的向量数据中进行检索时,Zilliz Cloud 两款实例的 QPS 分别是 Qdrant Cloud 实例的 7 倍和 1 倍。

 具体见参考资料

 

Qdrant 用法

同其他数据库一样,支持本地和服务器部署

docker 部署

提取预构建的 Docker 映像并运行容器:

docker pull qdrant/qdrant
docker run -d -p 7541:6333 --ip=10.0.180.16  qdrant/qdrant     # 7541对外,6333是容器端口,必须是6333或者6334

-d 后台启动服务后

Access web UI at http://localhost:6333/dashboard

2023-12-06T04:43:43.136073Z  INFO storage::content_manager::consensus::persistent: Initializing new raft state at ./storage/raft_state.json    
2023-12-06T04:43:43.552838Z  INFO qdrant: Distributed mode disabled    
2023-12-06T04:43:43.552926Z  INFO qdrant: Telemetry reporting enabled, id: 9fcc223f-6fbe-4932-8a31-4663683e1baf    
2023-12-06T04:43:43.564727Z  INFO qdrant::tonic: Qdrant gRPC listening on 6334    
2023-12-06T04:43:43.564772Z  INFO qdrant::tonic: TLS disabled for gRPC API    
2023-12-06T04:43:43.565817Z  INFO qdrant::actix: TLS disabled for REST API    
2023-12-06T04:43:43.565952Z  INFO qdrant::actix: Qdrant HTTP listening on 6333    
2023-12-06T04:43:43.565991Z  INFO actix_server::builder: Starting 95 workers

即可访问 http://10.0.180.16:7541/dashboard

安装包

pip install qdrant-client pymilvus 

 

langchain demo

包括 本地 和 url 用法,下面的代码是将 文本 转换成向量 并存储到数据库

from langchain.vectorstores import Qdrant
from langchain.schema import Document
from langchain.embeddings.huggingface import HuggingFaceEmbeddings

docs = [Document(page_content=u'avc')]
embeddings = HuggingFaceEmbeddings(
            model_name=r"F:\weights\text2vec-base-chinese")

# qdrant = Qdrant.from_documents(
#     docs,
#     embeddings,
#     location=":memory:",        # 这个可以 Local mode with in-memory storage only
#     # path="emb_qdrant_pickle2",  # 不行
#     collection_name="my_documents",
# )

qdrant = Qdrant.from_documents(
    docs,
    embeddings,
    url='10.0.180.16:7541',
    prefer_grpc=False,  # 上面起服务用 6333,这里就需要False
    collection_name="my_documents",  # 这个随便
)
print(qdrant.similarity_search('a'))

读取已存储的数据

from langchain.vectorstores import Qdrant
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import qdrant_client
 
embeddings = HuggingFaceEmbeddings(model_name=r"F:\weights\text2vec-large-chinese")
client = qdrant_client.QdrantClient(
    url='10.0.180.16:7541', prefer_grpc=False
)
qdrant = Qdrant(
    client=client, collection_name="my_documents",
    # embedding_function=embeddings.embed_query,  # 这里报过错,可查看源码
    embeddings=embeddings
)
 
found_docs = qdrant.similarity_search('员工绩效管理模式有哪些')
print(found_docs)

python 也能直接用,不需要langchain,自行百度吧

 

FAISS 用法

Faiss是一个高效地稠密向量相似检索和聚类的工具包,

由Facebook开发,由C++编写,并且提供了python2和python3的封装。

安装

pip install faiss-cpu
pip install faiss-gpu

用法

  • xb 对于数据库,它包含所有必须编入索引的向量,并且我们将搜索它。它的大小是nb-by-d
  • xq对于查询向量,我们需要找到最近的邻居。它的大小是nq-by-d。如果我们只有一个查询向量,则nq = 1
import numpy as np
d = 3                           # dimension
nb = 5                      # database size 从多少个里面找最近的
nq = 2                       # nb of queries 有多少个被查找的

xb = np.array([[1, 1, 1], [1.2, 1.3, 1.2], [3, 3, 3], [5, 5, 5], [5.2, 5.3, 5.2]]).astype('float32')
# xb[:, 0] += np.arange(nb) / 1000.
xq = np.array([[1.1, 1, 1], [5.2, 5.2, 5.2]]).astype('float32')
# xq[:, 0] += np.arange(nq) / 1000.

import faiss                   # make faiss available
index = faiss.IndexFlatL2(d)   # build the index
print(index.is_trained)
index.add(xb)                  # add vectors to the index
print(index.ntotal)

k = 4                          # we want to see 4 nearest neighbors
D, I = index.search(xb[:5], k) # sanity check
print(I)
# [[0 1 2 3]      第一行代表 和 xb[0]即[1.1, 1, 1] 最近的 4个元素,由近及远
#  [1 0 2 3]        第二行代表 和 xb[1]即[1.2, 1.3, 1.2] 最近的 4个元素,由近及远
#  [2 1 0 3]
#  [3 4 2 1]
#  [4 3 2 1]]
print(D)
# [[ 0.          0.17000002 12.         48.        ]    对应上面的实际距离
#  [ 0.          0.17000002  9.37       42.57      ]
#  [ 0.          9.37       12.         12.        ]
#  [ 0.          0.16999996 12.         42.57      ]
#  [ 0.          0.16999996 14.969999   47.999996  ]]

D, I = index.search(xq, k)     # actual search
print(I[:5])                   # neighbors of the 5 first queries
print(I[-5:])

 

 

 

 

 

 

 

 

参考资料:

https://mp.weixin.qq.com/s/URSOuAAKhm9HzcAHCaQklw  智王点评:六大向量数据库

https://mp.weixin.qq.com/s/46ry2XXmW0kEXPeaDFKyTg  如何选择一个向量数据库|Qdrant Cloud v.s. Zilliz Cloud

https://qdrant.tech/documentation/guides/installation/       Qdrant 官网

 

https://www.jianshu.com/p/43db601b8af1  faiss 学习笔记(一) | 三种基础索引方式学习

https://zhuanlan.zhihu.com/p/67200902  Faiss库使用方法(一)

 

未研究

https://mp.weixin.qq.com/s/W7hVVBuxiCDkHYdaQxjX1g  使用LangChain和Qdrant进行无样板代码的问答

https://mp.weixin.qq.com/s/Q1RppVV8Fdti6hIIfCvCVw  Qdrant不只是高性能向量数据库

 

https://mp.weixin.qq.com/s/YOpNf34QIp9im8aA9LMvGw  将Milvus作为 OpenAI 嵌入的向量数据库

https://mp.weixin.qq.com/s/9NB7UUFr_nOwL3CRfcsdtA  Milvus 向量数据库的应用场景

https://mp.weixin.qq.com/s/qNCEDFsaGDjcH6g5z-y2xw  大模型应用之Milvus向量数据库实践

 

https://mp.weixin.qq.com/s/jzWlwgOMkYs4CNz1UlP0Rw  【开源】向量数据库

https://mp.weixin.qq.com/s/YENmch0b4rbNJ73bvBLUpQ  大模型中间件 向量数据库原理和选择

标签:12,数据库,LangChain,qdrant,https,Qdrant,向量
From: https://www.cnblogs.com/yanshw/p/17879289.html

相关文章

  • 人大金仓数据库 生成时间列表
      SELECTto_char(generate_series('2024-12-01'::DATE,'2024-12-31'::DATE,'2day'),'YYYY-MM-DD')ASdate;SELECTto_char(generate_series('2024-12-1200'::DATETIME,'2024-12-1......
  • openGauss学习笔记-154 openGauss 数据库运维-备份与恢复-闪回恢复
    openGauss学习笔记-154openGauss数据库运维-备份与恢复-闪回恢复闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚......
  • openGauss学习笔记-155 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-155openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-概述155.1概述openGauss提供的gs_dump和gs_dumpall工具,能够帮助用户导出需要的数据库对象或其相关信息。通过导入工具将导出的数据信息导入至需要的数据库,可以完成数据库......
  • .net批量插入到oracle数据库--三种方式对比,亲测
    根据上篇的内容,简单测试了三种方式的对比,需要使用的,请自行根据需求优化。。。上篇文字网址:https://www.cnblogs.com/ggll611928/p/17897005.html 1、创建测试表CREATETABLET_TEST(IDNUMBER(9)notnull,NAMENVARCHAR2(30)notnull,AGENUMBER(2)......
  • .net批量插入到oracle数据库
    最近用到批量插入数据到oracle,总结了网上的方案 方式一:使用数组绑定https://www.codenong.com/343299/数据库:CREATE TABLE jkl_test (id NUMBER(9));USINGOracle.DataAccess.Client;namespaceOracleArrayInsertExample{classProgram{staticv......
  • Django 创建项目时找不到数据库sqlite3,提示no changes detected
    原因:PyCharm创建Django项目,找不到数据库sqlite3 解决:如果没有默认的db文件,则应在PyCharm终端中执行以下命令:pythonmanage.pymakemigrations:提示pythonmanage.pymigrate ......
  • 数据库学习
    前言IDEA集成了众多插件,方便开发者使用,使用其自带的Database模块就可以很方便的配置、连接到数据库。查看MySQL运行状态先启动MySQL,快捷键win+r然后输入services.msc,查找MySQL然后启动MySQLServer。IDEA开启数据库连接模块点击View->ToolWindows->Database开启数据库模块......
  • 达梦数据库重新初始化
    1.删除原数据库实例服务进入数据库安装目录./script/root/dm_service_uninstaller.sh-nDmServicedmdbDmServicedmdb是数据库实例的默认名称忘记名称可以在系统服务下查询Dm相关service2.删除数据库目录rm-rf/data/dm-data/DAMENG/*3.创建数据库实例切换到达梦用......
  • Oracle-修改数据库密码
    当Oracle数据库用户的密码过期时,你可以采取以下步骤来处理:1、连接到数据库:使用具有管理员权限的账户(比如SYS或SYSTEM用户)连接到Oracle数据库。查看过期用户:运行以下SQL查询语句查看已过期的用户列表:SELECTusernameFROMdba_usersWHEREaccount_status='EXPIRED......
  • 【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB
    2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把。但有人会说,GPT对于我们数据开发来说并没有什么作用啊?今天为大家推荐的开源项目,就是GPT在数据领域的一个优秀实践项目。让我们一起来看看吧~Chat2DB是一个集成了ChatGPT功能的数据库S......