寫一段 Python 函數來檢查模型輸出的 JSON 是否符合 API 定義

更新 發佈閱讀 8 分鐘

用 Python 函數來檢查模型輸出的 JSON 是否符合 API 定義,可以直接在 5090 訓練完後,自動過濾掉那些「亂寫 API 參數」的不合格模型。

針對您的 2x RTX 5090 訓練任務,我們需要一個嚴格的驗證函數。結構化數據微調(Function Calling)最怕的就是模型「看起來在寫 JSON,但 Key 寫錯了」或是「參數型別不對」。

我們可以使用 Python 的 pydantic 庫,這是工業界定義 API 規範(Schema)的標準工具。它能自動幫您檢查模型輸出的 JSON 是否完全符合您的 CalendarDatabase 定義。


1. 安裝必要函數庫

</>Bash
pip install pydantic

2. 定義 API 規範與檢查函數 (validator.py)

這段代碼定義了兩個工具的標準格式,並提供一個 check_model_output 函數供訓練後的評測使用。

</>Python
import json
from typing import Union, List
from pydantic import BaseModel, Field, ValidationError

# --- 第一步:定義 API 的精確結構 ---

class CalendarEvent(BaseModel):
"""新增行事曆的參數定義"""
title: str = Field(..., description="會議標題")
start_time: str = Field(..., pattern=r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}", description="格式: YYYY-MM-DDTHH:MM")

class DatabaseQuery(BaseModel):
"""查詢數據庫的參數定義"""
query: str = Field(..., description="SQL 或 查詢關鍵字")
limit: int = Field(default=10, ge=1, le=100)

# 整合所有可用工具
class ToolCall(BaseModel):
tool: str
params: Union[CalendarEvent, DatabaseQuery]

# --- 第二步:編寫檢查邏輯 ---

def check_model_output(raw_output: str):
"""
檢查模型輸出的字串是否為合法的 JSON 且符合 API 定義
"""
try:
# 1. 嘗試解析 JSON 格式
# 處理模型可能在 JSON 前後加了 Markdown 標籤 (```json ... ```)
clean_text = raw_output.replace("```json", "").replace("```", "").strip()
data = json.loads(clean_text)

# 2. 驗證工具名稱與參數是否匹配
validated_call = ToolCall.model_validate(data)

# 3. 額外的邏輯檢查:確保 tool 與 params 類型一致
if validated_call.tool == "add_calendar_event" and not isinstance(validated_call.params, CalendarEvent):
return False, "工具與參數類型不匹配 (應為 CalendarEvent)"
if validated_call.tool == "query_database" and not isinstance(validated_call.params, DatabaseQuery):
return False, "工具與參數類型不匹配 (應為 DatabaseQuery)"

return True, f"✅ 合格: {validated_call.tool}"

except json.JSONDecodeError:
return False, "❌ 錯誤: 無效的 JSON 格式"
except ValidationError as e:
return False, f"❌ 錯誤: 參數缺失或型別錯誤 ({e.json()})"
except Exception as e:
return False, f"❌ 異常: {str(e)}"

# --- 測試範例 ---
# model_resp = '{"tool": "add_calendar_event", "params": {"title": "5090 訓練總結", "start_time": "2026-03-04T10:00"}}'
# success, msg = check_model_output(model_resp)
# print(msg)

3. 如何在 5090 訓練流程中使用?

在您的 Trainer 評估階段(Evaluation Loop),您可以調用這個函數:

  1. 統計「格式正確率」 (Format Accuracy):如果 100 條測試數據中,有 95 條通過 check_model_output,代表模型已經具備助理的基本素質。
  2. 早期停止 (Early Stopping):如果格式正確率已經達到 100%,即使 Loss 還在下降,也可以考慮停止訓練,防止模型過擬合(Overfitting)導致說話變得很死板。

4. 針對「行動派助理」的推論建議 (Inference)

由於使用的是兩張 5090,推論速度極快,您可以實作 「自我修正機制 (Self-Correction)」

  • 如果模型第一次輸出的 JSON 沒通過 check_model_output
  • 自動將錯誤訊息餵回給模型:「你輸出的 JSON 格式錯誤(缺少 start_time),請重新輸出」。
  • 5090 的算力足以讓這種「二次確認」在 0.5 秒內完成,這會讓您的助理在實際應用中顯得無比聰明且可靠。

