利用亚马逊云科技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 Configdef 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 overridesParameters----------assumed_role :Optional ARN of an AWS IAM role to assume for calling the Bedrock service. If notspecified, 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 = regionprint(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_nameretry_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应用安全系列,了解国际前沿的亚马逊云科技解决方案,关注我不要错过未来更多的干货内容! 

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

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

相关文章

c++ 多线程知识汇总

一、std::thread std::thread 是 C11 引入的标准库中的线程类&#xff0c;用于创建和管理线程 1. 带参数的构造函数 template <class F, class... Args> std::thread::thread(F&& f, Args&&... args);F&& f&#xff1a;线程要执行的函数&…

H5接入支付宝手机网站支付并实现

小程序文档 - 支付宝文档中心 1.登录 支付宝开放平台 创建 网页/移动应用 2.填写创建应用信息 3.配置开发设置 4.网页/移动应用&#xff1a;需要手动上线。提交审核后&#xff0c;预计 1 个工作日的审核时间。详细步骤可点击查看 上线应用 。应用上线后&#xff0c;还需要完成…

字节二面:DNS是什么?是什么原理?

写在前面 最近有个同学后台私信让我出一个DNS的工作原理&#xff0c;面试的时候居然问到了&#xff0c;所以就简单聊聊DNS的工作原理吧&#xff01; 1. DNS 的核心作用 DNS&#xff08;域名系统&#xff0c;Domain Name System&#xff09;是互联网中用于将人类可读的域名转…

【Unity3D】Jenkins Pipeline流水线自动构建Apk

目录 一、准备阶段 二、创建Pipeline流水线项目 三、注意事项 四、扩展 1、Pipeline添加SVN更新项目Stage阶段 一、准备阶段 1、安装tomcat 10.0.5 Index of apache-local/tomcat/tomcat-10 2、安装jdk 17 Java Archive Downloads - Java SE 17.0.13 and later 3、…

【数据结构】(9) 优先级队列(堆)

一、优先级队列 优先级队列不同于队列&#xff0c;队列是先进先出&#xff0c;优先级队列是优先级最高的先出。一般有两种操作&#xff1a;返回最高优先级对象&#xff0c;添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构&#xff0c;是一棵完全二叉树&#xff0c…

2025.2.15

web [HNCTF 2022 Week1]Interesting_include&#xff1a; 直接打开 PHP代码片段包含两部分&#xff1a;一个主脚本和一个潜在的被包含文件。主脚本负责处理GET请求&#xff0c;特别是filter参数&#xff0c;而被包含文件&#xff08;假设为./flag.php&#xff09;似乎包含了我…

CentOS 7.8 安装MongoDB 7教程

文章目录 CentOS 7.8 安装MongoDB 7教程一、准备工作1. 系统更新2. 权限 二、添加MongoDB软件源1. 创建MongoDB的yum源文件2. 添加以下内容3. 保存并退出编辑器 三、安装MongoDB1. 更新yum缓存2. 安装MongoDB 四、启动MongoDB服务1. 启动MongoDB2. 设置MongoDB开机自启动 五、配…

ElasticSearch基础和使用

ElasticSearch基础 1 初识ES相关组件 &#xff08;1&#xff09;Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。Elasticsearch结合kibana、Logstash、Beats组件 也就是elastic stack&#xff08;ELK&#xff09; 广泛应…

[C++]多态详解

目录 一、多态的概念 二、静态的多态 三、动态的多态 3.1多态的定义 3.2虚函数 四、虚函数的重写&#xff08;覆盖&#xff09; 4.1虚函数 4.2三同 4.3两种特殊情况 &#xff08;1&#xff09;协变 &#xff08;2&#xff09;析构函数的重写 五、C11中的final和over…

【git-hub项目:YOLOs-CPP】本地实现01:项目构建

目录 写在前面 项目介绍 最新发布说明 Segmentation示例 功能特点 依赖项 安装 克隆代码仓库 配置 构建项目 写在前面 前面刚刚实现的系列文章: 【Windows/C++/yolo开发部署01】 【Windows/C++/yolo开发部署02】 【Windows/C++/yolo开发部署03】 【Windows/C++/yolo…

在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程

既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…

安装 Docker Desktop 修改默认安装目录到指定目录

Docker Desktop安装目录设置 Docker Desktop 默认安装位置 &#xff08;C:\Program Files\Docker\Docker) 是这个 &#xff0c;导致系统盘占用过大&#xff0c;大概2G ; 那么如何安装到其他磁盘呢&#xff1f; 根据docker desktop 官网 Docker Desktop install 我们可以看到&a…

DeepSeek官方发布R1模型推荐设置

今年以来&#xff0c;DeepSeek便在AI领域独占鳌头&#xff0c;热度一骑绝尘。其官方App更是创造了惊人纪录&#xff0c;成为史上最快突破3000万日活的应用&#xff0c;这一成绩无疑彰显了它在大众中的超高人气与强大吸引力。一时间&#xff0c;各大AI及云服务厂商纷纷投身其中&…

常见的IP地址分配方式有几种:深入剖析与适用场景‌

在数字互联的世界里&#xff0c;IP地址如同网络世界的“门牌号”&#xff0c;是设备间通信的基础。随着网络技术的飞速发展&#xff0c;IP地址的分配方式也日趋多样化&#xff0c;以适应不同规模、不同需求的网络环境。本文将深入探讨当前主流的几种IP地址分配方式&#xff0c;…

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…

Flutter_学习记录_动画的简单了解

用AnimationController简单实现如下的效果图&#xff1a; 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…

sql sqlserver的特殊函数COALESCE和PIVOT的用法分析

一、COALESCE是一个返回参数中第一个非NULL值的函数&#xff0c; 列如&#xff1a;COALESCE&#xff08;a,b,c,d,e&#xff09;;可以按照顺序取abcde&#xff0c;中的第一个非空数据&#xff0c;abcde可以是表达式 用case when 加ISNULL也可以实现&#xff0c;但是写法复杂了…

类与对象C++详解(上)

目录 1.类的定义 1.1 类定义格式 补充: struct与class的区别&#xff08;c语言与c&#xff09; 1.2 访问限定符 1.3 类域 2.实例化 3.对象大小 4.this指针 1.类的定义 1.1 类定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&…

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源&#xff0c;其储量丰富&#xff0c;预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性&#xff0c;天然气水合物的探测面临诸多挑战&#xff0c;涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…