新舊版流程與 Schema 差異

115 資工專題 · 2026/10/06 Meeting

回答上週留下的核心問題:

自然語言進來後,系統到底憑什麼選到正確規則?

Campus Agent · 2026-10-06

這次先釐清三件事

CORE QUESTION
自然語言進來後,系統到底憑什麼選到正確規則?
後面會先從舊版流程開始,再說明新版為什麼要拆出新的結構。
01
規則怎麼被選中?
從使用者一句話到 exact rule,中間經過哪些步驟?
02
LLM 到底負責哪裡?
哪些是模型理解,哪些是 static / deterministic 程式?
03
相似問題怎麼不配錯?
文字接近但法律語意不同時,不能只靠「最像」。
這頁先當導覽;後面會先從舊版流程開始,再說明新版為什麼要拆出新的結構。
Campus Agent · 2026-10-06

新舊版共享同一個判定流程

法規與使用者輸入會分別整理成結構化資料,最後匯入同一套規則判定程式。
法規端|預先建立
法規原文來源、版本、條次
→
逐欄詢問固定問題 + 原文 evidence
→
規則 Schemasubject / condition / effect / citation
使用者端|每次詢問
User input自然語言描述與問題
→
理解/抽取依 Fact Schema 填入案件資訊
→
案件 Factsdegree / amount / time / role …
規則判定程式規則 Schema + 案件 Facts

逐條執行 condition:AND / OR、欄位比較、版本與 scope
→
判定結果條件成立
條件不成立
資訊不足
新舊版共同的底層:LLM 負責把兩側資料整理成結構化輸入,最後的規則條件由程式執行。
Campus Agent · 2026-10-06

Rule Schema 與 Facts 怎麼接起來?

規則端定義「要檢查什麼」;案件端提供「這次的值」。兩邊使用同一套欄位名稱。

Rule Schema|規則端

{
  "subject": {
    "role": ["博士班研究生"]
  },
  "condition": {
    "AND": [
      {
        "field": "object.degree_level",
        "operator": "eq",
        "value": "博士班"
      },
      {
        "field": "object.per_person_fee",
        "operator": "lte",
        "value": 2000
      }
    ]
  }
}

Facts|案件端

{
  "object.degree_level": "博士班",
  "object.oral_exam_committee_count": 6,
  "object.per_person_fee": 2000
}
未提供的欄位維持 null/UNKNOWN。
關鍵是同一個 field。 Rule 裡的 object.per_person_fee,會直接讀取 Facts 裡 object.per_person_fee = 2000 再執行比較。
Campus Agent · 2026-10-06

舊版流程:兩次 LLM semantic decision

使用者原文自然語言問題
→
選 topic從 closed topic list 選最符合的主題
→
決定所需欄位required_facts_for_topic()
→
抽取 facts只填 fact schema 允許的欄位
→
Rule engine逐條 deterministic 執行

舊版主要資料結構

topic + facts

關鍵風險

如果 topic / fact semantic mapping 先錯了,後面只是很精確地執行錯的規則。

Campus Agent · 2026-10-06

新版:LLM 只提名證據,語意要逐層取得 authority

模型可以指出「哪段原文值得看」,但不能直接決定「因此應該套哪條規則」。
「這是國科會計畫,博士論文口試費的金額標準是多少?」
① Evidence nomination只提名 exact span + offset
博士論文口試費金額標準

不輸出 topic、scope 或 verdict。
→
② Semantic grammarreviewed grammar 才把文字轉成 typed meaning:

口試費 → 論文口試
金額標準 → 金額問題
→
③ Ownership / provenance還要證明 observation:

• 來自這段原文
• 屬於目前 case
• 屬於目前 request

他案/引述不能直接借用。
→
④ Static applicability每個精確 scope 跑固定 predicate:

MATCH
NO_MATCH
UNKNOWN
真正的大改:LLM 可以說「這裡可能有證據」,但不能直接說「所以套這條規則」。
Campus Agent · 2026-10-06

Finite grammar 從哪裡來?它又犧牲了什麼?

這些 mapping 不是 LLM 臨時發明,而是人工 review、版本化的有限語意文法。

同一句自然語言,怎麼變成 typed meaning?

「博士論文口試費的金額標準是多少?」
博士
→
degree_level = 博士班
論文口試費
→
target = THESIS_ORAL_DEFENSE
金額標準
→
question = AMOUNT_STANDARD
grammar 不只列詞形,也定義角色、允許組合、順序與 guard;只有通過 reviewed pattern 的 mapping 才能取得 authority。

得到什麼?

可驗證性 ↑
可重播、可測試、可版本化
錯配較難無證據取得 authority

