共用方式為


AI:Azure OpenAI 在您的數據上

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

  1. 流覽至 Azure OpenAI Studio ,並使用可存取 Azure OpenAI 資源的認證登入。

  2. 從導覽功能表中選取 [部署 ]。

  3. 選取工具列中的 [ 選取部署模型 ] -->[部署基底模型 ]。

  4. 從模型清單中選取 text-embedding-ada-002 模型,然後選取 [ 確認]。

  5. 選取下列選項:

    • 部署名稱: text-embedding-ada-002
    • 模型版本: 預設值
    • 部署類型: 標準
    • [每分鐘令牌速率限制][千] 值設定為 120K
    • 內容篩選: DefaultV2
    • 啟用動態引號: 已啟用
  6. 選取 [部署] 按鈕。

  7. 建立模型之後,請從導覽功能表中選取 [ 首頁 ],以移至歡迎畫面。

  8. 在歡迎畫面上找出 [攜帶您自己的數據] 圖格,然後選取 [立即試用]。

    Azure OpenAI Studio 攜帶您自己的數據

  9. 選取 [新增您的數據 ],然後 選取 [新增數據源]。

  10. 在 [ 選取數據源] 下拉式清單中,選取 [上傳檔案]。

  11. 在 [ 選取 Azure Blob 記憶體資源 ] 下拉式清單中,選取 [建立新的 Azure Blob 記憶體資源]。

  12. 在 [訂用帳戶] 下拉式清單中選取您的 Azure 訂用帳戶

  13. 在 [ 選取 Azure Blob 記憶體資源 ] 下拉式清單中,選取 [建立新的 Azure Blob 記憶體資源]。

  14. 這會帶您前往 Azure 入口網站,您可以在其中執行下列工作:

    • 輸入記憶體帳戶的唯一名稱,例如 byodstorage[您的姓氏]
    • 選取靠近您位置的區域。
    • 選取 [ 檢閱 ],然後選取 [ 建立]。
  15. 建立 Blob 記憶體資源之後,請回到 [Azure AI Foundry] 對話框,然後從 [選取 Azure Blob 記憶體資源] 下拉式清單中選取您新建立的 Blob 記憶體資源 。 如果您沒有看到它列示,請選取下拉式清單旁的重新整理圖示。

  16. 必須開啟跨原始來源資源分享 (CORS),才能存取記憶體帳戶。 在 [Azure AI Foundry] 對話框中選取 [開啟 CORS ]。

    Azure OpenAI Studio 自備數據開啟 CORS

  17. 在 [ 選取 Azure AI 搜尋資源 ] 下拉式清單中,選取 [建立新的 Azure AI 搜尋資源]。

  18. 這會帶您回到 Azure 入口網站,您可以在其中執行下列工作:

    • 輸入 AI 搜尋資源的唯一名稱,例如 byodsearch-[您的姓氏]。
    • 選取靠近您位置的區域。
    • 在 [ 定價層] 區段中,選取 [變更定價層 ],然後選取 [ 基本 ],然後選取 [選取]。 不支援免費層,因此您將在本教學課程結束時清除 AI 搜尋資源。
    • 選取 [ 檢閱 ],然後選取 [ 建立]。
  19. 建立 AI 搜尋資源之後,請移至資源 [概 ] 頁面,並將 URL 值複製到本機檔案。

    Azure OpenAI Studio AI 搜尋 URL

  20. 選取 [ 設定 ] --[>索引鍵 ] 導覽功能表中的 [金鑰]。

  21. 在 [ API 存取 控制] 頁面上,選取 [兩者] 以啟用使用受控識別或使用密鑰來存取服務。 出現提示時,請選取 [是]

    備註

    雖然我們會在此練習中使用 API 金鑰,因為新增角色指派最多可能需要 10 分鐘的時間,但您可以啟用系統指派的受控識別,以更安全的方式存取服務。

  22. 選取左側導覽功能表中的 [ 金鑰 ],然後將 [主要系統管理員密鑰 ] 值複製到本機檔案。 您稍後會在練習中需要 URL 和索引鍵值。

  23. 選取導覽功能表中的 [設定 ] -->Semantic ranker ,並確定已選取 [免費 ]。

    備註

    若要檢查特定區域中是否有語意排名器,請檢查 Azure 網站上的 [依 區域提供的產品 ] 頁面,以查看您的區域是否已列出。

  24. 返回 [Azure AI Foundry 新增數據 ] 對話框,然後從 [ 選取 Azure AI 搜尋資源 ] 下拉式清單中選取新建立的搜尋資源。 如果您沒有看到它列示,請選取下拉式清單旁的重新整理圖示。

  25. 針對 Enter 索引名稱值,輸入 byod-search-index 的值。

  26. 選取 [ 將向量搜尋新增至此搜尋資源 ] 複選框。

  27. 在 [ 選取內嵌模型 ] 下拉式清單中,選取您稍早建立的 text-embedding-ada-002 模型。

  28. 在 [ 上傳檔案 ] 對話框中,選取 [瀏覽檔案]。

  29. 瀏覽至項目的 客戶檔案 資料夾(位於專案的根目錄),然後選取下列檔案:

    • 時鐘 A102 安裝 Instructions.docx
    • 公司 FAQs.docx

    備註

    此功能目前支援下列檔格式來建立本機索引:.txt、.md、.html、.pdf、.docx和.pptx。

  30. 選取 [上傳檔案]。 檔案將會上傳至您稍早建立的 Blob 記憶體資源中的 fileupload-byod-search-index 容器。

  31. 選取 [下一步 ] 以移至 [資料管理] 對話框。

  32. 在 [ 搜尋類型 ] 下拉式清單中,選取 [混合式 + 語意]。

    備註

    此選項提供關鍵詞和向量搜尋的支援。 傳回結果之後,使用深度學習模型將次要排名程式套用至結果集,進而改善使用者的搜尋相關性。 若要深入瞭解語意搜尋,請在 Azure AI 搜尋檔中檢視語意搜尋

  33. 確定 [選取大小] 值設定為 1024

  34. 選取 下一步

  35. 針對 Azure 資源驗證類型,選取 [API 金鑰]。 在 Azure AI 搜尋服務驗證檔中深入瞭解如何選取正確的驗證類型。

  36. 選取 下一步

  37. 檢閱詳細數據,然後選取 [ 儲存並關閉]。

  38. 現在已上傳您的自定義數據,數據將會編製索引,並可在 聊天遊樂場中使用。 此過程可能需要幾分鐘。 完成後,請繼續進行下一節。

