載入中

基於模型的評分

第 14 課10 分鐘

在建構提示評估工作流程時,評分系統提供關於輸出品質的客觀訊號。評分器接收模型輸出並回傳某種可衡量的回饋——通常是 1 到 10 之間的數字,其中 10 代表高品質,1 代表低品質。

評分器的類型

評估模型輸出主要有三種方法:

  • 程式碼評分器 - 使用自訂程式碼以程式化方式評估輸出
  • 模型評分器 - 使用另一個 AI 模型來評估品質
  • 人工評分器 - 由人員手動審查並評分輸出

程式碼評分器

程式碼評分器讓您能夠實作任何您能想到的程式化檢查。常見用途包括:

  • 檢查輸出長度
  • 驗證輸出是否包含(或不包含)特定字詞
  • JSON、Python 或正規表達式的語法驗證
  • 可讀性評分,以確保適當的閱讀難度

模型評分器

模型評分器透過額外的 API 呼叫來評估輸出,提供極大的靈活性。它們適用於評估:

  • 回應品質
  • 指令遵循的品質
  • 完整性
  • 有幫助程度
  • 安全性

人工評分器

人工評分器提供最大的靈活性,但也伴隨著顯著的缺點。雖然人類可以針對任何可想像的標準評估回應,但這個過程既耗時又繁瑣。

定義評估標準

在實作任何評分器之前,您需要明確的評估標準。對於程式碼生成提示,您可能會關注以下幾點:

  • 格式 - 應僅回傳 Python、JSON 或正規表達式,不含任何說明
  • 有效語法 - 產生的程式碼應具有有效的語法
  • 任務遵循 - 回應應直接以準確的程式碼解決使用者的任務

前兩項標準適合使用程式碼評分器,而任務遵循則因其靈活性而更適合使用模型評分器。

實作模型評分器

模型評分器通常是最容易實作的。以下是基本結構:

python
def grade_by_model(test_case, output):
    messages = []
    add_user_message(messages, eval_prompt)
    add_assistant_message(messages, "```json")
    eval_text = chat(messages, stop_sequences=["```"])
    return json.loads(eval_text)

評分提示應該全面,並包含:

  • 評分器的明確角色定義
  • 原始任務
  • 要評估的 AI 生成解決方案
  • 具體的輸出格式要求

不要只要求分數。請同時要求優點、缺點以及推理過程,連同數字分數一起提供。這可以防止模型預設給出像 6 這樣的中庸分數,並促使更周全的評估。

將評分器整合到您的工作流程中

一旦您有了評分器函式,將其整合到您的測試案例執行器中:

python
def run_test_case(test_case):
    output = run_prompt(test_case)
    
    # 呼叫模型評分器
    model_grade = grade_by_model(test_case, output)
    score = model_grade["score"]
    reasoning = model_grade["reasoning"]
    
    return {
        "output": output, 
        "test_case": test_case, 
        "score": score,
        "reasoning": reasoning
    }

執行完所有測試案例後,計算平均分數,以獲得您提示效能的客觀指標:

python
from statistics import mean

def run_eval(dataset):
    results = []
    for test_case in dataset:
        result = run_test_case(test_case)
        results.append(result)
    
    average_score = mean([result["score"] for result in results])
    print(f"Average score: {average_score}")
    
    return results

這為您提供了一個具體的數字,可作為改進的重點。雖然模型評分器可能有些不穩定,並且可能需要更好的指引,但它們為客觀評估提供了一個起點,您可以在此基礎上不斷迭代和改進。