共用方式為


開始使用:使用您自己的資料聊天 (Python 範例)

本文說明如何使用 Python 的範例程式代碼,部署及執行與您自己的數據範例聊天。 此範例聊天應用程式是使用 Python、Azure OpenAI 服務,並透過 Azure AI 搜尋來實現 檢索增強生成(RAG) 所建置。

應用程式提供虛構公司員工權益相關用戶問題的解答。 它會使用 Retrieval-Augmented Generation (RAG) 來參考所提供 PDF 檔案中的內容,這可能包括:

  • 員工手冊
  • 優點概觀檔
  • 公司角色和期望的清單

藉由分析這些檔,應用程式可以回應自然語言查詢,其中包含準確、內容相關的答案。 此方法示範如何使用您自己的數據,透過 Azure OpenAI 和 Azure AI 搜尋來提供智能、領域專屬的聊天體驗。

您也會瞭解如何設定應用程式的設定,以修改其響應行為。

完成本文中的步驟之後,您可以使用自己的程式代碼開始自定義專案。 本文是一系列的一部分,可引導您使用 Azure OpenAI 服務和 Azure AI 搜尋建置聊天應用程式。 本系列中的其他文章包括:

備註

本文是以一或多個 AI 應用程式範本為基礎,其可提供維護良好的參考實作。 這些範本的設計目的是要易於部署,並提供可靠、高品質的起點,以建置您自己的 AI 應用程式。

範例應用程式架構

下圖顯示聊天應用程式的簡單架構。

此圖顯示範例從用戶端到具有數據源的後端聊天應用程式架構。

結構的重要元件包括:

  • 裝載互動式聊天介面的 Web 應用程式(通常是使用 Python Flask 或 JavaScript/React 建置),並將使用者問題傳送至後端進行處理。
  • 在已建立索引的文件(例如 PDF、Word 文件等)上執行智慧搜尋的 Azure AI 搜尋資源,並傳回相關的文件摘錄(片段)以用於回應。
  • Azure OpenAI 服務實例,其:
    • 將文件和用戶問題轉換成向量表示法,以進行語意相似性搜尋。
    • 擷取重要關鍵詞以精簡 Azure AI 搜尋查詢。
    • 使用擷取的數據和用戶查詢合成最終回應。

聊天應用程式的一般流程如下所示:

  • 使用者提交問題:使用者透過 Web 應用程式介面輸入自然語言問題。
  • Azure OpenAI 會處理問題:後端會使用 Azure OpenAI 來:
    • 使用 text-embedding-ada-002 模型生成問題的嵌入。
    • 選擇性地擷取關鍵詞以精簡搜尋相關性
  • Azure AI 搜尋會擷取相關數據:內嵌或關鍵詞可用來在 Azure AI 搜尋中針對索引內容(例如 PDF)執行語意搜尋。
  • 結合結果與問題:最相關的檔摘錄(區塊)會與使用者的原始問題結合。
  • Azure OpenAI 會產生回應:合併的輸入會傳遞至 GPT 模型(例如 gpt-35-turbo 或 gpt-4),這會產生內容感知答案。
  • 回應會傳回給用戶:產生的答案會顯示在聊天介面中。

必要條件

開發容器環境已具備完成本文所需的所有相依性。 您可以在 GitHub Codespaces(瀏覽器中)或使用 Visual Studio Code 在本機執行開發容器。

若要使用本文,您需要下列必要條件:

  • Azure 訂用帳戶。 開始之前,請先建立免費帳戶

  • Azure 帳戶許可權。 您的 Azure 帳戶必須具有 Microsoft.Authorization/roleAssignments/write 許可權。 使用者存取系統管理員擁有者等角色符合這項需求。

  • 在您的 Azure 訂用帳戶中授與 Azure OpenAI 的存取權。 在大部分情況下,您可以建立自定義內容篩選,並使用一般存取 Azure OpenAI 模型來管理嚴重性層級。 一般存取不需要註冊核准型存取。 如需詳細資訊,請參閱 Azure AI 服務的有限存取功能

  • 內容篩選或濫用修改(選擇性)。 若要建立自定義內容篩選、變更嚴重性層級或支援濫用監視,您需要正式的存取核准。 您可以完成必要的註冊表單來申請存取權。 如需詳細資訊,請參閱 註冊已修改的內容篩選和/或濫用監視

  • 支援和疑難解答存取。 若要存取疑難解答,請在 GitHub 存放庫上開啟支持問題。

  • GitHub 帳戶。 需要分叉檔案庫,並使用 GitHub Codespaces 或將其複製到本地。

