黃金樣本(Golden Samples)

把 AI 生成輸出做成「可測試、可回補、可擴大」的品質系統

你會帶走的 3 件事

    提示:用 ←/→ 或底部按鈕換頁;點目錄可跳頁;點 ⤓ 可列印成 PDF。

    為什麼需要黃金樣本

    AI 是機率式系統;品質要靠「可重跑、可量測、可回歸」

    • 同一個 prompt,不同時間/模型/資料狀態,結果可能不同。
    • 錯誤常見不是「完全錯」,而是:缺一段、引用不對、推論過頭、口徑不一。
    • 只做「人工抽查」成本高、覆蓋低;只做「AI 查 AI」又容易同源偏誤。
    • 黃金樣本的目的:把品質問題變成可測試,讓每次改版都有回歸測試。
    一句話定義
    黃金樣本 = 代表性案例 + 專家答案/標準輸出 + 明確驗收規則(自動化能檢查)

    黃金樣本要包含哪些元素

    不是只有「題目+答案」,而是完整的可驗證規格

    • Input:使用者問題 / 任務輸入(含情境、限制、必要欄位)。
    • Context / Sources:允許使用的資料來源(RAG 文件集、版本、時間點)。
    • Expected Output:標準輸出(可為文字、表格、JSON)。
    • Acceptance Criteria:驗收規則(必備主張、必引來源、欄位格式、禁語/紅線)。
    • Metadata:風險等級、更新頻率、責任人、建立/修訂日期、關聯系統版本。
    關鍵原則
    把「對/錯」拆成可檢查的子條件,才能自動化、才能回補。

    黃金樣本要怎麼設定

    用「小而精」起步:先覆蓋高頻、高風險、最容易出錯的地方

    1. 界定任務:先挑 1–3 個最常用、最關鍵的 AI 任務(例如:知識問答、抽取、分類)。
    2. 選案例:每個任務先做 10–30 個案例,覆蓋典型情境 + 邊界情境 + 反例。
    3. 定義驗收:把「正確」拆成規則(必備欄位、必引用、禁止推測、格式要求)。
    4. 做標準答案:由 domain expert 或核可流程產生;必要時附「答案依據」。
    5. 凍結資料版本:RAG 的文件/資料要有版本號(避免今天跑過、明天因文件更新而失敗)。
    6. 加上 metadata:風險、責任人、更新頻率、最後驗證日期、關聯 prompt/模型版本。
    7. 上 CI/排程:每次改 prompt / 模型 / 資料索引都跑一次;至少每日/每週跑一次回歸。

    實務上先求「可以穩定跑」比追求「一次做很大」更重要。黃金樣本會在回補迴路中逐步成長。

    運作邏輯:把黃金樣本放進品質閘門

    目的不是「抓人」,而是讓系統愈改愈穩

    什麼時候跑?

    • 每次更新:prompt / 模型 / 檢索索引 / 切 chunk 規則
    • 固定排程:每日(高變動資料)或每週(相對穩定資料)
    • 上線前:把「最低通過門檻」當成 release gate

    通過/失敗怎麼處理?

    • Fail fast:不通過就退回(或降級為人工審核/HITL)。
    • 記錄:錯誤類型、案例 id、模型/索引版本、輸出與引用。

    怎麼判定「穩」?

    • 整體:通過率、平均分數、P95 延遲、引用合規率。
    • 分群:高風險案例、長文案例、邊界案例要獨立看。
    • 趨勢:每次改版是否造成回歸退步(regression)。
    品質系統的核心
    黃金樣本不是一次性檢查,而是版本化、可追溯、可回補的學習迴路。

    反覆查核正確性:三層查核+回補迴路

    把錯誤「可分類、可回補」,才有機會讓系統愈用愈穩

    層級 要查什麼 常見錯誤 回補方式
    檢索層(R) 資料是否相關/足夠/最新 找不到、找錯、用舊版 補 metadata、調整索引、加權規則
    脈絡層(C) 上下文是否完整、避免斷章 切太碎、缺前提 調整 chunk 規則、增加重疊與引用
    生成層(G) 每個關鍵主張能否對應來源 推論過頭、幻覺欄位 強制引用、結構化輸出、規則校驗
    回補迴路(最重要)
    把錯誤分類(缺資料 / 切錯 / 口徑不一 / 推論過頭)→ 回補到「知識資產」與「切割規格」→ 再用黃金樣本/抽查驗證。

    提醒:只用「AI 查 AI」不夠;至少要搭配黃金樣本、抽查與結構化校驗。

    錯誤要可分類,回補才有效

    黃金樣本的設計要「對準你要修的地方」

    • 缺資料:來源庫沒有、或檢索抓不到 → 補資料/metadata/索引權重。
    • 切錯:chunk 太碎/太大、缺前後文 → 調 chunk 策略(重疊、引用、章節化)。
    • 口徑不一:不同版本/不同文件矛盾 → 設定「單一權威來源」與版本策略。
    • 推論過頭:沒有證據仍下結論 → 強制引用、禁止推測、把不確定改成追問。
    設計黃金樣本時就要寫進去
    每個案例都要標註:預期會在哪一層失敗(R/C/G),以及失敗時的回補指向(資料/切割/規則)。

    最佳實務做法(產業界可直接採用)

    把黃金樣本當成「產品測試」而不是「研究」

    • 以風險分級:高風險任務(合規、財務、工程、安全)要有更高覆蓋率與更嚴格門檻。
    • 先做小集合:每個用例先 10–30 個,確保「跑得動、看得懂、修得了」。
    • 拆成可自動檢查的規則:引用、欄位、格式、禁語、信心閾值、缺資料要追問。
    • 把「引用」變成第一級 KPI:沒有來源=不算通過(適用於需要可追溯的情境)。
    • 不要只測平均:要測 P95、邊界案例、長文、噪音輸入(拼字錯、缺欄位)。
    • 雙軌驗證:黃金樣本(固定)+抽樣稽核(活的)+結構化校驗(規則)。
    • 版本控管:案例、資料、prompt、模型都要有版本;回歸失敗要能回溯。
    • 標準答案要可追溯:答案背後要能說明依據(哪份文件、哪個條款/段落)。
    • 定期汰換:每季檢視:過時案例刪除、加入新錯誤型態、更新權威來源。
    • 把回補當 KPI:每次失敗都要結案:錯誤分類→修正→回歸通過→記錄。

    範本:黃金樣本的檔案格式與資料夾結構

    建議用 Git 版本控管;YAML/JSON 讓非工程人員也能維護

    建議資料夾結構

    golden/
      README.md
      rag_qa/
        v1/
          cases/
            gs001.yaml
            gs002.yaml
          sources.lock.json
      extract_json/
        v1/
          schema.json
          cases/
            gs101.yaml
      decision_guardrails/
        v1/
          labels.json
          cases/
            gs201.yaml
    

    建議單一案例格式(YAML)

    # Golden Sample (YAML)
    id: gs001
    usecase: rag_qa
    risk: high
    owner: "ops-policy@company.com"
    created_at: "2026-01-01"
    last_verified_at: "2026-01-15"
    
    # 1) 測試輸入
    input:
      user_query: "公司的差旅報銷上限是多少?哪些費用不能報?"
      locale: "zh-Hant"
    
    # 2) 檢索/資料鎖定(避免資料更新造成漂移)
    retrieval:
      corpus: "travel_policy"
      sources_lock: "sources.lock.json"
      must_include_doc_ids: ["POL-TRAVEL-2025-10"]
    
    # 3) 期望輸出(可文字或結構化)
    expected:
      format: "markdown"
      must_have_claims:
        - claim: "上限金額"
          evidence_doc_id: "POL-TRAVEL-2025-10"
        - claim: "不可報項目"
          evidence_doc_id: "POL-TRAVEL-2025-10"
      forbidden:
        - "推測"
        - "未經核實"
      citation_required: true
    
    # 4) 自動化檢查(可擴充)
    checks:
      - type: "has_citations"
      - type: "claim_evidence_mapping"
      - type: "no_forbidden_phrases"
      - type: "max_tokens"
        value: 900
    

    重點:案例本身要能獨立讀懂(含風險、資料鎖定、驗收規則),否則很難跨人/跨班交接。

    可立即套用的 3 個黃金樣本範本

    涵蓋最常見的企業落地:問答、抽取、決策/分類

    • 範本 1:RAG 知識問答(強制引用+主張對應證據)
    • 範本 2:資料抽取→JSON(schema 驗證+欄位紅線)
    • 範本 3:分類/決策建議(標籤+理由+HITL/禁語)
    怎麼選先做哪個?
    先做「輸出能直接被下一步流程吃掉」的任務:例如抽取成 JSON、產出表格、或帶引用的政策回覆。

    範本 1:RAG 知識問答(強制引用)

    適用:內規/合規/流程/產品規格/客服條款等需要「可追溯」的回答

    • 目標:每個關鍵主張都要能對應到來源(段落/章節/文件 ID)。
    • 常見失敗點:找不到正確文件、引用對但回答少一段、或引用不足仍下結論。
    • 自動化可檢查:是否有引用、引用是否落在允許文件、必備主張是否出現。
    建議輸出規格
    固定輸出成「條列式答案 + 引用標記 + 不確定就追問」,比自由作文更穩。

    範本 1:黃金樣本案例卡(可直接複製)

    把「必備主張」與「證據」寫死,才能做回歸測試

    id: rag_qa_001
    usecase: rag_qa
    risk: high
    owner: "compliance@company.com"
    
    input:
      user_query: "請說明公司資料保留(Data Retention)年限與例外情況。"
      audience: "internal_employee"
    
    retrieval:
      corpus: "compliance_handbook"
      must_include_doc_ids: ["POL-DATA-RETENTION-2025-06"]
      must_exclude_doc_ids: ["DRAFT-*"]
    
    expected:
      format: "markdown"
      structure:
        - heading: "結論"
        - heading: "適用範圍"
        - heading: "年限(按資料類型)"
        - heading: "例外與核准流程"
        - heading: "引用來源"
      must_have_claims:
        - claim_id: "retention-years-by-type"
          description: "每一種資料類型的年限(至少 3 類)"
          evidence:
            doc_id: "POL-DATA-RETENTION-2025-06"
            evidence_must_quote: true   # 可以用引用片段或段落編號
        - claim_id: "exception-approval"
          description: "例外需要誰核准、流程是什麼"
          evidence:
            doc_id: "POL-DATA-RETENTION-2025-06"
      citation_required: true
      forbidden:
        - "推測"
        - "可能是"
        - "我不確定但"
    
    checks:
      - type: "has_citations"
      - type: "citations_in_allowed_docs"
      - type: "required_headings"
      - type: "claim_evidence_mapping"
      - type: "no_forbidden_phrases"
      - type: "max_length_chars"
        value: 2200
    
    triage_on_fail:
      - if: "no_citations"
        action: "block_release"
      - if: "missing_required_claim"
        action: "open_bug:context_or_retrieval"
      - if: "forbidden_phrase"
        action: "open_bug:generation_guardrail"
    

    最有效的一行:must_have_claims。它把主觀的「回答好不好」變成可檢查的最小集合。

    範本 1:自動化檢查清單(最小可行)

    先用規則把「大錯」擋掉,再逐步加語意評分

    必做(先擋大錯)

    • 有引用(否則視為不通過)
    • 引用落在允許文件(避免引用到草稿/舊版)
    • 必備主張都有(至少涵蓋核心條款)
    • 禁語/禁推測(沒有證據就要追問)

    這些都可以 100% 自動化,不需要語意模型。

    檢查函式(示意)

    # Example checks (pseudo)
    - has_citations(output)                         # 是否含引用標記
    - citations_in_allowed_docs(output, allowlist)  # 引用是否落在允許文件
    - required_headings(output, ["結論","年限(按資料類型)","例外與核准流程"])
    - claim_evidence_mapping(output, must_have_claims)
    - no_forbidden_phrases(output, forbidden_list)
    

    範本 2:資料抽取 → JSON(schema 驗證)

    適用:合約條款、報價單、客服信件、會議紀要、工單等「要進系統」的內容

    • 目標:輸出固定 schema;欄位缺失要回傳 null 或提出追問,而不是亂補。
    • 常見失敗點:日期格式亂、金額單位混、欄位幻覺、把推測當事實。
    • 自動化可檢查:JSON 可 parse、通過 JSON Schema、欄位範圍、必填欄位。
    關鍵原則
    讓模型做「抽取」而不是做「推論」。需要推論時,把推論結果放進獨立欄位(例如 assumptions)。

    範本 2:Schema+案例(可直接複製)

    先把 schema 定出來,抽取品質會立刻變穩

    JSON Schema(摘要版)

    {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "title": "ContractSummary",
      "type": "object",
      "required": ["counterparty", "start_date", "end_date", "payment_terms", "termination_notice_days"],
      "properties": {
        "counterparty": { "type": ["string", "null"] },
        "start_date": { "type": ["string", "null"], "pattern": "^\d{4}-\d{2}-\d{2}$" },
        "end_date": { "type": ["string", "null"], "pattern": "^\d{4}-\d{2}-\d{2}$" },
        "payment_terms": { "type": ["string", "null"] },
        "termination_notice_days": { "type": ["integer", "null"], "minimum": 0, "maximum": 365 },
        "non_compete": {
          "type": "object",
          "required": ["exists", "duration_months"],
          "properties": {
            "exists": { "type": "boolean" },
            "duration_months": { "type": ["integer", "null"], "minimum": 0, "maximum": 120 }
          }
        },
        "open_questions": { "type": "array", "items": { "type": "string" } }
      }
    }

    黃金樣本案例(YAML)

    id: extract_101
    usecase: extract_json
    risk: medium
    input:
      text: |
        甲方:宏遠科技股份有限公司(下稱甲方)
        乙方:星辰資訊有限公司(下稱乙方)
        合約期間:自 2026/02/01 起至 2027/01/31 止。
        付款:每月月底結算,次月 15 日前匯款。
        終止:任一方欲終止,須於 60 天前以書面通知。
        競業:乙方不得於合約終止後 12 個月內招攬甲方客戶。
    
    expected:
      json:
        counterparty: "星辰資訊有限公司"
        start_date: "2026-02-01"
        end_date: "2027-01-31"
        payment_terms: "每月月底結算,次月 15 日前匯款"
        termination_notice_days: 60
        non_compete:
          exists: true
          duration_months: 12
        open_questions: []
    checks:
      - type: "json_parseable"
      - type: "json_schema"
        schema_file: "schema.json"
      - type: "no_extra_fields"  # 限制只允許 schema 欄位
      - type: "no_hallucinated_dates"
    

    實務上最常見的回補:把日期/金額/單位的正規化規則寫進檢查器,而不是期待模型每次都「剛好做對」。

    範本 2:驗收規則(把「亂補」擋掉)

    抽取任務最怕「看起來很像真的」的欄位幻覺

    必做規則

    • JSON 可解析 + 通過 schema
    • 必填欄位缺失 → 必須回傳 null 或列入 open_questions
    • 不允許額外欄位(避免模型亂加)
    • 日期/金額/單位:格式與範圍檢查

    把「缺資料」變成追問,而不是亂填,通常就能把事故降到很低。

    檢查函式(示意)

    # Checks idea
    - json_parseable(output)
    - json_schema_validate(output, schema.json)
    - no_extra_fields(output, schema_fields)
    - date_format_iso8601(output.start_date, output.end_date)
    - range_check(output.termination_notice_days, 0..365)
    - if missing_required_field -> ask_clarifying_questions()
    

    範本 3:分類/決策建議(含紅線與 HITL)

    適用:客服分流、工單優先級、合規風險初篩、內部請求路由

    • 目標:輸出固定 label + 理由 + 下一步動作;遇到高風險要自動升級 Human-in-the-loop。
    • 常見失敗點:分類猜測、理由胡扯、或越權承諾(例如法律/退款/合約)。
    • 自動化可檢查:label 是否在白名單、理由是否引用輸入片段、是否觸發紅線詞。
    企業落地常見作法
    讓 AI 做「初分流/初建議」;把最後裁決留給規則引擎或人工核准。

    範本 3:案例卡(可直接複製)

    把「紅線」與「升級條件」寫進去,才能可控

    id: decision_201
    usecase: decision_guardrails
    risk: high
    
    labels_allowed: ["billing", "technical", "account", "legal", "security", "other"]
    
    input:
      customer_email: |
        我們懷疑帳號被盜用,昨天晚上出現多筆異常登入與扣款。
        請立刻停用並退回所有費用,否則我們要提告。
    
    expected:
      json:
        label: "security"
        priority: "P0"
        next_actions:
          - "要求客戶立即更改密碼並啟用 MFA"
          - "提供官方帳務爭議/退款流程連結(不得承諾一定退款)"
          - "建立資安事件工單並交由資安值班人員處理"
        must_ask:
          - "異常登入時間區間"
          - "最後一次確認正常使用的時間"
        forbidden:
          - "保證退款"
          - "法律建議"
        hitl_required: true
    checks:
      - type: "label_in_allowlist"
      - type: "contains_must_ask_questions"
      - type: "no_forbidden_promises"
      - type: "hitl_flag_on_security_or_legal"
    

    這類任務的黃金樣本,重點通常不在文字漂不漂亮,而是:不越權、會升級、會追問關鍵資訊。

    互動題:用黃金樣本訓練「修哪裡」的直覺

    把問題定位到 R/C/G,是回補效率最高的做法

    小測驗:如果 AI 回答引用了「舊版」政策文件,最應該先修哪一層?
    參考:用舊版通常是檢索層的「版本/權威來源」問題,先修 R;再視情況補 C/G。

    30 天落地節奏(建議)

    用最小可行集把「回補迴路」跑起來

    第 1 週 盤點與定義

    • 挑 1–3 個任務:RAG 問答 / 抽取 JSON / 分類分流
    • 定義驗收門檻:引用合規率、schema 通過率、禁語率、HITL 觸發率

    第 2–3 週 試辦與校正

    • 每個任務先做 10–30 個黃金樣本(含邊界案例)
    • 把檢查器接進 CI 或每日排程;失敗就產出「錯誤分類+回補工單」

    第 4 週 擴大與制度化

    • 建立版本控管:案例、資料、prompt、模型、索引
    • 每週例行:抽樣稽核 + 新增/汰換案例 + 回補結案

    當黃金樣本成為 release gate,AI 才會從「個人效率」進化成「可交接的組織流程」。

    結語:你要的是「可驗證的 AI」,不是「看起來很像」

    • 黃金樣本讓你把 AI 的品質從「感覺」變成「數字」。
    • 三層查核(R/C/G)+回補迴路,讓錯誤可修、可追溯、可防再犯。
    • 最有效的起手式:先做 10–30 個黃金樣本,接進 CI,每次改版都跑。
    下一步
    挑一個你最常用的 AI 任務,套用本簡報的三個範本之一,做出第一批黃金樣本。