在聊天遊樂場中使用您的自定義數據源

  1. 在 Azure OpenAI Studio 中找出頁面的 [聊天會話] 區 段,然後輸入下列 用戶查詢

    What safety rules are required to install a clock?
    
  2. 提交使用者查詢之後,您應該會看到類似如下所示的結果:

    Azure OpenAI Studio 聊天會話 - 鐘錶安裝安全規則

  3. 展開聊天回應中的 1個參考 區段,並注意列出 時鐘 A102 安裝 Instructions.docx 檔案,而且您可以選取它來檢視檔。

  4. 輸入下列 使用者訊息

    What should I do to mount the clock on the wall?
    
  5. 您應該會看到類似如下所示的結果:

    Azure OpenAI Studio 聊天會話 - 掛鐘安裝說明

  6. 現在讓我們試驗公司常見問題檔。 在 [ 使用者查詢 ] 欄位中輸入下列文字:

    What is the company's policy on vacation time?
    
  7. 您應該會看到找不到該要求的資訊。

  8. 在 [ 使用者查詢 ] 欄位中輸入下列文字:

    How should I handle refund requests?
    
  9. 您應該會看到類似如下所示的結果:

    Azure OpenAI Studio 聊天會話 - 常見問題結果

  10. 展開聊天回應中的 1 個參考 區段,並注意 公司 FAQs.docx 檔案已列出,而且您可以選取它來檢視檔。

  11. 選取 [聊天遊樂場] 工具列中的 [檢視程序代碼]。

    Azure OpenAI Studio 聊天會話 - 檢視程序代碼

  12. 請注意,您可以在不同語言之間切換、檢視端點,以及存取端點的密鑰。 關閉 [ 範例程式代碼 ] 對話框視窗。

    Azure OpenAI Studio 聊天會話 - 範例程序代碼

  13. 開啟聊天訊息上方 的 [顯示原始 JSON] 切換開關。 請注意,聊天會話會以類似下列訊息開頭:

    {
        "role": "system",
        "content": "You are an AI assistant that helps people find information."
    }
    
  14. 既然您已建立自定義數據源,並在聊天遊樂場中加以實驗,讓我們看看如何在專案的應用程式中使用它。

在應用程式中使用自備數據功能

  1. 返回 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
    
  2. 在上一個 練習 中,您已啟動資料庫、API 和應用程式。 您也會更新檔案 .env 。 如果您未完成這些步驟,請先依照先前練習結尾的指示繼續進行。

  3. 在瀏覽器中載入應用程式之後,請選取應用程式右上角的 [聊天說明 ] 圖示。

    聊天說明圖示

  4. 下列文字應該會出現在聊天對話框中:

    How should I handle a company refund request?
    
  5. 選取 [ 取得說明] 按鈕。 您應該會看到您稍早在 Azure OpenAI Studio 中上傳 的公司 FAQs.docx 檔傳回的結果。 如果您想要閱讀檔案,您可以在專案根目錄的客戶 檔案 資料夾中找到檔。

  6. 將文字變更為下列內容,然後選取 [ 取得說明] 按鈕:

    What safety rules are required to install a clock?
    
  7. 您應該會看到您稍早在 Azure OpenAI Studio 中上傳的 時鐘 A102 安裝 Instructions.docx 檔案傳回的結果。 此檔也可在專案根目錄的客戶 檔案 資料夾中取得。

探索程序代碼

小提示

如果您使用 Visual Studio Code,您可以選取下列專案來直接開啟檔案:

  • Windows/Linux: Ctrl + P
  • Mac: Cmd + P

然後輸入您要開啟的檔案名。

  1. 返回 Visual Studio Code 中的項目原始程式碼。

  2. 開啟 伺服器/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);
    });
    
  3. 開啟 伺服器/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 並傳回結果。 它會傳遞 systemPromptuserPrompt 值,以及下列參數:
      • temperature - 要包含在回應中的創意量。 在此情況下,使用者需要一致(較不具創意)的答案,因此此值會設定為 0。
      • useBYOD - 布爾值,指出是否要搭配 Azure OpenAI 使用 AI 搜尋。 在此情況下,它會設定為 true ,以便使用 AI 搜尋功能。
  4. callOpenAI() 式會接受 useBYOD 參數,用來判斷要呼叫的 OpenAI 函式。 在此情況下,它會設定 useBYODtrue ,以便呼叫 函 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);
    }
    
  5. 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檔案的 endpointAI 搜尋資源的、 index_name.env
    • 使用、createAzureOpenAICompletion()systemPromptuserPrompt 值呼叫temperaturedataSources式。 此函式可用來呼叫 Azure OpenAI API 並傳回結果。
    • 傳回回應之後,會將檔引文記錄到主控台。 然後,完成訊息內容會傳回給呼叫端。
  6. 在繼續進行下一個練習之前,需要考慮幾個最後幾點:

    • 範例應用程式會在 Azure AI 搜尋中使用單一索引。 您可以搭配 Azure OpenAI 使用多個索引和數據源。 dataSources函式中的 getAzureOpenAIBYODCompletion() 屬性可以更新為視需要包含多個數據源。
    • 您必須謹慎評估此類型的案例的安全性。 使用者應該無法詢問問題,並從無法存取的檔取得結果。
  7. 既然您已瞭解 Azure OpenAI、提示、完成,以及如何使用自己的數據,讓我們前往下一個練習,以瞭解如何使用通訊功能來增強應用程式。 如果您想要深入瞭解 Azure OpenAI,請檢視 開始使用 Azure OpenAI 服務 訓練內容。 如需搭配 Azure OpenAI 使用您自己的數據與 Azure OpenAI 的其他資訊,請參閱 Azure OpenAI 數據 檔。

後續步驟