在 Azure AI Studio 中開發評估流程
重要
本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft 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 節點中呼叫此函式時,不需要在其他地方加以指派,您稍後即可檢視計量。 在批次執行中使用這個評估方法時,可以在 [概觀 ->計量] 索引標籤中檢視執行個體層級分數。