马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
前言
该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial
我紧张参考 langchain 官方教程, 有选择性的记录了一下学习内容
这是教程清单
- 1.初试langchain
- 2.prompt
- 3.OutputParser/输出解析
- 4.model/vllm模型部署和langchain调用
- 5.DocumentLoader/多种文档加载器
- 6.TextSplitter/文档切分
- 7.Embedding/文本向量化
- 8.VectorStore/向量数据库存储和检索
- 9.Retriever/检索器
- 10.Reranker/文档重排序
- 11.RAG管道/多轮对话RAG
- 12.Agent/工具定义/Agent调用工具/Agentic RAG
向量存储的概念指南
向量存储是专门设计的数据库,用于通过向量体现(嵌入)来索引和检索信息。
它们通常用于通过识别语义相似的内容而非依赖精确的关键词匹配,来搜索非结构化数据,如文本、图像和音频。
为什么向量存储至关紧张
通过正确存储和索引嵌入向量,向量存储可以或许快速检索相关信息,即使在处理海量数据集时也能高效工作。
随着数据不断扩展,向量存储必须可以或许高效扩展。一个结构精良的向量存储可以确保体系处理大规模数据时不会出现性能问题,支持无缝增长。
与传统的基于关键词的搜索不同,语义搜索是根据内容的含义来检索信息。向量存储通过查找与用户查询上下文密切相关的段落或部门来实现这一点。这相比于仅能进行精确关键词匹配的原始文本数据库具有明显优势。
理解搜索方法
- 基于关键词的搜索
这种方法依赖于通过查询与文档中精确的单词或短语匹配来检索结果。它简单,但无法捕捉单词之间的语义关系。
- 基于相似度的搜索
利用向量体现来评估查询与文档之间的语义相似度。它提供了更正确的结果,尤其是对于自然语言查询。
- 基于分数的相似度搜索
根据查询为每个文档分配一个相似度分数。更高的分数体现相关性更强。常用的度量尺度包括 余弦相似度 或 基于距离的评分。
相似度搜索的工作原理
- 嵌入和向量的概念
嵌入 是单词或文档在高维空间中的数值体现。它们捕捉了语义信息,从而可以或许更好地比力查询和文档。
- 相似度度量方法
- 余弦相似度:衡量两个向量之间的夹角的余弦值。值越靠近 1 体现相似度越高。
- 欧几里得距离:计算向量空间中两个点之间的直线距离。距离越小体现相似度越高。
- 评分和排序搜索结果
计算相似度后,文档将被分配一个分数。根据这些分数,结果将按相关性降序分列。
- 搜索算法扼要概述
- TF-IDF:根据单词在文档中的频率及其在所有文档中的出现频率来赋予单词权重。
- BM25:TF-IDF 的改进版,优化了信息检索的相关性。
- 神经搜索:利用深度学习生成上下文感知的嵌入,以获得更正确的结果。
向量存储中的搜索类型
- 相似度搜索:找到与查询最相似的文档。适用于语义搜索应用。
- 最大边际相关性 (MMR) 搜索:通过优先选择多样且相关的文档,在搜索结果中平衡相关性和多样性。
- 希罕检索器:利用传统的基于关键词的方法,如 TF-IDF 或 BM25 来检索文档。适用于上下文有限的数据集。
- 麋集检索器:依赖麋集的向量嵌入来捕捉语义信息。常见于利用深度学习的现代搜索体系。
- 混合搜索:联合希罕和麋集的检索方法。通过将麋集方法的精确度与希罕方法的广泛覆盖性联合,达到最优结果。
向量存储作为检索器
- 功能:通过利用 .as_retriever() 方法将向量存储转换为检索器,你可以创建一个符合 LangChain 检索器接口的轻量级包装器。这使得你可以利用不同的检索计谋,如 相似度搜索 和 最大边际相关性 (MMR) 搜索,并允许自定义检索参数。
- 利用案例:适用于复杂的应用场景,在这些场景中,检索器必要作为更大流程的一部门,例如检索加强生成 (RAG) 体系。它便于与 LangChain 中的其他组件无缝集成,支持诸如集成检索方法和高级查询分析等功能。
总之,固然直接的向量存储搜索提供了基本的检索本领,但将向量存储转换为检索器,可以提供更强的灵活性和在 LangChain 生态体系中的集成,支持更复杂的检索计谋和应用。
集成向量数据库
- Chroma:一个开源的向量数据库,专为 AI 应用设计,支持高效存储和检索嵌入向量。
- FAISS:由 Facebook AI 开发,FAISS(Facebook AI Similarity Search)是一个用于高效相似度搜索和麋集向量聚类的库。
- Pinecone:一个托管的向量数据库服务,提供高性能的向量相似度搜索,使开发职员可以或许构建可扩展的 AI 应用步伐。
- Qdrant:Qdrant(读作 quadrant)是一个向量相似度搜索引擎。它提供了一个生产就绪的服务,具有便捷的 API,用于存储、搜索和管理向量,支持额外的有效载荷和扩展过滤功能。它适用于各种神经网络或基于语义的匹配、分面搜索和其他应用。
- Elasticsearch:一个分布式的 RESTful 搜索和分析引擎,支持向量搜索,允许在大型数据会合高效进行相似度搜索。
- MongoDB:MongoDB Atlas 向量搜索支持向量嵌入的高效存储、索引和查询,并与操纵数据一起利用,方便无缝实现 AI 驱动的应用。
- pgvector (PostgreSQL):一个 PostgreSQL 扩展,添加了向量相似度搜索功能,使得在关系数据库中高效存储和查询向量数据成为大概。
- Neo4j:一个图形数据库,存储节点和关系,并原生支持向量搜索,方便执行涉及图形和向量数据的复杂查询。
- Weaviate:一个开源的向量数据库,允许存储数据对象和向量嵌入,支持多种数据类型并提供语义搜索功能。
- Milvus:一个数据库,专为存储、索引和管理机器学习模型生成的大规模嵌入向量而设计,支持高性能的向量相似度搜索。
这些向量存储在构建必要高效相似度搜索和高维数据管理的应用步伐中起着至关紧张的作用。
LangChain 提供了一个同一的接口,用于与向量存储交互,利用户可以轻松切换不同的实现方式。
该接口包括用于 写入、删除 和 搜索 向量存储中的文档的核心方法。
紧张方法如下:
- add_documents : 将一组文本添加到向量存储中。
- upsert_documents : 向向量存储中添加新文档,大概假如文档已存在,则更新它们。
- 在本教程中,我们还将先容 upsert_documents_parallel 方法,它在适用时支持高效的大规模数据处理。
- delete_documents : 从向量存储中删除一组文档。
- similarity_search : 搜索与给定查询相似的文档。
Chorma
Create db
- from langchain_community.vectorstores import Chroma
- from langchain_openai import OpenAIEmbeddings
- embeddings = OpenAIEmbeddings(
- model="bge-m3",
- base_url='http://localhost:9997/v1',
- api_key='cannot be empty',
- # dimensions=1024,
- )
- vector_store = Chroma(
- collection_name="langchain_store",
- embedding_function=embeddings
- )
复制代码 Add Documents
将一组 Documents 添加到向量存储中, 并生成一组 id, id 可以自己预设置
返回每个 Documents 的 id
假如 embedding 功能会出现 InternalServerError, 大概文档文本有问题
假如不指定 ID,Chroma 会主动为文档生成唯一 ID,但手动指定 ID 可以资助你更方便地管理文档。
- from langchain_core.documents import Document
- texts = [
- "AI helps doctors diagnose diseases faster, improving patient outcomes.",
- "AI can analyze medical images to detect conditions like cancer.",
- "Machine learning predicts patient outcomes based on health data.",
- "AI speeds up drug discovery by predicting the effectiveness of compounds.",
- "AI monitors patients remotely, enabling proactive care for chronic diseases.",
- "AI automates administrative tasks, saving time for healthcare workers.
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |