page_type | 語言 | 產品 | urlfragment | 姓名 | 描述 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
樣本 |
|
| Azure-Search-Openai-Demo-Charp | chatgpt +企業數據(CSHARP) | 使用OpenAI和AI搜索與您的數據聊天的CSHARP示例應用程序。 |
該示例演示了一些使用檢索增強生成模式在您自己的數據上創建類似於Chatgpt的體驗的方法。它使用Azure OpenAI服務訪問ChatGPT模型( gpt-4o-mini
),並蒐索Azure AI以搜索數據索引和檢索。
存儲庫包含示例數據,因此可以嘗試端到端。在此示例應用程序中,我們使用了一個名為Contoso Electronics的虛擬公司,並且經驗使其員工可以詢問有關收益,內部政策以及職位描述和角色的問題。
有關該應用程序的構建方式的更多詳細信息,請查看:
我們想收到您的來信!您是否有興趣構建或目前構建智能應用程序?花幾分鐘完成這項調查。
進行調查
為了部署和運行此示例,您需要
Microsoft.Authorization/roleAssignments/write
Permissions,例如用戶訪問管理員或所有者。 警告
默認情況下,此示例將創建一個Azure容器應用程序,以及具有每月成本的Azure AI搜索資源,以及具有每個文檔頁面成本的Azure AI文檔智能資源。如果您想通過更改Infra文件夾下的參數文件來避免此成本,則可以將它們切換到每個版本的免費版本(儘管有一些限制需要考慮;例如,您可以每次訂閱最多有1個免費的Azure AI搜索資源,而免費的Azure AI ai文檔智能資源只能分析每個文檔的前2頁。)。)。)。)。)。)。)。)。)。)。
定價每個區域和使用情況都有所不同,因此不可能預測使用的確切成本。但是,您可以嘗試以下資源的Azure定價計算器:
為了降低成本,您可以改用各種服務的自由SKU,但是這些SKU有局限性。有關更多詳細信息,請參閱本指南的部署指南。
azd down
。
您有一些設置此項目的選擇。最簡單的入門方法是github codespese,因為它將為您設置所有工具,但是如果需要,您也可以在本地設置它。
您可以通過使用github codespese實際上運行此存儲庫,該碼將在瀏覽器中打開基於Web的VS代碼:
一個相關的選項是VS代碼遠程容器,該容器將使用DEV容器擴展名中的本地VS代碼打開項目:
安裝以下先決條件:
Azure開發人員CLI
.NET 8
git
PowerShell 7+(PWSH) - 僅適用於Windows用戶。
重要的是:確保您可以從powershell命令中運行
pwsh.exe
。如果失敗,您可能需要升級PowerShell。
Docker
重要的是:在運行任何
azd
PROVINIONing /部署命令之前,請確保Docker正在運行。
然後,運行以下命令以在您的本地環境上獲取項目:
azd auth login
azd init -t azure-search-openai-demo-csharp
azd env new azure-search-openai-demo-csharp
實時流:從划痕中部署在代碼空間中實時流:在Windows 11中從頭部署
重要的是:在運行任何
azd
PROVINIONing /部署命令之前,請確保Docker正在運行。
執行以下命令,如果您沒有任何先前存在的Azure服務,並且希望從新的部署開始。
運行azd up
這將提供Azure資源,並將此示例部署到這些資源,包括根據./data
文件夾中的文件構建搜索索引。
注意:此應用程序使用
gpt-4o-mini
模型。選擇要部署的區域時,請確保它們在該地區(IE Eastus)中可用。有關更多信息,請參見Azure OpenAI服務文檔。
成功部署應用程序後,您將看到將URL打印到控制台。單擊該URL與瀏覽器中的應用程序進行交互。
看起來如下:
[!注]:將應用程序完全部署可能需要幾分鐘。部署應用程序後,還需要幾分鐘來處理要添加到矢量數據庫中的文檔。
如果您希望使用的Azure中現有資源,則可以通過設置以下azd
環境變量來配置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}
。僅當您的chatgpt部署不是默認的“聊天”時才需要。azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing embedding model deployment}
。僅當您的嵌入模型部署不是默認embedding
時才需要。azd up
筆記
您也可以使用現有的搜索和存儲帳戶。有關環境變量的列表,請參見./infra/main.parameters.json
將其傳遞到azd env set
以配置這些現有資源。
重要的
在運行任何azd
Provisioning /部署命令之前,請確保Docker正在運行。
azd up
筆記
確保您的存儲庫中有AZD支持的二頭肌文件,並添加一個可以手動觸發的github操作文件(用於初始部署),或在代碼更改上觸發(自動重新啟動使用最新更改),以使您的存儲庫與App space兼容,您需要更改與Main Bicep和Maint Anemet afor Andovion Andive An a Zd demot a demot a a zd audion Azd indodut a zd aud a a zd dovile azd audion azd indovile a zd audion a zd a zd。
"resourceGroupName" : {
"value" : " ${AZURE_RESOURCE_GROUP} "
}
"tags" : {
"value" : " ${AZURE_TAGS} "
}
param resourceGroupName string = ''
param tags string = ''
var baseTags = { 'azd-env-name' : environmentName }
var updatedTags = union ( empty ( tags ) ? {} : base64ToJson ( tags ), baseTags )
Make sure to use " updatedTags " when assigning " tags " to resource group created in your bicep file and update the other resources to use " baseTags " instead of " tags ". For example -
``` json
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name : ! empty ( resourceGroupName ) ? resourceGroupName : '${ abbrs . resourcesResourceGroups }${ environmentName }'
location : location
tags : updatedTags
}
重要的
在運行任何azd
Provisioning /部署命令之前,請確保Docker正在運行。
運行azd auth login
應用程序部署後,設置環境變量AZURE_KEY_VAULT_ENDPOINT
。您可以在.azure/您的環境名稱/.env文件或Azure門戶中找到該值。
運行以下.NET CLI命令以啟動ASP.NET CORE最小API服務器(客戶端主機):
dotnet run --project ./app/backend/MinimalApi.csproj --urls=http://localhost:7181/
導航到http:// localhost:7181,並測試應用程序。
該示例包括一個.NET MAUI客戶端,將體驗包裝為可以在Windows/MacOS桌面或Android和iOS設備上運行的應用程序。此處的MAUI客戶端是使用Blazor Hybrid實施的,讓其與網站Frontend共享大多數代碼。
打開App/app-maui.sln打開包含毛伊客戶端的解決方案
編輯App/Maui-Blazor/Mauipragram.cs ,更新client.BaseAddress
,並使用後端的URL。
如果它在Azure中運行,請使用上述步驟將URL用於服務後端。如果本地運行,請使用http:// localhost:7181。
將Mauiblazor設置為啟動項目並運行應用程序
如果您想讓其他人訪問已部署和現有環境,請運行以下內容。
azd init -t azure-search-openai-demo-csharp
azd env refresh -e {environment name}
- 請注意,他們將需要AZD環境名稱,訂閱ID和位置才能運行此命令 - 您可以在./azure/{env name}/.env
File中找到這些值。這將填充其AZD環境的.ENV文件,並在本地運行該應用所需的所有設置。pwsh ./scripts/roles.ps1
這將為用戶分配所有必要的角色,以便他們可以在本地運行該應用程序。如果他們沒有必要的權限來在訂閱中創建角色,那麼您可能需要為他們運行此腳本。只需確保將AZD .ENV文件或Active Shell中的AZURE_PRINCIPAL_ID
環境變量設置為其Azure ID,他們可以通過az account show
。 azd down
azd
部署的Azure容器應用程序。當azd
完成(為“端點”)時,將其打印出URL,或者您可以在Azure門戶中找到它。進入Web應用程序:
要啟用應用程序洞察力和每個請求的跟踪以及錯誤的記錄,請在運行azd up
之前將AZURE_USE_APPLICATION_INSIGHTS
變量設置為trui
azd env set AZURE_USE_APPLICATION_INSIGHTS true
azd up
要查看性能數據,請轉到資源組中的“應用程序見解資源”,單擊“調查 - >“性能”刀片,然後導航到任何HTTP請求以查看正時數據。要檢查聊天請求的性能,請使用“鑽入樣本”按鈕查看所有用於任何聊天請求的API調用的端到端痕跡:
要查看任何異常和服務器錯誤,請導航到“調查 - >故障”刀片,並使用過濾工具定位特定異常。您可以在右側看到Python堆疊痕跡。
默認情況下,部署的Azure容器應用程序將不具有身份驗證或訪問限制,這意味著任何具有可路由網絡訪問該容器應用程序的人都可以與您的索引數據聊天。您可以通過遵循添加容器應用程序身份驗證教程並根據已部署的容器應用程序進行設置來對Azure Active Directory進行身份驗證。
然後,限制訪問特定的一組用戶或組,您可以通過更改“所需的分配?”來遵循從限制Azure Ad應用程序到一組用戶的步驟。在企業應用程序下的選項,然後分配用戶/組訪問。未授予明確訪問的用戶將接收錯誤消息-AADSTS50105:您的管理員已將應用程序<app_name>配置為阻止用戶,除非用戶被專門授予(“分配”)訪問該應用程序。-
借助GPT-4o-mini
,可以通過提供文本和圖像作為源內容來支持豐富的檢測增強生成。為了啟用視覺支持,您需要在配置時啟用USE_VISION
並使用GPT-4o
或GPT-4o-mini
模型。
筆記
如果您之前已經部署了該應用程序,則需要在啟用GPT-4O支持後重新索引支持材料並重新刪除應用程序。這是因為啟用GPT-4O支持需要將新字段添加到搜索索引中。
要使用Azure OpenAi服務啟用GPT-4V支持,請運行以下命令:
azd env set USE_VISION true
azd env set USE_AOAI true
azd env set AZURE_OPENAI_CHATGPT_MODEL_NAME gpt-4o-mini
azd env set AZURE_OPENAI_RESOURCE_LOCATION eastus # Please check the gpt model availability for more details.
azd up
要使用OpenAI啟用視覺支持,請運行以下命令:
azd env set USE_VISION true
azd env set USE_AOAI false
azd env set OPENAI_CHATGPT_DEPLOYMENT gpt-4o
azd up
要清理先前部署的資源,請運行以下命令:
azd down --purge
azd env set AZD_PREPDOCS_RAN false # This is to ensure that the documents are re-indexed with the new fields.
除了下面的提示外,您還可以在文檔文件夾中找到大量文檔。
該樣本旨在成為您自己的生產應用程序的起點,但是在部署到生產之前,您應該對安全性和性能進行詳盡的審查。以下是要考慮的事情:
OpenAI容量:默認TPM(每分鐘令牌)設置為30K。這相當於每分鐘大約30次對話(假設每個用戶消息/響應1K)。您可以通過更改infra/main.bicep
中的chatGptDeploymentCapacity
和embeddingDeploymentCapacity
參數來增加容量。您還可以在Azure Openai Studio中查看“配額”選項卡,以了解您的容量。
Azure存儲:默認存儲帳戶使用Standard_LRS
sku。為了提高您的彈性,我們建議將Standard_ZRS
用於生產部署,您可以在infra/main.bicep
中使用的storage
模塊下使用sku
屬性指定。
Azure AI搜索:如果您看到有關超出搜索服務能力的錯誤,則可能會發現通過更改infra/core/search/search-services.bicep
或手動從Azure Portal中進行縮放的replicaCount
來增加複製品的數量。
Azure容器應用程序:默認情況下,此應用程序部署具有0.5 CPU內核和1GB內存的容器。最小副本為1和最大10。對於此應用程序,您可以設置諸如infra/core/host/container-app.bicep
文件中的containerCpuCoreCount
, containerMaxReplicas
, containerMemory
,containerMemory, containerMinReplicas
以滿足您的需求。您可以使用自動縮放規則或計劃的縮放規則,並根據負載擴大最大/最小值。
身份驗證:默認情況下,已部署的應用程序公開訪問。我們建議限制對經過身份驗證的用戶的訪問。有關如何啟用身份驗證,請參見上面的身份驗證。
網絡:我們建議在虛擬網絡中部署。如果該應用僅用於內部企業使用,請使用私有DNS區域。還要考慮使用Azure API管理(APIM)進行防火牆和其他形式的保護。有關更多詳細信息,請閱讀Azure OpenAi著陸區參考架構。
負載測試:我們建議您為您的預期用戶數量運行加載測試。
Azure.AI.OpenAI
nuget包筆記
此演示中使用的PDF文檔包含使用語言模型(Azure OpenAI服務)生成的信息。這些文檔中包含的信息僅用於演示目的,並不反映微軟的觀點或信念。微軟對本文檔中所包含的信息的完整性,準確性,可靠性,適用性或可用性不做任何形式或暗示的保證。保留給微軟的所有權利。
問題:當Azure AI搜索支持大型文檔時,為什麼我們需要將PDF分解成塊?
答:分解使我們能夠限制由於令牌限製而發送到OpenAI的信息量。通過分解內容,它使我們可以輕鬆找到可以注入OpenAi的潛在文本塊。分塊的方法我們使用了一個文本的滑動窗口,以至於結束一個塊的句子將開始下一個。這使我們可以減少失去文本上下文的機會。