利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由基础模型(FMs)推动的。亚马逊云科技Bedrock提供了对各种基础模型的便捷访问,并极大地简化了整体开发体验。

尽管这些通用模型功能非常强大,但它们无法单独作为特定场景的AI解决方案。要模型生成更具针对性和实用性,需要给AI提供额外的上下文信息。检索增强生成(Retrieval Augmented Generation,RAG)是一种广受欢迎的技术,可用于提供上下文信息。RAG的核心是向量嵌入(vector embeddings),它通过基础模型将非结构化数据转换为多维数值表示。同一维度下向量值越接近,表示数据项之间的相似度越高,这也是当前向量相似性搜索应用的基础。

亚马逊云科技Relational Database Service(RDS)for SQL Server是一项完全托管的持久性数据库服务,全球各大大厂都正在使用它。对于许多客户而言,存储企业业务数据的数据库已托管在RDS for SQL Server上,这些数据就可以作为基于RAG的生成式AI应用的领域上下文。因此该数据库服务成为了向量数据存储的理想选择,原因包括:

  • RDS for SQL Server是一项成熟、高扩展性、可靠且高效的关系型数据库服务,同时也是易于管理的向量数据。
  • 向量数据可以建模为SQL Server数据库中的关系表。
  • SQL Server的列存储索引(Columnstore Index)提供了包括SIMD和AVX-512在内的优化技术,加速了向量运算。
  • 目前广泛使用的余弦相似度(Cosine Similarity)计算可在SQL Server数据库中通过用户自定义函数(UDF)创建。

本方案将介绍如何使用RDS for SQL Server作为向量数据存储,以实现基于相似性搜索的生成式AI应用。在本场景中,业务数据存储和向量数据存储均在同一个RDS for SQL Server实例中。将嵌入数据存储在靠近业务数据的位置,使其能够结合额外的元数据,而无需依赖外部数据源。此外随着数据的不断变化,嵌入数据存储在源业务数据附近还能简化嵌入数据的更新过程。

在本方案中,我们使用相同的RDS for SQL Server实例同时存储业务数据和向量数据。具体场景是创建一个典型的聊天机器人,该机器人使用RAG增强基础模型,为用户提供领域相关的响应。以下图示展示了本文实现的生成式AI工作流的高级架构。

我们假设源数据的向量嵌入已存储在向量数据存储中。本文的将介绍如何把聊天输入问题转换成向量嵌入,并将其与向量库中的数据源存储进行比较,以执行相似性搜索并返回相关结果。本方案的数据来自维基百科的公开内容,包括四个字段:id、URL、标题(title)和文本(text)。如何在RDS for SQL Server中生成向量数据嵌入,并将其存入向量数据库的完整流程,将在我们的下一篇文章中详细介绍。

本方案不涉及基于大型语言模型(LLM)为用户提供对话式响应的UI前端实现细节,而是专注于解决方案的数据库部分,即如何从向量数据存储中检索相关结果集,通过相似性语义搜索获取数据响应请求。

解决方案架构概览

本文所述的RAG聊天机器人方案涉及RDS for SQL Server、亚马逊云科技SageMaker和Bedrock,方案具体使用了亚马逊云科技Titan G1文本嵌入模型(Amazon Titan G1 Text Embedding Model)。整个工作流程如下:

  • 用户的问题(Prompt)通过调用Bedrock API,在SageMaker Notebook中使用Amazon Titan模型转换为向量嵌入(步骤1-3)。
  • 由用户问题生成的向量被传递至向量数据存储中的余弦相似度函数,该函数对数据库中存储的向量嵌入数据执行相似性搜索,并将结果集返回至SageMaker(步骤4-5),分发给用户。

项目实操准备

本文假设大家已经熟悉如何操作亚马逊云科技管理控制台。此外本实践需要大家在亚马逊云科技账户中启用以下资源和服务:

  • Amazon RDS for SQL Server数据库实例(用于向量数据存储)
  • Amazon SageMaker Notebook示例代码
  • 创建Amazon Bedrock访问客户端的Python脚本
  • Amazon Bedrock上的Amazon Titan Embeddings G1 – Text模型
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
"""Helper utilities for working with Amazon Bedrock from Python notebooks"""
# Python Built-Ins:
import os
from typing import Optional

# External Dependencies:
import boto3
from botocore.config import Config


def get_bedrock_client(
    assumed_role: Optional[str] = None,
    region: Optional[str] = None,
    runtime: Optional[bool] = True,
):
    """Create a boto3 client for Amazon Bedrock, with optional configuration overrides

    Parameters
    ----------
    assumed_role :
        Optional ARN of an AWS IAM role to assume for calling the Bedrock service. If not
        specified, the current active credentials will be used.
    region :
        Optional name of the AWS Region in which the service should be called (e.g. "us-east-1").
        If not specified, AWS_REGION or AWS_DEFAULT_REGION environment variable will be used.
    runtime :
        Optional choice of getting different client to perform operations with the Amazon Bedrock service.
    """
    if region is None:
        target_region = os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))
    else:
        target_region = region

    print(f"Create new client\n  Using region: {target_region}")
    session_kwargs = {"region_name": target_region}
    client_kwargs = {**session_kwargs}

    profile_name = os.environ.get("AWS_PROFILE")
    if profile_name:
        print(f"  Using profile: {profile_name}")
        session_kwargs["profile_name"] = profile_name

    retry_config = Config(
        region_name=target_region,
        retries={
            "max_attempts": 10,
            "mode": "standard",
        },
    )
    session = boto3.Session(**session_kwargs)

    if assumed_role:
        print(f"  Using role: {assumed_role}", end='')
        sts = session.client("sts")
        response = sts.assume_role(
            RoleArn=str(assumed_role),
            RoleSessionName="langchain-llm-1"
        )
        print(" ... successful!")
        client_kwargs["aws_access_key_id"] = response["Credentials"]["AccessKeyId"]
        client_kwargs["aws_secret_access_key"] = response["Credentials"]["SecretAccessKey"]
        client_kwargs["aws_session_token"] = response["Credentials"]["SessionToken"]

    if runtime:
        service_name='bedrock-runtime'
    else:
        service_name='bedrock'

    bedrock_client = session.client(
        service_name=service_name,
        config=retry_config,
        **client_kwargs
    )

    print("boto3 Bedrock client successfully created!")
    print(bedrock_client._endpoint)
    return bedrock_client

创建Amazon RDS for SQL Server向量数据存储

Amazon RDS for SQL Server的是部署在RDS数据库实例中,我们需要提前创建并连接到数据库中。确保创建时选择以下选项:

  • 引擎选项(Engine Options): 选择Microsoft SQL Server
  • 引擎版本(Engine Version): 选择SQL Server 2019 15.00.4345.5.v1
  • 版本(Edition): 选择SQL Server Standard Edition
  • 数据库实例类型(DB Instance Class): 选择db.t3.xlarge
  • 存储类型(Storage Type): 选择GP3
  • 公共访问(Public Access): 选择Yes,这样大家可以直接从本地工作站连接到 RDS for SQL Server 实例
  • 选项组(Option Group): 选择包含SQLSERVER_BACKUP_RESTORE选项的选项组。这是还原本文提供的SQL Server原生备份的前提条件。

完成Amazon RDS for SQL Server实例的创建,并还原本文提供的向量数据库备份后,大家应该可以浏览到[vector_db_wiki]数据库,如下所示:

[vector_db_wiki] 数据库结构

该数据库包含以下三个表:

  • wikipedia_articles(用于本方案中的原始业务数据)
  • wikipedia_articles_embedding_bedrock(存储Bedrock生成的向量嵌入数据)
  • wikipedia_articles_content_vector(将被执行向量化的文章内容数据)

此外本数据库中还包含一个用户自定义函数(UDF),用于实现余弦相似度(Cosine Similarity)计算逻辑:

  • Bedrock_SearchSimilarContentArticles(用于执行基于相似度搜索的查询)

在本系列下篇的文章中,我们将继续介绍如何使用RDS for SQL Server、Bedrock和SageMaker,通过动手实践在云平台上搭建该解决方案架构,并详细讲解我们的聊天机器人应用如何与Bedrock基础模型交互,以及如何在向量数据存储中运行余弦距离计算搜索并输出相似性的内容。欢迎大家继续关注小李哥的生成式AI应用安全系列,了解国际前沿的亚马逊云科技解决方案,关注我不要错过未来更多的干货内容! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOV8的学习记录(一) 环境配置和安装

YOLO8的官网地址:YOLOv8 - Ultralytics YOLO Docs • YOLOV8的环境要求: YOLO集成在ultralytics库中,ultralytics库的环境要求: Python>3.7 PyTorch>1.10.0 在按照所需python版本新建好的conda环境中安装好torch&#x…

如何在 IntelliJ IDEA 中使用 Bito AI 插件

如何在 IntelliJ IDEA 中使用 Bito AI 插件 Bito: On-Demand AI Code Reviews Bito AI 插件是一个智能开发工具,能够帮助开发者提升编码效率,自动化生成代码、注释、单元测试等。本文将详细介绍 Bito AI 插件在 IntelliJ IDEA 中的使用方法&#xff0c…

如何升级Python版本。以下是详细的步骤和注意事项:检查当前Python版本:在命令行或终端中输入以下命令来查看当前安装的Python版本: bash复制代

