Azure-Samples/azure-search-openai-demo: A sample app for the Retrieval-Augmented Generation pattern
一、申请 Azure OpenAI ChatGPT API
要使用 Azure OpenAI ChatGPT API,首先需要申请访问权限和获得API Key。
1. 访问微软 Azure 平台进行申请
- 使用微软自家邮箱注册账号
- 填写申请表单获得访问权限
2. 获得 API Key
- 通过申请后,获得唯一的 API Key
- 用于认证 API 要求的身份
二、使用 Azure OpenAI ChatGPT API
取得访问权限和 API Key 后,可使用 ChatGPT API 进行自然语言交互。
1. 发起聊天会话
- 使用 ChatGPT API 发起聊天会话
- 将用户的问题或需求作为输入
2. 定制模型
- 模型可根据具体需求进行定制
- 使用 Azure OpenAI Studio 进行模型的调优和训练
3. 结果返回与解析
- 取得 ChatGPT 的响应结果
- 解析响应并提取所需信息
三、使用教程
了解怎样使用 Azure OpenAI ChatGPT API 来完成自然语言交互和编程任务。
1. 了解 Azure OpenAI ChatGPT API
- API 的授权选项和要求格式
- API 的返回结果和解析方法
2. 使用 Azure OpenAI 强大的语言模型
- GPT⑶、Codex 和 Embeddings 等系列模型的使用方法
- 使用 ChatGPT 进行自然语言交互和编程
3. 部署 ChatGPT 模型
- 在 Azure OpenAI Service 中部署 ChatGPT 模型
- 使用 API Key 进行身份认证和模型访问
四、使用注意事项
在使用 Azure OpenAI ChatGPT API 时需要注意一些事项,以保证良好的使用体验。
1. 规避与客户竞争
- 在消费级利用中避免与客户直接竞争
- 开发工具可能不在竞争范围以内
2. 选择适合的身份认证方式
- 可选择 API Keys 或 Azure Active Directory 进行认证
- 区别认证方式的使用指南和调用示例
五、Azure OpenAI ChatGPT API的优势
Azure OpenAI ChatGPT API 提供了许多优势和功能,使其成为开发者首选的语言模型服务。
1. 强大的语言模型支持
- ChatGPT 可以利用于多种语言任务和场景
- 支持自然语言交互和编程
2. 客制化和部署灵活性
- 可根据具体需求进行模型的定制和调优
- 在 Azure OpenAI Service 中方便地部署和访问
六、结论
通过 Azure OpenAI ChatGPT API,用户可以方便地进行自然语言交互,并使用强大的语言模型进行编程和定制化。
在申请和使用进程中,需注意选择适合的身份认证方式,并避免与客户直接竞争。
Azure OpenAI ChatGPT API 提供了灵活的部署和访问方式,为用户的语言处理需求提供了全面的解决方案。
azure openai chatgpt api的进一步展开说明
使用Azure OpenAI和Cognitive Search进行ChatGPT和企业数据的集成
目录
这个示例演示了使用检索增强生成(Retrieval Augmented Generation,RAG)模式在自己的数据上创建类似ChatGPT的体验的几种方法。它使用Azure OpenAI服务访问ChatGPT模型(gpt⑶5-turbo),并使用Azure Cognitive Search进行数据索引和检索。
该存储库包括示例数据,因此可以直接尝试使用。在这个示例利用程序中,我们使用一个虚构的公司名叫Contoso Electronics,员工可以向它询问有关福利、内部政策和工作描写和角色的问题。
功能
聊天和问答界面
探索各种选项,帮助用户评估回答的可信度,包括援用、跟踪源内容等
展现了数据准备、提示构建和模型(ChatGPT)和检索器(Cognitive Search)之间交互的可能方法
在用户界面中直接设置行动并尝试各种选项
可选的性能跟踪和监控,使用Application Insights
入门指南
重要提示:为了部署和运行此示例,您需要具有启用Azure OpenAI服务访问权限的Azure定阅。您可以在此处申请访问权限。您还可以访问此处取得一些不要钱的Azure点数来开始使用。
您的Azure帐户一定要具有Microsoft.Authorzation/roleAssignments/write权限,例如用户访问管理员或所有者权限。
Azure部署
本钱估算
定价因地区和使用情况而异,因此没法预测您的使用情况的确切本钱。但是,您可以尝试使用Azure定价计算器估算以下资源的价格。
Azure App Service:基本层,1个CPU核心,1.75 GB RAM。按小时计费。定价
Azure OpenAI:标准层,ChatGPT和Ada模型。按使用的每1K个标记计费,每一个问题最少使用1K个标记。定价
表单辨认器:SO(标准)层,使用预构建布局。按文档页面计费,示例文档一共有261页。定价
Azure Cognitive Search:标准层,1个副本,语义搜索的不要钱级别。按小时计费。定价
Azure Blob Storage:带有ZRS(区域冗余存储)的标准层。按存储和读取操作计费。定价
Azure Monitor:按使用费用计费。费用基于数据摄取。定价
为了下降本钱,您可以通过更改infra文件夹中的参数文件来切换到Azure App Service、Azure Cognitive Search和Form Recognizer的不要钱SKU。您需要斟酌一些限制,例如,每一个定阅最多可以具有1个不要钱的Cognitive Search资源,而不要钱的Form Recognizer资源只分析每一个文档的前2页。您还可以通过减少数据文件夹中的文档数量,或通过删除azure.yaml中运行prepdocs.py脚本的postprovision钩子来下降与Form Recognizer相关的本钱。
⚠️为了不没必要要的本钱,请记住如果不再使用您的利用程序,要末通过在门户中删除资源组,要末运行azd down来关闭您的利用程序。
项目设置
有几种设置此项目的方法。最简单的方式是使用GitHub Codespaces,由于它会为您设置所有的工具,但如果需要,您也能够在本地进行设置。
GitHub Codespaces
您可以通过使用GitHub Codespaces来在网络上运行此存储库,在您的浏览器中打开基于Web的VS Code:
VS Code远程容器
另外一个选项是使用VS Code远程容器,在本地VS Code中使用Dev Containers扩大打开项目:
本地环境
首先安装所需的工具:
Azure开发者CLI
Python 3.9+重要:在Windows中,一定要将Python和pip包管理器添加到环境变量中,以便设置脚本正常工作。重要:确保您可以从控制台运行python –version。在Ubuntu上,您可能需要运行sudo apt install python-is-python3来将python链接到python3。
Node.js 14+
Git
Powershell 7+(pwsh)-仅适用于Windows用户。重要:确保您可以从PowerShell终端运行pwsh.exe。如果此操作失败,您可能需要升级PowerShell。
然后下载项目代码:
创建一个新文件夹并在终端中切换到该文件夹
运行azd auth login
运行azd init -t azure-search-openai-demo请注意,此命令将初始化一个git仓库,您不需要克隆此存储库
从头开始部署
履行以下命令,如果您没有任何现有的Azure服务,且希望从头开始进行部署。
运行azd up-这将提供Azure资源并将此示例部署到这些资源中,并基于./data文件夹中找到的文件构建搜索索引。您将被提示选择两个位置,一个用于大多数资源,另外一个用于OpenAI资源,目前是一个简短的列表。该位置列表基于OpenAI模型可用性表,随着可用性的变化,该列表可能会过时。利用程序部署成功后,您将在控制台上看到一个URL。点击该URL在浏览器中与利用程序交互。
它将以下所示:
注意:利用程序部署完成可能需要一分钟。如果看到“Python Developer”欢迎屏幕,请等待一分钟并刷新页面。
使用现有Azure资源进行部署
如果您已有现有的Azure资源,可以通过设置azd环境值来复用这些资源。例如:
运行 azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
运行 azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
运行 azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment} . Only needed if your ChatGPT deployment is not the default ‘chat’.
运行 azd env set AZURE_OPENAI_EMB_DEPLOYMENT {Name of existing GPT embedding deployment} . Only needed if your embeddings deployment is not the default ’embedding’.
运行azd up-这将提供剩余的Azure资源并将此示例部署到这些资源中,包括根据./data文件夹中找到的文件构建搜索索引。
注意:您还可使用现有的搜索和存储帐户。请参阅./infra/main.parameters.json以获得要传递给azd env set的环境变量列表,以配置这些现有资源。
再次部署
如果您只更改了app文件夹中的后端/前端代码,那末您不需要重新提供Azure资源。您只需运行:
azd deploy
如果更改了基础设施文件(infra文件夹或azure.yaml),那末您将需要重新提供Azure资源。您可以通过运行以下命令来完成:
azd up
共享环境
要使其他人可以访问完全部署和现有环境,您或他们可以依照以下步骤操作:
安装Azure CLI
运行azd init -t azure-search-openai-demo或克隆此存储库。
运行azd env refresh -e {environment name}。他们将需要azd环境名称、定阅ID和位置来运行此命令。您可以在.az/{环境名称}/.env文件中找到这些值。这将使用所有设置为本地履行的azd环境的.env文件。
在该.env文件或活动的shell中设置环境变量AZURE_PRINCIPAL_ID为其Azure ID,他们可使用az ad signed-in-user show获得该ID。
运行./scripts/roles.ps1或.scripts/roles.sh为用户分配所有必要的角色。如果他们没有在定阅中创建角色的必要权限,则您可能需要代表他们运行此脚本。脚本运行后,他们应当能够在本地运行利用程序。
启用可选功能
启用利用程序洞察
要启用利用程序洞察和跟踪每一个要求和记录毛病,请在运行azd up之前将AZURE_USE_APPLICATION_INSIGHTS变量设置为true
运行azd env set AZURE_USE_APPLICATION_INSIGHTS true
运行azd up
要查看性能数据,请转到资源组中的利用程序洞察资源,单击“查看->性能”图层,并导航到任何HTTP要求以查看时间数据。要检查聊天要求的性能,请使用“Drill into Samples”按钮查看任何聊天要求的所有API调用的端到端跟踪:
要查看任何异常和服务器毛病,请导航到“查看->失败”图层,并使用过滤工具查找特定异常。您可以在右边查看Python堆栈跟踪。
启用身份验证
默许情况下,部署的Azure Web利用程序没有启用身份验证或访问限制,这意味着任何具有路由访问网络的人都可以与您的索引数据进行聊天。您可以依照添加利用程序身份验证教程中的步骤要求Azure Active Directory进行身份验证,并针对部署的Web利用程序进行设置。
然后,您可以通过更改企业利用程序下的“分配会不会需要?”选项,来将访问权限限制为特定的用户或组,然后分配用户或组访问权限。未被授与明确访问权限的用户将收到毛病消息“AADSTS50105:您的管理员已配置利用程序<应用程序名称>,除非专门授与(’分配’)对该利用程序的访问权限,否则将禁止用户访问。”
在本地运行
只有成功运行azd up命令后,才能在本地运行。如果还没有完成,请依照上面的Azure部署步骤进行操作。
运行azd auth login切换目录到app运行./start.ps1或./start.sh或运行“VS Code Task: Start App”在本地启动项目。
使用利用程序
在Azure中:导航到由azd部署的Azure WebApp。URL在azd完成时打印出来(称为“Endpoint”),或您可以在Azure门户中找到它。
在本地运行:导航到127.0.0.1:50505
进入Web利用程序后:
在聊天或问答上下文中尝试区别的主题。对聊天,尝试追加问题、澄清问题、要求简化或详细解释答案等。
探索引文和源。
点击”settings”尝试区别的选项、调剂提示等。
生产化
该示例旨在成为您自己的生产利用程序的出发点,但在部署到生产环境之前,您应当对安全性和性能进行完全的审查。以下是一些需要斟酌的问题:
OpenAI容量:默许的TPM(每分钟标记数)设置为30K。这相当于每分钟约30个对话(假定每一个用户消息/响应使用1K个标记)。您可以通过将infra/main.bicep中的chatGptDeploymentCapacity和embeddingDeploymentCapacity参数更改成您账户的最大容量来增加容量。您还可以在Azure OpenAI工作室中查看配额选项卡,了解您具有多少容量。
Azure Storage:默许的存储帐户使用Standard_LRS SKU。为了提高可靠性,我们建议在生产部署中使用Standard_ZRS,您可以在infra/main.bicep的storage模块下使用sku属性指定。
Azure Cognitive Search:默许的搜索服务使用Standard SKU,带有不要钱的语义搜索选项,可提供1000次不要钱查询每个月。假定您的利用程序将有超过1000个问题,请将semanticSearch更改成“standard”,或在/app/backend/approaches文件中完全禁用语义搜索。如果看到搜索服务容量超过限制的毛病,您可能需要通过更改infra/core/search/search-services.bicep中的replicaCount来增加副本数,或从Azure门户手动进行扩大。
Azure App Service:默许的利用服务计划采取基本SKU,带有1个CPU核心和1.75 GB RAM。我们建议使用高级SKU,从1个CPU核心开始。您可使用自动缩放规则或计划缩放规则,并根据负载对最大/最小进行缩放。
身份验证:默许情况下,部署的利用程序是公然可访问的。我们建议限制对已验证用户的访问权限。有关如何启用身份验证的详细步骤,请参见上面的“启用身份验证”。
网络:我们建议在虚拟网络中部署。如果利用程序仅供内部企业使用,请使用私有DNS区域。另外,还可以斟酌使用Azure API Management(APIM)进行防火墙和其他情势的保护。有关更多详细信息,请浏览Azure OpenAI落地区参考架构。
负载测试:我们建议根据预期的用户数量进行负载测试。您可使用locust工具和此示例中的locustfile.py进行负载测试,或使用Azure负载测试进行负载测试。
资源
注意
注意:此演示中使用的PDF文档包括使用语言模型(Azure OpenAI服务)生成的信息。这些文档中包括的信息仅用于演示目的,不反应Microsoft的意见或信心。Microsoft对本文档中包括的信息的完全性、准确性、可靠性、适用性或可用性不提供任何昭示或暗示的保证或陈说。保存Microsoft的所有权利。
常见问题解答
为何我们需要将PDF文件分割成块,而Azure Cognitive Search支持搜索大型文档?分块使我们能够限制发送到OpenAI的信息量,以避免超越标记限制。通过将内容分割,我们可以轻松找到可以插入OpenAI的潜伏文本块。我们使用的分块方法利用文本的滑动窗口,使得一个分块的句子将成为下一个分块的开头。这样可以减少丢失文本的上下文的可能性。
怎么上传其他PDF文件而无需重新部署所有内容?要上传更多的PDF文件,请将它们放在data/文件夹中,并运行./scripts/prepdocs.sh或./scripts/prepdocs.ps1。要避免重新上传现有文档,请将它们移出data文件夹。您还可以实现检查以查看之前已上传了哪些文档;我们的代码目前没有此类检查。
此示例与其他Chat with Your Data示例有何区分?这个用例的另外一个流行存储库在这里:https://github.com/Microsoft/sample-app-aoai-chatGPT/该存储库是为使用Azure OpenAI Studio和Azure Portal进行设置的客户设计的。它还包括了供希望完全从头开始部署的人使用的azd支持。主要区分以下:本存储库包括多种RAG(检索增强生成)方法,将多个API调用(对Azure OpenAI和ACS)的结果以区别的方式连接在一起。另外一个存储库仅使用ChatCompletions API的内置数据源选项,该API在指定的ACS索引上使用RAG方法。这对大多数用处来讲应当是有效的,但如果您需要更灵活的方式,这个示例多是更好的选择。
此存储库在其他方面也有一些实验性质,由于它与Azure OpenAI Studio不像另外一个存储库那样紧密相关。
怎么将ChatGPT⑷与此示例一起使用?在infra/main.bicep中,将chatGptModelName改成’gpt⑷’而不是’gpt⑶5-turbo’。根据您的账户允许的TPM数量,您可能还需要调剂该行上面的容量。
聊天和问问选项之间有甚么区分?聊天选项卡使用chatreadretrieveread.py中编程的方法。它使用ChatGPT API将用户的问题转化为一个好的搜索查询。
它查询Azure Cognitive Search获得该查询的搜索结果(可选择使用该查询的向量嵌入)。
然后,它将搜索结果和用户原始问题相结合,并要求ChatGPT API基于来源回答问题。它还包括最近的4K条消息历史记录(或根据部署模型允许的标记数量)。
问答选项卡使用retrievethenread.py中编程的方法。它查询Azure Cognitive Search获得用户问题的搜索结果(可选择使用该问题的向量嵌入)。
然后,它将搜索结果和用户问题相结合,并要求ChatGPT API基于来源回答问题。还有另外两种/ask方法,使用略微区别的方法,但由于langchain兼容性问题,它们目前没法正常工作。
故障排除
以下是最多见的故障场景和解决方案:
azure openai chatgpt api的常见问答Q&A
问题1:Azure OpenAI如何申请和使用?
答案:Azure OpenAI是Microsoft Azure云平台上提供的一项服务,用于使用OpenAI的强大AI模型。以下是申请和使用Azure OpenAI的详细步骤:
- 在Azure门户中创建Azure账号,并登录到Azure管理控制台。
- 在Azure管理控制台上创建一个资源组,作为存储OpenAI服务所需资源的容器。
- 在资源组中创建一个Azure OpenAI服务实例。
- 获得Azure OpenAI服务实例的访问密钥或API密钥。
- 使用访问密钥或API密钥调用Azure OpenAI的API,以访问和使用OpenAI的强大AI模型。
子点1:创建Azure账号并登录到Azure管理控制台
要使用Azure OpenAI,首先需要在Azure门户上创建一个Azure账号。然后,登录到Azure管理控制台,这是一个用于管理Azure云服务和资源的网站。
在Azure门户注册账号并登录到Azure管理控制台的具体步骤以下:
- 打开Azure门户的网站(https://portal.azure.com)。
- 点击“创建一个账号”按钮,填写必要的信息,并依照指引完成账号的创建。
- 使用创建的账号登录到Azure管理控制台。
子点2:创建资源组
在Azure管理控制台上,需要创建一个资源组,作为存储OpenAI服务所需资源的容器。资源组是Azure中组织和管理资源的逻辑容器。
创建资源组的步骤以下:
- 在Azure管理控制台的左边导航栏中,点击“资源组”。
- 在资源组页面中,点击“+新建”按钮。
- 填写资源组的名称、选择所在的区域,并点击“查看+创建”。
- 确认信息无误后,点击“创建”按钮。
子点3:创建Azure OpenAI服务实例
在创建好资源组后,需要在该资源组中创建一个Azure OpenAI服务实例。
创建Azure OpenAI服务实例的步骤以下:
- 在Azure管理控制台的左边导航栏中,点击“创建资源”。
- 在搜索框中输入“Azure OpenAI服务”,并选择“Azure OpenAI服务”。
- 在Azure OpenAI服务页面中,点击“创建”按钮。
- 填写所需的信息,照实例名称、定阅、资源组、定价层等。
- 点击“查看+创建”按钮,确认信息无误后,点击“创建”按钮。
- 等待一段时间,直到Azure OpenAI服务实例创建成功。
子点4:获得访问密钥或API密钥
创建好Azure OpenAI服务实例后,需要获得访问密钥或API密钥,以便调用Azure OpenAI的API。
获得访问密钥或API密钥的步骤以下:
- 在Azure管理控制台中,找到已创建的Azure OpenAI服务实例。
- 进入Azure OpenAI服务实例的详细信息页面。
- 在“管理”选项卡下,找到访问密钥或API密钥相关的信息。
- 将访问密钥或API密钥保存下来,以便后续使用。
子点5:使用访问密钥或API密钥调用Azure OpenAI的API
获得到访问密钥或API密钥后,就能够使用它们来调用Azure OpenAI的API,以访问和使用OpenAI的强大AI模型。
使用访问密钥或API密钥调用Azure OpenAI的API的具体步骤和示例代码请参考Azure OpenAI的详细文档。
下面是一个使用Python代码调用Azure OpenAI的API的示例:
import requests
subscription_key = "YOUR_SUBSCRIPTION_KEY"
endpoint = "YOUR_ENDPOINT"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + subscription_key
}
data = {
"question": "What is Azure OpenAI?"
}
response = requests.post(endpoint, headers=headers, json=data)
result = response.json()
print(result)