這篇文章將向您展示如何部署和運行Java版的「與您的數據聊天」範例。 本範例實作了一個使用 Java 的聊天應用程式,使用 Microsoft Foundry 中的 Azure OpenAI 模型,以及 Azure AI 搜尋服務 中的 檢索增強生成(RAG), 以取得虛構公司員工福利的答案。 應用程式會植入 PDF 檔案,包括員工手冊、福利檔,以及公司角色和期望清單。
在本文中,您會完成下列工作:
- 部署聊天應用程式至 Azure。
- 取得有關員工權益的解答。
- 變更設定以變更回應的行為。
完成本文之後,您可以使用自定義程式代碼開始修改新專案。
本文是一系列文章的一部分,教你如何在 Microsoft Foundry 和 Azure AI 搜尋服務 中使用 Azure OpenAI 模型來建立聊天應用程式。 集合中的其他文章包括:
- .NET
- JavaScript
- Python
注意
本文使用一個或多個 AI 應用程式範本作為範例和指引的基礎。 AI 應用程式範本提供您妥善維護且易於部署的參考實作,以協助確保 AI 應用程式的高品質起點。
架構概觀
下圖顯示聊天應用程式的簡單架構:
結構的重要元件包括:
- 一個提供互動聊天體驗的網頁應用程式。
- 一個 Azure AI 搜尋服務 資源,能從你自己的資料中獲得答案。
- Azure OpenAI 服務,提供:
- 關鍵字以增強對您自己的資料的搜尋。
- 來自 OpenAI 模型的答案。
- 來自 ADA 模型的嵌入。
成本
此架構中使用的大部分資源都屬於基本或以耗用量為基礎的定價層。 這種定價模式意味著你只需為實際使用的內容付費,且在開發或測試期間通常收費很低。
為了完成這個範例,你可能會因為使用 Azure OpenAI、AI 搜尋和儲存等服務而產生一點小成本。 完成評估或部署應用程式後,刪除所有已配置的資源以避免持續收費。
了解更多關於 範例程式庫 的成本。
必要條件
你需要一個開發 容器 環境,包含完成本文所需的所有依賴。 你可以在 GitHub Codespaces(瀏覽器)或本地使用 Visual Studio Code 執行開發容器。
若要使用本文,您需要下列必要條件:
- Codespaces (建議)
- Visual Studio Code
- Azure 訂用帳戶 - 免費建立一個訂用帳戶。
- Azure 帳戶許可權 - 您的 Azure 帳戶必須具有
Microsoft.Authorization/roleAssignments/write許可權,例如 使用者存取系統管理員 或 擁有者。 - GitHub 帳戶。
開放開發環境
建立一個安裝所有相依套件的開發環境,以完成本文。
- GitHub Codespaces(建議)
- Visual Studio Code
GitHub Codespaces 運行由 GitHub 管理的開發容器,並將 網頁版 Visual Studio Code 作為使用者介面。 如需最直接的開發環境,請使用 GitHub Codespaces,以確保您具備已預先安裝的正確開發工具和相依性,從而順利完成此篇文章的內容。
重要
所有 GitHub 帳戶每月都可以免費使用 Codespaces 長達 60 小時,並使用兩個核心實例。 如需詳細資訊,請參閱 GitHub Codespaces 每月包含的儲存空間和核心時數。
右鍵點擊以下按鈕,選擇「 在新視窗開啟連結 」,這樣你就能同時看到開發環境和文件。
`在 GitHub Codespaces 中開啟`
在 建立程式碼空間時,檢視程式碼空間的設定,然後選擇 建立程式碼空間。
建立新 Codespace 之前確認畫面的螢幕擷取畫面。
請等待 Codespace 啟動。 此啟動程序可能需要幾分鐘的時間。
在螢幕底部的終端機,使用 Azure 開發者 CLI 登入 Azure。
azd auth login --use-device-code從終端機複製程式碼,然後將它貼到瀏覽器中。 請依照指示使用您的 Azure 帳號進行認證。
本文中其餘的任務會在此開發容器的環境中進行。
部署和執行
範例存放庫包含將聊天應用程式部署至 Azure 所需的所有程式碼和設定檔。 下列步驟會逐步引導您完成將範例部署至 Azure 的程序。
部署聊天應用程式至 Azure
重要
在本區建立的 Azure 資源——尤其是 Azure AI 搜尋服務——一旦配置完成,即使部署在完成前中斷,也可能開始產生費用。 若要避免非預期的費用,請在測試之後立即監視您的 Azure 使用量並刪除未使用的資源。
執行以下指令來配置 Azure 資源並部署原始碼:
azd up如果系統提示您輸入環境名稱,請將它保持簡短和小寫,例如,
myenv。 環境名稱會當做資源組名的一部分使用。出現提示時,選取要在其中建立資源的訂用帳戶。
第一次被要求選擇地點時,請選擇你附近的地點。 此位置用於大部分資源,包括主機代管。
如果被要求提供 OpenAI 模型的位置,請選擇離你最近的位置。 如果與你第一個地點相同的地點可用,請選擇該地點。
等應用程式部署完成後再說,這可能需要 5 到 10 分鐘。
應用程式成功部署後,你會在終端機中看到一個網址。
選取標示為
Deploying service web的 URL,以在瀏覽器中開啟聊天應用程式。
使用聊天應用程式從 PDF 檔案取得答案
聊天應用程式會從 PDF 檔案中預先載入員工權益資訊。 您可以使用聊天應用程式來詢問有關權益的問題。 下列步驟會逐步引導您完成使用聊天應用程式的程序。
在瀏覽器中,在聊天文字框中選取或輸入 Northwind Health Plus 方案相較於標準方案包含哪些內容?。
從答案中,選取其中一個引文。
在右側窗格中,使用索引標籤來了解答案的產生方式。
頁籤 描述 思維過程 聊天中互動的腳本。 支援內容 包含回答您問題和來源資料的資訊。 引文 顯示包含引文的 PDF 頁面。 當您完成時,請再次選取選取的索引標籤以關閉窗格。
使用聊天應用程式設定來變更回應的行為
OpenAI 模型以及你用來互動模型的設定決定了聊天應用程式的智慧度。
聊天開發者設定的截圖。
| 設定 | 描述 |
|---|---|
| 覆寫提示範本 | 用來產生答案的提示詞。 |
| 擷取指定數量的搜尋結果 | 用來產生答案的搜尋結果數目。 您可以在引文的 [思考過程] 和 [支援內容] 索引標籤中看到這些來源的返回。 |
| 排除類別 | 從搜尋結果排除的檔案類別。 |
| 使用語意排名工具進行擷取 | Azure AI 搜尋 的功能,其使用機器學習來改善搜尋結果的相關性。 |
| 使用查詢內容相關摘要,而不是整個文件 | 當同時勾選 Use semantic ranker 和 Use query-contextual summaries 時,LLM 會使用從排名最高文件的關鍵段落中擷取的說明,而不是使用所有段落。 |
| 建議後續問題 | 讓聊天應用程式根據答案建議後續問題。 |
| 檢索模式 | 向量 + 文字表示搜尋結果是以文件的文字和文件的內嵌項目為基礎。 向量表示搜尋結果是以文件的內嵌項目為基礎。 文字表示搜尋結果是以文件的文字為基礎。 |
| 串流聊天完成回應 | 即時串流回應,而不必等到完整答案準備好才能回應。 |
下列步驟會逐步引導您完成變更設定的程序。
在瀏覽器中,選取 [ 開發人員設定 ] 索引標籤。
選取 [[建議後續問題] 複選框,然後再次詢問相同的問題。
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?在 [設定] 索引標籤中,取消選取 [使用語意排名工具進行擷取]。
再問一個問題嗎?
What is my deductible?答案有何差異?
例如,使用語意排序器的回應給出單一答案:
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 資源並移除原始碼:
azd down --purge
清理 GitHub Codespaces
- GitHub Codespaces
- Visual Studio Code
刪除 GitHub Codespaces 環境,可確保您可將您為帳戶取得的每個核心免費時數權利數量最大化。
重要
如需 GitHub 帳戶權利的詳細資訊,請參閱 GitHub Codespaces 每月包含的儲存體和核心時數。
找出你目前正在運行的 Codespace,這些程式碼來自 Azure-Samples/azure-search-openai-demo-java GitHub 倉庫。
執行中的所有 Codespaces 的螢幕擷取畫面,展示其狀態和範本。
開啟 Codespace 的快顯功能表,然後選取刪除。
單一 Codespace 的內容功能表螢幕擷取畫面,已醒目提示刪除選項。
問題是如何回答的?
這個應用程式分為兩個應用程式:
- 一個使用 React 框架搭配 Vite 建置工具的前端 JavaScript 應用程式。
- 一個後端 Java 應用程式,能回答這個問題。
後端 /chat API 會逐步執行以獲得答案的過程:
- 建置RAG選項:建立一組用來產生答案的選項。
- 使用RAG選項建立方法:使用擷取型和以行性為基礎的模型組合,建立產生精確且自然音效回應的方法。
- 使用RAG選項和先前的對話運行方法:利用該方法和RAG選項,根據先前的對話生成答案。 答案中包含了哪些文件用來產生回應的資訊。
取得協助
此範例存放庫可提供疑難排解資訊。 如果您的問題未解決,請在存放庫的 問題中記錄。
下一步
- 取得本文中所用範例的原始程式碼
- 使用 Azure OpenAI 構建聊天應用程式的最佳實踐解決方案架構
- 使用 Azure AI 搜尋的生成式 AI 應用程式之存取控制
- 使用 Azure API 管理建置企業級 OpenAI 解決方案
- 以混合式檢索及排名能力超越向量搜尋技術
- 更多 Azure AI 端到端範本
聊天應用程式第一個答案的螢幕擷取畫面。
聊天應用程式首次答案的螢幕擷取畫面,紅色方塊标出了引文。
[命令面板] 選項的螢幕擷取畫面,該選項用以重新開啟本機環境內的目前資料夾。