【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目

2025-03-13T14:27:57+08:00 | 16分钟阅读 | 更新于 2025-03-13T14:27:57+08:00

Macro Zhao

【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目

在Azure Web应用上,您可以使用Python的OpenAI包方便快捷地调用官方API,上传您的训练数据,并利用他们的算法进行处理。本教程提供了一个逐步指南,帮助您在Azure Web应用上部署您的OpenAI项目,涵盖了从资源设置到解决常见问题的所有内容。

推荐超级课程:

@TOC

OpenAI简介

OpenAI是一家领先的人工智能研究和部署公司,成立于2015年12月。其使命是确保通用人工智能(AGI)——在大多数经济价值工作中超越人类的高度自主系统——造福全人类。OpenAI专注于开发安全且可扩展的人工智能技术,并确保这些创新得到公平的获取。
OpenAI以其在自然语言处理领域的突破性进展而闻名,开发了如GPT(生成预训练转换器)等模型,这些模型为文本生成、总结、翻译等应用提供支持。GPT模型已经彻底改变了对话式AI、创意写作和编程辅助等领域。OpenAI还发布了如Codex等模型,旨在理解和生成计算机代码,以及DALL·E,它可以根据文本描述创建图像。
OpenAI采用独特的混合结构:一家由非营利实体管理的营利性公司,以平衡人工智能技术的发展与伦理考虑。该组织强调安全性、研究透明度和与人类价值观的一致性。通过API提供对其模型的访问,并促进合作伙伴关系,OpenAI使开发人员、企业和研究人员能够利用AI在各个行业中提供创新解决方案。其长期目标是确保人工智能的进步造福全人类。

系统架构

架构

架构图

开发环境

操作系统版本Python版本
UbuntuUbuntu 18.04 Bionic Beaver3.7.3

Azure资源

服务SKU
应用服务计划Premium Plan 0 V3
应用服务Linux (Python 3.9, Version 3.9.19)
存储账户General Purpose V2
文件共享无备份计划

本教程重点

本教程将引导您完成以下阶段:

  1. 设置Azure资源
  2. 本地运行项目
  3. 将项目发布到Azure
  4. 在Azure上运行应用程序
  5. 解决常见问题

设置Azure资源

文件和目录结构

请打开bash终端并输入以下命令:

git clone https://github.com/theringe/azure-appservice-ai.git
cd azure-appservice-ai
bash ./openai/tools/add-venv.sh

如果您使用的是Windows平台,请使用以下替代PowerShell命令:

git clone https://github.com/theringe/azure-appservice-ai.git
cd azure-appservice-ai
.\openai\tools\add-venv.cmd

执行完成后,您应该看到以下目录结构:

目录结构图

文件和路径目的
openai/tools/add-venv.*在上一步中执行的脚本(Windows为cmd,Linux/Mac为sh),用于创建本教程所需的所有Python虚拟环境。
.venv/openai-webjob/用于训练模型(即计算嵌入向量)的专用虚拟环境。
[openai/webjob/requirements.txt]openai-webjob虚拟环境所需的包(及其确切版本)列表。
.venv/openai/用于Flask应用程序的专用虚拟环境,启用API端点访问以查询预测(即建议)。
[openai/requirements.txt]openai虚拟环境所需的包(及其确切版本)列表。
openai//本教程的主文件夹。
[openai/tools/arm-template.json]设置与本教程相关的所有Azure资源的ARM模板,包括应用服务计划、Web应用和存储账户。
openai/tools/create-folder.*在文件共享中创建本教程所需的所有目录(包括train、model和test)的脚本。
openai/tools/download-sample-training-set.*从[News-Headlines-Dataset-For-Sarcasm-Detection]下载示例训练集的脚本,该集包含来自TheOnion和HuffPost的头条数据,并将其放入文件共享的train目录中。
[openai/webjob/cal_embeddings.py]用于从头条中计算嵌入向量的脚本。它加载训练集,在OpenAI API上应用转换,并将嵌入向量保存在文件共享的model目录中。
[openai/App_Data/jobs/triggered/cal-embeddings/cal_embeddings.sh]Azure App Service Web作业的shell脚本。它激活openai-webjob虚拟环境并启动cal_embeddings.py脚本。
[openai/api/app.py]Flask应用程序的代码,包括路由、端口配置、输入解析、向量加载、预测和输出生成。
[openai/start.sh]部署后执行的脚本(在ARM模板启动命令中介绍)。它设置虚拟环境并启动Flask应用程序以处理Web请求。

