首页 > 编程问答 >使用 pgvector 和 Lambda 生成基岩嵌入并存储在 Aurora 中

使用 pgvector 和 Lambda 生成基岩嵌入并存储在 Aurora 中

时间:2024-07-29 13:40:24浏览次数:13  
标签:python amazon-web-services aws-lambda aws-aurora-serverless amazon-bedrock

我在 Aurora 中的不同表中有一些数据,我想对其执行 RAG。 为此,我创建了一个微服务(Lambda),它可以生成不同表的嵌入并将该数据存储在 Aurora 中。但是矢量更新插入应该基于某些数据库流集合。 例如:如果有 5 个以上的数据库更新,那么我应该重新生成嵌入,并且应该有一个端点,我可以在其中发送用户 ID 以与后端同步数据(重新生成嵌入)。 我该怎么做。

我最初尝试使用 Faiss 和 dynamoDB,但问题是后端正在转移到 Aurora,而 Faiss 增加了延迟。


以下是使用 pgvector、Lambda 和 Aurora 构建近似最近邻搜索 (ANN) 服务的架构,该服务可以根据数据库更改进行扩展和重新索引。

架构:

  1. 数据源: 的 Aurora 数据库,包含需要生成嵌入的各种表。
  2. 更改数据捕获 (CDC): 为的用例捕获数据库更改的最有效方法是使用 Aurora 流。Aurora 流捕获对数据库所做的更改并将这些更改作为流记录提供。
  3. 流处理器(Lambda): Lambda 函数订阅的 Aurora 流。
    • 批处理更新: Lambda 函数会累积来自 Aurora 流的数据库更新。配置函数以在累积一定数量的更新(例如,的 5 个更新阈值)或经过一定时间后触发。
    • 嵌入生成: 对于每个更新,Lambda 函数都会使用 Bedrock 生成嵌入。
      • 从 Aurora 中检索更新的记录。
      • 使用 Bedrock 生成嵌入向量。
      • 将嵌入向量和相关元数据(例如,记录 ID、表名)存储在 Aurora 中的专用表中。可以使用 pgvector 扩展来有效地存储和查询这些向量。
  4. 向量存储(Aurora with pgvector): 使用 pgvector 扩展程序存储生成的嵌入。pgvector 使能够直接在 Aurora 中执行高效的相似性搜索。
  5. 同步端点(API Gateway + Lambda):
    • 创建一个 API Gateway 端点,用户可以通过该端点发送其 ID 以同步其数据。
    • 此端点将触发另一个 Lambda 函数,该函数将:
      • 识别与用户 ID 关联的相关记录。
      • 为这些记录生成新的嵌入(使用 Bedrock)。
      • 更新 Aurora 中的向量存储,并使用新的嵌入。

工作流程:

  1. 对 Aurora 数据库表进行更改。
  2. Aurora 流会捕获这些更改并将其流式传输到 Lambda 函数。
  3. Lambda 函数会批处理更新。
  4. 一旦达到批处理条件(更新数量或时间),Lambda 函数就会使用 Bedrock 为每个更新的记录生成新的嵌入。
  5. 生成的嵌入和相关元数据存储在 Aurora 的向量存储中。
  6. 用户可以通过调用同步端点来请求同步其数据。
  7. 同步端点触发 Lambda 函数以使用更新后的信息重新生成并存储用户的嵌入。

优势:

  • 可扩展性: Lambda 函数可以根据数据库更新量自动扩展。
  • 成本效益: 只需在生成嵌入时为实际使用的计算资源付费。
  • 实时更新: Aurora 流可确保在数据库更改时近乎实时地生成和存储新的嵌入。
  • 高效的相似性搜索: pgvector 允许直接在 Aurora 中执行快速且可扩展的相似性搜索。

实现提示:

  • 批处理优化: 尝试不同的批处理大小和时间间隔,以找到性能和新鲜度之间的最佳平衡点。
  • 嵌入存储: 使用 pgvector 的索引功能来优化向量相似性搜索查询。
  • 并发: 实现适当的并发控制机制,以处理可能同时更新向量存储的多个 Lambda 函数。
  • 监控和日志记录: 实现监控和日志记录以跟踪性能并解决任何潜在问题。

通过遵循此架构,可以构建一个强大且可扩展的 ANN 服务,该服务可以随着的数据量的增长而增长,并且可以通过 Bedrock 和 Aurora 提供近乎实时的嵌入更新。

标签:python,amazon-web-services,aws-lambda,aws-aurora-serverless,amazon-bedrock
From: 78805491

相关文章

  • 12个Python数据类型转换实战演练
    文末赠免费精品编程资料~~在Python编程中,数据类型转换是处理数据时必不可少的技能。掌握如何灵活地在不同类型之间转换,能让你的代码更加高效和灵活。下面,我们将通过一系列实战演练,学习并实践12种常见的Python数据类型转换。1.整数转字符串实战案例:将年龄转换为字符串......
  • Python全套教程,小白零基础入门必备!
    Python是一种语法简单、功能强大的编程语言,它注重的是如何高效解决问题。【教程领取方式在文末!!】正是这种简单实用的特性,让Python成为近年来最热门的编程语言之一。Python具有广泛的应用场景,包括:Web开发、数据分析、机器学习、网络爬虫、人工智能、量化交易等众多领......
  • BP神经网络及其Python和MATLAB实现预测
    BP神经网络及其Python和MATLAB实现预测引言BP神经网络(BackPropagationNeuralNetwork),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性......
  • 为什么Python要对引用非容器类型的类型实现循环GC
    检查文档:支持循环垃圾收集Python对检测和收集涉及循环引用的垃圾的支持需要对象类型的支持,这些对象类型是其他对象的“容器”,这些对象也可能是容器不存储对其他对象的引用或仅存储对原子类型(例如数字或字符串)的引用的类型不需要为垃圾收集提供任何显......
  • 如何在 Visual Studio Code 中降级终端中的 python?
    我有一段代码需要运行,但它仅与tensorflow1.3、1.4和1.5兼容。我想我需要降级python才能运行它,但是终端有python3.10我尝试创建虚拟环境失败,但终端仍然说它正在使用python3.10,所以我仍然无法运行代码有什么我可以做的吗?是对的,创建虚拟环境是运行不同Python版本代......
  • python-小李帮老师改错(赛氪OJ)
    [题目描述]老师给小理发了一封电子邮件,任务如下。写一个程序,给你 n 个数,输出 X。X=num1p1​​+num2p2​​+⋯+numnpn​​。                 num1​,num2​,⋯⋯,numn​ 都是整数,p1​,p2​,⋯⋯pn​ 都是一位数。但是出现了一些玄学错误,......
  • 保护从 py2exe python 生成的二进制文件
    我的项目需要将我的python文件转换为py2exe。公平地说,我的py2exe正在工作。假设我的二进制文件名为“test.exe”。我知道我的test.exe包含我的python文件的所有pyc文件。我想要做的是,保护我的text.exe,这样我的源代码就不会被看到,换句话说,我不希望它被反编译回来,我该怎......
  • python 将数字前面的字符替换为数字后面的新字符
    我有一些字符串看起来像:*.rem.1.gz和*.rem.2.gz我想将其替换为*.1.trim.gz和*.2.trim.gz1号文件和2号文件相互配对,我想创建一个单独的字符串来同时包含这两个文件。importosallfiles=os.listdirpair=[x.replace("rem.(\d+)","(\d+).trim")forxinall......
  • 使用python打开UNC文件
    如何使用python通过路径打开网络计算机上的文件?我当前正在使用os.startfile但随后出现错误winerror2:无法打开文件。文件路径是正确的,我可以通过win+R打开该文件。感谢您提供的任何帮助。importwin32wnetimportosdefopen_unc_path(unc_path,usern......
  • Python环境:深入理解与构建实践
    Python环境:深入理解与构建实践在当今的软件开发领域中,Python以其简洁的语法、丰富的库支持和广泛的应用场景,成为了众多开发者、数据科学家、机器学习工程师及自动化测试人员的首选语言。然而,要高效地使用Python进行项目开发,深入理解并合理构建Python环境是至关重要的。本文......