使用RAG開始使用Java企業聊天範例

本文說明如何部署及執行適用於 Java 的企業聊天應用程式範例。 此範例會在 Azure AI 搜尋中使用 Java、Azure OpenAI 服務和擷取擴增世代 (RAG) 實作聊天應用程式,以取得虛構公司員工權益的解答。 應用程式會植入 PDF 檔案,包括員工手冊、福利檔和公司角色和期望清單。

遵循本文中的指示,您將會:

  • 部署聊天應用程式至 Azure。
  • 取得有關員工權益的解答。
  • 變更設定以變更回應的行為。

完成本文之後,您可以使用自定義程式代碼開始修改新專案。

本文是文章集合的一部分,說明如何使用 Azure OpenAI 服務和 Azure AI 搜尋來建置聊天應用程式。 集合中的其他文章包括:

架構概觀

下圖顯示聊天應用程式的簡單結構:

顯示從用戶端到後端應用程式的架構的圖表。

結構的重要元件包括:

  • Web 應用程式,用來裝載互動式聊天體驗。
  • Azure AI 搜尋資源,可從您自己的數據取得答案。
  • Azure OpenAI 服務,用來提供:
    • 關鍵字以增強對您自己的資料的搜尋。
    • 來自 OpenAI 模型的答案。
    • 來自 Ada 模型的內嵌項目

成本

此結構中的大部分資源都會使用基本或使用量價格層。 使用量價格是以使用量為基礎,這表示您只需支付您使用的費用。 若要完成本文,將會向您收取費用,但費用將極低。 完成本文時,您可以刪除資源來停止產生費用。

深入瞭解 範例存放庫中的成本。

必要條件

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

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

  1. Azure 訂用帳戶 - 免費建立一個訂用帳戶
  2. Azure 帳戶權限 - 您的 Azure 帳戶必須具有 Microsoft.Authorization/roleAssignments/write 權限,例如,使用者存取系統管理員擁有者
  3. 在所需的 Azure 訂用帳戶中授與 Azure OpenAI 的存取權。 目前只有應用程式會授予此服務的存取權。 您可以填妥 https://aka.ms/oai/access 的表單,以申請 Azure OpenAI 的存取權。 如果您遇到問題,請在此存放庫上提出問題,以與我們連絡。
  4. GitHub 帳戶

開啟開發環境

立即使用已安裝所有相依性的開發環境開始,以完成本文。

GitHub Codespaces 會使用網頁版 Visual Studio Code 作爲使用者介面,執行由 GitHub 管理的開發容器。 如需最直接的開發環境,請使用 GitHub Codespaces,使得您有已預先安裝的正確開發人員工具和相依性,以便完成本文。

重要

所有 GitHub 帳戶每個月最多可以使用 Codespaces 60 小時,且有 2 個核心執行個體。 如需詳細資訊,請參閱 GitHub Codespaces 每月包含的儲存體和核心時數

  1. 開始在 Azure-Samples/azure-search-openai-demo-java GitHub 存放庫分的 main 分支上建立新的 GitHub Codespace 的流程。

  2. 在以下按鈕上按一下以滑鼠右鍵,然後選取 [在新視窗中開啟連結],以便同時取得開發環境和文件。

  3. 在 [建立 Codespace] 頁面上,檢閱 Codespace 組態設定,然後選取 [建立新的 Codespace]

    建立新 Codespace 之前確認畫面的螢幕擷取畫面。

  4. 等候 Codespace 開始。 此啟動程序可能需要幾分鐘的時間。

  5. 在畫面底部的終端機中,使用 Azure Developer CLI 登入 Azure。

    azd auth login
    
  6. 從終端機複製程式碼,然後將它貼到瀏覽器中。 遵循指示使用 Azure 帳戶進行驗證。

  7. 本文中的其餘工作會在此開發容器的內容中進行。

部署和執行

範例存放庫包含將聊天應用程式部署至 Azure 所需的所有程式碼和設定檔。 下列步驟會逐步引導您完成將範例部署至 Azure 的程序。

部署聊天應用程式至 Azure

重要

在本節中建立的 Azure 資源會產生立即成本,主要是來自 Azure AI 搜尋服務資源。 即使您在命令完整執行之前中斷命令,這些資源仍可能會產生成本。

  1. 執行下列 Azure Developer CLI 命令來佈建 Azure 資源並部署原始程式碼:

    azd up
    
  2. 提示您輸入環境名稱時,請將它保持簡短和小寫。 例如: myenv 。 其會做為資源群組名稱的一部分。

  3. 出現提示時,選取要在其中建立資源的訂用帳戶。

  4. 第一次提示您選取位置時,請選取您附近的位置。 此位置會用於大部分的資源,包括裝載。

  5. 如果提示您輸入 OpenAI 模型的位置,請選取您附近的位置。 如果有與您的第一個位置相同的位置,請選取該位置。

  6. 等候應用程式部署。 部署可能需要 5-10 分鐘才能完成。

  7. 成功部署應用程式之後,您會看到終端機中顯示 URL。

  8. 選取標示為 Deploying service web 的 URL,以在瀏覽器中開啟聊天應用程式。 瀏覽器中聊天應用程式的螢幕快照,其中顯示聊天輸入的數個建議,以及要輸入問題的聊天文本框。

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