ARM模板

我们需要创建以下资源或服务:




手动创建所需资源/服务
应用服务计划资源(计划)
应用服务资源(应用)
存储账户资源(存储账户)
文件共享服务

让我们看一下[openai/tools/arm-template.json]文件。请参考配置部分以了解所有资源。

ARM模板配置图


由于大多数配置值不需要更改,我将它们放在ARM模板的变量部分,而不是参数部分。这有助于保持配置的简单性。然而,我仍想简要解释一些更关键的设置。
如您所见,我采用了camelCase命名约定,将

\[资源类型\]

\[设置名称和层次结构\]

相结合。这使得更容易理解每个设置将用于何处。图中的配置按资源名称排序,但以下列表按功能分类,以便更清晰地理解。

配置名称目的
storageAccountFileShareNamedata-and-model\[目的1:将文件共享链接到Web应用\] 使用此固定名称作为文件共享
storageAccountFileShareShareQuota5120\[目的1:将文件共享链接到Web应用\] 该值以GB为单位
storageAccountFileShareEnabledProtocolsSMB\[目的1:将文件共享链接到Web应用\]
appSiteConfigAzureStorageAccountsTypeAzureFiles\[目的1:将文件共享链接到Web应用\]
appSiteConfigAzureStorageAccountsProtocolSmb\[目的1:将文件共享链接到Web应用\]
planKindlinux\[目的2:指定平台和堆栈运行时\] 选择Linux(如果选择Python堆栈,则为默认值)
planSkuTierPremium0V3\[目的2:指定平台和堆栈运行时\] 至少选择Premium计划以确保您的AI工作负载有足够的内存
planSkuNameP0v3\[目的2:指定平台和堆栈运行时\] 与上相同
appKindapp,linux\[目的2:指定平台和堆栈运行时\] 与上相同
appSiteConfigLinuxFxVersionPYTHON3.9
appSiteConfigAppSettingsWEBSITES_CONTAINER_START_TIME_LIMIT600\[目的3:部署\] 该值以秒为单位,确保启动命令可以在默认超时时间230秒之后继续执行。本教程的启动命令通常需要大约300秒,因此将其设置为600秒提供了一个安全边际,并适应了未来项目的扩展(例如,添加更多包)
appSiteConfigAppCommandLine\[ -f /home/site/wwwroot/start.sh \] && bash /home/site/wwwroot/start.sh
appSiteConfigAppSettingsSCM_DO_BUILD_DURING_DEPLOYMENTfalse\[目的3:部署\] 由于我们已经在start.sh中定义了处理不同虚拟环境的方法,因此不需要启动Web应用的默认构建过程
appSiteConfigAppSettingsWEBSITES_ENABLE_APP_SERVICE_STORAGEtrue\[目的4:Web作业\] 此设置是必需的,以启用App Service存储功能,这对于使用Web作业(例如,用于模型训练)是必要的
storageAccountPropertiesAllowSharedKeyAccesstrue\[目的5:故障排除\] 此设置默认启用。强调它的原因是因为某些企业IT策略可能在一段时间后强制更改此配置,可能导致一系列问题。有关更多详细信息,请参阅下面的故障排除部分。

返回bash终端并执行以下命令(它们的目的已在前面描述)。

# 请将<ResourceGroupName>更改为您喜欢的名称,例如:azure-appservice-ai
# 请将<RegionName>更改为您喜欢的区域,例如:eastus2
# 请将<ResourcesPrefixName>更改为您喜欢的命名模式,例如:openai-arm(它将创建openai-arm-asp作为应用服务计划,openai-arm-app用于Web应用,openaiarmsa用于存储账户)
az group create --name <ResourceGroupName> --location <RegionName>
az deployment group create --resource-group <ResourceGroupName> --template-file ./openai/tools/arm-template.json --parameters resourcePrefix=<ResourcesPrefixName>