範例資源的使用量成本

此架構中使用的大部分資源都屬於基本或以耗用量為基礎的定價層。 這表示您只需支付您使用的費用,而且費用在開發或測試期間通常最低。

若要完成此範例,使用 Azure OpenAI、AI 搜尋和記憶體等服務可能會產生少量成本。 完成評估或部署應用程式之後,您可以刪除所有布建的資源,以避免持續產生費用。

如需預期成本的詳細明細,請參閱範例 GitHub 存放庫中 的成本估計

開放的開發環境

首先,從設定已安裝所有相依性的開發環境開始,準備完成這篇文章的工作。

  • Azure 訂用帳戶。 免費建立一個
  • Azure 帳戶許可權。 您的 Azure 帳戶必須具有 Microsoft.Authorization/roleAssignments/write 許可權。 使用者存取系統管理員擁有者等角色符合這項需求。
  • GitHub 帳戶。 需要分叉檔案庫,並使用 GitHub Codespaces 或將其複製到本地。

開啟開發環境

使用下列指示來部署預先設定的開發環境,其中包含完成本文所需的所有相依性。

如需最簡單的且最簡化的設定,請使用 GitHub Codespaces。 GitHub Codespaces 會執行 GitHub 所管理的開發容器,並提供 Visual Studio Code for the Web 作為使用者介面(UI)。 此環境包含預安裝的所有必要工具、SDK、延伸模組和相依性,因此您可以立即開始開發,而不需要手動設定。

使用 Codespaces 可確保:

  • 已安裝正確的開發人員工具和版本。
  • 不需要在本機安裝 Docker、VS Code 或擴充功能。
  • 快速上線和可重現的環境設定。

重要

所有 GitHub 帳戶都可以使用 GitHub Codespaces 每月最多 60 小時,且有 2 個核心實例。 如果您超過免費配額或使用較大的計算選項,則會套用標準 GitHub Codespaces 計費費率。 如需詳細資訊,請參閱 GitHub Codespaces - 每月包含的記憶體和核心時數

  1. 若要開始使用範例專案,請在 GitHub 存放庫的main分支上Azure-Samples/azure-search-openai-demo建立新的 GitHub Codespace。

    以滑鼠右鍵按下存放庫頁面頂端的 [GitHub Codespaces - 開啟 ] 選項,然後選取 [在新視窗中開啟連結]。 這可確保開發容器會在全螢幕專用瀏覽器索引標籤中啟動,讓您能夠存取原始程式碼和內建檔。

    [在 GitHub Codespaces 中開啟] 選項的影像。

  2. 在 [ 建立新的 Codespace ] 頁面上,檢閱 codespace 組態設定,然後選取 [建立程式代碼空間]:

    確認畫面的螢幕快照,為範例建立新的 GitHub Codespace。

    等候 GitHub Codespace 啟動。 啟動程式可能需要幾分鐘的時間。

  3. GitHub Codespace 開啟之後,在 Codespace 的 [終端機] 窗格中輸入下列命令,以 Azure 開發人員 CLI 登入 Azure:

    azd auth login
    

    GitHub 會在 [終端機] 窗格中顯示安全性程序代碼。

    1. 複製 [終端機] 窗格中的安全性代碼,然後選取 Enter。 瀏覽器視窗隨即開啟。

    2. 在提示中,將安全代碼貼上到瀏覽器欄位中。

    3. 遵循指示使用 Azure 帳戶進行驗證。

您將在此開發容器中完成本文所提及的剩餘 GitHub Codespaces 任務。

將聊天應用程式部署至 Azure

範例存放庫包含將具備您自己資料的聊天應用程式部署至 Azure 所需的所有專案,包括:

  • 應用程式原始碼 (Python)
  • 基礎架構即程式碼檔案(Bicep)
  • GitHub 整合和 CI/CD 的設定(選擇性)

使用下列步驟,使用 Azure 開發人員 CLI (azd) 部署應用程式。

重要

