LangChain教程 - 支持的向量数据库列举

系列文章索引
LangChain教程 - 系列文章

向量数据库是现代自然语言处理应用中不可或缺的组件,它们可以高效地存储、索引和检索嵌入向量,支持大规模的相似性搜索任务。LangChain 是一个强大的框架,允许开发者轻松将大型语言模型与向量数据库结合,构建智能问答系统、推荐系统和检索增强生成(RAG)应用。

在本教程中,我们将详细介绍 LangChain 支持的 10 多种向量数据库,包括它们的优缺点及适用场景,帮助你选择最适合的数据库来支持你的应用。


1. FAISS (Facebook AI Similarity Search)

优点

  • 高效且开源。
  • 支持 CPU 和 GPU 加速。
  • 适用于本地部署和研究项目。

缺点

  • 缺乏内置的持久化存储功能。
  • 不适合大规模分布式部署。

适用场景
FAISS 适用于需要在本地快速处理大规模嵌入数据的项目,尤其是研究和开发环境。它对小规模的 RAG 系统非常理想。

FAISS 代码示例
pip install faiss-cpu
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddingsembedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = FAISS.from_texts(texts, embedding_model)
docs = vectorstore.similarity_search("这是查询")
print(docs)

2. Pinecone

优点

  • 云托管服务,支持自动扩展。
  • 高效处理大规模向量数据,支持实时查询。

缺点

  • 云服务依赖网络。
  • 成本相对较高。

适用场景
Pinecone 非常适合需要云端扩展、高可用性和持久存储的大规模应用,如实时推荐系统和语义搜索系统。

Pinecone 代码示例
pip install pinecone-client
import pinecone
from langchain.vectorstores import Pinecone
from langchain.embeddings.openai import OpenAIEmbeddingspinecone.init(api_key="your-pinecone-api-key", environment="us-west1-gcp")
index_name = "example-index"
pinecone.create_index(index_name, dimension=1536)
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Pinecone.from_texts(texts, embedding_model, index_name=index_name)
docs = vectorstore.similarity_search("这是查询")
print(docs)

3. Weaviate

优点

  • 开源并支持知识图谱集成。
  • 支持基于向量和属性的混合搜索。
  • 支持多种嵌入模型。

缺点

  • 需要较复杂的配置。
  • 对初学者来说学习成本较高。

适用场景
Weaviate 适用于需要语义搜索、知识图谱功能的高级应用,例如构建复杂的企业知识管理系统。

Weaviate 代码示例
pip install weaviate-client
import weaviate
from langchain.vectorstores import Weaviate
from langchain.embeddings.openai import OpenAIEmbeddingsclient = weaviate.Client("http://localhost:8080")
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Weaviate(client, embedding_model)
docs = vectorstore.similarity_search("这是查询")
print(docs)

4. Chroma

优点

  • 开源且轻量级,易于本地部署。
  • 专门为检索增强生成 (RAG) 应用设计。

缺点

  • 目前功能较为基础。
  • 缺乏大规模分布式支持。

适用场景
Chroma 适合用于开发和测试阶段的小型项目或个人应用。它的轻量化使其在开发环境中快速迭代十分便利。

Chroma 代码示例
pip install chromadb
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddingsembedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Chroma.from_texts(texts, embedding_model)
docs = vectorstore.similarity_search("这是查询")
print(docs)

5. Milvus

优点

  • 开源并且支持 GPU 加速。
  • 能处理大规模数据,适合工业应用。

缺点

  • 需要额外的基础设施配置。
  • 初期设置和管理较为复杂。

适用场景
Milvus 适合大规模工业级别的向量检索任务,尤其是需要处理海量数据和高并发请求的企业级应用。

Milvus 代码示例
pip install pymilvus
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection
from langchain_community.vectorstores import Milvus
from langchain_community.embeddings import OpenAIEmbeddingsconnections.connect("default", host="localhost", port="19530")
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=1536)
]
schema = CollectionSchema(fields)
collection = Collection(name="example_collection", schema=schema)
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
embeddings = embedding_model.embed_documents(texts)
ids = list(range(1, len(texts) + 1))
collection.insert([ids, embeddings])
collection.flush()
query = "这是查询"
query_embedding = embedding_model.embed_query(query)
vectorstore = Milvus(collection, embedding_model)
docs = vectorstore.similarity_search(query)
print(docs)

6. Qdrant

优点

  • 开源且实时,支持高效的向量检索。
  • 提供托管服务和本地部署选项。

缺点

  • 功能相对其他数据库稍显基础。

适用场景
Qdrant 适合实时语义搜索应用,如推荐系统和智能聊天机器人,尤其是需要快速响应的场景。

Qdrant 代码示例
pip install qdrant-client
from qdrant_client import QdrantClient
from langchain.vectorstores import Qdrant
from langchain.embeddings.openai import OpenAIEmbeddingsclient = QdrantClient(url="http://localhost:6333")
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Qdrant.from_texts(texts, embedding_model, client)
docs = vectorstore.similarity_search("这是查询")
print(docs)