如果您使用的是Windows平台,请使用以下替代PowerShell命令:

# 请将<ResourceGroupName>更改为您喜欢的名称,例如:azure-appservice-ai
# 请将<RegionName>更改为您喜欢的区域,例如:eastus2
# 请将<ResourcesPrefixName>更改为您喜欢的命名模式,例如:openai-arm(它将创建openai-arm-asp作为应用服务计划,openai-arm-app用于Web应用,openaiarmsa用于存储账户)
az group create --name <ResourceGroupName> --location <RegionName>
az deployment group create --resource-group <ResourceGroupName> --template-file .\openai\tools\arm-template.json --parameters resourcePrefix=<ResourcesPrefixName>

执行后,请从结果中复制包含3个键值对的输出部分,如下所示。

输出部分图

返回bash终端并执行以下命令:

# 请设置您在上一步中获得的3个变量
OUTPUT_STORAGE_NAME="<outputStorageName>"
OUTPUT_STORAGE_KEY="<outputStorageKey>"
OUTPUT_SHARE_NAME="<outputShareName>"
sudo mkdir -p /mnt/$OUTPUT_SHARE_NAME
if [ ! -d "/etc/smbcredentials" ]; then
  sudo mkdir /etc/smbcredentials
fi
CREDENTIALS_FILE="/etc/smbcredentials/$OUTPUT_STORAGE_NAME.cred"
if [ ! -f "$CREDENTIALS_FILE" ]; then
  sudo bash -c "echo "username=$OUTPUT_STORAGE_NAME" >> $CREDENTIALS_FILE"
  sudo bash -c "echo "password=$OUTPUT_STORAGE_KEY" >> $CREDENTIALS_FILE"
fi
sudo chmod 600 $CREDENTIALS_FILE
sudo bash-c "echo '//$OUTPUT_STORAGE_NAME.file.core.windows.net/$OUTPUT_SHARE_NAME /mnt/$OUTPUT_SHARE_NAME cifs nofail,credentials=$CREDENTIALS_FILE,dir_mode=0777,file_mode=0777,serverino,nosharesock,actimeo=30' >> /etc/fstab"
sudo mount -t cifs //$OUTPUT_STORAGE_NAME.file.core.windows.net/$OUTPUT_SHARE_NAME /mnt/$OUTPUT_SHARE_NAME -o credentials=$CREDENTIALS_FILE,dir_mode=0777,file_mode=0777,serverino,nosharesock,actimeo=30

或者,您可以简单地转到Azure门户,导航到您刚刚创建的文件共享,并参考下面的图示来复制所需的命令。如果您在开发环境中使用Windows或Mac操作系统,可以选择Windows或Mac。

Azure门户文件共享连接图

执行命令后,网络驱动器将成功挂载。您可以使用df命令进行验证,如图所示。

df命令验证图

从Azure门户使用ARM模板

除了使用az cli调用ARM模板之外,如果JSON文件托管在公共网络URL上,您还可以按照文章

\[[Deploy to Azure button - Azure Resource Manager](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/deploy-to-azure-button)\]

中描述的方法,直接将配置加载到Azure门户中。

填写所有必要信息后,点击创建。

创建过程完成后,点击左侧菜单中的“输出”以检索文件共享的连接信息。

Azure门户输出信息图

本地运行

训练模型和训练数据

在接下来的步骤中,您将需要使用OpenAI服务。请确保您已注册为成员并向您的账户添加了积分(OpenAI API的计费概述 )。对于本示例,添加10美元的积分将足够。此外,您还需要生成一个新的API密钥(OpenAI API的API密钥 ),您可以根据需要选择创建一个项目,以便将来组织项目(OpenAI API的项目 )。

OpenAI API密钥图

获取API密钥后,在openai/tools/文件夹中创建一个名为apikey.txt的文本文件。将您刚刚复制的密钥粘贴到文件中并保存。

apikey.txt文件图

返回bash终端并执行以下命令(它们的目的已在前面描述)。