本節中建立的 Azure 資源,特別是 Azure AI 搜尋服務,即使部署在完成前中斷,仍可立即開始收取費用。 若要避免非預期的費用,請在測試之後立即監視您的 Azure 使用量並刪除未使用的資源。

  1. 在 Visual Studio Code 終端機窗格中,執行下列 azd 命令來建立 Azure 資源並部署原始碼:

    azd up
    
  2. 此過程會根據您的設定提示您輸入下列一或多個設定:

    • 環境名稱:此值會當做資源組名的一部分使用。 輸入小寫字母和虛線的簡短名稱(-例如 myenv。 不支援大寫字母、數位和特殊字元。

    • 用帳戶:選取訂用帳戶以建立資源。 如果您沒有看到所需的訂用帳戶,請使用箭頭鍵來捲動可用訂用帳戶的完整清單。

    • 位置:此區域位置用於大多數的資源,包括主機代管。 選取您地理位置附近的區域位置。

    • OpenAI 模型或文件智慧資源的位置:選取您地理位置最接近的位置。 如果您為 [位置 ] 選取的區域可供此設定使用,請選取相同的區域。

    應用程式部署可能需要一些時間。 等候部署完成再繼續。

  3. 應用程式成功部署之後,[終端機] 窗格會顯示端點 URL:

    顯示在完成 "azd up" 程序之後回報的已部署應用程式端點 URL 的螢幕快照。

  4. 選取端點 URL 以在瀏覽器開啟聊天應用程式:

    聊天應用程式的螢幕快照,其中顯示聊天輸入的數個建議,以及要輸入問題的聊天文本框。

使用聊天應用程式從 PDF 檔案取得答案

聊天應用程式中預先載入來自 PDF 檔案的員工福利資訊。 您可以使用聊天應用程式來詢問有關權益的問題。 下列步驟會逐步引導您完成使用聊天應用程式的程序。 您的答案可能會隨著基礎模型更新而有所不同。

  1. 在聊天應用程式中,選取 [效能檢閱中會發生什麼事?] 選項,或在聊天文本框中輸入相同的文字。 應用程式會傳回初始回應:

    聊天應用程式針對問題的初始答案螢幕快照:效能檢閱中會發生什麼情況?

  2. 在答案方塊中,選擇引文:

    顯示聊天應用程式回應方塊中醒目提示引文的螢幕快照。

  3. GitHub Codespaces 會以三個索引標籤區域開啟右 引文 窗格,焦點位於 引文 索引標籤上:

    在 GitHub Codespaces 中開啟右窗格的螢幕快照,其中顯示 [引文] 索引卷標的資訊。

    GitHub Codespaces 提供三個索引標籤的資訊,可協助您瞭解聊天應用程式如何產生答案:

    標籤 描述
    思考程式 在聊天中顯示問答互動的腳本。 您可以查看聊天應用程式system提供的內容、使用者輸入的user問題,以及系統進行的assistant釐清。
    支持內容 列出用來回答您問題和來源數據的資訊。 開發人員 設定會指定來源數據引文的數目。 引用的預設數目為 3
    引文 顯示所選引文的原始內容。
  4. 完成時,請選取右窗格中所選的標籤頁。 右窗格關閉。

使用設定來變更回應行為

特定的 OpenAI 模型會決定聊天的智慧,以及用來與模型互動的設定。 [ 開發人員設定 ] 選項會開啟 [ 設定答案產生 ] 窗格,您可以在其中變更聊天應用程式的設定:

聊天應用程式右窗格中可用的開發人員設定螢幕快照。

設定 描述
覆寫提示範本 覆寫用來根據問題和搜尋結果生成答案的提示詞。
溫度 將要求的溫度設定為產生答案的大型語言模型 (LLM)。 較高的溫度會引發更多的創造性反應,但它們可能較不切實際。
種子 設定種子以改善模型回應的重現性。 種子可以是任何整數。
最低搜尋分數 設定從 Azure AI 搜尋傳回之搜尋結果的最小分數。 分數範圍取決於您在「擷取模式」設定中選擇 混合式(預設值)、僅使用向量,或僅使用純文字
最低重排序分數 設定從語意重新排序器傳回的搜尋結果的最低分數。 分數一律介於 0-4 之間。 分數越高,結果的語意就越與問題相關。
取得這麼多搜尋結果 設定要從 Azure AI 搜尋擷取的搜尋結果數目。 更多結果可能會增加尋找正確答案的可能性,但可能會導致模型「中間遺失」。 您可以在 引文 窗格的 思考過程支持內容 標籤中看到傳回的來源。
包含類別 指定產生搜尋結果時要包含的類別。 使用下拉式清單進行選取。 預設動作是包含 [所有 ] 類別。
排除類別 指定要從搜尋結果中排除的任何類別。 預設數據集中沒有使用任何類別。
使用語意排名器進行擷取 啟用 Azure AI 搜尋 語意排名器,此模型會根據使用者查詢的語意相似性來重新產生搜尋結果。
使用語意標題 將語意標題傳送至 LLM,而不是完整的搜尋結果。 語意標題會在語意排名過程中從搜尋結果擷取。
建議後續問題 要求 LLM 根據使用者的查詢建議後續問題。
檢索模式 設定 Azure AI 搜尋查詢的擷取模式。 默認動作是 Vectors + Text (Hybrid),其使用向量搜尋和全文搜索的組合。 Vectors 選項只會使用向量搜尋。 [ 文字 ] 選項只會使用全文搜索。 混合式方法是最佳的。
串流聊天完成回應 當產生內容時,會持續串流對聊天UI的回應。

下列步驟會逐步引導您完成變更設定的程序。

  1. 在瀏覽器中,選取 [ 開發人員設定] 選項。

  2. 選取 [ 建議後續問題] 複選框以啟用選項,然後選取 [ 關閉 ] 以套用設定變更。

  3. 在聊天應用程式中,這次從問題方塊中輸入文字以再次詢問問題。

    What happens in a performance review?
    

    聊天應用程式答案現在包含建議的後續問題:

    顯示聊天應用程式如何在答案之後提供建議後續問題的螢幕快照。

  4. 再次選取 [ 開發人員設定 ] 選項,然後取消選取 [使用語意排名器進行擷取 ] 選項。 關閉設定。

  5. 再次詢問相同的問題,並注意聊天應用程式答案的差異。

    使用語意排名器:「在 Contoso Electronics 的效能檢閱期間,您的主管會討論您過去一年的效能,並提供改善方面的意見反應。 您也將有機會討論未來一年的目標和目標。 審查是經理和員工之間的雙向對話,鼓勵員工在過程中誠實和開放(1)。 在檢閱期間提供的意見反應應該是正面和建設性的,旨在協助員工發展及成長其角色。 員工將會收到績效評估的書面摘要,其中包括他們的績效評等、反饋意見,以及未來一年的目標和目的。

    如果沒有語意排名器:「在 Contoso Electronics 的效能檢閱期間,您的主管將會討論您過去一年的效能,並提供改善方面的意見反應。 這是一個雙向對話,鼓勵你誠實和開放(1)。 檢閱期間提供的意見反應應該是正面和建設性的,旨在協助您在角色中發展及成長。 您將會收到評論的書面摘要,其中包含您績效的評分、意見反饋,以及來年的目標(1)。

清除資源

完成練習之後,最佳做法是移除不再需要的任何資源。

清除 Azure 資源

在本文中建立的 Azure 資源會向您的 Azure 訂用帳戶計費。 如果您預計未來不需要這些資源,請將其刪除,以避免產生更多費用。

執行下列 azd 命令來移除 Azure 資源並移除原始碼:

azd down --purge --force

命令參數選項包括:

  • purge:立即清除已刪除的資源。 此選項可讓您每分鐘重複使用 Azure OpenAI 令牌 (TPM) 計量。
  • force:刪除會無聲進行,不需要徵得用戶同意。

清理 GitHub Codespaces

刪除 GitHub Codespaces 環境可確保您能充分利用帳戶的免費每核心時數配額。

重要

如需 GitHub 帳戶權利的詳細資訊,請參閱 GitHub Codespaces - 每月包含的記憶體和核心時數

  1. 登入 GitHub Codespaces 儀表板。

  2. 在儀錶板上,找出您目前從 Azure-Samples/azure-search-openai-demo GitHub 存放庫來源的程式代碼空間:

    所有執行中 GitHub Codespaces 的螢幕快照,包括其狀態和範本。

  3. 開啟 Codespace 的作功能表,然後選取 [ 刪除]:

    單一 Codespace 的功能表螢幕快照,其中的 [刪除] 選項被醒目提示。

尋求幫助

此範例存放庫提供疑難排解資訊。

如果您的問題未解決,請將問題新增至存放庫 的 [問題 ] 網頁。

  • 取得本文中所用樣本的原始程式碼
  • 建置 Azure OpenAI 聊天應用程式的最佳實踐解決方案架構
  • 使用 Azure AI 搜尋的生成式 AI 應用中存取控制
  • 使用 Azure API 管理建置企業就緒的 OpenAI 解決方案
  • 使用混合式檢索和排名功能超越向量搜尋