创建LLM应用程序,Python向量数据库和向量索引指南

本文将介绍Python向量数据库和向量索引:创建LLM应用程序。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

图片

一、简介

向量数据库实现了快速的相似性搜索,并可在数据点之间进行扩展。对于LLM应用程序,通过将向量附加到现有存储上,向量索引可以简化全向量数据库的架构。选择索引还是数据库取决于专业需求、现有基础设施和更广泛的企业需求。

由于使用其硬件创建的生成式AI应用程序,Nvidia经历了显著增长。另一项软件创新——向量数据库,也在这股生成式AI浪潮中蓬勃发展。

开发人员正在使用Python创建基于向量数据库的AI应用程序。通过将数据编码为向量,他们可以利用向量空间的数学属性,在非常大的数据集上实现快速的相似性搜索。

接下来跟随本文从基础知识开始!

图片

二、向量数据库基础知识

向量数据库将数据以数值向量的形式存储在坐标空间中。这使得可以通过诸如余弦相似性之类的运算来计算向量之间的相似性。

最接近的向量代表最相似的数据点。与标量数据库不同,向量数据库针对相似性搜索进行了优化,而不是复杂的查询或事务处理。

即使在数十亿个数据点上,检索相似向量也只需要毫秒级而不是分钟级。

向量数据库通过建立索引高效地查询接近的向量。这在某种程度上类似于文本搜索引擎为快速全文搜索而对文档建立索引的方式。

三、与传统数据库相比,向量搜索为开发人员提供的优势

对于开发人员来说,向量数据库提供了以下优势:

  • 快速的相似性搜索——在毫秒级别查找相似向量

  • 对动态数据的支持——持续更新带有新数据的向量

  • 可扩展性——在多台机器上扩展向量搜索

  • 灵活的架构——向量可以存储在本地、云对象存储或托管数据库中

  • 高维度——每个向量可以索引数千个维度

  • 应用程序接口(API)——如果选择使用托管的向量数据库,通常会提供清晰的查询API以及与一些现有数据科学工具包或平台的集成。

向量搜索支持的常见用例示例(向量数据库的主要特色功能):

  • 视觉搜索——查找相似的产品图像

  • 推荐——推荐、建议内容

  • 聊天机器人——将查询与意图相匹配

  • 搜索——从文本向量中提取、显示相关文档

向量搜索开始受到重视的用例示例:

  • 异常检测——识别异常向量

  • 药物发现——通过属性向量关联分子

四、什么是Python向量数据库?

包括支持向量数据库完整生命周期的Python库的向量数据库被称为Python向量数据库。数据库本身并不需要用Python创建。

五、这些Python向量数据库应该支持哪些功能?

对向量数据库的调用可以分为两类:与数据相关的调用和与管理相关的调用。好消息是,它们遵循与传统数据库类似的模式。

库应该支持的数据相关函数:

图片

库应该支持的标准管理相关函数:

图片

现在跟随本文进一步讨论在这些数据库之上创建LLM应用程序的高级概念。

六、创建LLM应用程序的架构

在深入了解基于向量搜索的LLM应用程序的架构之前,首先从工作流程的角度了解一下其中涉及的内容。

典型的工作流程包括:

  1. 丰富或清理数据。这是一个轻量级的数据转换步骤,用于提高数据质量和保持一致的内容格式。这也是数据可能需要丰富的地方。

  2. 通过模型将数据编码为向量。模型中包含一些转换器(例如句子转换器)。

  3. 将向量插入向量数据库或向量索引(稍后将对此进行说明)。

  4. 通过Python API进行搜索。

  5. 文档编排工作流程。

  6. 在应用程序和用户界面(例如聊天用户界面)中测试和可视化结果。

现在,看看如何使用不同的架构组件来启用这个工作流程的不同部分。

对于此步骤1),可能需要开始从其他源系统(包括关系数据库或内容管理系统)获取元数据。

对于上述步骤2),通常首选预训练模型。OpenAI模型是通过托管服务提供的最受欢迎的模型。出于隐私和安全原因,可以托管本地模型。

对于步骤3),如果需要进行大规模相似性搜索(例如在包含十亿条记录的数据集中进行搜索),则需要一个向量数据库或向量索引。从企业的角度来看,在进行“搜索”之前,通常需要了解更多的背景情况。

对于上述步骤4),好消息是公开的搜索通常遵循类似的模式。类似以下代码的形式:

来自Pinecone

【Pinecone】:https://docs.pinecone.io/docs/metadata-filtering#:~:text=eq%22%3A%20%5B%22comedy%22%2C%20%22documentary%22%5D%7D%7D-,Inserting%20metadata%20into%20an%20index,-Metadata%20can%20be

index = pinecone.Index("example-index")

index.upsert([
    ("A", [0.1, 0.1, 0.1, 0.1], {"genre": "comedy", "year": 2020}),
)


index.query( 
vector=[0.1, 0.1, 0.1, 0.1], 
filter={ 
"genre": {"$eq": "documentary"}, 
"year": 2019 
}, 
top_k=1,
)

这里有一行很有意思:

filter={ 
"genre": {"$eq": "documentary"}, 
"year": 2019 
},

它真正地过滤了接近“genre”“year”的向量结果。还可以按概念或主题过滤向量。

在企业环境中,现在的挑战在于它还包括其他业务过滤条件。解决从数据源获取的数据缺乏建模的问题很重要(考虑表结构和元数据)。在这种情况下,改进文本的准确性,减少与结构化数据相矛盾的不正确表达是很重要的。这种情况下需要一个“数据管道”策略,并且企业“内容匹配”开始变得重要起来。

对于步骤5),除了缩放摄取的常规挑战之外,不断变化的语料库也有其自身的挑战。新文档可能需要重新编码和重新索引整个语料库,以保持向量的相关性。