聊天應用程式會從 PDF 檔案中預先載入員工權益資訊。 您可以使用聊天應用程式來詢問有關權益的問題。 下列步驟會逐步引導您完成使用聊天應用程式的程序。

  1. 在瀏覽器中,在聊天文本框中,選取或輸入「我的 Northwind Health Plus 方案未納入標準的專案?」。

    聊天應用程式第一個答案的螢幕快照。

  2. 從答案中,選取其中一個引文。

    聊天應用程式第一個答案的螢幕快照,其引文醒目提示在紅色方塊中。

  3. 在右窗格中,使用索引卷標來瞭解答案的產生方式。

    索引標籤 描述
    思考程序 這是聊天中互動的指令碼。
    支援內容 這包括用來回答您的問題的資訊和來源資料。
    引文 這會顯示包含引文的 PDF 頁面。
  4. 當您完成時,請再次選取選取的索引標籤以關閉窗格。

使用聊天應用程式設定來變更回應的行為

聊天應用程式的智慧取決於 OpenAI 模型,以及用來與模型互動的設定。

聊天開發人員設定的螢幕快照。

設定 描述
覆寫提示範本 這是用來產生答案的提示。
擷取這麼多個搜尋結果 這是用來產生答案的搜尋結果數目。 您可以在引文的 [思考程序] 和 [支援內容] 索引標籤中看到這些來源傳回。
排除類別 這是從搜尋結果中排除的文件類別。
使用語意排名工具進行擷取 這是 Azure AI 搜尋服務的一項功能,其使用機器學習來改善搜尋結果的相關性。
使用查詢內容相關摘要,而不是整個文件 同時勾選 Use semantic rankerUse query-contextual summaries 時,LLM 會使用從排名最高文件中的關鍵段落擷取的標題,而不是所有段落。
建議後續問題 讓聊天應用程式根據答案建議後續問題。
擷取模式 向量 + 文字表示搜尋結果是以文件的文字和文件的內嵌項目為基礎。 向量表示搜尋結果是以文件的內嵌項目為基礎。 文字表示搜尋結果是以文件的文字為基礎。
串流聊天完成回應 串流回應,而不是等到完整的回應可供回應使用為止。

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

  1. 在瀏覽器中,選取 [開發人員 設定] 索引標籤。

  2. 勾選 [建議後續問題] 核取方塊,然後再次詢問相同問題。

    What is my deductible?
    

    聊天傳回建議的後續問題,例如:

    1. What is the cost sharing for out-of-network services?
    2. Are preventive care services subject to the deductible?
    3. How does the prescription drug deductible work?
    
  3. 在 [設定] 索引標籤中,取消選取 [使用語意排名工具進行擷取]

  4. 再問一個問題嗎?

    What is my deductible?
    
  5. 答案有何差異?

    例如,使用語意排名器的回應提供了單一答案: The deductible for the Northwind Health Plus plan is $2,000 per year

    沒有語意排名的回應傳回答案,需要更多工作才能取得答案: Based on the information provided, it is unclear what your specific deductible is. The Northwind Health Plus plan has different deductible amounts for in-network and out-of-network services, and there is also a separate prescription drug deductible. I would recommend checking with your provider or referring to the specific benefits details for your plan to determine your deductible amount

清除資源

清除 Azure 資源

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

執行下列 Azure Developer CLI 命令來刪除 Azure 資源並移除原始程式碼:

azd down --purge

清除 GitHub Codespaces

刪除 GitHub Codespaces 環境,可確保您可將您為帳戶取得的每個核心免費時數權利數量最大化。

重要

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

  1. 登入 GitHub Codespaces 儀表板 (https://github.com/codespaces)。
  2. 找出您目前執行中的 Codespaces,而其來源為 Azure-Samples/azure-search-openai-demo-java GitHub 存放庫。 執行中 Codespaces 的螢幕擷取畫面,包括其狀態和範本。
  3. 開啟 Codespace 的快顯功能表,然後選取 [刪除]單一 Codespace 的操作功能表 (已醒目提示刪除選項) 螢幕擷取畫面。

問題是如何回答的?

應用程式分成 2 個應用程式:

  • 使用 React 架構搭配 Vite 建置工具的前端 JavaScript 應用程式。
  • 後端 Java 應用程式會回答問題。

後端 /chat API 會逐步執行取得答案的程式:

  • 建置RAG選項:建立一組將用來產生答案的選項。
  • 使用RAG選項建立方法:使用擷取型和以行性為基礎的模型組合,建立產生精確且自然音效回應的方法。
  • 使用RAG選項和上一個交談執行方法:使用方法和RAG選項,根據上一個交談產生答案。 答案包含哪些檔用來產生回應的資訊。

取得協助

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

如果您的問題未解決,請將您的問題記錄至存放庫的問題

下一步