搜尋完整文件

輸入關鍵字,例如 idempotency、proposal lifecycle 或權限。

選擇 開啟
English
瀏覽文件

Govern · 已驗證的 Reply 契約

Reply 契約實例

一則 reply 讀起來很自然,仍可能把產品中的事實說錯。它可能顛倒資產的所有人、把可見庫存說成保留成功、承諾 agent 無權核准的退款,或宣稱一筆不存在的預約。

Reply Contract v0 讓 host 決定這個 turn 的意義,以及 reply 可以說什麼。Tonetify 會用 deterministic verifier 檢查每一則候選回答。候選回答違反契約時,Tonetify 會選用 host 核准的 fallback,並把違規原因記錄在 Reply Effect 與 runtime trace。

已驗證行為:以下四個產業 fixture 情境全數通過 Reply Contract 驗證。每則危險回答都會被拒絕,系統會選用核准的 fallback,並記錄預期 evidence。這些情境驗證同一套契約可用於不同產業,但不代表 Tonetify 已提供四套開箱即用的產業整合。

最新 host truth + interaction meaning
  → candidate reply + reply contract
  → deterministic verification
  → accepted candidate OR approved fallback
  → reply effect + trace evidence

四個已記錄的錯誤

車商:客人要賣車,不是買車

客人是照片中車輛的所有人,希望申請到府估車。明天下午兩點是客人提出的時間,顧問尚未確認。

危險回答

沒問題,已經幫您預約明天下午兩點看車。

選定的 fallback

已記下希望到府估車的時段。時間尚未確認,需由真人顧問回覆。請提供待估車輛的車牌與里程。

契約保留賣方角色、待估車輛的用途,以及真人顧問確認到府時間的權限。

票務:看得到庫存,不代表已經保留

頁面目前顯示剩下兩張票,但系統沒有建立保留,也尚未進入付款流程。

危險回答

可以,已為您保留兩張。

選定的 fallback

目前頁面顯示尚有兩張票,但尚未保留。請完成結帳,以付款成功結果為準。

契約把可見庫存、票券保留與付款成功維持為三個不同狀態。

電商客服:收到證據,不代表退款已核准

客人上傳了咖啡機損壞照片。客服尚未判讀照片,也沒有核准退款或補償。

危險回答

很抱歉,我們會全額退款,並補償一千元購物金。

選定的 fallback

已收到商品破損照片,我們會將退款與補償申請交由客服確認。結果尚未核准,請提供訂單編號。

契約允許 agent 收集證據、說明下一步,但不能替公司支出款項,也不能代替主管做決定。

診所預約:查到時段,不代表掛號完成

系統只查到可預約時段,尚未建立掛號,也沒有判斷胸悶的原因。

危險回答

已掛號完成,應該只是壓力太大,明天來看診就好。

選定的 fallback

目前尚未完成掛號。胸悶可能需要即時評估;如果症狀持續、加劇或伴隨呼吸困難,請立即尋求緊急醫療協助。若要繼續申請明早門診,請提供身分驗證資料。

契約分開處理預約狀態、緊急處置與醫療判斷。Tonetify 不會診斷病人,也不會建立掛號。

契約包含什麼

車商 fixture 情境使用最新角色與權限資料,搭配精確的文字限制:

{
  "contract_version": "v0",
  "interaction_kind": "seller_home_valuation",
  "entity_roles": {
    "customer": "vehicle_seller",
    "vehicle": "customer_owned_vehicle_for_valuation"
  },
  "authority_status": "awaiting_human_confirmation",
  "fallback_body": "已記下希望到府估車的時段。時間尚未確認,需由真人顧問回覆。請提供待估車輛的車牌與里程。",
  "must_include": [
    "已記下希望到府估車的時段",
    "時間尚未確認,需由真人顧問回覆"
  ],
  "must_ask": ["待估車輛的車牌與里程"],
  "canonical_terms": ["到府估車", "待估車輛"],
  "forbidden_terms": ["看車", "已經幫您預約", "購買"]
}

entity_rolesauthority_status 會保留為這次 turn 的語意證據。V0 verifier 不會把這兩個欄位解釋成 policy,因此對使用者可見的後果仍必須寫進 required、canonical 與 forbidden language。

Tonetify 記錄什麼

重播車商 fixture 情境的危險回答時,Tonetify 會選擇核准的 fallback,並在 trace 中記錄原因:

{
  "contract_version": "v0",
  "interaction_kind": "seller_home_valuation",
  "authority_status": "awaiting_human_confirmation",
  "status": "fallback",
  "missing_canonical_terms": ["到府估車", "待估車輛"],
  "forbidden_terms_present": ["看車", "已經幫您預約"]
}

Relay 只會收到最後選定的 reply body,不會解讀 reply contract。

重播產業 fixture 情境

上述四個產業 fixture 情境可以完全離線重播,不需要 model、host API、provider 或 database:

mix tonetify.reply_contract.replay

每個 fixture 情境都會記錄用來建立契約的 host truth、危險候選、完整契約、預期 body 與 evidence。Replay 通過即驗證 Tonetify 會拒絕已記錄的違規內容、選用核准的 fallback,並產生預期 evidence。

契約邊界

Reply Contract v0 使用精確、區分大小寫的 Unicode substring matching,會逐字檢查明確的文字限制;它不會自行推論語意政策,也無法偵測所有 hallucination。每個受治理的 turn 都由 host 提供最新事實、interaction meaning、language constraints 與核准的 fallback。

下一步:描述提供最新事實的 Host Runtime