代價是什麼?

任意自然語言 coverage ↓
finite grammar 不可能窮舉所有 paraphrase;未支援的說法先停在 UNKNOWN。

下一個研究問題:能不能保留 LLM 的 semantic proposal/泛化能力,但不讓 proposal 本身直接取得 authority?
Campus Agent · 2026-10-06

問題不在「大類」,而在精確法律問題

三句都屬於「論文口試費」大類;真正困難的是:使用者此刻到底在問哪一個 exact legal issue?

只是多提到「國科會」|問題其實沒有變

「博士論文口試費的金額標準是多少?」
「這是國科會計畫,博士論文口試費的金額標準是多少?」
兩句都指向 → 博士口試費・金額標準

真的在問 funding|exact scope 才改變

「國科會計畫經費能不能支付博士論文口試費?」
指向 → 國科會經費支付資格
36 / 36
大類 family
全部判對
→
31 / 36
exact scope
精確判對
→
5 / 5
應保持 scope 未決
模型卻全部多推一步
核心錯誤:「文字裡有提到」≠「使用者正在問」;family match 也不等於 exact legal applicability。
Campus Agent · 2026-10-06

第一個修法:把 scope 判斷拆成 requirements

第一個假設:也許不是 LLM 不能判斷,而是「一次選 exact scope」太難。

我們先把任務拆細

① LLM 不直接選 exact scope
② 逐條判斷 requirement博士 / 口試 / 金額 / 人數 / funding
③ Server 再組 scoperequirements 全成立才建立

但原本的問題沒有消失

31 / 36 → 26 / 36
exact scope accuracy 反而下降
5 / 5
該停下來的案例,仍全部多推一步
問題不是 prompt 不夠細:requirement 的 semantic yes / no 仍由 LLM 拍板。
Campus Agent · 2026-10-06

實驗後真正改的:把 semantic authority 往後移

真正要改的不是「怎麼問 LLM」,而是「LLM 的判斷能不能直接取得 authority」。

第一次修法

LLM 判斷:
「這個 requirement 成立嗎?」
Server 只負責組 scope;
semantic yes / no 仍由模型決定。
semantic authority 仍在 LLM

現在的做法

LLM 只說:
「這些原文片段可能有用。」
typed meaning / ownership / applicability
→ reviewed / static proof
proposal 本身沒有 legal authority
LLM 沒被拿掉:只是從 semantic decider 變成 evidence proposer。
Campus Agent · 2026-10-06

Schema 為什麼要拆?

舊版topic + facts兩次 LLM 理解後,直接形成後段 rule engine 的結構化輸入
↓ 新版把前段原本容易混在一起的三種 semantic responsibility 分開

request_intent

使用者現在在問什麼?
target = THESIS_ORAL_DEFENSE
question = AMOUNT_STANDARD
有提到 2000 元 ≠ 正在問金額標準

scenario_facts

這個案件本身是什麼?
degree_level = 博士班
per_person_fee = 2000
案件裡的事實,不直接決定 query intent

ownership proof

這個值真的屬於誰?
value_proven
case_owner_proven
request_owner_proven
原文裡出現 ≠ 屬於目前 case / request
同一句話裡,「提到什麼」、「案件是什麼」、「正在問什麼」不能再視為同一個 semantic decision。
Campus Agent · 2026-10-06

同一句話,新版怎麼避免配錯相似規則?

「這是國科會計畫,博士論文口試費的金額標準是多少?」
target:論文口試 degree:博士班 question:金額標準

博士口試費|金額/人數標準

需要:論文口試 + 博士班
+ 金額或人數問題
✓ MATCH

國科會經費|支付資格

需要:論文口試
+「國科會經費能否支付?」
— NO_MATCH
不是選「最像哪條」;而是 每個 exact scope 各自證明必要條件
只出現「國科會」不會自動取得 funding authority。
Campus Agent · 2026-10-06

最後:新版目前能保證什麼?

現在可以保證的邊界

✓LLM 提議 不能直接變成具權威性的事實或適用範圍
✓「最相似」不能直接取得精確法律適用權威
✓證明不足就維持 UNKNOWN,不猜最接近的規則
✓值、案件與請求的歸屬分開證明

現在還不能保證

—任意自然語言都已完整覆蓋
—LLM 不會漏掉應提名的原文證據
—新版端到端正確率已證明高於舊版
—185 條規則都已完成「法規原文 → 結構化規則」的語意等價證明
舊版:選定規則後才是確定性判定
新版:連「為什麼能選這條規則」也要有可審核、可重播的證據鏈
Campus Agent · 2026-10-06

下一個研究問題:可驗證性與語意泛化怎麼兼得?

