穩定性控制:Schema 與邊界設計

當我們開發的 Agent Skills 變得越來越複雜,且牽涉到關鍵的資料處理或外部系統整合時,單純依賴自然語言指令的穩定性可能會面臨考驗。AI 模型有時候會產生幻覺 (Hallucination),傳入錯誤格式的參數,或是忽略了某些重要的前置條件。

為了解決這些問題,我們需要導入更嚴謹的介面規範與邊界控制策略。接下來我們將以 Claude Tool Schema 與 ChatGPT Custom Actions 為例,說明如何落實這些控制。

Schema-Driven Interfaces:嚴格定義資料格式

為了確保 Agent 傳遞給技能的資料是正確無誤的,業界廣泛採用 Schema-Driven Interfaces(基於 Schema 的介面設計)模式。這意味著我們會使用 JSON Schema 或 OpenAPI 規範,精準定義每一個輸入參數的型別、必填與否,甚至是數值的範圍限制。

透過嚴格的 Schema 限制,當 Agent 試圖呼叫工具時,底層系統會先自動進行資料驗證。一旦發現資料格式不符(例如要求輸入整數卻傳入字串),系統就能立刻阻斷該次呼叫,並將明確的錯誤訊息回傳給 Agent,促使它進行自我修正。

以下是一個供 Claude 或 ChatGPT 閱讀的標準 JSON Schema 範例:

{
  "name": "create_user_account",
  "description": "在系統中建立一筆新的使用者帳號",
  "input_schema": {
    "type": "object",
    "properties": {
      "email": {
        "type": "string",
        "format": "email",
        "description": "使用者的電子郵件信箱,必須包含 @ 符號"
      },
      "age": {
        "type": "integer",
        "minimum": 18,
        "description": "使用者年齡,必須大於或等於 18 歲"
      },
      "role": {
        "type": "string",
        "enum": ["member", "guest"],
        "description": "帳號權限,只能是 member 或 guest"
      }
    },
    "required": ["email", "age", "role"]
  }
}

在這個範例中,透過 enumminimum 等屬性,我們為 Agent 劃定了絕對無法越界的明確規則,大幅降低了因為無效輸入而導致系統崩潰的風險。

防呆提示與注意事項 (Gotchas)

即使 Schema 限制了資料格式,Agent 在業務邏輯上的判斷仍可能出錯。為了應對隱藏的陷阱或特殊的系統機制,在撰寫技能說明 (Description) 時加入「防呆提示 (Gotchas)」是非常有效的做法。

這些提示可以用條列式的方式,明確告知 Agent 在執行該技能前必須知道的關鍵事實。例如資料庫的某個欄位具有特殊含義,或是某個 API 呼叫有特定的順序要求。

## 注意事項 (Gotchas)
- 系統中的 `users` 資料表採用軟刪除 (Soft Delete) 機制。在進行任何資料統計前,查詢參數必須加上 `include_deleted=false`,否則結果將會涵蓋已停用的帳號。
- 若 API 回傳 429 Too Many Requests 錯誤,請勿立刻重試。請告知使用者系統目前繁忙,並主動詢問是否要等候 1 分鐘後再試。

這類補充說明雖然不會直接轉化為程式碼驗證,但能被語言模型吸收到上下文中,有效避免它踩到實務開發上的地雷。

漸進式揭露 (Progressive Disclosure) 節省 Token

隨著技能功能的擴充,如果一次將所有的資料庫結構、API 文件都塞給 Agent,不僅會消耗大量的 Token(增加成本並降低回應速度),還可能因為上下文過長而導致 AI 注意力失焦。

因此,採用漸進式揭露 (Progressive Disclosure) 策略是提升效能的關鍵。

  • 第一步 (廣泛但簡略):設計一個 search_database 工具,Agent 呼叫後,只回傳相符資料的「標題」與「ID 列表」。
  • 第二步 (精確且詳細):設計另一個 get_detail_by_id 工具。Agent 看完列表後,決定需要哪一筆資料,再呼叫這個工具獲取完整的長篇內容。

這種「按需加載」的設計模式,確保了 Agent 在任何時刻都能保持輕量,且專注於當前的任務步驟。