LangChain 向量存储与检索技术详解

news/2024/11/14 5:00:09/文章来源:https://www.cnblogs.com/muzinan110/p/18541287

引言

在 RAG(检索增强生成)应用中,向量存储和检索是连接文档处理和 LLM 生成的关键环节。本文将深入探讨 LangChain 中的向量存储和检索技术,包括常用的向量数据库、嵌入模型以及高效的检索策略。

向量存储基础

向量存储是将文本转换为高维向量并进行存储和检索的技术。在 RAG 应用中,它主要用于:

  1. 存储文档片段的向量表示
  2. 快速检索与查询相似的文档片段

LangChain 支持多种向量存储解决方案,包括:

  • Chroma
  • FAISS
  • Pinecone
  • Weaviate
  • Milvus

常用向量数据库详解

1. Chroma

Chroma 是一个轻量级、开源的向量数据库,特别适合本地开发和小型项目。

使用示例

from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)query = "Your query here"
docs = vectorstore.similarity_search(query)

特点

  • 易于设置和使用
  • 支持本地存储
  • 适合小型项目和原型开发

2. FAISS

FAISS (Facebook AI Similarity Search) 是 Facebook 开发的高效相似性搜索库。

使用示例

from langchain.vectorstores import FAISSvectorstore = FAISS.from_documents(documents, embeddings)query = "Your query here"
docs = vectorstore.similarity_search(query)

特点

  • 高性能,适合大规模数据集
  • 支持多种索引类型
  • 可以进行本地部署

3. Pinecone

Pinecone 是一个托管的向量数据库服务,提供高性能的向量搜索能力。

使用示例

import pinecone
from langchain.vectorstores import Pineconepinecone.init(api_key="YOUR_API_KEY", environment="YOUR_ENV")vectorstore = Pinecone.from_documents(documents, embeddings, index_name="your-index-name")query = "Your query here"
docs = vectorstore.similarity_search(query)

特点

  • 完全托管的服务
  • 高可扩展性
  • 适合大规模生产环境

嵌入模型选择

嵌入模型负责将文本转换为向量表示。LangChain 支持多种嵌入模型,包括:

  1. OpenAI 嵌入模型
  2. Hugging Face 模型
  3. Cohere 模型

OpenAI 嵌入模型示例

from langchain.embeddings.openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()

Hugging Face 模型示例

from langchain.embeddings import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

选择嵌入模型时,需要考虑性能、成本和特定领域的适用性。

高效检索策略

为了提高检索效率和准确性,LangChain 提供了多种检索策略:

最基本的检索方法,返回与查询向量最相似的文档。

docs = vectorstore.similarity_search(query)

2. 最大边际相关性搜索(MMR)

在相关性和多样性之间取得平衡的检索方法。

docs = vectorstore.max_marginal_relevance_search(query)

3. 混合检索

结合关键词搜索和向量搜索的方法。

from langchain.retrievers import BM25Retriever, EnsembleRetrieverbm25_retriever = BM25Retriever.from_documents(documents)
vector_retriever = vectorstore.as_retriever()ensemble_retriever = EnsembleRetriever(retrievers=[bm25_retriever, vector_retriever],weights=[0.5, 0.5]
)docs = ensemble_retriever.get_relevant_documents(query)

性能优化技巧

  1. 索引优化:选择合适的索引类型(如 HNSW)以提高检索速度
  2. 批量处理:使用批量操作进行文档添加和检索
  3. 缓存策略:对常见查询结果进行缓存
  4. 向量压缩:使用量化技术减少向量存储空间
  5. 分片:对大规模数据集进行分片处理

结语

向量存储和检索是 RAG 应用的核心组件,直接影响系统的性能和准确性。通过深入理解 LangChain 提供的各种向量存储解决方案和检索策略,我们可以根据具体需求选择最合适的技术组合。在实际应用中,建议进行充分的性能测试和优化,以达到最佳的检索效果。

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

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

相关文章

南沙C++信奥赛老师解一本通题 1385:团伙(group)

​ 【题目描述】在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1、我朋友的朋友是我的朋友; 2、我敌人的敌人是我的朋友; 所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这…

Docker:部署kkFileView所有格式文档在线预览服务

前言 kkFileView是一个文档在线预览服务,基本支持主流文档格式预览,目前支持的文件类型如下:支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx,xlam, xla 等 Office 办公文档 支持 wps, dps, et, ett, wpt 等国产 WPS Office 办公文档 支…

学校厕所防欺凌检测系统

学校厕所防欺凌检测系统通过在关键区域安装的音频和视频监控设备,学校厕所防欺凌检测系统实时捕捉现场的声音和画面。AI音频分析技术能够对前端音频进行实时处理,当系统识别到“救命”、“打架”、“老师快来”等敏感词汇时,会自动触发预警机制,联动值班老师或校园安全中心…

物流园区烟火烟雾检测系统

物流园区烟火烟雾检测系统通过在园区关键位置安装的高清摄像头,物流园区烟火烟雾检测系统实现对监控区域的无人值守和不间断工作。系统利用先进的AI视觉算法,能够主动发现监控区域内的烟雾和火灾苗头,并进行实时分析报警。与传统的火灾监测系统相比,该系统不需要依赖其他传…

错误代码的个人见解以及逻辑分析题

一、代码错误分析代码中的错误: 1.src 指针指向字符串字面值,不可修改: 字符串 "hello,world" 是存储在只读区域的常量字符串,不能通过指针直接修改。 如果需要倒序操作,需要把字符串复制到一个可修改的内存中。2.dest 未正确分配内存: 在 malloc(len) 时,没有…

docx 生成word报告

# -*- coding: utf-8 -*- import base64 import os from io import BytesIO from docx import Document from docx.shared import Inches, Pt from bs4 import BeautifulSoup from matplotlib import pyplot as plt from wordcloud import WordCloud # 设置全局字体 plt.rcPara…

leetcode算法题-有效的括号(简单)

有效的括号(简单) leetcode:https://leetcode.cn/problems/valid-parentheses/description/ 前言 防止脑袋生锈,做一下leetcode的简单算法题,难得也做不来哈哈。 大佬绕道,小白可看。 题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符…

30+企业高管齐聚!医疗器械企业渠道优化与健康增长主题沙龙成功举办

10月29日,深圳医疗器械行业协会携手纷享销客,共同举办了一场以“渠道优化与健康增长”为主题,探索医疗器械企业在新形势下渠道管理及落地实践的沙龙活动。此次活动吸引了33位医疗器械企业的管理层,共同探寻医疗器械企业营销增长的新思路、新渠道与新路径。<活动照片>…

AutoCAD Blockview .net在wpf项目中的问题

之前使用Blockview是遇到平移的问题, 这几天在学习使用CommunityToolkit.MVVM框架来创建用户界面, 当创建GsPreviewCtrl控件时会遇到错误, 导致整个窗体不能显示, 错误信息如下:************** 异常文本 ************** System.InvalidProgramException: 公共语言运行时检…

html`` - function html(str) { return str+111 } 调用方式 - solidjs文档里面发现的

html`` - function html(str) { return str+111 } 调用方式 标签模板字符串Tagged Template Literals 这里是自己实现这个字符串模板,等于函数调用的另一种方式 html(111) html`111`solidjs文档里面发现的 https://www.solidjs.com/guides/getting-started#不使用构建工具----…

模态内重叠优化,简单有效的CLIP微调方法 | BMVC24 Oral

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: CLIP Adaptation by Intra-modal Overlap Reduction论文地址:https://arxiv.org/abs/2409.11338创新点提出一种基于轻量级适配的新方法,直接在图像空间中减少CLIP中的模态内重叠(IMO)。新特征与任何利用缓存模型的无…

一文了解:如何多纬度阐述数据安全传输问题,部署及解决方案!

企业的业务正常开展依赖安全有序的数据流转,数据传输环节融合在企业生产办公、日常经营、技术研究、战略发展等活动的方方面面。数据是任何企业的命脉,但企业数据在传输过程中仍然面临着监管机制不健全、传输主体涉及面广、网络环境复杂、攻击手段多样、数据泄露引发多米诺骨…