時間起點:本週先確認訊號範圍
OpenAI 官方文件列出 兩類值得分開處理的來源訊號:圖片中的 C2PA Content Credentials,以及圖片或音訊中的 SynthID。這代表 OpenAI 內容來源驗證 API 適合核驗受支援的 OpenAI 來源訊號,不是通用 AI 生成內容偵測器;本週先對照官方支援範圍,再決定是否接入上傳審核流程。OpenAI 來源訊號說明與API 指南都提醒:沒有檢出訊號,不等於內容不是 AI 生成。
適合負責內容審核或事實核查產品的開發者,參考 API 接入與結果處理流程。
需要辨識圖片來源的技術負責人,可用本文規劃審核節點與分流狀態。
維護媒體上傳服務的工程師,可據此檢查檔案格式、訊號覆蓋與異常處理。
先做適用性判斷
將「來源訊號核驗」和「判斷內容真假」拆成兩項產品能力。C2PA Content Credentials 是隨內容攜帶的來源資訊;C2PA 規範亦說明,處理及轉換可能影響憑證能否與內容一同保留。C2PA Content Credentials 規範 SynthID 則是另一種水印訊號。兩者不是同一種機制,也不能涵蓋所有生成工具或所有媒體檔案。
| 訊號類型 | 適合核驗的內容 | 對審核決策的意義 | 不代表什麼 |
|---|---|---|---|
| C2PA Content Credentials | 文件目前支援、且保留相關憑證的圖片 | 可檢查受支援的來源資訊 | 不保證圖片真實、未修改或敘事正確 |
| SynthID | 文件目前支援的圖片與音訊來源訊號 | 可補充來源核驗線索 | 不等於所有 AI 工具都能被辨識 |
支援情況會受產品、模型、檔案類型及處理路徑影響。不要只在上線時讀一次文件;每當你更換圖片轉檔、壓縮或音訊處理流程,都應重新確認相應輸入是否仍在官方支援範圍內。
接入前的流程盤點
先畫出檔案從使用者上傳到公開發布的路徑,再決定核驗位置。若上傳後立即壓縮、裁切或轉碼,來源資訊可能在核驗前就被改動。若等到發布後才檢查,則需要另外設計撤回或補審機制。對多階段處理的服務,可在保留原始上傳檔案的前提下核驗,並於媒體轉換後按業務需要再次確認。
| 核驗位置 | 優點 | 需要留意 | 適用情況 |
|---|---|---|---|
| 上傳後、轉檔前 | 有機會在檔案加工前檢查來源訊號 | 需要處理等待時間與失敗重試 | 來源核驗會影響後續審核的服務 |
| 內容審核階段 | 可和人工覆核、政策檢查一併分流 | 必須保留未知或失敗狀態 | 需要統一管理多種審核結果的產品 |
| 發布後抽查 | 不阻塞即時發布 | 發現問題時仍須處理已公開內容 | 僅作補充監測,不能取代發布前審核 |
在呼叫前,記下產品實際會接收的圖片或音訊格式、最大檔案限制的官方現行說明、是否保留原始檔,以及要留存哪些審核紀錄。不要自行假設所有格式都可送驗;應逐項對照API 指南中的請求方式與支援說明,並查看建立核驗請求的介面參考。官方範例、欄位名稱與 SDK 要求可能更新,實作時以當下文件為準。
權限也要先納入設計:API 憑證留在伺服器端,不放進瀏覽器程式碼或公開的行動端程式;記錄請求識別資訊與必要狀態即可,避免把完整媒體檔案、憑證或不必要的個人資料複製到一般應用程式日誌。若團隊正在整理服務帳戶與平台使用問題,可參閱VPSSpark 幫助中心。
呼叫 API 並保存原始回應
Python SDK 的核驗請求可依官方方法文件建立。以下範例示意提交本機檔案並保存結構化回應;實際參數名稱、相依套件版本及可用欄位,請以建立核驗請求的官方參考為準:
from pathlib import Path
from openai import OpenAI
client = OpenAI()
with Path("upload.png").open("rb") as media:
response = client.content_provenance.checks.create(file=media)
result = response.model_dump()
print(result)
不要把這段示例中的檔名或檔案類型當成完整支援清單。上線前,用官方文件列明的請求格式測試你的實際檔案,再檢查 SDK 解析後的結構化回應。若你的 SDK 版本尚未提供對應方法,先核對 SDK 文件與 API 介面參考,不要自行把回應欄位名稱寫死。
建議保留原始回應的伺服器端副本,另外轉換成自家穩定的審核狀態。這樣當 API 新增欄位或訊號種類時,你可以更新映射邏輯,不必讓前端直接依賴外部回應結構。請同時確認官方錯誤碼說明與速率限制指南,再設置重試策略與佇列容量。
解析結果而不是判定真假
回應先按原始訊號類型、檢測結果與驗證狀態解析。你可以將業務狀態設計為「發現受支援訊號」、「未發現受支援訊號」及「待處理/人工複核」。第三種狀態涵蓋請求失敗、逾時、未知回應或無法依現行欄位安全映射的情況。不要將不同原因壓成一個布林值,再顯示成「AI/非 AI」。
分流時採用下列條件:
- 若回應顯示檢出受支援訊號,將它記為來源線索,交由產品流程確認來源聲明;不要宣稱內容真實、完整或沒有編輯。
- 若回應為 not_detected,只記錄「未發現受支援訊號」,保留其他審核判斷;不得據此宣告非 AI 生成。
- 若逾時、上傳失敗或欄位無法辨識,標記為待處理或送人工複核;不要把錯誤狀態當成通過。
- 若業務要求判斷事實真偽或發布風險,另接內容政策與人工查核流程,不能用來源核驗結果替代。
注意:not_detected 的範圍有限。官方說明指出,元資料可能被移除、水印可能退化,內容也可能出自舊模型或其他 AI 來源;所以未檢出不是排除 AI 生成的證據。
把結構化回應轉成業務狀態時,建議保留訊號類型、API 回應中的核驗狀態、請求時間、內部媒體識別碼及人工處理結果。只記錄支援稽核與故障排查所需的資料,設定存取權限與保留期限;若媒體涉及個人或敏感內容,更不要把原始檔案不必要地寫入一般應用程式日誌。
上線驗收與決策評分
用一組涵蓋正常、未檢出及異常狀態的測試媒體走完整條呼叫鏈,驗收項目包括:請求是否在正確的審核節點發出、原始回應是否可追查、狀態映射是否保留未知情況、逾時與上傳失敗是否進入待處理流程,以及人工覆核結果能否回寫。這是工程驗收,不是對 API 偵測率或延遲的性能承諾。
| 維度 | 評分 | 通過條件 |
|---|---|---|
| 範圍理解 | 高/中/低 | 團隊能區分受支援的 OpenAI 訊號與其他來源 |
| 失敗處理 | 高/中/低 | 逾時、失敗、未知結果不會被映射為非 AI 或直接放行 |
| 稽核紀錄 | 高/中/低 | 可按媒體識別碼追溯請求狀態與人工處理結果 |
若「範圍理解」或「失敗處理」評為低,先不要自動化發布決策;保留人工覆核,並回頭確認目前的支援類型、欄位說明與 SDK 要求。官方 API 文件或介面欄位有變動時,也應重新跑過這條驗收鏈。
常見接入問題
OpenAI 內容來源驗證 API 可以核驗其他工具生成的圖片嗎?
它不是通用 AI 偵測器。只有文件所述、目前受支援的 OpenAI 來源訊號屬於核驗範圍;其他工具生成的內容若沒有受支援訊號,可能不會檢出。產品與檔案處理路徑變動時,重新查看官方指南。
not_detected 是否代表圖片不是 AI 生成?
不代表。它只表示此次核驗未找到受支援訊號。元資料可能已被移除,水印可能退化,也可能是舊模型或其他 AI 來源;應維持未確認狀態,再依產品風險安排人工複核。
怎樣將核驗結果接入審核流程?
在上傳後、發布前選擇合適節點,保存原始結構化回應,並映射成訊號檢出、未檢出及待處理等內部狀態。對逾時、錯誤與未知回應另設路徑,不要把它們當作未檢出。
API 呼叫範例中的參數與支援格式是否固定?
不要假設固定。官方介面文件會說明現行請求方法、檔案支援範圍與 SDK 使用方式;你應在每次調整上傳或轉檔流程時重新核對。程式碼範例用來理解呼叫模式,不是支援格式的完整清單。
若你目前以自建規則或單一布林值做判斷,常見問題是無法區分來源線索與事實判定、轉檔後訊號可能消失、失敗狀態也容易被誤當成通過。接入 OpenAI 內容來源驗證 API,可以補上受支援來源訊號的核驗環節,但仍需保留獨立的人工審查與內容政策。若測試鏈路還需要持續運行的開發環境,可按負載與設備需求比較本機、一般雲端服務及租用 Mac;需要臨時 Mac 算力時,可將 VPSSpark 納入評估,帳戶與租用相關資訊可從VPSSpark 幫助中心查閱。
為 API 整合與測試,準備一台專屬雲端 Mac
透過 VPSSpark 租用 Mac mini M4,為上傳流程、審核邏輯與自動化測試準備獨立的 macOS 環境。
可選 16GB 或 24GB 記憶體配置,並按需求選擇計費週期與資料中心。