Azure-Samples/azure-search-openai-demo: A sample app for the Retrieval-Augmented Generation pattern
微软Azure推出ChatGPT企业级私有聊天助手,助力企业信息保密与高效沟通
Azure提供了OpenAI服务
Azure上一键部署GPT3.5(chatGPT模型底座)模型,可上传训练数据,默许不开放GPT4模型,需要填写使用申请单。
微软开源了Azure ChatGPT,开源地址为https://github.com/imartinez2/azurechatgpt,功能与ChatGPT基本一致,帮助企业安全、可靠地利用ChatGPT于业务流程中。
微软Azure ChatGPT的功能允许企业在所有网络装备上运行ChatGPT,提供更顺畅的工作体验,可纠正和编辑代码块,和履行其他任务。
微软Azure上线新功能,可在个人的数据上使用ChatGPT,微软面对国内大模型竞争,推出此功能,助力用户在业务中高效使用ChatGPT。
联合微软Azure的语音辨认api实现聊天功能,通过接入麦克风收集声音,调用语音辨认api返回文本,通过拼接prompt,调用ChatGPT接口取得回覆信息文本。
微软Azure OpenAI提供多种工具,可以使用ChatGPT基于GPT⑶.5语言系统,可通过文本提示生成图象的Dall-E模型。
Azure OpenAI代理,使用GitHub – Chanzhaoyu/chatgpt-web创建自己的ChatGPT,借助Express和Vue3搭建ChatGPT演示网页。
微软Ai办公智能化,开放不要钱ChatGPT接口,实现全面智能办公。
Azure OpenAI的ChatGPT定价和可用性,ChatGPT定价为每1000个token的$0.002,所有ChatGPT使用将于2023年3月13日开始计费。
Microsoft Azure ChatGPT为企业带来的优势,允许企业在其网络内运行ChatGPT,部署企业私有聊天助手,提升企业信息保密和高效沟通能力。
chatgpt microsoft azure的进一步展开说明
# ChatGPT + Azure OpenAI和Cognitive Search的企业数据
## 目录
– [介绍](#introduction)
– [功能](#features)
– [Azure账户要求](#azure-account-requirements)
– [项目设置](#project-setup)
– [部署方式](#deployment-options)
– [项目配置](#project-configuration)
– [资源优化](#resource-optimization)
– [生产环境准备](#productionizing)
– [常见问题解答](#faq)
– [故障排除](#troubleshooting)
## 介绍
本示例演示了怎样使用Retrieval Augmented Generation (RAG) 模式利用自己的数据创建类似ChatGPT的体验。它使用Azure OpenAI Service来访问ChatGPT模型(gpt⑶5-turbo),使用Azure Cognitive Search进行数据索引和检索。
该仓库包括示例数据,因此可以一站式尝试。在这个样例利用程序中,我们使用了一个虚构的公司Contoso Electronics,并允许其员工发问有关福利、内部政策和工作描写和角色的问题。
## 功能
– 聊天和问答接口
– 提供区别选项帮助用户评估回答的可靠性,例如援用、源内容跟踪等
– 显示数据准备、提示构建和模型(ChatGPT)与检索器(Cognitive Search)之间交互的可能方法
– 在UX中直接进行设置以调剂行动并尝试区别的选项
– 可选的性能跟踪和利用程序洞察监控
## Azure账户要求
**重要提示:为了部署和运行此示例,您需要:**
### Azure部署
本钱估算
价格因区域和使用情况而异,因此没法预测您的使用情况的确切本钱。但是,您可使用Azure定价计算器来获得以下资源的价格。
– Azure App Service:基本层(Basic Tier),1个CPU核心,1.75 GB RAM。按小时计价。[价格](https://azure.microsoft.com/pricing/details/app-service/linux/)
– Azure OpenAI: 标准层(Standard tier),使用ChatGPT和Ada模型。依照使用的1K标记(Tokens)数量计价,每一个问题最少使用1K标记。[价格](https://azure.microsoft.com/pricing/details/openai-text-generation/)
– 表单辨认(Form Recognizer):预建布局(Pre-built layout)的SO(Standard)层。依照每一个文档页数计费,示例文档总计261页。[价格](https://azure.microsoft.com/pricing/details/form-recognizer/)
– Azure Cognitive Search:标准层(Standard tier),1个副本,不要钱级别的语义搜索。按小时计价。[价格](https://azure.microsoft.com/pricing/details/cognitive-search/)
– Azure Blob存储(Azure Blob Storage):带有ZRS(Zone-redundant storage)的标准层(Standard tier)。按存储和读取操作计费。[价格](https://azure.microsoft.com/pricing/details/storage/blobs-general/)
– Azure Monitor:按需付费层。费用基于数据摄取量。[价格](https://azure.microsoft.com/pricing/details/monitor/)
为了下降本钱,您可以切换到Azure App Service、Azure Cognitive Search和Form Recognizer的不要钱SKU。只需在 infra 文件夹下的参数文件中更改以下参数便可。固然需要斟酌一些限制;例如,每一个定阅只能具有一个不要钱的Cognitive Search资源,而不要钱的Form Recognizer资源仅会分析每一个文档的前两页。您还可以通过减少数据文件夹中的文档数量或删除azure.yaml中的postprovision挂钩来减少与Form Recognizer相关的本钱,该挂钩运行prepdocs.py脚本。
⚠️为了不没必要要的费用,请记得如果不再使用,请先关闭利用程序,您可以在Azure门户中删除资源组或运行azd down命令。
## 项目设置
您可使用以下几种方式设置此项目。最简单的方式是使用GitHub Codespaces,由于它会为您设置所有的工具,但您也能够在本地设置该项目。
### GitHub Codespaces
您可以通过使用GitHub Codespaces来虚拟运行这个仓库,在浏览器中打开基于Web的VS Code:
### VS Code Remote Containers
另外一个选择是VS Code Remote Containers,它将使用Dev Containers扩大将项目在本地VS Code中打开:
### 本地环境
首先安装所需的工具:
– Azure开发者CLI(Azure Developer 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。
然后下载项目代码:
1. 创建一个新文件夹并切换到该文件夹
“`shell
mkdir Contoso_Electronics
cd Contoso_Electronics
“`
2. 登录 Azure CLI
“`shell
azd auth login
“`
3. 初始化Azure Dev Spaces(Azure Dev Spaces)
“`shell
azd init -t azure-search-openai-demo 注意:此命令将初始化一个git仓库,您无需克隆此仓库
“`
## 部署方式
### 从头开始部署
如果您还没有具有任何现有的Azure资源并希望从头开始部署,请履行以下命令:
运行azd up命令-该命令将预配置Azure资源并将此示例部署到这些资源中,包括根据./data文件夹中找到的文件构建搜索索引。将会提示您选择两个位置,一个用于大多数资源,另外一个用于OpenAI资源,该位置列表基于OpenAI模型可用性表,并可能随着可用性的变化而过时。成功部署利用程序后,您将在控制台上看到一个URL打印出来。单击该URL以在浏览器中与利用程序进行交互。它看起来以下所示:
注意:利用程序完全部署可能需要5⑴0分钟的时间。如果您看到“Python Developer”欢迎屏幕或毛病页面,请稍等片刻并刷新页面。
### 使用现有Azure资源部署
如果您已具有现有的Azure资源,可以通过设置azd环境变量的方式重用这些资源。
#### 现有OpenAI资源
运行“azd env set AZURE_OPENAI_SERVICE {现有OpenAI服务的名称}”
运行“azd env set AZURE_OPENAI_RESOURCE_GROUP {现有OpenAI服务部署到的资源组名称}”
运行“azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {现有的ChatGPT部署的名称}”
仅当您的ChatGPT部署不是默许的 ‘chat’ 时才需要运行此命令
运行“azd env set AZURE_OPENAI_EMB_DEPLOYMENT {现有GPT嵌入部署的名称}”
仅当您的嵌入部署不是默许的 ’embedding’ 时才需要运行此命令
#### 现有的Azure Cognitive Search资源
运行“azd env set AZURE_SEARCH_SERVICE {现有Azure Cognitive Search服务的名称}”
运行“azd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP {包括ACS服务的现有资源组的名称}”
如果该资源组与您在azd up步骤当选择的位置区别,则运行“azd env set AZURE_SEARCH_SERVICE_LOCATION {现有服务的位置}”
如果搜索服务的SKU不是standard,请运行“azd env set AZURE_SEARCH_SERVICE_SKU {SKU的名称}”(参见可能值)
#### 其他现有的Azure资源
您还可使用现有的Form Recognizer和Storage Accounts。请参考./infra/main.parameters.json中的环境变量列表,以了解要传递给azd env set的环境变量名称的配置那些现有资源。
#### 配置剩余的资源
现在您可以运行azd up,依照上述部署流程中的步骤进行操作。这既会提供资源,也会部署代码。
### 再次部署
如果您只更改了app文件夹中的后端/前端代码,则不需要重新提供Azure资源。您只需运行:
“`shell
azd deploy
“`
如果您更改了基础架构文件(infra文件夹或azure.yaml文件),则需要重新提供Azure资源。您可以通过运行以下命令来实现:
“`shell
azd up
“`
## 项目配置
在成功运行azd up命令后,才能在本地运行。如果还没有运行azd up命令,请依照上述”Azure部署”上面的部署说明。
### 本地运行
只有在成功运行azd up命令后,才能在本地运行。如果还没有履行,请依照上述的Azure部署步骤进行操作。
– 首先使用以下命令运行azd auth login以登录Azure:
“`shell
azd auth login
“`
– 切换到app目录:
“`shell
cd app
“`
– 运行./start.ps1或./start.sh或在VS Code中运行“VS Code Task: Start App”以在本地启动项目:
“`shell
./start.ps1
“`
你也能够在powershell中运行start.ps1,或在linux/mac下运行start.sh
然后打开浏览器并访问 : http://127.0.0.1:50505
您将会看到本地的利用程序界面和功能。
### 使用利用程序
在Azure中,导航到由azd部署的Azure WebApp。当azd完成时,URL将被打印出来(作为”Endpoint”),或您可以在Azure门户中找到它。
在本地运行:导航到127.0.0.1:50505
进入web利用程序后:
– 尝试在聊天或问答环境中使用区别的主题。对聊天,尝试后续问题、澄清、要求简化或详细回答等。
– 浏览引文和来源
– 点击“设置”尝试区别的选项、调剂提示等。
## 资源优化
本示例旨在成为自己的生产利用程序的出发点,但在部署到生产环境之前,您应当对其安全性和性能进行完全审核。以下是一些需要斟酌的事项:
– OpenAI容量:默许的TPM(每分钟标记数)设置为30K。这相当于每分钟约30个对话(假定每一个用户消息/回答使用1K标记)。您可以通过在infra/main.bicep中更改chatGptDeploymentCapacity和embeddingDeploymentCapacity参数来增加容量以适应您的帐户的最大容量。您还可以在Azure OpenAI studio的Quotas选项卡中查看您有多少容量。
– Azure存储(Azure Storage):默许存储帐户使用的是Standard_LRS SKU。为了提高可靠性,我们建议在生产部署中使用Standard_ZRS,您可以通过在infra/core/storage/storage-accounts.bicep中的存储模块下的sku属性中指定它。
– Azure Cognitive Search(Azure认知搜索):默许搜索服务使用的是带有不要钱语义搜索选项的Standard SKU,这样您可以享有每个月1000次不要钱查询。假定您的利用程序的问题数量超过1000,请将semanticSearch更改成”standard”或在/app/backend/approaches文件中完全禁用语义搜索。如果看到关于搜索服务容量超越限制的毛病,请尝试通过修改infra/core/search/search-services.bicep中的replicaCount来增加副本的数量,或通过Azure门户手动进行缩放。
– Azure App Service:默许的利用服务计划使用带有1个CPU核心和1.75 GB RAM的基本层。我们建议使用Premium级别SKU,从1个CPU核心开始。您可使用自动缩放规则或计划的缩放规则,并根据负载调剂最大/最小值。
– 身份验证:默许情况下,部署的Azure Web利用程序没有启用任何身份验证或访问限制,这意味着任何具有可路由网络访问Web利用程序的人都可以查询索引数据。您可以根据以下内容为Azure Active Directory添加身份验证,以限制对其访问:
– 添加利用程序身份验证教程(Add app authentication tutorial)
– 基于企业利用程序的角色来限制身份验证Restrict your Azure AD app to a set of users
– 网络管理:我们建议在虚拟网络内部部署。如果利用程序仅供企业内部使用,请使用私有DNS区域(private DNS zone)。另外,斟酌使用Azure API管理(APIM)进行防火墙等其他情势的保护。有关详细信息,请浏览Azure OpenAI Landing Zone参考体系结构。
– 负载测试:我们建议按预期用户数量运行负载测试。您可使用此示例中的locust工具和locustfile.py进行负载测试,也能够使用Azure负载测试进行负载测试。
## 生产环境准备
本示例旨在成为自己的生产利用程序的出发点,但在部署到生产环境之前,您应当对其安全性和性能进行完全审核。以下是一些需要斟酌的事项:
– OpenAI能力:默许的TPM(每分钟标记数)设置为30K。这相当于每分钟约30个对话(假定每一个用户消息/回答使用1K标记)。您可以通过在infra/main.bicep中更改chatGptDeploymentCapacity和embeddingDeploymentCapacity参数来增加容量以适应您的帐户的最大容量。您还可以在Azure OpenAI studio的Quotas选项卡中查看您有多少容量。
– Azure存储(Azure Storage):默许存储帐户使用的是Standard_LRS SKU。为了提高可靠性,我们建议在生产部署中使用Standard_ZRS,您可以通过在infra/core/storage/storage-accounts.bicep中的存储模块下的sku属性中指定它。
– Azure Cognitive Search(Azure认知搜索):默许搜索服务使用的是带有不要钱语义搜索选项的Standard SKU,这样您可以享有每个月1000次不要钱查询。假定您的利用程序的问题数量超过1000,请将semanticSearch更改成”standard”或在/app/backend/approaches文件中完全禁用语义搜索。如果看到关于搜索服务容量超越限制的毛病,请尝试通过修改infra/core/search/search-services.bicep中的replicaCount来增加副本的数量,或通过Azure门户手动进行缩放。
– Azure App Service:默许的利用服务计划使用带有1个CPU核心和1.75 GB RAM的基本层。我们建议使用Premium级别SKU,从1个CPU核心开始。您可使用自动缩放规则或计划的缩放规则,并根据负载调剂最大/最小值。
– 身份验证:默许情况下,部署的Azure Web利用程序没有启用任何身份验证或访问限制,这意味着任何具有可路由网络访问Web利用程序的人都可以查询索引数据。您可以根据以下内容为Azure Active Directory添加身份验证,以限制对其访问:
– 添加利用程序身份验证教程(Add app authentication tutorial)
– 基于企业利用程序的角色来限制身份验证 Restrict your Azure AD app to a set of users
– 网络管理:我们建议在虚拟网络内部部署。如果利用程序仅供企业内部使用,请使用私有DNS区域(private DNS zone)。另外,斟酌使用Azure API管理(APIM)进行防火墙等其他情势的保护。有关详细信息,请浏览Azure OpenAI Landing Zone参考体系结构。
– 负载测试:我们建议按预期用户数量运行负载测试。您可使用此示例中的locust工具和locustfile.py进行负载测试,也能够使用Azure负载测试进行负载测试。
## 常见问题解答
#### 为何需要将PDF文件分成多个块,当Azure Cognitive Search支持搜索大文档时?
分块允许我们限制发送给OpenAI的信息量,以适应标记限制。通过分割内容,我们可以轻松找到可以注入到OpenAI中的潜伏文本块。我们使用一种滑动窗口的文本分块方法,以使句子在一个块结束后立即开始下一个块。这样可以下降丢失文本上下文的可能性。
#### 怎么上传其他PDF文件而不重新部署全部内容?
要上传更多的PDF文件,请将它们放在data/文件夹中,并运行./scripts/prepdocs.sh或./scripts/prepdocs.ps1。为了不重新上传现有文档,请将它们移出data文件夹。您也能够实现检查已上传的文档的方式;我们的代码还没有实现此类检查。
#### 此样例与其他“与您的数据聊天”的样例有甚么区分?
与此样例功能相同的另外一个流行仓库在这里:https://github.com/Microsoft/sample-app-aoai-chatGPT/。该存储库适用于使用Azure OpenAI studio和Azure Portal进行设置的客户。对那些想从头开始部署的用户,它还包括与azd相关的支持。主要区分是:
– 此仓库包括多个RAG(retrieval-augmented generation)方法,用于以区别的方式将多个API调用(到Azure OpenAI和ACS)的结果链在一起。
另外一个存储库仅使用ChatCompletions API的内置数据源选项,该选项对指定的ACS索引使用RAG方法。这对大多数情况应当能够正常工作,但如果您需要更灵活的方式,此样本多是更好的选择。
– 这个仓库还以其他方式进行了一些实验,由于它与Azure OpenAI Studio没有绑定在一起,而是与其他仓库区别。
#### 怎样在此样例中使用GPT⑷?
在infra/main.bicep中,将chatGptModelName更改成’gpt⑷’,而不是’gpt⑶5-turbo’。根据您的帐户允许的TPM数量,您可能还需要调剂该行之上的容量。
#### Chat和Ask选项卡有甚么区分?
chat选项卡使用chatreadretrieveread.py中编写的方法。它使用ChatGPT API将用户问题转化为良好的搜索查询。
– 它查询Azure Cognitive Search以获得该查询的搜索结果(可选择使用该查询的矢量嵌入)。
– 然后,它将搜索结果和原始用户问题组合起来,并要求ChatGPT API根据来源回答问题。它还包括最近的4K消息历史记录(或部署模型允许的标记数量)。
ask选项卡使用retrievethenread.py中编写的方法。它查询Azure Cognitive Search以获得用户问题的搜索结果(可选择使用该问题的矢量嵌入)。
– 然后,它将搜索结果和用户问题组合在一起,并要求ChatGPT API根据来源回答问题。
还有另外两个ask方法,具有略微区别的方法,但由于与langchain的兼容性问题,它们目前不起作用。
#### `azd up`命令是做甚么的?
azd up命令来自于Azure Developer CLI,它负责同时预置Azure资源和部署代码到指定的Azure主机。azd up命令使用azure.yaml文件与infra文件夹中的基础设施即代码.bicep文件相结合。此项目的azure.yaml文件中声明了几个预打包步骤和后置提供步骤的“挂钩”。命令首先运行预打包挂钩,该挂钩会安装Node依赖项并构建基于React.js的JavaScript文件。然后,它将所有代码(前端和后端)打包到一个zip文件中,稍后将部署此zip文件。接下来,它根据main.bicep和main.parameters.json提供所有所需的资源。此时,由于OpenAI资源位置没有默许值,它会要求您从可用区域列表当选择一个位置。然后,它将发送要求给Azure,以预置所有所需的资源。在预置所有资源以后,会运行postprovision挂钩,以处理本地数据并添加到Azure Cognitive Search索引中。最后,它查看azure.yaml以肯定Azure主机(在此为appservice),并将zip文件上载到Azure App Service。azd up命令现在已完成,但可能需要另外5⑴0分钟才能完全使App Service利用程序可用和工作,特别是对初始部署。
与此相关的命令是azd provision,用于仅部署(如果基础架构文件有更改);azd deploy,用于只部署更新后的利用代码。
#### 怎么查看来自App Service利用程序的日志?
您可使用Log stream或通过Advanced tools下载default_docker.log文件来查看Portal中的生产日志。在app.py文件中的以下代码行设置了日志级别:
logging.basicConfig(level=os.getenv(“APP_LOG_LEVEL”, “ERROR”))
要更改默许级别,可以在本地或App Service中设置APP_LOG_LEVEL环境变量为允许的日志级别之一:DEBUG,INFO,WARNING,ERROR,CRITICAL。
如果需要在路由处理程序中记录日志,请使用全局变量current_app的logger:
async def chat_stream():
current_app.logger.info(“Received /chat request”)
否则,请使用logging模块的根记录器:
logging.info(“System message: %s”, system_message)
如果在App Service中找不到日志,请查看此博客帖子了解有关调试App Service利用程序部署的提示,或观看此视频以查看App Service日志。
## 故障排除
以下是最多见的故障排除场景和解决方案:
[更多文章点击原文链接查看](https://github.com/Azure-Samples/azure-search-ai-search/blob/main/README.md)
chatgpt microsoft azure的常见问答Q&A
问题1:微软在Azure上推出了甚么功能?
答案:微软在Azure上推出了一项新功能,名为Azure ChatGPT。Azure ChatGPT是企业级的私有版本ChatGPT,旨在帮助企业安全可靠地利用ChatGPT在其业务流程中。
- Azure ChatGPT允许企业在其所有网络装备上运行ChatGPT,为员工提供更顺畅的工作体验。
- Azure ChatGPT可以纠正和编辑代码块,并可以履行其他任务。
- Azure ChatGPT与普通的ChatGPT基本相同,具有类似的功能和特性。
问题2:为何企业可以放心使用Azure ChatGPT?
答案:企业可以放心使用Azure ChatGPT,缘由以下:
- Azure ChatGPT是企业级的私有版本,相比其他公然的ChatGPT,具有更高的安全性和隐私保护措施。
- Azure ChatGPT在企业内部网络中运行,数据传输更加安全,不会离开企业的网络环境。
- Azure ChatGPT可以与企业现有系统和工具集成,无需额外的软硬件装备。
- Azure ChatGPT由微软提供支持和保护,可靠性和稳定性更高。
问题3:企业在Azure上怎样使用ChatGPT?
答案:企业可以通过以下步骤在Azure上使用ChatGPT:
- 在Azure上创建一个私有实例,用于运行ChatGPT。
- 将企业的数据连接到Azure实例。
- 配置和调剂ChatGPT的参数和设置,以满足企业的需求。
- 将ChatGPT集成到企业的利用程序、工具或服务中。
- 根据实际使用情况对ChatGPT进行监控和优化。