对于步骤6),这是一个全新的领域,需要在测试相似性水平的基础上采用人工参与的方法,以确保在搜索的各个方面都具有质量。

自动化搜索评分以及不同类型的上下文评分并不是一项容易完成的任务。

七、Python向量索引:现有数据库中更简单的向量搜索替代方案。

向量数据库是一个复杂的系统,它可以实现上述示例中的上下文搜索以及所有其他数据库功能(创建、插入、更新、删除、管理等)。

向量数据库的示例包括Weaviate和Pinecone。这两者都公开了Python API。

有时,一个更简单的设置就足够了。作为一种更轻量级的替代方案,可以使用你已经使用的任何存储方式,并在此基础上添加一个基于向量的索引。该向量索引仅用于检索具有上下文的搜索查询,例如用于生成式人工智能。

在向量索引设置中,可以拥有:

  • 通常的数据存储(例如PostgreSQL或存储在文件中的磁盘目录)提供所需的基本操作:创建、插入、更新、删除。

  • 你的向量索引,它可以在数据上进行快速的基于上下文的搜索。

独立的Python库可以为你实现向量索引,包括FAISS、Pathway LLM和Annoy。

好消息是,向量数据库和向量索引的LLM应用程序工作流程是相同的。主要区别在于,除了使用Python向量索引库外,还可以继续使用现有的数据库进行“正常”的数据操作和数据管理。例如,如果使用PostgreSQL,则可以使用Psycopg,如果存储数据在文件中,则可以使用标准的Python“fs”模块。

向量索引的支持者主要关注以下优势:

  1. 数据隐私:保持原始数据的安全、完整和不受干扰,最大限度地减少数据曝光风险。

  2. 成本效益:减少与额外存储、计算能力和许可相关的成本。

  3. 可扩展性:简化了通过减少需要管理的组件数量来进行扩展的过程。

八、何时使用向量数据库和向量索引?

当满足以下一项或多项条件时,向量数据库很有用:

  1. 在大规模处理向量数据时有特殊需求。

  2. 正在为向量创建一个独立的专用应用程序。

  3. 不希望将存储的数据用于其他类型的应用程序。

当满足以下一项或多项条件时,向量索引很有用:

  1. 不希望将新技术用于数据存储。

  2. 现有的存储方式可以轻松从Python访问。

  3. 相似性搜索只是更大型企业商业智能和数据库需求中的一项功能。

  4. 需要能够将向量附加到现有标量记录的能力。

  5. 需要一种统一的方法来处理数据工程团队的管道。

  6. 需要在数据上建立索引和图表结构,以帮助完成LLM应用程序或任务。

  7. 需要来自其他源的增强输出或增强上下文。

  8. 希望从语料库中创建规则,这些规则可以应用于事务数据。

九、企业向量搜索的未来

向量搜索为开发人员提供了具有颠覆性能力的解锁。随着模型和技术的改进,预计向量数据库或向量索引将成为应用程序堆栈的重要组成部分。

希望这个指南能为探索Python中的向量数据库和向量索引提供一个坚实的起点。如果对最近开发的向量索引项目感兴趣,请查看这个开源项目。

【开源项目】:https://github.com/pathwaycom/llm-app

推荐书单

IT BOOK 多得(点击查看5折活动书单)icon-default.png?t=N7T8https://u.jd.com/psx2y1M

《MySQL数据库基础与实战应用》

MySQL数据库性能优越,功能强大,是深受读者欢迎的开源数据库之一。本书由浅入深、循序渐进、系统地介绍了MySQL的相关知识及其在数据库开发中的实际应用,并通过具体案例,帮助读者巩固所学知识,以便更好地开发实践。全书共分为13章,内容涵盖了认识与理解数据库、安装与配置MySQL数据库、数据库与数据表的基本操作、数据查询、索引的创建与管理、视图的创建与管理、触发器、事务、事件、存储过程与存储函数、访问控制与安全管理、数据库的备份与恢复,以及综合的实践教学项目—图书管理系统数据库设计。本书结合全国计算机等级考试二级MySQL考试大纲编写,章节后面配有习题,适当融入思政元素,并配备了相应的教案与课件。

本书内容丰富,讲解深入,适合初级、中级MySQL用户,既可以作为各类高等职业技术院校与职业本科院校相关专业的课程教材,也可以作为广大MySQL爱好者的实用参考书。

《MySQL数据库基础与实战应用》icon-default.png?t=N7T8https://item.jd.com/13663131.html

精彩回顾

《OLAP与OLTP:数据处理系统的比较分析》

《性能优化,利用Python ORM优化SQL查询》

《5个高效的数据科学Python库》

《使用Python轻松实现科研绘图》

《使用Python内置模块加速SQL查询》

《预测未来,Python中的时间序列分析模型ARIMA》

微信搜索关注《Python学研大本营》,加入读者群

访问【IT今日热榜】,发现每日技术热点

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值