source .venv/openai-webjob/bin/activate
bash ./openai/tools/create-folder.sh
bash ./openai/tools/download-sample-training-set.sh
python ./openai/webjob/cal_embeddings.py --sampling_ratio 0.002

如果您使用的是Windows平台,请使用以下替代PowerShell命令:

.\.venv\openai-webjob\Scripts\Activate.ps1
.\openai\tools\create-folder.cmd
.\openai\tools\download-sample-training-set.cmd
python .\openai\webjob\cal_embeddings.py --sampling_ratio 0.002

执行后,文件共享现在将包含以下目录和文件。

文件共享目录结构图

让我们来检查从GitHub下载的训练数据结构。

训练数据结构图


图的右侧解释了数据的每个字段。这个数据集最初用于检测新闻标题是否包含讽刺。然而,我将其用于另一个应用程序。在这个示例中,我将使用“headline”字段来创建嵌入。
图的左侧显示了原始数据,其中每行都是一个包含必要字段的独立JSON字符串。
在代码中,我首先从每条记录中提取“headline”字段,并将其发送到OpenAI以计算文本的嵌入向量。这个嵌入代表了文本在语义空间中的位置(类似于多维空间中的坐标)。计算完成后,我为每个标题获得了一个嵌入向量。在接下来的教程中,我将简单地称这些为嵌入。
顺便说一句,命令中的sampling_ratio参数是我配置的,以加快训练过程。原始数据集包含近30,000条记录,这将导致大约8小时的训练时间。为了简化教程,您可以指定一个相对较低的sampling_ratio值(范围从0到1,代表从原始记录中采样0%到100%)。例如,值为0.01对应于1%的样本,这将允许您加速实验。
在这个语义空间中,彼此更接近的向量通常具有相似的值,这对应于相似的意义。在这种情况下,向量之间的距离将作为我们评估文本片段之间语义相似性的度量。为此,我们将使用一种称为余弦相似性的方法。
在随后的教程中,我们将构建一些测试文本。这些测试文本也将使用相同的方法转换为嵌入。然后,每个测试嵌入将与之前计算的标题嵌入进行比较。比较将在多维向量空间中识别最近的标题嵌入,并返回其原始文本。
此外,我们将利用OpenAI众所周知的生成式AI能力来提供一个文本解释。这个解释将描述为什么构建的测试文本与推荐的标题相关。

使用模型进行预测

返回终端并执行以下命令。首先,停用用于计算嵌入的虚拟环境,然后激活用于Flask应用程序的虚拟环境,最后启动Flask应用程序。
Linux或Mac的命令:

deactivate
source .venv/openai/bin/activate
python ./openai/api/app.py

Windows的命令:

deactivate
.\.venv\openai\Scripts\Activate.ps1
python .\openai\api\app.py

当您看到类似于以下屏幕的内容时,意味着服务器已成功启动。如果需要,按Ctrl+C停止服务器。

服务器启动成功图

在进行实际测试之前,让我们构建一些示例查询数据:

education

接下来,打开一个终端并使用以下curl命令向应用程序发送请求:

curl -X GET http://127.0.0.1:8000/api/detect?text=education

curl命令请求图


您应该看到计算结果,确认嵌入和生成式AI按预期工作。

注意:由于您的训练数据集采样与我的不同,您的结果可能与我的不同。此外,OpenAI的生成内容可能会根据时间和上下文产生不同的输出。请记住这一点。

将项目发布到Azure

返回终端并执行以下命令。

Linux或Mac的命令:

# 请将<resourcegroup_name>和<webapp_name>更改为您自己的
# 从项目创建Zip文件
zip -r openai/app.zip openai/*
# 部署应用程序
az webapp deploy --resource-group <resourcegroup_name> --name <webapp_name> --src-path openai/app.zip --type zip
# 删除Zip文件
rm openai/app.zip

Windows的命令:

# 请将<resourcegroup_name>和<webapp_name>更改为您自己的
# 从项目创建Zip文件
Compress-Archive -Path openai\* -DestinationPath openai\app.zip
# 部署应用程序
az webapp deploy --resource-group <resourcegroup_name> --name <webapp_name> --src-path openai\app.zip --type zip
# 删除Zip文件
del openai\app.zip

注意:WebJobs遵循App_Data/jobs/triggered/<webjob_name>/的目录结构。因此,一旦Web应用程序部署,WebJob将自动与之一起部署,无需额外配置。

在Azure Web应用上运行

训练模型

返回终端并执行以下命令以调用WebJobs。
Linux或Mac的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
curl -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d '{}' "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/triggeredwebjobs/cal-embeddings/run?api-version=2024-04-01"

Windows的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
$token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/triggeredwebjobs/cal-embeddings/run?api-version=2024-04-01" -Headers @{Authorization = "Bearer $token"; "Content-type" = "application/json"} -Method POST -Body '{}'

您可以通过执行以下命令来查看训练状态。
Linux或Mac的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
response=$(curl -s -H "Authorization: Bearer $token" "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/webjobs?api-version=2024-04-01") ;
echo "$response" | jq

Windows的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
$token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
$response = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/webjobs?api-version=2024-04-01" -Headers @{Authorization = "Bearer $token"} -Method GET ;
$response | ConvertTo-Json -Depth 10


处理中完成

您可以通过执行以下命令来获取最新的详细日志。

Linux或Mac的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
history_id=$(az webapp webjob triggered log --resource-group <resourcegroup_name> --name <webapp_name> --webjob-name cal-embeddings --query "[0].id" -o tsv | sed 's|.*/history/||') ;
response=$(curl -X GET -H "Authorization: Bearer $token" -H "Content-Type: application/json" "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/triggeredwebjobs/cal-embeddings/history/$history_id/?api-version=2024-04-01") ;
log_url=$(echo "$response" | jq -r '.properties.output_url') ;
curl -X GET -H "Authorization: Bearer $token" "$log_url"

Windows的命令:

# 请将<subscription_id>、<resourcegroup_name> 和 <webapp_name> 更改为您自己的
$token = az account get-access-token --resource https://management.azure.com --query accessToken -o tsv ;
$history_id = az webapp webjob triggered log --resource-group <resourcegroup_name> --name <webapp_name> --webjob-name cal-embeddings --query "[0].id" -o tsv | ForEach-Object { ($_ -split "/history/")[-1] } ;
$response = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/triggeredwebjobs/cal-embeddings/history/$history_id/?api-version=2024-04-01" -Headers @{ Authorization = "Bearer $token" } -Method GET ;
$log_url = $response.properties.output_url ;
Invoke-RestMethod -Uri $log_url -Headers @{ Authorization = "Bearer $token" } -Method GET

日志报告图


一旦您在日志中看到报告,这意味着嵌入计算已完成,Flask应用程序已准备好进行预测。
您还可以在本地环境中挂载的文件共享中找到新计算的嵌入。

文件共享嵌入图

使用模型进行预测

就像在本地测试中一样,打开一个bash终端并使用以下curl命令向应用程序发送请求:

# 请将<webapp_name>更改为您自己的
curl -X GET https://<webapp_name>.azurewebsites.net/api/detect?text=education

与本地环境一样,您应该看到预期的结果。

curl命令请求结果图

故障排除

启动命令问题

  • 症状:没有任何代码更改,并且应用程序之前运行正常,更新启动命令后,应用程序停止工作。
    相关的default_docker.log显示在短时间内多次尝试运行容器而没有错误,但容器没有在端口8000上响应,如docker.log所示。

    default_docker.log图

  • 原因:由于Linux Web应用程序实际上在容器中运行,启动命令中的最终命令必须类似于Dockerfile中的CMD指令。

    CMD ["/usr/sbin/sshd", "-D", "-o", "ListenAddress=0.0.0.0"]
    

    该命令必须确保在前台运行(即不是守护进程模式),并且除非手动中断,否则不能退出进程。

  • 解决方法:检查启动命令中的最终命令,确保它不包括守护进程执行模式。或者,使用Web SSH界面直接执行和验证这些命令。

