Azure OpenAI 自然語言處理 (NLP) 和完成功能整合,可提供大幅提升用戶生產力的潛力。 藉由利用適當的提示和規則,AI 助理可以有效率地產生各種形式的通訊,例如電子郵件訊息、簡訊等等。 這項功能可提升使用者效率並簡化工作流程。
雖然此功能本身相當強大,但在某些情況下,使用者可能需要根據貴公司的自定義數據產生完成。 例如,您可能有一組產品手冊,這些手冊在協助客戶解決安裝問題時,可能會讓使用者難以流覽。 或者,您可以維護一組與醫療保健權益相關的常見問題(常見問題),這可證明使用者難以閱讀並取得他們需要的解答。 在這些案例和許多其他情況下,Azure OpenAI 服務可讓您利用自己的數據來產生完成,確保更量身打造且內容正確的用戶問題回應。
以下是 Azure OpenAI 檔中「攜帶您自己的數據」功能運作方式的快速概觀。
備註
以自有資料為基礎的 Azure OpenAI 的主要功能之一,就是能夠以增強模型輸出的方式擷取及利用資料。 數據上的 Azure OpenAI 與 Azure AI 搜尋一起,會根據使用者輸入和提供的交談歷程記錄,決定要從指定數據源擷取哪些數據。 然後,此資料會擴增並重新提交為 OpenAI 模型的提示,並將擷取的資訊附加至原始提示。 雖然擷取的資料會附加至提示,但模型仍會處理產生的輸入,就像任何其他提示一樣。 擷取資料並將提示提交至模型之後,模型會使用這項資訊來提供完成。
在本練習中,您將會:
- 使用 Azure AI Foundry 入口網站建立自訂數據源。
- 使用 Azure AI Foundry 入口網站部署內嵌模型。
- 上傳自定義檔。
- 在聊天遊樂場中啟動聊天會話,以根據您自己的數據來實驗產生完成。
- 探索使用 Azure AI 搜尋和 Azure OpenAI 來根據您自己的數據產生完成的程式代碼。
讓我們開始部署內嵌模型,並在 Azure AI Foundry 中新增自定義數據源。
將自定義數據源新增至 Azure AI Foundry
流覽至 Azure OpenAI Studio ,並使用可存取 Azure OpenAI 資源的認證登入。
從導覽功能表中選取 [部署 ]。
選取工具列中的 [ 選取部署模型 ] -->[部署基底模型 ]。
從模型清單中選取 text-embedding-ada-002 模型,然後選取 [ 確認]。
選取下列選項:
- 部署名稱: text-embedding-ada-002
- 模型版本: 預設值
- 部署類型: 標準
- 將 [每分鐘令牌速率限制][千] 值設定為 120K
- 內容篩選: DefaultV2
- 啟用動態引號: 已啟用
選取 [部署] 按鈕。
建立模型之後,請從導覽功能表中選取 [ 首頁 ],以移至歡迎畫面。
在歡迎畫面上找出 [攜帶您自己的數據] 圖格,然後選取 [立即試用]。
選取 [新增您的數據 ],然後 選取 [新增數據源]。
在 [ 選取數據源] 下拉式清單中,選取 [上傳檔案]。
在 [ 選取 Azure Blob 記憶體資源 ] 下拉式清單中,選取 [建立新的 Azure Blob 記憶體資源]。
在 [訂用帳戶] 下拉式清單中選取您的 Azure 訂用帳戶 。
在 [ 選取 Azure Blob 記憶體資源 ] 下拉式清單中,選取 [建立新的 Azure Blob 記憶體資源]。
這會帶您前往 Azure 入口網站,您可以在其中執行下列工作:
- 輸入記憶體帳戶的唯一名稱,例如 byodstorage[您的姓氏] 。
- 選取靠近您位置的區域。
- 選取 [ 檢閱 ],然後選取 [ 建立]。
建立 Blob 記憶體資源之後,請回到 [Azure AI Foundry] 對話框,然後從 [選取 Azure Blob 記憶體資源] 下拉式清單中選取您新建立的 Blob 記憶體資源
。 如果您沒有看到它列示,請選取下拉式清單旁的重新整理圖示。 必須開啟跨原始來源資源分享 (CORS),才能存取記憶體帳戶。 在 [Azure AI Foundry] 對話框中選取 [開啟 CORS ]。
在 [ 選取 Azure AI 搜尋資源 ] 下拉式清單中,選取 [建立新的 Azure AI 搜尋資源]。
這會帶您回到 Azure 入口網站,您可以在其中執行下列工作:
- 輸入 AI 搜尋資源的唯一名稱,例如 byodsearch-[您的姓氏]。
- 選取靠近您位置的區域。
- 在 [ 定價層] 區段中,選取 [變更定價層 ],然後選取 [ 基本 ],然後選取 [選取]。 不支援免費層,因此您將在本教學課程結束時清除 AI 搜尋資源。
- 選取 [ 檢閱 ],然後選取 [ 建立]。
建立 AI 搜尋資源之後,請移至資源 [概 觀 ] 頁面,並將 URL 值複製到本機檔案。
選取 [ 設定 ] --[>索引鍵 ] 導覽功能表中的 [金鑰]。
在 [ API 存取 控制] 頁面上,選取 [兩者] 以啟用使用受控識別或使用密鑰來存取服務。 出現提示時,請選取 [是]。
備註
雖然我們會在此練習中使用 API 金鑰,因為新增角色指派最多可能需要 10 分鐘的時間,但您可以啟用系統指派的受控識別,以更安全的方式存取服務。
選取左側導覽功能表中的 [ 金鑰 ],然後將 [主要系統管理員密鑰 ] 值複製到本機檔案。 您稍後會在練習中需要 URL 和索引鍵值。
選取導覽功能表中的 [設定 ] -->Semantic ranker ,並確定已選取 [免費 ]。
備註
若要檢查特定區域中是否有語意排名器,請檢查 Azure 網站上的 [依 區域提供的產品 ] 頁面,以查看您的區域是否已列出。
返回 [Azure AI Foundry 新增數據 ] 對話框,然後從 [ 選取 Azure AI 搜尋資源 ] 下拉式清單中選取新建立的搜尋資源。 如果您沒有看到它列示,請選取下拉式清單旁的重新整理圖示。
針對 Enter 索引名稱值,輸入 byod-search-index 的值。
選取 [ 將向量搜尋新增至此搜尋資源 ] 複選框。
在 [ 選取內嵌模型 ] 下拉式清單中,選取您稍早建立的 text-embedding-ada-002 模型。
在 [ 上傳檔案 ] 對話框中,選取 [瀏覽檔案]。
瀏覽至項目的 客戶檔案 資料夾(位於專案的根目錄),然後選取下列檔案:
- 時鐘 A102 安裝 Instructions.docx
- 公司 FAQs.docx
備註
此功能目前支援下列檔格式來建立本機索引:.txt、.md、.html、.pdf、.docx和.pptx。
選取 [上傳檔案]。 檔案將會上傳至您稍早建立的 Blob 記憶體資源中的 fileupload-byod-search-index 容器。
選取 [下一步 ] 以移至 [資料管理] 對話框。
在 [ 搜尋類型 ] 下拉式清單中,選取 [混合式 + 語意]。
備註
此選項提供關鍵詞和向量搜尋的支援。 傳回結果之後,使用深度學習模型將次要排名程式套用至結果集,進而改善使用者的搜尋相關性。 若要深入瞭解語意搜尋,請在 Azure AI 搜尋檔中檢視語意搜尋 。
確定 [選取大小] 值設定為 1024。
選取 下一步。
針對 Azure 資源驗證類型,選取 [API 金鑰]。 在 Azure AI 搜尋服務驗證檔中深入瞭解如何選取正確的驗證類型。
選取 下一步。
檢閱詳細數據,然後選取 [ 儲存並關閉]。
現在已上傳您的自定義數據,數據將會編製索引,並可在 聊天遊樂場中使用。 此過程可能需要幾分鐘。 完成後,請繼續進行下一節。
在聊天遊樂場中使用您的自定義數據源
在 Azure OpenAI Studio 中找出頁面的 [聊天會話] 區 段,然後輸入下列 用戶查詢:
What safety rules are required to install a clock?
提交使用者查詢之後,您應該會看到類似如下所示的結果:
展開聊天回應中的 1個參考 區段,並注意列出 時鐘 A102 安裝 Instructions.docx 檔案,而且您可以選取它來檢視檔。
輸入下列 使用者訊息:
What should I do to mount the clock on the wall?
您應該會看到類似如下所示的結果:
現在讓我們試驗公司常見問題檔。 在 [ 使用者查詢 ] 欄位中輸入下列文字:
What is the company's policy on vacation time?
您應該會看到找不到該要求的資訊。
在 [ 使用者查詢 ] 欄位中輸入下列文字:
How should I handle refund requests?
您應該會看到類似如下所示的結果:
展開聊天回應中的 1 個參考 區段,並注意 公司 FAQs.docx 檔案已列出,而且您可以選取它來檢視檔。
選取 [聊天遊樂場] 工具列中的 [檢視程序代碼]。
請注意,您可以在不同語言之間切換、檢視端點,以及存取端點的密鑰。 關閉 [ 範例程式代碼 ] 對話框視窗。
開啟聊天訊息上方 的 [顯示原始 JSON] 切換開關。 請注意,聊天會話會以類似下列訊息開頭:
{ "role": "system", "content": "You are an AI assistant that helps people find information." }
既然您已建立自定義數據源,並在聊天遊樂場中加以實驗,讓我們看看如何在專案的應用程式中使用它。
在應用程式中使用自備數據功能
返回 VS Code 中的項目,然後開啟 .env 檔案。 使用您的 AI 服務端點、金鑰和索引名稱更新下列值。 您稍早在本練習中將端點和金鑰複製到本機檔案。
AZURE_AI_SEARCH_ENDPOINT=<AI_SERVICES_ENDPOINT_VALUE> AZURE_AI_SEARCH_KEY=<AI_SERVICES_KEY_VALUE> AZURE_AI_SEARCH_INDEX=byod-search-index
在上一個 練習 中,您已啟動資料庫、API 和應用程式。 您也會更新檔案
.env
。 如果您未完成這些步驟,請先依照先前練習結尾的指示繼續進行。在瀏覽器中載入應用程式之後,請選取應用程式右上角的 [聊天說明 ] 圖示。
下列文字應該會出現在聊天對話框中:
How should I handle a company refund request?
選取 [ 取得說明] 按鈕。 您應該會看到您稍早在 Azure OpenAI Studio 中上傳 的公司 FAQs.docx 檔傳回的結果。 如果您想要閱讀檔案,您可以在專案根目錄的客戶 檔案 資料夾中找到檔。
將文字變更為下列內容,然後選取 [ 取得說明] 按鈕:
What safety rules are required to install a clock?
您應該會看到您稍早在 Azure OpenAI Studio 中上傳的 時鐘 A102 安裝 Instructions.docx 檔案傳回的結果。 此檔也可在專案根目錄的客戶 檔案 資料夾中取得。
探索程序代碼
小提示
如果您使用 Visual Studio Code,您可以選取下列專案來直接開啟檔案:
- Windows/Linux: Ctrl + P
- Mac: Cmd + P
然後輸入您要開啟的檔案名。
返回 Visual Studio Code 中的項目原始程式碼。
開啟 伺服器/apiRoutes.ts 檔案並找出
completeBYOD
路由。 在 [聊天說明] 對話框中選取 [ 取得說明 ] 按鈕時,會呼叫此 API。 它會從要求本文擷取使用者提示,並將它completeBYOD()
傳遞給 伺服器/openAI.ts 檔案中的函式。 然後,結果會傳回至用戶端。router.post('/completeBYOD', async (req, res) => { const { prompt } = req.body; if (!prompt) { return res.status(400).json({ status: false, error: 'The prompt parameter must be provided.' }); } let result; try { // Call OpenAI to get custom "bring your own data" completion result = await completeBYOD(prompt); } catch (e: unknown) { console.error('Error parsing JSON:', e); } res.json(result); });
開啟 伺服器/openAI.ts 檔案,並找出 函
completeBYOD()
式。async function completeBYOD(userPrompt: string): Promise<string> { const systemPrompt = 'You are an AI assistant that helps people find information in documents.'; return await callOpenAI(systemPrompt, userPrompt, 0, true); }
此函式具有下列功能:
- 參數
userPrompt
包含使用者輸入聊天說明對話框的資訊。 - 變數
systemPrompt
會定義 AI 助理,其設計目的是要協助人們尋找資訊。 -
callOpenAI()
是用來呼叫 Azure OpenAI API 並傳回結果。 它會傳遞systemPrompt
和userPrompt
值,以及下列參數:-
temperature
- 要包含在回應中的創意量。 在此情況下,使用者需要一致(較不具創意)的答案,因此此值會設定為 0。 -
useBYOD
- 布爾值,指出是否要搭配 Azure OpenAI 使用 AI 搜尋。 在此情況下,它會設定為true
,以便使用 AI 搜尋功能。
-
- 參數
函
callOpenAI()
式會接受useBYOD
參數,用來判斷要呼叫的 OpenAI 函式。 在此情況下,它會設定useBYOD
為true
,以便呼叫 函getAzureOpenAIBYODCompletion()
式。function callOpenAI(systemPrompt: string, userPrompt: string, temperature = 0, useBYOD = false) { const isAzureOpenAI = OPENAI_API_KEY && OPENAI_ENDPOINT && OPENAI_MODEL; if (isAzureOpenAI) { if (useBYOD) { return getAzureOpenAIBYODCompletion(systemPrompt, userPrompt, temperature); } return getAzureOpenAICompletion(systemPrompt, userPrompt, temperature); } return getOpenAICompletion(systemPrompt, userPrompt, temperature); }
getAzureOpenAIBYODCompletion()
找出伺服器/openAI.ts中的函式。 這與您稍早檢查的函式相當類似getAzureOpenAICompletion()
,但會顯示為個別函式,以醒目提示 Azure OpenAI 在數據上可用的「Azure OpenAI」案例中唯一的主要差異。async function getAzureOpenAIBYODCompletion(systemPrompt: string, userPrompt: string, temperature: number): Promise<string> { const dataSources = [ { type: 'azure_search', parameters: { authentication: { type: 'api_key', key: AZURE_AI_SEARCH_KEY }, endpoint: AZURE_AI_SEARCH_ENDPOINT, index_name: AZURE_AI_SEARCH_INDEX } } ]; const completion = await createAzureOpenAICompletion(systemPrompt, userPrompt, temperature, dataSources) as AzureOpenAIYourDataResponse; console.log('Azure OpenAI Add Your Own Data Output: \n', completion.choices[0]?.message); for (let citation of completion.choices[0]?.message?.context?.citations ?? []) { console.log('Citation Path:', citation.filepath); } return completion.choices[0]?.message?.content?.trim() ?? ''; }
請注意 函式
getAzureOpenAIBYODCompletion()
中的下列功能:- 建立
dataSources
屬性,其中包含本練習稍早新增至key
檔案的endpoint
AI 搜尋資源的、index_name
和.env
值 - 使用、
createAzureOpenAICompletion()
、systemPrompt
和userPrompt
值呼叫temperature
函dataSources
式。 此函式可用來呼叫 Azure OpenAI API 並傳回結果。 - 傳回回應之後,會將檔引文記錄到主控台。 然後,完成訊息內容會傳回給呼叫端。
- 建立
在繼續進行下一個練習之前,需要考慮幾個最後幾點:
- 範例應用程式會在 Azure AI 搜尋中使用單一索引。 您可以搭配 Azure OpenAI 使用多個索引和數據源。
dataSources
函式中的getAzureOpenAIBYODCompletion()
屬性可以更新為視需要包含多個數據源。 - 您必須謹慎評估此類型的案例的安全性。 使用者應該無法詢問問題,並從無法存取的檔取得結果。
- 範例應用程式會在 Azure AI 搜尋中使用單一索引。 您可以搭配 Azure OpenAI 使用多個索引和數據源。
既然您已瞭解 Azure OpenAI、提示、完成,以及如何使用自己的數據,讓我們前往下一個練習,以瞭解如何使用通訊功能來增強應用程式。 如果您想要深入瞭解 Azure OpenAI,請檢視 開始使用 Azure OpenAI 服務 訓練內容。 如需搭配 Azure OpenAI 使用您自己的數據與 Azure OpenAI 的其他資訊,請參閱 Azure OpenAI 數據 檔。