升级Python版本。以下是详细的步骤和注意事项: 检查当前Python版本:在命令行或终端中输入以下命令来查看当前安装的Python版本: bash复制代码 python --version 这将显示你当前使用的Python版本。 下载最新版本的Python:访问Py…

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架,API文档和API定义同步更新,可以在线测…

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…

SCI学术论文图片怎么免费绘制:drawio,gitmind

SCI学术论文图片怎么免费绘制 目录 SCI学术论文图片怎么免费绘制overleaf怎么图片不清晰怎么办SCI学术论文图片怎么导出pdfdrawiogitmind**1. 使用在线工具****Lucidchart****2. Draw.io****3. ProcessOn****4. 使用桌面工具****Dia****5. 使用Markdown工具(如Typora)**如果你…

对于RocksDB和LSM Tree的一些理解,以及TiDB架构初识

LSM Tree的读写过程 HBase、LevelDB,rocksDB(是一个引擎)底层的数据结构是LSM Tree适合写多读少的场景,都是追加写入内存中的MemTable,写入一条删除(或修改)标记,而不用去访问实际的…

Java 设计模式之迭代器模式

文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 UML Iterator:迭代器接口&#xff…

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框

前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-adm…

上位机学习之串口通信与温湿度项目实战

文章目录 一、串口通信与温湿度项目实战1、学习串口通信硬件:巩固RS-485串口硬件和通信基础知识1.1、串行通信的数据流和格式1.2、串口通信参数设置1.3、modbus协议基础1.4、数据存储和功能代码1.5、modbus通信报文分析 2、主-从通信仿真测试2.1、组件设计2.2、创建…

深度求索—DeepSeek API的简单调用(Java)

DeepSeek简介 DeepSeek(深度求索)是由中国人工智能公司深度求索(DeepSeek Inc.)研发的大规模语言模型(LLM),专注于提供高效、智能的自然语言处理能力,支持多种场景下的文本生成、对…

Zotero7 从下载到安装

Zotero7 从下载到安装 目录 Zotero7 从下载到安装下载UPDATE2025.2.16 解决翻译api异常的问题 下载 首先贴一下可用的链接 github官方仓库:https://github.com/zotero/zotero中文社区:https://zotero-chinese.com/官网下载页:https://www.z…

沃德校园助手系统php+uniapp

一款基于FastAdminThinkPHPUniapp开发的为校园团队提供全套的技术系统及运营的方案(目前仅适配微信小程序),可以更好的帮助你打造自己的线上助手平台。成本低,见效快。各种场景都可以自主选择服务。 更新日志 V1.2.1小程序需要更…

Spring Boot (maven)分页3.0版本 通用版

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

解锁机器学习算法 | 线性回归:机器学习的基石

在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动&#xff0…

广告深度学习计算:阿里妈妈大模型服务框架HighService

一、背景 HighService(High-Performance Pythonic AI Service) 是在支持阿里妈妈业务过程中,不断提炼抽象出的高性能Python AI服务框架,支持视频、图文、LLM等多种模型,能够显著加快模型的推理速度,提高集群的资源利用效率。随着S…

稀土抑烟剂——为汽车火灾安全增添防线

一、稀土抑烟剂的基本概念 稀土抑烟剂是一类基于稀土元素(如稀土氧化物和稀土金属化合物)开发的高效阻燃材料。它可以显著提高汽车内饰材料的阻燃性能,减少火灾发生时有毒气体和烟雾的产生。稀土抑烟剂不仅能提升火灾时的安全性,…

如何下载AndroidStudio的依赖的 jar,arr文件到本地

一、通过jitpack.io 下载依赖库 若需要下载 com.github.xxxxx:yy-zzz:0.0.2 的 jar则 https://jitpack.io/com/github/xxxxx/yy-zzz/0.0.2/ 下会列出如下build.logyy-zzz-0.0.2.jaryy-zzz-0.0.2.pomyy-zzz-0.0.2.pom.md5yy-zzz-0.0.2.pom.sha1jar 的下载路径为https://jitpack…

【仪器仪表专题】案例:示波器控制通道开关SCPI命令不同的原因

背景 在文章【仪器仪表专题】仪器支持SCPI控制,要怎么验证命令是否正确?-CSDN博客中我们提到SCPI命令的历史。并且提到了关于制造商为控制仪器而使用的命令,除了公共命令外,并没有统一的规则。比如同一位制造商生产的不同型号仪器甚至会采用不同的规则。 如下所示的众多仪器…

【Deepseek 零门槛指南】DeepSeek 教程和常见问题解答 | 大白技术控

粉丝朋友们大家好,我是极客学长。最近一直在玩 DeepSeek,积累了一点经验,用它提高写作的效率挺好用的。 在使用DeepSeek的过程中,也遇到了如下几个问题(相信很多小伙伴也遇到了): DeepSeek 官网卡顿,突然出…