利用亚马逊云科技云原生Serverless代码托管服务开发OpenAI ChatGPT-4o应用

今天小李哥继续介绍国际上主流云计算平台亚马逊云科技AWS上的热门生成式AI应用开发架构。上次小李哥分享​了利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API​,这次我将介绍如何利用亚马逊的云原生服务Lambda调用OpenAI的最新模型ChatGPT 4o。由于我人在海外,平时都是利用国际上主流云计算平台帮助企业设计AI应用架构,我的文章也将集中在亚马逊、微软、谷歌和甲骨文云计算平台,目的是帮助大家打开视野,了解世界上最前沿的AI和云原生技术。

架构方案

首先我们简单介绍本方案的细节。本方案采用全托管Serverless云原生架构,涵盖了前端页面、API网关端点、后端应用和AI大语言模型托管平台。总体方案架构图如下:

前端页面:

前端页面方案使用了亚马逊云科技对象存储桶S3,我们使用S3托管前端的HTML, CSS, JS静态网页,在接收到用户请求时,S3会调用JS文件访问后端的API。

优势:使用S3的优势主要是低成本、和高扩展性,同时我们不需要维护前端基础设施。我们可以使用 S3 存储 EB 数量级的数据。S3 由亚马逊云科技托管,可以随着您增减数据的操作自动扩展和收缩。而且无需提前采购云资源,只需按实际使用量付费,具有极高性价比。同时S3具有极低的访问延迟和高吞度带宽,适用于大用户量访问。

API网关端点:

我们使用了亚马逊云科技的API Gateway作为后端API端点,用于接收前端发来的HTTPs访问请求,调用后端AI大模型生成回复,并加载到前端页面上。

优势: API Gateway支持高并发、具有高扩展性、安全性好、有效降低开发和运营成本。它同样是亚马逊云科技全托管的云原生服务,支持RESTful API和WebSocket API,特别适用于获取大模型流式响应。同时有效简化了API的创建、发布、监控、保护等。而且后端支持云原生Serverless代码托管服务lambda和容器服务ECS,帮助构建云上全云原生服务。

后端计算:

后端代码部署我们选择了大名鼎鼎的明星服务Amazon Lambda,用于接收API Gateway转发到后端的请求体,解析后调用AI大模型API,并生成响应体返回给客户端。

优势:无服务器Serverless简化运维,高扩展性、降低成本、低延时。小李哥目前在亚马逊云科技上已经不使用传统服务器开发应用了,目前只使用Lamda。主要原因就是Lambda采用全托管模式,开发人员只需要将代码上传即可运行代码,无需运维。他也可以自己作为一个网页服务器,无需搭建服务器也可以运行代码。同时采用即用即付的计费模式,根据API调用次数、运行时间和消耗资源计费。

AI大语言模型:

AI大语言模型我们使用了Open AI 5月最新发布的多模态模型 ChatGPT 4o,5月这次的发布会可谓震惊了世界,4o速度是GPT-4(特别是GPT-4 Turbo)的两倍,但价格只有一半,而且可以处理文本、视觉和音频多类型数据。

在国际上的主流基准测试中可谓是遥遥领先同类模型,如Claude Ops、Gemini 1.5等。可以完美应用于知识问答客服、文字生成、代码生成、智能助手、教育与培训多个场景。

Amazon Bedrock大语言模型平台

亚马逊云科技同时拥有自己的呀语言模型托管平台--Amazon Bedrock,它同样有非常多的优势。比如支持30多种不同AI模型厂商的大语言模型,如Amazon自家的Titan、Anthropic的Claude 3系列(Opus, Sonnet 3.5, Haiku)、AI21 Labs、Cohere多款向量模型、Meta Llama 2/3、Mistral AI、Stability AI Diffusion等,通过统一的Converse API就可以集中调用、集中管理。

另外Amazon Bedrock也提供了模型测试、知识库(RAG)、智慧体Agent、安全防护栏等多种原生服务,简化云上AI软件服务的集成和开发。同时保障企业内部数据的隐私性、安全性和合规性,训练数据、请求数据都不会用于模型的训练,支持创建企业内部的自定义私有模型,模型全生命周期加密并不会和其他用户共享。同时Amazon Bedrock 实施了自动检测滥用机制,输入不合规,如暴力、违法、仇恨、侮辱的内容,将会阻止回复和使用。

但是目前Amazon Bedrock上还没有支持OpenAI的模型,所以本次AI应用方案,小李哥没有使用该平台上的大语言模型。

2. 利用亚马逊云科技Serverless代码托管服务开发AI应用流程

1. 首先我们登录亚马逊云科技AWS,创建一个Lambda

2. 我们为Lambda函数起一个名字,如“LambdaName”。并且我们规定我们使用的开发语言和版本,如“Python3.10”,最后为Lambda分配一个调用亚马逊云科技平台上其他服务(SNS, Bedrock,S3等)的权限。在选择权限时,我们要尊从最小化权限的原则,提升应用安全。

3.下一步我们为Lambda函数创建前端调用的API端点。首先点击“Enable Function URL”,由于我们是测试环境,在Auth Type选择None,但是在真正的面相服务中,我们需要通过API Gateway在请求头添加API Key验证用户请求,提升应用安全。由于我们要通过前端页面访问后端,最后我们开启跨源资源共享CORS。

我们一般会在CORS配置中,如下图添加如下响应头。

{
​"Access-Control-Allow-Origin": "*","Access-Control-Allow-Headers": "Content-Type","Access-Control-Allow-Methods": "GET, POST, OPTIONS"​
}

4. 由于我们的GenAI应用会调用OpenAI API,我们需要如下操作在代码依赖中添加OpenAI SDK。

在本地创建一个文件夹

mkdir python
cd python

安装OpenAI库

pip install openai -t .

将依赖打包成zip

cd ..
zip -r openai-lambda-package.zip python

5. 打包好后,我们将依赖上传添加到Lambda中,Lambda通过Layer管理、上传代码依赖

点击Lambda的Layer功能并创建一个Layer

上传依赖并配置Layer

创建成功后,将包含依赖的layer添加到Lambda函数中,就大功告成了!

6. 接下来我们将标准的OpenAI GPT4o的API代码,复制到Lamda中。

标准API示例代码如下:

import requests
import json
import osopenai_api_key = # put yout api key hereif openai_api_key is None:raise ValueError("OpenAI API key is not set in environment variables.")url = "https://api.openai.com/v1/chat/completions"headers = {"Content-Type": "application/json","Authorization": f"Bearer {openai_api_key}"
}data = {"model": "gpt-4o","messages": [{"role": "system","content": "You are a helpful assistant."},{"role": "user","content": "Hello!"}]
}response = requests.post(url, headers=headers, json=data)# Check if the request was successful
if response.status_code == 200:print("Response from OpenAI:", response.json())print('\n')print(response.json()['choices'][0]['message']['content'])
else:print("Error:", response.status_code, response.text)

同时复制代码到Lambda函数中,首先从响应体中提取用户前端输入,存到定义的变量中。同时,将OpenAI API调用代码复制到“TODO implement”中,最后定义响应前端的API响应格式。

import jsondef lambda_handler(event, context):input_text = event['body'] #此处从请求体中提取用户输入# TODO implement    #复制OpenAI API代码到本行return {'statusCode': 200,'body': json.dumps('Hello from Lambda!')}                        #此处定义响应头和响应数据

出于应用代码安全性的考虑,此处小李哥建议大家把OpenAI API示例代码中的openai_api_key不要存放到代码中。大家需要用亚马逊云科技的密码管理服务secret manager来储存、管理所有的密码、秘钥。Secret Manager的调用代码如下。

class GetSecretWrapper:def __init__(self, secretsmanager_client):self.client = secretsmanager_clientdef get_secret(self, secret_name):"""Retrieve individual secrets from AWS Secrets Manager using the get_secret_value API.This function assumes the stack mentioned in the source code README has been successfully deployed.This stack includes 7 secrets, all of which have names beginning with "mySecret".:param secret_name: The name of the secret fetched.:type secret_name: str"""try:get_secret_value_response = self.client.get_secret_value(SecretId=secret_name #此处换成大家Secret Manager的名字)logging.info("Secret retrieved successfully.")return get_secret_value_response["SecretString"]except self.client.exceptions.ResourceNotFoundException:msg = f"The requested secret {secret_name} was not found."logger.info(msg)return msgexcept Exception as e:logger.error(f"An unknown error occurred: {str(e)}.")raise

7. 最后大家在Lambda的Function URL页面就可以获取API的URL,将URL复制到前端JS代码中,就可以搭建出基于亚马逊云科技的Open AI GenAI软件应用。

以上就是在亚马逊云科技AWS上利用OpenAI开发GenAI云服务应用的步骤和讲解,欢迎大家关注小李哥,解锁更多的人工智能和云计算结合的最新技术和解决方案,提升AI技能和职场竞争力,成为AI技术专家!

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

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

相关文章

初识SpringBoot

1.Maven Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包 主要功能 项⽬构建管理依赖 构建Maven项目 1.1项目构建 Maven 提供了标准的,跨平台(Linux, Windows, MacOS等)的⾃动化项⽬构建⽅式 当我们开发了⼀个项⽬之后, 代…

LLM指令微调Prompt的最佳实践(六):基于ChatGPT搭建聊天机器人

文章目录 1. 前言2. Prompt定义3. 搭建聊天机器人Chatbot3.1 角色定义1. system2. assistant3. user4. 总结 3.2 初始函数3.3 讲笑话机器人3.4 订餐机器人 4. 参考 1. 前言 前情提要: 《LLM指令微调Prompt的最佳实践(一):Prompt原…

Apache AGE 安装部署

AGE概述 概述 我们可以通过源码安装、拉取docker镜像运行、直接使用公有云三种方式中的任意一种来使用Apache AGE 获取 AGE 发布版本 可以在 https://github.com/apache/age/releases 找到发布版本和发布说明。 源代码 源代码可以在 https://github.com/apache/age 找到…

万字长文整理Java多线程相关面试题

目录 ​1. 什么是线程和进程? 线程与进程有什么区别? 那什么是上下文切换? 进程间怎么通信? 什么是用户线程和守护线程? 2. 并行和并发的区别? 3. 创建线程的几种方式? Runnable接口和C…

Codeforces Round 954 (Div. 3) F. Non-academic Problem

思路&#xff1a;考虑缩点&#xff0c;因为是无向图&#xff0c;所以双连通分量缩完点后是一棵树&#xff0c;我们去枚举删除每一条树边的答案&#xff0c;然后取最小值即可。 #include <bits/stdc.h>using namespace std; const int N 3e5 5; typedef long long ll; …

3-6 构建线性模型解决温度计示数转换问题

3-6 构建线性模型解决温度计示数转换问题 直接上源码 %matplotlib inline import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)导入必要的库并设置 PyTorch 的打印选项&#xff0c;确保在打印张量时显示边缘项和行宽。 #%% t_c [0.5, 14.0,…

gpt-4o看图说话-根据图片回答问题

问题&#xff1a;中国的人口老龄化究竟有多严重&#xff1f; 代码下实现如下&#xff1a;&#xff08;直接调用openai的chat接口&#xff09; import os import base64 import requests def encode_image(image_path): """ 对图片文件进行 Base64 编码 输入…

phpexcel导入导出

前言&#xff1a; 如果你到处的excel软件打开有问题&#xff0c;下面有介绍解决办法 导入 1. composer init 初始化 2. 下载phpspreadsheet 这里需要注意php版本&#xff0c;需要大于7.2 composer require phpoffice/phpspreadsheet3. 编写代码 <?php require vendo…

Linux多进程和多线程(八)多线程

多线程 线程定义线程与进程线程资源 线程相关命令 pidstat 命令 top 命令ps 命令常见的并发方案 1. 多进程模式2. 多线程模式 创建线程 1. pthread_create() 示例:创建一个线程 2. pthread_exit() 退出线程3. pthread_join() 等待线程结束 示例: 线程分离 创建多个线程 示例 1:…

“郑商企航”暑期社会实践赴美丽美艳直播基地开展调研

马常旭文化传媒网讯&#xff08;记者张明辉报道&#xff09;导读&#xff1a;2024 年 7 月 3 日&#xff0c;商学院暑期社会实践团“郑商企航”在河南省郑州市新密市岳村镇美丽美艳直播基地&#xff0c;展开了一场意义非凡的考察活动&#xff0c;团队成员深度调研了直播基地的产…

CTF php RCE(二)

0x04 php伪协议 这种我们是先看到了include才会想到&#xff0c;利用伪协议来外带文件内容&#xff0c;但是有些同学会问&#xff0c;我们怎么知道文件名是哪个&#xff0c;哪个文件名才是正确的&#xff0c;那么这里我们就得靠猜了 include函数 因为 include 是一个特殊的语…

C++笔试强训3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 如图所示&#xff0c;如图所示p-3指向的元素是6&#xff0c;printf里面的是%s&#xff0c;从6开…

Python入门 2024/7/8

目录 数据容器 dict(字典&#xff0c;映射) 语法 定义字典字面量 定义字典变量 定义空字典 从字典中基于key获取value 字典的嵌套 字典的常用操作 新增元素 更新元素 删除元素 清空字典 获取全部的key 遍历字典 统计字典内的元素数量 练习 数据容器的通用操作…

SQLite 命令行客户端 + Windows 批处理应用

SQLite 命令行客户端 Windows 批处理应用 下载 SQLite 客户端1. Bat 辅助脚本1. 执行SQL.bat执行 2. 导出Excel.bat执行效果 3. 导出HTML.bat执行效果 4. 清空-订单表.bat5. 订单表.bat 2. 测试 SQL1. 创建订单表.sql2. 插入订单表.sql3. 查询订单表.sql4. 清空订单表.sql5. 删…

Sentinel-1 Level 1数据处理的详细算法定义(二)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程&#xff0c;以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

Vuforia AR篇(八)— AR塔防上篇

目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实&#xff08;AR&#xff09;技术快速发展的今天&#xff0c;Vuforia作为一个强大的AR开发平台&#xff0c;为开发者提供了…

前端图表库G2快速上手

文档地址&#xff1a; https://g2-v3.antv.vision/zh/docs/manual/getting-started/ https://g2.antv.antgroup.com/ 安装&#xff1a; pnpm i antv/g2在vue3中使用&#xff1a; <script setup> import {Chart} from antv/g2; import {onMounted} from "vue"…

python_zabbix

zabbix官网地址&#xff1a;19. API19. APIhttps://www.zabbix.com/documentation/4.2/zh/manual/api 每个版本可以有些差异&#xff0c;选择目前的版本在查看对于的api接口#token接口代码 import requests apiurl "http://zabbix地址/api_jsonrpc.php" data {&quo…

五、保存数据到Excel、sqlite(爬虫及数据可视化)

五、保存数据到Excel、sqlite&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;保存数据到excel1.1 保存九九乘法表到excel&#xff08;1&#xff09;代码testXwlt.py&#xff08;2&#xff09;excel保存结果 1.2 爬取电影详情并保存到excel&#xff08;1&#xff09;代…

苍穹外卖--启用和禁用员工

实现 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.dto.EmployeePageQueryDTO; import com.sky.entity.Employee; import com.sky.properties.JwtPro…