LLM 擁有語意判定權

自然語言泛化能力較強
但 ↓
相似語意可能被模型多推一步,
難以限制 semantic overreach。

Reviewed finite grammar

可審核、可重播、可 fail closed
但 ↓
自然語言 coverage 有限;
一直補 pattern 可能變成語句窮舉。
想討論的下一步
能不能保留 LLM 的 semantic proposal/泛化能力,
但 proposal 必須經過獨立驗證,才能取得 authority?
新的 failure 不應直接變成新的 pattern;先問它能否抽象成可泛化、可審核的 semantic mechanism。
Campus Agent · 2026-10-06

下一步:先讓真實使用告訴我們哪裡會失敗

01

下週 Demo

先驗證現有 development prototype
是否已足以自然使用

→
02

小規模測試

內部 → 受控外部
收集真實問法與 failure

→
03

決定研究方向

從 failure taxonomy 判斷
下一個 bounded checkpoint

不是「錯一題就補一條 grammar」;先取得真實 failure distribution,再決定什麼值得固化。
Campus Agent · 2026-10-06

開場: 上週我後來覺得我沒有把新版跟舊版真正差在哪裡講清楚。 這次我想先把整條流程攤開,特別回答三件事: 1. 哪些地方是 LLM? 2. 哪些地方是 static / deterministic? 3. 如果兩個問題很像,系統怎麼不套錯規則?

這頁不要先講版本名或 H2X/H2Y。 這一頁只負責導覽:今天會回答哪三個問題。 真正的結論留到後面比較完舊版流程、失敗案例和新版流程再講。

把這頁當成一條完整 pipeline 看: 上半部是法規端,通常在規則庫建立時預先處理; 下半部是 runtime 的使用者案件。 兩條線不是兩套系統,而是規則判定所需要的兩個輸入。 下一頁開始固定左邊規則端,只放大 user input → facts 這一段,比較舊版和新版的差異。

用精簡 JSON 回答老師「Schema 實際長什麼樣子」。 不是完整 schema dump;Rule 只留下 subject + condition,Facts 留下三個直觀欄位。 實際 Rule Schema 還有 source / effective / effect / citation / evidence_span 等欄位,口頭補充即可。 下一頁再進入舊版:這些 runtime facts 到底怎麼從 user input 建立?

舊版核心 runtime 可以很簡單地說成兩次 LLM: 1. 選 topic。 2. 把使用者原文抽成這個 topic 所需 facts。 接下來才是 deterministic rule engine。

這頁先只回答 runtime authority path,不在這裡解釋 grammar coverage。 講法: LLM 還是有用,負責從自然語言找出可能重要的 exact span。 但 evidence nomination 本身沒有 semantic authority。 後面還要經過 reviewed semantic grammar、case/request ownership proof, 最後才由 static applicability 決定精確 scope 是 MATCH / NO_MATCH / UNKNOWN。 V1 的 topic / facts 一旦由模型產生,就已經能影響後面的 deterministic rule engine; V2 把這個 authority 拆開,模型只保留 proposal/evidence nomination 的角色。

老師如果問「關鍵詞怎麼來」: 目前是 reviewed finite semantic grammar,不是 runtime 由 LLM 自己定義。 例如 BC08 登錄口試相關 target、amount/headcount question forms, 並且有限制排列、連接與 guard。 這裡要主動承認 trade-off: 目前設計提高可驗證性,但 coverage 是 partial。 不能宣稱 arbitrary natural language 已經解決,也不能宣稱 V2 end-to-end 一定比 V1 準。 未支援 mapping 保持 UNKNOWN。 後續值得研究的方向是: LLM 可以重新負責 semantic proposal 或離線 paraphrase discovery, 但 online proposal 必須再被 deterministic validation 或 clarification 確認後才取得 authority。

這頁用來回答:為什麼要把 semantic authority 從 LLM 拆出來? 先看上面: 第一句問博士口試費金額。 第二句雖然多了「國科會計畫」,真正的 question 還是金額標準; 不能因為文字出現國科會,就自動增加 funding scope。 第三句才真的在問「國科會經費能不能支付」,因此 exact legal issue 才換成 funding eligibility。 Batch03 fresh 36 cases: family exact 36/36; exact scope 31/36。 5 個原本應維持 family-only / exact scope 未決的案例,模型 5/5 全部 over-nominate 相近 scope。 重點不是說 LLM 不會分類。相反地,大類判斷非常好。 危險在於它會在資訊不足時多走最後一步 semantic inference: 「看起來很像」被轉成「法律上就是這個 scope」。

