今天我們要進行資料飛輪與持續微調 (Continuous DPO)。
借鑒了商業管理中的「飛輪效應」,在 AI 領域,它指的是一個自我強化的數據循環系統
將這個微調過程從「單次、靜態的出廠設定」轉變為「動態、線上的持續疊代」
系統不會等到收集了幾百萬筆資料才進行一次大改版更新,而是在模型上線運作的同時,持續接收新的偏好數據,並以小批次、高頻率的方式對模型進行 DPO 訓練。
{"prompt": "你剛剛問的問題...", "chosen": [{"action": "正確的工具", ...}], "rejected": [{"action": "錯誤的工具", ...}]}
這就是標準的 Preference Dataset(偏好資料集),明確告訴模型:「以後遇到這個 prompt,請選擇 chosen 的做法,千萬不要再做 rejected 的行為了。」
既然有了新偏好資料,我們就要讓模型「記取教訓」。
1. 資料載入:寫一段簡單的 Python 腳本,把 dpo_dataset.jsonl 轉換成 Hugging Face 的 Dataset 格式。
2. 載入當前模型:載入你目前正在使用的 DPO Agent 模型權重。
3. 微量更新 (Few-shot Continuous Training):因為我們只是要修正幾個特定的邏輯錯誤,不需要跑幾千步。設定很小的 Learning Rate,大概跑個 50 到 100 steps 即可,這樣訓練時間很短,幾分鐘就能看完結果。
但我實作後,遇到資料飛輪沒有發揮預期效應的問題。
我認為有可能是:
為了追求「線上動態更新」的高效性,我們在設計資料飛輪時,通常會設定極小的 Learning Rate,並只跑短短的 50 到 100 steps。
這種「微量更新 (Few-shot Continuous Training)」對於修正語氣或簡單邏輯很有效,但如果遇到模型根深蒂固的先驗知識,就很難調整。在沒有足夠的 step 數和梯度下降累積下,模型的權重根本還來不及發生質變,飛輪的成效自然不明顯。
DPO 的核心在於 chosen 與 rejected 的對比。如果我們收集維護人員的修正時,rejected 的軌跡寫得不夠具體,模型在計算 Loss 時就抓不到重點。
要讓飛輪發揮作用,Preference Data 必須精準描述。
本次實驗不如預期的經驗反而給了我最寶貴的實戰教訓:資料飛輪不是萬靈丹。
一個成功的 Agentic 系統,需要「高質量的偏好資料」、「合適的微調超參數」以及「強健的工具防呆機制」三者緊密咬合。