7. ElasticSearch

优点

  • 广泛应用的全文搜索引擎,支持向量检索。
  • 与其他 Elastic 产品高度集成。

缺点

  • 性能在大规模向量检索时可能有所限制。
  • 需要一定的学习成本。

适用场景
ElasticSearch 非常适合那些已经依赖全文检索并且希望引入向量搜索功能的应用,如内容管理系统、电子商务平台等。

ElasticSearch 代码示例
pip install elasticsearch
from elasticsearch import Elasticsearch
from langchain.vectorstores import ElasticSearch
from langchain.embeddings.openai import OpenAIEmbeddingsclient = Elasticsearch("http://localhost:9200")
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = ElasticSearch(client, embedding_model, index_name="example_index")
docs = vectorstore.similarity_search("这是查询")
print(docs)

8. Azure Cognitive Search

优点

  • 由 Microsoft Azure 提供托管服务,支持扩展和全球可用性。
  • 与 Azure 生态系统集成紧密,适合企业使用。

缺点

  • 依赖 Azure 云服务,成本较高。
  • 针对小型项目可能显得过于复杂。

适用场景
Azure Cognitive Search 适合大型企业和需要高度集成 Azure 服务的应用,尤其是需要全球可用性和高可扩展性的情况。

Azure Cognitive Search 代码示例
from langchain.vectorstores import AzureCognitiveSearch
from langchain.embeddings.openai import OpenAIEmbeddingsservice_name = "your_service_name"
index_name = "your_index_name"
api_key = "your_api_key"
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = AzureCognitiveSearch.from_texts(texts, embedding_model, service_name, index_name, api_key)
docs = vectorstore.similarity_search("这是查询")
print(docs)

9. Redis with RediSearch

优点

  • 内存数据库,提供快速的实时搜索。
  • 低延迟

,适用于高性能应用。

缺点

  • 数据存储在内存中,适合处理的数据量受内存大小限制。
  • 需要安装 RediSearch 模块。

适用场景
Redis 非常适合需要低延迟和高性能的实时应用,如实时推荐系统和会话管理系统。

Redis 代码示例
pip install redis
import redis
from langchain.vectorstores import Redis
from langchain.embeddings.openai import OpenAIEmbeddingsclient = redis.Redis(host="localhost", port=6379)
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Redis.from_texts(texts, embedding_model, redis_url="redis://localhost:6379")
docs = vectorstore.similarity_search("这是查询")
print(docs)

10. Zilliz Cloud

优点

  • 基于 Milvus 的托管服务,具有企业级扩展能力。
  • 云端解决方案,支持大规模数据处理。

缺点

  • 依赖云服务,可能带来网络延迟。

适用场景
Zilliz Cloud 适合企业级别的大规模向量检索应用,特别是那些需要快速上线并希望减少基础设施管理的项目。

Zilliz Cloud 代码示例
pip install pymilvus
from pymilvus import connections
from langchain.vectorstores import Zilliz
from langchain.embeddings.openai import OpenAIEmbeddingsconnections.connect("default", uri="your_zilliz_cloud_uri")
embedding_model = OpenAIEmbeddings()
texts = ["这是一个例子", "另一个例子"]
vectorstore = Zilliz.from_texts(texts, embedding_model)
docs = vectorstore.similarity_search("这是查询")
print(docs)

总结

LangChain 支持多种向量数据库,包括本地和云端解决方案,每个数据库都有其独特的优点和适用场景:

  • 本地部署:FAISS、Chroma、Milvus 适合需要在本地进行开发和测试的项目。
  • 云托管解决方案:Pinecone、Weaviate、Zilliz Cloud 等适合需要高可用性和大规模分布式部署的应用。
  • 实时应用:Redis 通过其低延迟的特性,适合需要快速响应的应用场景。

根据你的需求选择合适的向量数据库,与 LangChain 集成构建高效的检索增强生成系统。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

linux入门介绍(通俗易懂,快速理解linux)

什么是操作系统? 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是配置在计算机硬件上的第一层软件,任何其它软件都必须在操作系统的支持下才能运行。 简单来说&#…

【LeetCode热题100】位运算

这篇博客先介绍了常见位运算操作,然后记录了关于位运算的几道题,包括判定字符是否唯一、丢失的数字、两整数之和、只出现一次的数字2、消失的两个数字。 在这一部分,我们不妨先来总结一下常见位运算操作: 1.基础位运算 >>…

fastadmin数据库创建说明文档

文章目录 数据库根据字段类型特殊字段以特殊字符结尾的规则注释说明 实例数字下拉列表日期时间文本框权重category_id --单选下拉框category_ids --多选下拉框deletetime --对应回收站status --对应tab常见问题 参考完结 数据库 这里提供的是数据库表字段规则在你创建表时使用…