講法: 上一頁發現 LLM 在 scope 未決時會多推一步。 第一個合理修法不是拿掉 LLM,而是把任務拆細: LLM 不直接選 scope,只逐條回答 requirement 是否成立,再由 server deterministic 組 scope。 但 replay 後 31/36 -> 26/36,而且原本最想修的 5 個 overreach case 5/5 全部仍存在。 所以 failure mode 沒被修掉。 關鍵:即使 scope ID 最後由程式組出來, 「這句話是否滿足 funding / amount / headcount requirement」仍是 semantic judgment, 而這個 yes/no 還是 LLM 在拍板。

這頁不要再重講完整新版 pipeline;前面已經講過。 只講 H2V3 實驗帶來的 architecture conclusion: 如果 requirement 的 semantic yes/no 還是 LLM 拍板, 即使後面 projector 是 deterministic,authority 問題仍然存在。 所以真正改的是 authority boundary: LLM 保留自然語言的 proposal / evidence nomination 能力; typed semantics、ownership、exact applicability 必須另外取得 reviewed/static proof。 接下一頁: 既然「使用者在問什麼」「案件事實是什麼」「這個值屬於誰」不能再混在同一個模型理解結果, Schema 本身也必須拆開。

這頁接前一頁 authority boundary。 舊版 topic + facts 並不是沒有 schema,而是一次模型理解會同時承擔多個 semantic responsibility。 新版把它們拆成: 1. request_intent:使用者此刻在問什麼。 2. scenario_facts:案件本身有哪些事實。 3. ownership proof:某個值是否真的屬於目前 case / request。 例子: 「這筆口試費每人 2000 元,我只想問委員人數標準。」 2000 是 scenario fact,但 request_intent 是 headcount,不是 amount。 另外: 「另一組博士口試費每人 2000 元,我這組委員人數標準是多少?」 2000 雖然存在於原文,但不能借給目前案件。 因此 schema 拆分不是為了資料結構漂亮,而是把 authority boundary 寫進資料模型。

這頁回答老師上週最核心的問題之一: 如果兩條規則字面很像,怎麼避免配錯? 系統不是把兩條規則拿去算 similarity,然後選最像的一條。 前面已經把使用者問題拆成 typed observations: target = 論文口試 degree = 博士班 question = 金額標準 接著每個 reviewed exact scope 各自跑自己的必要條件。 博士金額/人數 scope 的條件成立,所以 MATCH。 funding scope 不只需要看到「國科會」,還需要證明使用者真的在問「國科會經費能否支付」。 這個 observation 不存在,所以 NO_MATCH。 如果必要資訊不足則是 UNKNOWN,不挑最近的一條。

收尾不要把目前研究講成已經 qualification complete。 目前 accepted 的是 architecture boundary: LLM 不擁有 legal semantics / scope / claim / rule / verdict / ownership。 缺少 positive proof 時 fail closed / UNKNOWN。 ownership 分開證明。 但 finite semantic grammar 仍 partial,Level 1/2 尚未 closed,Level 3/V3 no-go, 所有 executable families 目前也沒有 activation qualification。 所以不能說任意自然語言已覆蓋,也不能說新版 end-to-end accuracy 已經證明優於舊版。 185 structured rules 也不等於 185 條都完成 source-to-rule semantic equivalence proof。

這頁是 discussion,不是宣稱已有解法。 目前 finite semantic grammar 的研究結論仍是 partial。 如果看到一個新句型就補一個 pattern,會逐漸走向 corpus tuning / overfitting, 因此不能把「繼續補 grammar」當成完整研究路線。 可以固化的是可泛化的機制,例如: - reviewed numeric normalization - request focus / negation 等一般 relation - case / request ownership relation 真正想討論的下一步: 是否讓 LLM 保留 semantic proposal 的泛化能力, 但 proposal 本身沒有 authority,必須有另一個獨立 validation boundary 才能接受。 meeting 後另一個決策問題: 先做 coverage research,還是先用 development preview 做 exploratory / unseen testing, 收集 failure taxonomy 後再決定 bounded checkpoint。

這頁只講執行順序,不再新增 architecture。 如果老師接受前一頁的研究問題: 1. 下週先 demo 現有 development prototype。 2. 若基本效果可用,開始小規模 internal exploratory testing,再逐步做受控外部測試。 3. 使用者不要被教成 schema-friendly 問法;要保留自然表達。 4. 收集 trace 與 failure taxonomy,不把 pilot 當即時 training loop。 5. 工程 bug 可以修;semantic failure 先累積,判斷能否抽象成一般機制。 6. 再用真實 failure distribution 決定 finite grammar coverage research 或 semantic proposal + validation checkpoint。 這仍是 research prototype / exploratory pilot,不宣稱正式報支權威或 qualification。