vocus logo

方格子 vocus

寫一段 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數字沙龍
9會員
218內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
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
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
有人被判定要裝心臟支架,換一家醫院卻說不用; 有人被嚇到快崩潰,最後發現只是一般變化; 連我自己,也差點被建議做不必要的根管治療。 幾個真實案例,讓我養成一個醫療決策習慣:重要處置,一定找第二意見。
Thumbnail
有人被判定要裝心臟支架,換一家醫院卻說不用; 有人被嚇到快崩潰,最後發現只是一般變化; 連我自己,也差點被建議做不必要的根管治療。 幾個真實案例,讓我養成一個醫療決策習慣:重要處置,一定找第二意見。
Thumbnail
千金買房、萬金買鄰,更要買到乾淨清白的好房子!人生到了一個階段,難免要購屋自住或出租投資,但要如何知道自己購買的房子是不是「凶宅」呢?立達徵信「物業調查」服務,正是幫您查明房子的歷史、是否有抵押貸款紀錄,以及是否有其他潛在問題。讓您買得安心,不論是後續入住或出租,都能免去複雜問題。
Thumbnail
千金買房、萬金買鄰,更要買到乾淨清白的好房子!人生到了一個階段,難免要購屋自住或出租投資,但要如何知道自己購買的房子是不是「凶宅」呢?立達徵信「物業調查」服務,正是幫您查明房子的歷史、是否有抵押貸款紀錄,以及是否有其他潛在問題。讓您買得安心,不論是後續入住或出租,都能免去複雜問題。
Thumbnail
初診貓,電話上直接講說要來量血壓,O強調沒有要做其他檢查只要量血壓,預約周一下午四點。 
Thumbnail
初診貓,電話上直接講說要來量血壓,O強調沒有要做其他檢查只要量血壓,預約周一下午四點。 
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News