在亚马逊云科技上安全、合规、私密地调用生成式AI大模型

news2024/9/20 6:18:48

项目简介:

小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。

本次介绍的是如何安全、合规、私密地调用亚马逊云科技大模型托管服务Amazon Bedrock,本架构将在私有网络环境VPC中创建VPC网络节点,将AI大模型的访问请求路由至私有网络节点,在通过亚马逊云科技底层私有连接PrivateLink将请求传输到Amazon Bedrock大模型的API生成内容回复,以提升大模型交互过程中数据的隐私性和安全性。本架构设计全部采用了云原生Serverless架构,提供可扩展和安全的AI解决方案。本方案的解决方案架构图如下:

方案所需基础知识 

什么是 Amazon Bedrock?

Amazon Bedrock 是亚马逊云科技提供的一项服务,旨在帮助开发者轻松构建和扩展生成式 AI 应用。Bedrock 提供了访问多种强大的基础模型(Foundation Models)的能力,支持多种不同大模型厂商的模型,如AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI, 和Amazon,用户可以使用这些模型来创建、定制和部署各种生成式 AI 应用程序,而无需从头开始训练模型。Bedrock 支持多个生成式 AI 模型,包括文本生成、图像生成、代码生成等,简化了开发流程,加速了创新。

什么是亚马逊云科技 PrivateLink?

亚马逊云科技 PrivateLink 是一项网络服务,允许用户通过专用网络连接(而非公共互联网)私密访问亚马逊云科技的服务和第三方应用。它确保数据在传输过程中的安全性和隐私性。

通过 PrivateLink 私有访问 Amazon Bedrock 上的 AI 大模型的好处

增强安全性

通过 PrivateLink,您可以在无需公开互联网访问的情况下,安全地连接到 Amazon Bedrock 上的 AI 大模型,确保数据传输的安全性。

降低延迟

PrivateLink 提供了更快的网络路径,减少了访问 AI 大模型时的网络延迟,提升了应用的响应速度。

简化网络架构

无需配置复杂的 VPN 或 NAT,PrivateLink 提供了更简单的网络架构,使得连接 Amazon Bedrock 更加直观和高效。

本方案包括的内容

1. 配置亚马逊云科技PrivateLink私密链接访问Amazon Bedrock上的AI大模型

2. 部署Amazon Lambda无服务器计算服务调用Amazon Bedrock上的AI大模型

3. 在VPC私有网络环境中对Amazon Bedrock、Amazon Lambda和Amazon RDS进行访问测试

项目搭建具体步骤:

1. 首先我们登录亚马逊云科技控制台,确认Amazon Bedrock上的AI大模型“Titan Text G1 - Express”是开启状态。

2. 接下来我们创建一台EC2服务器,部署一个数据库SQL服务器,复制其私有IP地址“10.0.4.23”。

3. 接下来我们创建一个无服务器计算服务Lambda,命名为“invoke_bedrock”,用于API调用Amazon Bedrock上的AI大模型

4. 在Lambda函数中创建一个Python文件“bedrock.py”,复制以下代码

import boto3
import json
from datetime import datetime
import os

model_id = os.environ.get('BEDROCK_MODEL_ID')

def test_bedrock():
    model_id = os.environ.get('BEDROCK_MODEL_ID')
    prompt_data = "What is the envelope budget method?"
    r = call_bedrock(model_id, prompt_data)
    
    return("""
    \n\n\n
    Model latency: %s\n
    Response:\n
    %s
    \n\n\n
    """ % (r['latency'],r['response'])
    )
    
def call_bedrock(model_id, prompt_data):
    bedrock_runtime = boto3.client('bedrock-runtime')

    body = json.dumps({
        "inputText": prompt_data,
        "textGenerationConfig":
        {
            "maxTokenCount":1000,
            "stopSequences":[],
            "temperature":0.7,
            "topP":0.9
        }
    })
    accept = 'application/json'
    content_type = 'application/json'

    before = datetime.now()
    response = bedrock_runtime.invoke_model(body=body, modelId=model_id, accept=accept, contentType=content_type)
    latency = (datetime.now() - before).seconds
    response_body = json.loads(response.get('body').read())
    response = response_body.get('results')[0].get('outputText')

    return {
        'latency': str(latency),
        'response': response
    }
    
def json_to_pretty_table(json_data):
    data = json.loads(json_data)
    table = PrettyTable()
    
    # Assuming all rows have the same keys
    headers = data['rows'][0].keys()
    table.field_names = headers
    
    for row in data['rows']:
        table.add_row(row.values())
    
    return table
    
def generate_budget_report(customer_data):
    
    prompt_data = f"""
        Using the spending data in the table bellow, aggregate the spending by category and provide the total for each category.

        Customer Spending Table:
        
        %s
    
    """ % (customer_data)
    
    
    r = call_bedrock(model_id,prompt_data)
    return r['response']

 5. 再创建一个Python文件复制以下代码,命名为“db.py”,用于数据库访问

import boto3
import json
from datetime import datetime
import os

model_id = os.environ.get('BEDROCK_MODEL_ID')

def test_bedrock():
    model_id = os.environ.get('BEDROCK_MODEL_ID')
    prompt_data = "What is the envelope budget method?"
    r = call_bedrock(model_id, prompt_data)
    
    return("""
    \n\n\n
    Model latency: %s\n
    Response:\n
    %s
    \n\n\n
    """ % (r['latency'],r['response'])
    )
    
def call_bedrock(model_id, prompt_data):
    bedrock_runtime = boto3.client('bedrock-runtime')

    body = json.dumps({
        "inputText": prompt_data,
        "textGenerationConfig":
        {
            "maxTokenCount":1000,
            "stopSequences":[],
            "temperature":0.7,
            "topP":0.9
        }
    })
    accept = 'application/json'
    content_type = 'application/json'

    before = datetime.now()
    response = bedrock_runtime.invoke_model(body=body, modelId=model_id, accept=accept, contentType=content_type)
    latency = (datetime.now() - before).seconds
    response_body = json.loads(response.get('body').read())
    response = response_body.get('results')[0].get('outputText')

    return {
        'latency': str(latency),
        'response': response
    }
    
def json_to_pretty_table(json_data):
    data = json.loads(json_data)
    table = PrettyTable()
    
    # Assuming all rows have the same keys
    headers = data['rows'][0].keys()
    table.field_names = headers
    
    for row in data['rows']:
        table.add_row(row.values())
    
    return table
    
def generate_budget_report(customer_data):
    
    prompt_data = f"""
        Using the spending data in the table bellow, aggregate the spending by category and provide the total for each category.

        Customer Spending Table:
        
        %s
    
    """ % (customer_data)
    
    
    r = call_bedrock(model_id,prompt_data)
    return r['response']

6. 在Lambda服务的环境变量配置中配置如下键值对,用于Python代码运行读取环境变量。这里会用到刚刚复制的数据库服务器的私有IP地址,作为“DB_Host”的键值。

7. 接下来我们为Lambda函数配置网络,将其部署到亚马逊云科技VPC网络环境里。进入到Lambda函数的VPC选项,点击配置。

8. 在配置中指定VPC网络、私有子网Subnet以及Security Group安全组防火墙

9.下面我们进入到VPC服务主页的Endpoints功能,点击Create创建一个VPC endpoint,用于私密访问Amazon Bedrock

10. 为网络节点起名“bedrock-vpce”,选择的节点类型为“AWS Services”,节点服务名为“com.amazonaws.us-east-1.bedrock-runtime”,该服务则为Amazon Bedrock的API节点名。

11. 将该节点放置在我们创建的VPC和对应私有Subnet子网中。

12. 为该配置Security Group防火墙限制访问IP、端口和协议。

 13. 为该节点添加如下JSON访问限制策略,用于限制在亚马逊云科技平台上访问的API操作、发起请求主体和请求对象,复制后点击创建。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Action": [
				"bedrock:InvokeModel"
			],
			"Resource": [
				"arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1"
			],
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:sts::<accountid>:assumed-role/lab_lambda_role/invoke_bedrock"
			}
		}
	]
}