最後的技術建議

在 2026 年的今天,Blackwell 架構的 5090 非常適合跑 FP8 精度 的推論。


留言
avatar-img
sirius數字沙龍
18會員
422內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/03/06
這是一個非常關鍵的進階需求。要讓模型成為能調用 Calendar API 或 數據庫 的「行動派助理」,這已經超出了單純的說話風格微調,進入了 Function Calling(函數調用) 或 Agent(智能體) 的範疇。 在兩張 RTX 5090 上,這需要特殊的數據格式與訓練策略。
Thumbnail
2026/03/06
這是一個非常關鍵的進階需求。要讓模型成為能調用 Calendar API 或 數據庫 的「行動派助理」,這已經超出了單純的說話風格微調,進入了 Function Calling(函數調用) 或 Agent(智能體) 的範疇。 在兩張 RTX 5090 上,這需要特殊的數據格式與訓練策略。
Thumbnail
2026/03/06
目前的風格微調任務,想要模型扮演某個特定的角色,如專業助理,或要讓它符合特定格式,例如只用 Markdown 回覆,將決定我們是否要加入額外的格式約束代碼。 要將模型訓練成一位「專業助理」,核心目標是提升模型的指令遵循能力(Instruction Following)、語氣穩定性以及任務執行邏輯。
Thumbnail
2026/03/06
目前的風格微調任務,想要模型扮演某個特定的角色,如專業助理,或要讓它符合特定格式,例如只用 Markdown 回覆,將決定我們是否要加入額外的格式約束代碼。 要將模型訓練成一位「專業助理」,核心目標是提升模型的指令遵循能力(Instruction Following)、語氣穩定性以及任務執行邏輯。
Thumbnail
2026/03/06
當任務從「注入知識」轉向「改變說話風格(Style Transfer)」或「指令遵循(Instruction Following)」時,微調的重點會從「修改深度權重」變為「學習對話模式」。 在兩張 RTX 5090 的架構下,針對風格微調的配置優先級與專業建議如下。
Thumbnail
2026/03/06
當任務從「注入知識」轉向「改變說話風格(Style Transfer)」或「指令遵循(Instruction Following)」時,微調的重點會從「修改深度權重」變為「學習對話模式」。 在兩張 RTX 5090 的架構下,針對風格微調的配置優先級與專業建議如下。
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
有人被判定要裝心臟支架,換一家醫院卻說不用; 有人被嚇到快崩潰,最後發現只是一般變化; 連我自己,也差點被建議做不必要的根管治療。 幾個真實案例,讓我養成一個醫療決策習慣:重要處置,一定找第二意見。
Thumbnail
有人被判定要裝心臟支架,換一家醫院卻說不用; 有人被嚇到快崩潰,最後發現只是一般變化; 連我自己,也差點被建議做不必要的根管治療。 幾個真實案例,讓我養成一個醫療決策習慣:重要處置,一定找第二意見。
Thumbnail
初診貓,電話上直接講說要來量血壓,O強調沒有要做其他檢查只要量血壓,預約周一下午四點。 
Thumbnail
初診貓,電話上直接講說要來量血壓,O強調沒有要做其他檢查只要量血壓,預約周一下午四點。 
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
千金買房、萬金買鄰,更要買到乾淨清白的好房子!人生到了一個階段,難免要購屋自住或出租投資,但要如何知道自己購買的房子是不是「凶宅」呢?立達徵信「物業調查」服務,正是幫您查明房子的歷史、是否有抵押貸款紀錄,以及是否有其他潛在問題。讓您買得安心,不論是後續入住或出租,都能免去複雜問題。
Thumbnail
千金買房、萬金買鄰,更要買到乾淨清白的好房子!人生到了一個階段,難免要購屋自住或出租投資,但要如何知道自己購買的房子是不是「凶宅」呢?立達徵信「物業調查」服務,正是幫您查明房子的歷史、是否有抵押貸款紀錄,以及是否有其他潛在問題。讓您買得安心,不論是後續入住或出租,都能免去複雜問題。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News