Linux内核移植实战总结

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用,方便进一步记录自己的实践总结。 前两章我们简单了解了一下 Linux 内核顶层 Makefile 和 Linux 内核的启动流程,本章我们就来学习一下如何将 NXP官方提供的 Linux 内核移…

17.1ksm关注指标讲解 pod和node状态的统计

本节重点介绍 : 主要的应用 看状态数个数 根据13105大盘模板看ksm指标 节点指标pod和容器指标资源对象按namespace分布指标其他资源指标 主要的应用 看状态,举例图片数个数,举例图片 根据大盘模板 查看指标 https://grafana.com/grafana/dashboard…

Tomcat靶场攻略

一.CVE-2017-12615 1.首页抓包,修改为 PUT 方式提交 ,将jsp木马写到数据包中 2.哥斯拉默认秘钥连接 二.后台弱⼝令部署war包 1.制作WAR包,上传 将JSP⽊⻢压缩为ZIP格式,然后修改后缀为war 2.文件上传成功后,默认会在网站根目录下生成和wa…

Apache 中间件漏洞

CVE-2021-41773 环境搭建 docker pull blueteamsteve/cve-2021-41773:no-cgid 访问172.16.1.4:8080 使⽤curl http://172.16.1.4:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd

面向对象设计其他原则例题

答案:D 知识点: 面向对象设计其他原则 重用发布等价原则 重用的粒度就是发布的粒度 共同封闭原则 包中的所有类对于同一性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包里的所有类产生影响,而对于其他的…

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2​​​​​​​ 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne…

如何为 Java 应用程序创建安装程序

在 Java 中编写桌面应用程序时,我们总是希望其外观和感觉能够尽量贴近原生应用程序。因为一个优秀的应用程序应该要能融入其中,为用户提供已经熟悉的体验。 Swing GUI 的外观和感觉: Metal vs. Native 在桌面上,用户的使用旅程并不是从应用程…

什么是频谱泄露?

参考:https://www.bilibili.com/video/BV17a411j7bH/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 在理想情况下(周期信号且时间无限),信号经过 FFT 后可以得到理想的频谱 但在现实…

【iOS】引用计数(一)

【iOS】引用计数 文章目录 【iOS】引用计数前言ARC与MRC什么是引用计数的机制内存管理的思考方式自己生成的对象非自己生成的对象不再需要自己持有就释放无法释放非自己持有的对象 autorelease小结 前言 笔者最近开始学习了一下有关于引用计数的内容,写这篇博客来简…

关于自动化测试的一点了解

一 自动化测试基础的认识 1)首先,什么是自动化测试? 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的过程一步步执行测试,得到实…

史上最全!!!大厂面试真题-SpringBoot自动装配的原理是什么?

我想你也在真实面试中被问过无数次这个问题了,我也是,但是不管你怎么搜,都只有那几篇八股文的答案,你问GPT它都解释不清楚,我决定自己写一篇详细的,避免遗忘也想帮助一下患难中的兄弟姐妹们,能把…

struct的精确用法

目录 我终于回来啦! 1,可以创造根据结构体格式的成员或数组。 普通成员 数组成员 2,可以用指针遍历成员 3,使用typedef --------------------------------------------------------------------------------------------------------------------------------…

代码随想录Day 52|题目:101.孤岛的面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part03题目一:101.孤岛的总面积解题思路DFS**BFS** 题目二:102. 沉没孤岛解题思路 题目三:103. 水流问题解题思路优化 题目四:104.建造最大岛屿…

[Linux]用户管理指令

开机/重启/登录/注销 进入xhsell 或者虚拟系统中, 右键桌面打开终端, 在终端执行命令, 重启或关机linux系统 建议使用普通账号登录, 如果权限不够时, 使用 su - 用户名 命令切换到超管, 然后再使用 logout命令退回到普通账号, logout 不能在图形界面的终端中使用 用户管理 Li…

Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)

文章目录 一、环境准备1、硬件准备(虚拟主机)2、操作系统版本3、硬件配置4、网络 二、注意点1、主机命名格式2、网络插件 flannel 镜像拉取2.1、主机生成公私钥2.2、为啥有 Github 还用 Gitee2.3、将主机公钥添加到 Gitee2.3.1、复制主机上的公钥2.3.2、…

最佳植树距离 - 华为OD统一考试(E卷)

2024华为OD机试(C卷D卷E卷)最新题库【超值优惠】Java/Python/C合集 题目描述 按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在…

电脑提示找不到msvcp110.dll怎么办?全方面详细解答

msvcp110.dll 是 Microsoft Visual C 2012 Redistributable Package 中的一个动态链接库文件。它是运行使用 Visual C 2012 开发的应用程序所必需的,包含了许多 C 标准库函数的实现。这些函数主要用于支持字符串处理、内存管理、输入输出流、异常处理等功能。 1.ms…