14. 最后通过Lambda函数的代码测试功能,我们成功得到私密调用Bedrock上的AI大模型和数据库的请求回复响应,说明私有大模型调用通道创建成功。该AI模型请求会自动被路由到我们刚刚创建的VPC节点中,通过PrivateLink访问大模型,得到回复。

以上就是在亚马逊云科技上通过PrivateLink,安全、合规、私密地调用Amazon Bedrock上的生成式AI大模型的全部步骤。欢迎大家未来与我一起,未来获取更多国际前沿的生成式AI开发方案。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最全最新VMWare以及Linux配置(含yum失效解决方案)

血泪教训浓缩的精华配置、报错解决&#xff08;解决99%问题&#xff09; 目录 1.Linux环境搭建 1.1安装VMWare 1.1.1卸载老版本VMWare&#xff08;如果有的话&#xff09; 1.1.2开始安装VMware 1.2创建虚拟机 1.3安装Centos7 1.4设置虚拟机快照 1.5安装远程连接SSH客户…

AI换脸模型(384-448模型430万底丹)

模型训练素材19万张来自于 1、香港中文大学CelebA预训练集-WF512版-量大角度全-11万5千张 2、DST全角度训练图集V3.1 WF512【2.6W张 6GB 】 3、女性人脸数据&#xff0c;预训练炼丹专用 4、补全SRC极限角度 5、全角度512分辨率7万张素材 下载地址&#xff1a; 链接&#xf…

day09——集合ArrayList

ArrayList类 ArrayList表示一种集合&#xff0c;它是一个容器&#xff0c;用来存储数据的&#xff0c;类似于数组。但不同于数组&#xff0c;数组一旦创建大小不变&#xff0c;而集合大小是可变的。 ArrayList常用方法 ArrayList是泛型类&#xff0c;可以约束存储的数据类型…

TLE8386-2EL:汽车级DC-DC转换器中文资料书

描述 TLE8386-2EL是一款具有内置保护功能的低端感应升压控制器。该器件的主要功能是将输入电压升高&#xff08;升压&#xff09;到更大的输出电压。开关频率可从100kHz调整至700kHz&#xff0c;并可与外部时钟源同步。 TLE8386-2EL的独特功能可将关断电流消耗降至 <2μA。该…

Python 如何进行静态代码分析(pylint, flake8)

Python 的静态代码分析是一种在不执行代码的情况下&#xff0c;对代码进行检查的技术。其主要目的是在代码运行前发现潜在的错误、风格问题以及其他代码质量问题。静态代码分析在提高代码的可维护性、可读性和可靠性方面发挥着重要作用。常用的静态代码分析工具包括 Pylint 和 …

观测云突变告警,精准预测云原生的系统异常

背景 观测云 DataKit 是一个强大的数据采集工具&#xff0c;能够收集和监控容器化环境和 Kubernetes 集群的指标、对象和日志数据。通过灵活使用 DataKit 收集的数据&#xff0c;可以对 Kubernetes 集群进行深入的监控和分析&#xff0c;从而实现更好的运维和优化。以下是一些…

如何使用yolov5-master进行训练

主要记录配置完成的yolov5-master如何进行自定义数据集训练。 本人使用的设备是jetson-orin AGX&#xff0c;系统是英伟达官方魔改过的ubuntu18.04.。 一、修改配置 首先观察train.py的__main__部分&#xff0c;我们发现训练程序接受很多个参数。 其中我们必须要关注的参数包括…

【网络编程】UDP实现网络通信(C语言、Ubuntu实现)

代码实现&#xff1a;分为udpSer.c(服务器端)和udpCli.c(客户端) //udpSer.c #include <myhead.h>#define SER_PORT 9999 #define SER_IP "192.168.83.128"int main(int argc, const char *argv[]) {//1、创建用于通信的服务器套接字文件描述符int sfd sock…

AI大模型学习之白话笔记(三) -- Assistants API入门

经过上面两篇文章的学习&#xff0c;恭喜你开始进入了人工智能的世界&#xff01;在这篇文章中&#xff0c;你将跟我一起学习如何使用Assistants API快速构建一个针对特定领域的人工智能助手。 我们从基础开始&#xff0c;一步步带你用Assistants API完成一个应用的整个过程。…

智能分析/视频汇聚EasyCVR安防视频融合管理云平台技术优势分析

安防行业的发展历程主要围绕视频监控技术的不断改革升级&#xff0c;从最初的模拟监控到数字监控&#xff0c;再到高清化、网络化监控&#xff0c;直至现在的智能化监控&#xff0c;每一次变革都推动了行业的快速发展。特别是近年来&#xff0c;随着AI、大数据、物联网等技术的…

Proxmox LXC 部署ubuntu,centos

前言CT 在 Proxmox VE 中,“CT”是 Container(容器)的缩写。PVE 支持两种主要类型的容器:LXC 和 OpenVZ(针对较旧的 Linux 内核)。这些容器提供了一种轻量级的虚拟化方式,允许用户在一个操作系统实例上运行多个隔离的系统环境。 PVE CT 特别是指在 Proxmox 平台上创建…

深入探索MySQL C API:使用C语言操作MySQL数据库

目录 引言 一. MySQL C API简介 二. MySQL C API核心函数 2.1 初始化和连接 2.2 配置和执行 2.3 处理结果 2.4 清理和关闭 2.5 错误处理 三. MySQL使用过程 四. 实现CRUD操作 4.1 创建数据库并建立表 ​编辑 4.2 添加数据&#xff08;Create&#xff09; ​编辑 …

idea git 重新登录

&#xff08;切换本地项目绑定的git账户&#xff09; git config --system --unset credential.helper git config user.name git pull &#xff08;然后输入用户名&#xff08;输绑定邮箱&#xff09;&#xff0c;密码&#xff09;

easyExcel2.1.6自动trim()的问题

环境&#xff1a;easyExcel 2.1.6 问题&#xff1a;easyExcel会自动忽略String中的空格&#xff0c;调用trim()函数&#xff0c;导致excel中的空格失效。 代码如上所示&#xff0c;所以只需要把globalConfiguration的autoTrim()&#xff0c;设置为false即可 那么怎么设置confi…

stable diffusion学习(1)成功打开WEBUI

建议学习github上的资源 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 1.下载安装sd.webui.zip 1.1 Release v1.0.0-pre AUTOMATIC1111/stable-diffusion-webui GitHub 1.2安装python&#xff0c;设置阿里镜像 python -m pip config set gl…

Linux桥转发经过的netfilter钩子点

你是否也有这样的疑问&#xff0c;当我们路由器局域内的下挂设备&#xff0c;是怎么互相访问的呢。假设我的路由器当前的网段是192.168.1.1&#xff0c;有一台PC有线接入&#xff0c;IP地址为 192.168.1.142 &#xff0c;一台手机WiFi接入&#xff0c;IP地址为192.168.1.223&am…

FRTIMP_YTFRB_WEB

FRTIMP_YTFRB_WEB 林业资源交易信息管理平台

基于深度生物学引导辅助学习的多模态数据整合和插补来改进基因型-表型预测

DeepGAMI: deep biologically guided auxiliary learning for multimodal integration and imputation to improve genotype–phenotype prediction 代码&#xff1a;https://github.com/daifengwanglab/DeepGAMI abstract&#xff1a; background&#xff1a;基因型与疾病表…

【数据结构之C语言实现栈】

1.栈 的 概 念 与 结 构 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据的插入和删除操作的一端称为栈顶&#xff0c;另一…

【代码随想录训练营第42期 Day26打卡 贪心Part1 - LeetCode 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 一、贪心 二、题目与题解 题目一&#xff1a;455.分发饼干 题目链接 题解&#xff1a;排序双指针贪心 题目二&#xff1a;376. 摆动序列 题目链接 题解&#xff1a;贪心 题目三&#xff1a;53. 最大子序和 题目链接 题解1&#xff1a;暴力&#xff08;失败&…