应用程序在一段时间后无响应

  • 症状:一个正常运行的应用程序在一段时间后变得无响应。前端网页和Kudu页面都显示“应用程序错误”,部署日志显示“请求过多”。此外,本地环境无法连接到关联的文件共享。

    应用程序错误图

  • 原因:点击初始错误屏幕上的“诊断资源”可以提供更详细的错误信息。
    在此示例中,问题是由内部企业策略或自动化(例如企业应用程序)定期或随机扫描员工创建的存储账户设置引起的。如果设置被认为不符合安全标准,它们将自动调整。
    例如,allowSharedKeyAccess参数可能被强制设置为false,阻止Web应用程序和本地开发环境连接到存储账户下的文件共享。可以通过存储账户的活动日志检查此类设置的修改历史记录(请注意,仅保留最后90天的数据)。

    活动日志图

  • 解决方法:正确的方法是与企业IT团队协调并请求必要的权限。
    作为临时解决方案,在测试期间修改受影响的设置以启用,之后将其恢复为禁用。您可以在以下位置找到allowSharedKeyAccess设置。

    allowSharedKeyAccess设置图


    注意:Azure存储挂载目前不支持通过托管身份访问。

Linux WebJobs的az cli命令失败

  • 症状:从不同平台(即使在Azure CloudShell中使用最新版本的az)收到“操作返回无效状态’未授权’”的消息。

  • 原因:使用“–debug –verbose”从命令中,我可以看到实际发生的错误在哪个REST API上,例如,我使用这个命令(az webapp webjob triggered ):

az webapp webjob triggered list --resource-group azure-appservice-ai --name openai-arm-app --debug --verbose

这表示该操作是在此API下调用的:
/Microsoft.Web/sites/{app_name}/triggeredwebjobs (Web Apps - List Triggered Web Jobs )
之后,我直接从官方文档测试该API,仍然收到这样的错误,这意味着这个预览功能仍在建设中,我们目前无法使用它。

API测试图

  • 解决方法:我通过Azure门户找到了一个相关的API端点:
    /Microsoft.Web/sites/{app_name}/webjobs (Web Apps - List Web Jobs )
    之后,我直接从官方文档测试该API,现在可以获取触发器列表。

    API测试结果图


    因此,我将原始命令:

    az webapp webjob triggered list --resource-group azure-appservice-ai --name openai-arm-app
    

    修改为以下命令(请注意Linux/Mac和Windows命令之间的差异)。
    确保将<subscription_id>、<resourcegroup_name>和<webapp_name>替换为您自己的值。
    Linux或Mac的命令:

    token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
    response=$(curl -s -H "Authorization: Bearer $token" "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/webjobs?api-version=2024-04-01") ;
    echo "$response" | jq
    

    Windows的命令:

    $token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
    $response = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/webjobs?api-version=2024-04-01" -Headers @{Authorization = "Bearer $token"} -Method GET ;
    $response | ConvertTo-Json -Depth 10
    

    对于“run”命令,由于调用有问题的API时存在相同的问题,因此我也修改了操作。
    Linux或Mac的命令:

    token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
    curl -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d '{}' "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resourcegroup_name>/providers/Microsoft.Web/sites/<webapp_name>/triggeredwebjobs/cal-embeddings/run?api-version=2024-04-01"
    

    Windows的命令:

    $token=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv) ;
    Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/029b4739-1f55-4cab-bf84-a9393f8ac8fe/resourceGroups/azure-appservice-ai/providers/Microsoft.Web/sites/openai-arm-app/triggeredwebjobs/cal-embeddings/run?api-version=2024-04-01" -Headers @{Authorization = "Bearer $token"; "Content-type" = "application/json"} -Method POST -Body '{}'
    

最后

除了简单的嵌入向量计算之外,OpenAI最显著的优势是生成式AI。您可以通过自然语言(作为提示)向GPT模型提供指令,清楚地指定您需要的格式。然后,您可以轻松地解析返回的内容。虽然PaaS产品不适合进行繁重的向量计算,但它们非常适合作为中介将命令转发给生成式AI。这些输出甚至可以用于各种应用程序,如专利侵权检测、研究论文中的抄袭检测或趋势新闻分析。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee