ChatGPT 4o是Open AI最新一代的AI语言模型,可以实时对音频、视觉和文本进行推理,并且能够处理50种不同的语言,同时提高了速度和质量。亚马逊云科技目前已经支持这款大模型,本文就来带大家一起来了解下亚马逊Amazon Lambda开发ChatGPT-4o应用教程,仅供参考。
本文涉及到的亚马逊云服务:
1、Amazon Lambda
Amazon Lambda是一种无服务器计算服务,无需管理服务器、自动扩展应用程序,通过毫秒计算优化成本,每月免费提供100万个请求,永久免费使用。
2、Amazon S3
Amazon S3是一项对象存储服务,在可扩展性、数据可用性、安全性和能效方面业界领先。免费套餐包括11个9的数据持久性、20000个Get请求、5GB标准存储、2000个PUT/COPY/POST或LIST请求、100 GB的数据传出量,免费试用12个月。
3、Amazon API Gateway
Amazon API Gateway是一种完全托管的服务,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的API。目前提供免费试用服务,可免费接收100万次API调用,使用时长为12个月。
新用户注册亚马逊云科技账户,即可免费使用以上云服务。
点击试用:亚马逊免费云服务
相关推荐:《如何注册亚马逊AWS账号》
一、创建Amazon Lambda
1、进入亚马逊云科技官网,注册并登录账号。
2、创建一个Amazon Lambda函数。
进入控制台,找到计算>Amazon Lambda,点击进入。详情可以参考:《AWS Lambda创建具体教程》
3、为Amazon Lambda函数起一个名字,并且我们规定使用的开发语言和版本,最后为Lambda分配一个调用亚马逊云科技平台上其他服务(SNS,Bedrock,S3等)的权限。本文配置如下:
- Amazon Lambda函数名称:LambdaName
- 编程语言和版本:Python3.10
4、为AWS Lambda函数创建前端调用的API端点
点击“Enable Function URL”,在Auth Type选择None。由于本文需要通过前端页面访问后端,所以开启跨源资源共享CORS。
注:在实际操作中,建议用户需要通过API Gateway在请求头添加API Key验证用户请求,提升应用安全。
在CORS配置中,如下图添加如下响应头。
{
"Access-Control-Allow-Origin": "*","Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "GET, POST, OPTIONS"
}
5、在代码依赖中添加OpenAI SDK。
在本地创建一个文件夹
mkdir python
cd python
安装OpenAI库
pip install openai -t .
将依赖打包成zip
cd ..
zip -r openai-lambda-package.zip python
6、打包好后,将依赖上传添加到AWS Lambda中,Lambda通过Layer管理、上传代码依赖
点击Amazon Lambda的Layer功能并创建一个Layer。
上传依赖并配置Layer
创建成功后,将包含依赖的layer添加到AWS Lambda函数中。
二、搭建亚马逊云科技的GPT4o应用
1、将标准的OpenAI ChatGPT-4o的API代码,复制到Amazon Lamda中。
标准API示例代码如下:
import requests
import json
import osopenai_api_key = # put yout api key here
if 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)
2、复制代码到Lambda函数中,首先从响应体中提取用户前端输入,存到定义的变量中。同时,将OpenAI API调用代码复制到“TODO implement”中,最后定义响应前端的API响应格式。
import json
def 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存放到代码中。用户可以使用亚马逊云科技的密码管理服务Amazon Secret Manager来储存、管理所有的密码、秘钥。
Amazon 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 msg
except Exception as e:
logger.error(f"An unknown error occurred: {str(e)}.")
raise
3、这样,用户在AWS Lambda的Function URL页面就可以获取API的URL,将URL复制到前端JS代码中,就可以搭建出基于亚马逊云科技的GPT4o应用了。
相关推荐: