這很重要
本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
評估流程是特殊的流程類型,可評估執行輸出是否符合特定準則和目標。
在提示流程中,您可以針對工作和目標自定義或建立自己的評估流程,然後使用它來評估其他流程。 在本檔中,您將瞭解:
- 如何開發評估方法。
- 了解提示流程評估的輸入、輸出和記錄計量。
先決條件
備註
本文件僅指 Microsoft Foundry(經典版) 入口網站。
您必須針對這項功能使用 中樞型專案 。 不支援 Foundry 專案。 請參閱 如何知道我所擁有的項目類型? 和 建立中樞型專案。
- 具有有效訂閱的 Azure 帳戶。 如果您沒有,請建立 免費的 Azure 帳戶,其中包含免費試用訂用帳戶。
- 如果您沒有專案, 請建立以中樞為基礎的專案。
開始開發評估方法
有兩種方式可以開發您自己的評估方法:
自定義內建評估流程: 修改內建評估流程。
- 在 [建置並自定義 ] 下,選取 [提示流程]。
- 選取 [建立] 以開啟流程建立精靈。
- 在流程庫的 [ 探索資源庫] 下,選取 [評估流程 ] 以依該類型進行篩選。 挑選範例,然後選取 [複製] 進行自訂。
從頭開始建立新的評估流程: 從頭開始開發全新的評估方法。
- 在 [建置並自定義 ] 下,選取 [提示流程]。
- 選取 [建立] 以開啟流程建立精靈。
- 在流程資源庫的 [評估流程] 方塊中的 [依類型建立] 之下,選取 [建立],然後您可看到評估流程的範本。
了解提示流程中的評估
在提示流程中,流程是處理輸入併產生輸出的節點序列。 評估流程也會接受必要的輸入,併產生對應的輸出。
評估方法的一些特殊功能包括:
- 其通常會在要測試的執行之後執行,並接收該執行的輸出。
- 除了要測試的執行輸出之外,也可以選擇性地接收另一個可能包含對應基礎事實的數據集。
- 其可能會有匯總節點,其會根據個別分數來計算所測試流程的整體效能。
- 他們可以使用函
log_metric()式來記錄計量。
我們介紹如何在開發評估方法中定義輸入和輸出。
輸入
評估會在另一次執行之後執行,以評估該回合的輸出是否符合特定準則和目標。 因此,評估會接收從該執行產生的輸出。
可能也需要其他輸入,例如可能來自資料集的有根據事實。 根據預設,評估會使用與提供給測試回合的測試數據集相同的數據集。 不過,如果對應的標籤或目標真值位於不同的數據集中,您可以輕鬆地切換至該數據集。
因此,若要執行評估,您必須指出這些必要輸入的來源。 若要這樣做,在提交評估時,您會看到 「輸入對應」 一節。
- 如果數據源來自您的執行輸出,則會將來源表示為
${run.output.[OutputName]} - 如果數據源來自您的測試數據集,則會將來源表示為
${data.[ColumnName]}
備註
如果您的評估不需要來自數據集的數據,則不需要參考輸入對應區段中的任何數據集數據行,表示數據集選取是選擇性的組態。 數據集選取不會影響評估結果。
輸入描述
若要提醒計算計量所需的輸入,您可以新增每個必要輸入的描述。 對應批次執行提交中的來源時,會顯示描述。
若要新增每個輸入的描述,請在開發評估方法時,選取 [在輸入區段中 顯示描述 ]。 您可以選擇 [隱藏描述] 來隱藏描述。
然後在批次執行提交中使用這個評估方法時,會顯示此描述。
輸出和計量
評估的輸出是測量所測試流程效能的結果。 輸出通常包含分數等計量,也可能包含推理和建議的文字。
執行個體層級分數輸出
在提示流程中,流程會一次處理一個範例資料集,並產生輸出記錄。 同樣地,在大部分的評估案例中,每個輸出都有計量,可讓您檢查流程在每個個別資料上的執行方式。
若要記錄每個數據範例的分數,請計算每個輸出的分數,並在輸出區段中設定分數,將分數記錄 為流程輸出 。 此撰寫體驗與定義標準流程輸出相同。
我們會在 line_process 節點中計算此分數,您可以在依類型建立時加以從頭開始建立和編輯。 您也可以將此 Python 節點取代為 LLM 節點,以使用 LLM 來計算分數。
當這個評估方法用來評估另一個流程時,可以在 [概觀輸出] 索引標籤中>檢視實例層級分數。
計量記錄和匯總節點
此外,也請務必針對執行提供整體分數。 您可以在評估流程中檢查 Python 節點的 「設定為匯總」 ,使其變成「縮減」節點,讓節點以 清單 的形式接受輸入,並以批次方式處理它們。
如此一來,您就可以計算及處理每個流程輸出的所有分數,並計算每個變體的整體結果。
您可以使用 Prompt flow_sdk.log_metrics()在匯總節點中記錄計量。 計量應該是數值(float/int)。 不支援字串類型計量記錄。
我們會在 aggregate 節點中計算此分數,您可以在依類型建立時從頭開始建立和編輯。 您也可以將這個 Python 節點取代為 LLM 節點,以使用 LLM 來計算分數。 請參閱下列範例,以在評估流程中使用 log_metric API:
from typing import List
from promptflow import tool, log_metric
@tool
def calculate_accuracy(grades: List[str], variant_ids: List[str]):
aggregate_grades = {}
for index in range(len(grades)):
grade = grades[index]
variant_id = variant_ids[index]
if variant_id not in aggregate_grades.keys():
aggregate_grades[variant_id] = []
aggregate_grades[variant_id].append(grade)
# calculate accuracy for each variant
for name, values in aggregate_grades.items():
accuracy = round((values.count("Correct") / len(values)), 2)
log_metric("accuracy", accuracy, variant_id=name)
return aggregate_grades
當您在 Python 節點中呼叫此函式時,不需要在其他地方指派它,您稍後即可檢視計量。 在批次執行中使用這個評估方法時,可以在 [概觀 ->計量 ] 索引標籤中檢視實例層級分數。