載入中

現在我們已經準備好評估資料集,接下來是時候建立核心評估流程了。這包括取出每個測試案例,將其與我們的提示合併,餵給 Claude,然後對結果進行評分。

評估流程遵循一個清晰的工作流程:我們取出測試案例的資料集,將每一個與我們的提示範本結合,發送給 Claude 進行處理,然後使用評分系統評估輸出結果。

建立核心函式

評估流程由三個主要函式組成,每個函式都有特定的職責。讓我們從最簡單的開始——處理個別提示執行的函式。

run_prompt 函式

此函式取出一個測試案例,並將其與我們的提示範本合併:

python
def run_prompt(test_case):
    """Merges the prompt and test case input, then returns the result"""
    prompt = f"""
Please solve the following task:

{test_case["task"]}
"""
    
    messages = []
    add_user_message(messages, prompt)
    output = chat(messages)
    return output

目前,我們保持提示極為簡單。我們沒有包含任何格式化指示,這意味著 Claude 很可能會回傳比我們所需更冗長的輸出。我們將在後續迭代評估流程時對此進行改進。

run_test_case 函式

此函式協調執行單一測試案例並對結果進行評分:

python
def run_test_case(test_case):
    """Calls run_prompt, then grades the result"""
    output = run_prompt(test_case)
    
    # TODO - 評分
    score = 10
    
    return {
        "output": output,
        "test_case": test_case,
        "score": score
    }

目前,我們使用硬編碼的分數 10。評分邏輯是我們將在接下來的章節中投入大量時間的部分,但這個佔位符讓我們能夠測試整體流程結構。

run_eval 函式

這是處理整個資料集的主要協調器:

python
def run_eval(dataset):
    """Loads the dataset and calls run_test_case with each case"""
    results = []
    
    for test_case in dataset:
        result = run_test_case(test_case)
        results.append(result)
    
    return results

此函式會遍歷資料集中的每一個測試案例,處理每一個,並將所有結果收集到一個清單中。

執行評估

要執行我們的評估流程,我們載入資料集並呼叫主函式:

python
with open("dataset.json", "r") as f:
    dataset = json.load(f)

results = run_eval(dataset)

第一次執行時,請預期會花費一些時間——即使使用 Claude Haiku,處理完整資料集也可能需要 30 秒以上。我們稍後會介紹優化技巧,但目前耐心是關鍵。

檢視結果

評估完成後,您可以使用格式化的 JSON 輸出來檢視結果:

python
print(json.dumps(results, indent=2))

結果結構包含一個物件陣列,其中每個物件代表一次測試案例的執行。您會看到 Claude 的輸出(在沒有格式限制的情況下往往相當冗長)、原始測試案例定義,以及分數。

我們已完成的工作

到目前為止,我們已成功實作了核心評估流程。我們可以:

  • 從資料集中取出測試案例
  • 將它們與提示範本合併
  • 從 Claude 取得回應
  • 收集並整理所有結果

缺少的部分是智慧評分——目前我們只是為每個回應指定一個固定分數。下一步是建立能夠真正評估 Claude 輸出是否正確的評分器,這正是評估系統真正複雜之處所在。

這個流程結構可能看起來很簡單,但它代表了大多數 AI 評估系統所建立的基礎。複雜性在於評分邏輯和提示優化,而不在於執行測試的基本協調工作。