共用方式為


開始在 Python 中的聊天應用程式中評估答案

本文說明如何針對一組正確或理想的答案來評估聊天應用程式的答案(稱為基礎真相)。 每當您以影響答案的方式變更聊天應用程式時,請執行評估來比較變更。 此示範應用程式提供您目前可以使用的工具,讓您更輕鬆地執行評估。

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

  • 使用針對主旨網域量身打造的範例提示。 這些提示已經在存放庫中。
  • 從您自己的文件產生範例用戶問題和基礎真相解答。
  • 使用範例提示搭配產生的用戶問題來執行評估。
  • 檢閱答案的分析。

注意

本文使用一或多個 AI 應用程式範本 作為本文範例和指引的基礎。 AI 應用程式範本提供您妥善維護且易於部署的參考實作,以協助確保 AI 應用程式的高品質起點。

架構概觀

結構的重要元件包括:

  • Azure 託管的聊天應用程式:聊天應用程式會在 Azure App 服務 中執行。
  • Microsoft AI 聊天通訊協定 提供跨 AI 解決方案和語言的標準化 API 合約。 聊天應用程式符合 MICROSOFT AI 聊天通訊協定,可讓評估應用程式針對符合通訊協定的任何聊天應用程式執行。
  • Azure AI 搜尋:聊天應用程式會使用 Azure AI 搜尋來儲存您自己的文件中的數據。
  • 範例問題產生器:可以為每個文件產生許多問題,以及基礎真相答案。 問題越多,評估就越長。
  • 評估工具 會針對聊天應用程式執行範例問題和提示,並傳回結果。
  • 檢閱工具 可讓您檢閱評估的結果。
  • 差異工具 可讓您比較評估之間的答案。

當您將此評估部署至 Azure 時,會為具有本身容量GPT-4模型建立 Azure OpenAI 端點。 評估聊天應用程式時,評估工具必須有自己的 OpenAI 資源,並使用 GPT-4 自己的容量。

必要條件

  • Azure 訂閱。 免費建立一個

  • 在所需的 Azure 訂用帳戶中授與 Azure OpenAI 的存取權。 深入了解:https://aka.ms/oai/access

  • 完成先前的 聊天應用程式程式 ,將聊天應用程式部署至 Azure。 評估應用程式需要此資源才能運作。 請勿完成 上一個程式的清除資源 區段。

    您將需要來自該部署的下列 Azure 資源資訊,這稱為 本文中的聊天應用程式

    • 聊天 API URI:進程結束時 azd up 顯示的服務後端端點。
    • Azure AI 搜尋服務 (部分機器翻譯) 需要下列值:
      • 資源名稱:Azure AI 搜尋服務資源名稱,在程式中回報為 Search service azd up
      • 索引名稱:儲存檔之 Azure AI 搜尋服務索引的名稱。 您可以在 Azure 入口網站中找到 搜尋服務。

    聊天 API URL 可讓評估透過後端應用程式提出要求。 Azure AI 搜尋資訊可讓評估腳本使用與後端相同的部署,並載入檔。

    收集此資訊之後,您就不需要再次使用 聊天應用程式 開發環境。 本文稍後會參考數次,以指出評估應用程式如何使用聊天應用程式。 除非您完成本文中的整個程序, 否則請勿刪除聊天應用程式 資源。

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

    • GitHub 帳戶

開啟開發環境

立即使用已安裝所有相依性的開發環境開始,以完成本文。 您應該安排監視工作區,以便同時查看這份文件和開發環境。

本文已針對 switzerlandnorth 評估部署使用區域進行測試。

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

重要

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

  1. 開始在 Azure-Samples/ai-rag-chat-evaluator GitHub 存放庫分的 main 分支上建立新的 GitHub Codespace 的流程。

  2. 若要同時顯示開發環境和檔,請以滑鼠右鍵按下列按鈕,然後選取 [在新視窗中開啟連結]。

    在 GitHub Codespaces 中開啟

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

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

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

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

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

  7. 為評估應用程式布建必要的 Azure 資源 Azure OpenAI

    azd up
    

    AZD command不會部署評估應用程式,但會建立具有必要GPT-4部署的 Azure OpenAI 資源,以在本機開發環境中執行評估。

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

  9. GitHub 存放庫的名稱會顯示在搜尋列中。 此視覺指標可協助您區分 評估應用程式聊天應用程式。 此 ai-rag-chat-evaluator 存放庫稱為 本文中的評估應用程式

準備環境值和組態資訊

使用您在評估應用程式必要條件期間收集的資訊來更新環境值和組態資訊。

  1. .env根據 .env.sample建立檔案:

    cp .env.sample .env
    
  2. 執行此指令以取得已部署資源群組和AZURE_OPENAI_SERVICE來源的必要值AZURE_OPENAI_EVAL_DEPLOYMENT,並將這些值貼到檔案中.env

    azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT
    azd env get-value AZURE_OPENAI_SERVICE
    
  3. 將下列值從聊天應用程式為其 Azure AI 搜尋實例新增至 .env您在必要條件一節中收集的

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

使用 Microsoft AI 聊天通訊協定進行設定資訊

聊天應用程式和評估應用程式都會實Microsoft AI Chat Protocol specification作、開放原始碼、雲端和語言無關的 AI 端點 API 合約,以用於取用和評估。 當您的用戶端和中介層端點遵守此 API 規格時,您可以一致地取用並執行 AI 後端的評估。

  1. 建立名為 my_config.json 的新檔案,並將下列內容複製到其中:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "top": 3,
                "temperature": 0.3,
                "retrieval_mode": "hybrid",
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt",
                "seed": 1
            }
        }
    }
    

    評估文本會 my_results 建立資料夾。

    overrides物件包含應用程式所需的任何組態設定。 每個應用程式都會定義自己的一組設定屬性。

  2. 使用下表來了解傳送至 聊天應用程式的設定屬性的意義:

    Settings 屬性 描述
    semantic_ranker 是否要使用 語意排名器,此模型會根據使用者查詢的語意相似性來重新產生搜尋結果。 我們停用本教學課程以降低成本。
    retrieval_mode 要使用的擷取模式。 預設值為 hybrid
    溫度 模型的溫度設定。 預設值為 0.3
    top 要傳回的搜尋結果數目。 預設值為 3
    prompt_template 用來根據問題和搜尋結果產生答案的提示覆寫。
    seed 對 GPT 模型的任何呼叫的種子值。 設定種子會導致跨評估產生更一致的結果。
  3. target_url將 變更為您在必要條件一節中收集的聊天應用程式的 URI 值。 聊天應用程式必須符合聊天通訊協定。 URI 格式如下 https://CHAT-APP-URL/chat。 請確定通訊協定和 chat 路由是 URI 的一部分。

產生範例資料

為了評估新的答案,必須將其與「基礎真理」答案進行比較,這是特定問題的理想答案。 從儲存在 Azure AI 搜尋聊天應用程式的檔案產生問題和解答。

  1. example_input 資料夾複製到名為my_input 的新資料夾。

  2. 在終端機中,執行下列命令來產生範例數據:

    python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
    

問答組會以 JSONL 格式產生並儲存my_input/qa.jsonl為下一個步驟中所用評估工具的輸入。 針對生產評估,您會為此數據集產生更多 QA 配對,超過 200 個。

注意

每個來源的幾個問題和答案,旨在讓您快速完成此程式。 這不是生產評估,每個來源應該有更多的問題和答案。

使用精簡的提示執行第一個評估

  1. my_config.json編輯群組態檔屬性:

    屬性 新值
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    精簡的提示是關於主旨網域的特定提示。

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. 在終端機中,執行下列命令以執行評估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

    此文稿會使用評估在 中 my_results/ 建立新的實驗資料夾。 資料夾包含評估的結果,包括:

    檔案名稱 描述
    config.json 用於評估的組態檔複本。
    evaluate_parameters.json 用於評估的參數。 非常類似 config.json ,但包含其他元數據,例如時間戳。
    eval_results.jsonl 每個問答,以及每個 QA 配對的 GPT 計量。
    summary.json 整體結果,例如平均 GPT 計量。

使用弱式提示執行第二次評估

  1. my_config.json編輯群組態檔屬性:

    屬性 新值
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    該弱式提示沒有關於主旨網域的內容:

    You are a helpful assistant.
    
  2. 在終端機中,執行下列命令以執行評估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

使用特定溫度執行第三次評估

使用允許更多創造力的提示。

  1. my_config.json編輯群組態檔屬性:

    Existing 屬性 新值
    Existing results_dir my_results/experiment_ignoresources_temp09
    Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt
    新增 溫度 0.9

    預設值 temperature 為 0.7。 溫度越高,答案就越有創意。

    提示 ignore 簡短:

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. 設定物件看起來應該像下面這樣,不同之處在於將 取代 results_dir 為您的路徑:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. 在終端機中,執行下列命令以執行評估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

檢閱評估結果

您根據不同的提示和應用程式設定執行三項評估。 結果會儲存在 my_results 資料夾中。 檢閱結果如何根據設定而有所不同。

  1. 使用檢閱工具來查看評估的結果:

    python -m evaltools summary my_results
    
  2. 結果看起來會像這樣:

    評估檢閱工具的螢幕快照,其中顯示三項評估。

    每個值都會以數位和百分比傳回。

  3. 使用下表來瞭解值的意義。

    Description
    根據性 這是指模型回應根據事實、可驗證的資訊有多好。 如果回應實際上是準確的,並反映現實,就會被視為有基礎的。
    相關性 這會測量模型回應與內容或提示的對齊程度。 相關的回應會直接解決使用者的查詢或語句。
    連貫性 這是指模型回應在邏輯上如何一致。 一致的回應會維護邏輯流程,而且本身不會相互矛盾。
    引文 這表示回應是否以提示中所要求的格式傳回。
    長度 這會測量回應的長度。
  4. 結果應該表示這三個評估具有很高的相關性,而 experiment_ignoresources_temp09 具有最低的相關性。

  5. 選取資料夾以查看評估的組態。

  6. 輸入 Ctrl + C 結束應用程式並返回終端機。

比較答案

比較評估中傳回的答案。

  1. 選取兩個要比較的評估,然後使用相同的 檢閱工具來 比較答案:

    python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. 檢閱結果。 您的結果可能會有所不同。

    評估之間評估答案比較的螢幕快照。

  3. 輸入 Ctrl + C 結束應用程式並返回終端機。

進一步評估的建議

  • 編輯 中的 my_input 提示,以量身打造答案,例如主旨領域、長度和其他因素。
  • 編輯檔案 my_config.json 以變更 的參數,例如 temperature、 和 semantic_ranker 和 ,然後重新執行實驗。
  • 比較不同的答案,以瞭解提示和問題如何影響答案品質。
  • 針對 Azure AI 搜尋索引中的每個文件產生個別的問題和基礎真相解答。 然後重新執行評估,以查看答案的差異。
  • 藉由將需求新增至提示結尾,改變提示以指出較短或更長的答案。 例如: Please answer in about 3 sentences.

清除資源和相依性

清除 Azure 資源

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

若要刪除 Azure 資源並移除原始程式碼,請執行下列 Azure 開發人員 CLI 命令:

azd down --purge

清除 GitHub Codespaces

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

重要

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

  1. 登入 GitHub Codespaces 儀表板 (https://github.com/codespaces)。

  2. 找出您目前執行中的 Codespaces,而其來源為 Azure-Samples/ai-rag-chat-evaluator GitHub 存放庫。

    執行中 Codespaces 的螢幕擷取畫面,包括其狀態和範本。

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

    單一 Codespace 的操作功能表 (已醒目提示刪除選項) 螢幕擷取畫面。

返回聊天應用程式文章以清除這些資源。

下一步