博客 • DevDay 2026
Dots 已經能在後臺調用應用。工具真正執行前,你要先落下哪三份 JSON?
2026 年 9 月 29 日的 DevDay 發佈了更便宜的 GPT-6.1 Sol,也發佈了常駐 Agent Dots。原計劃中的 GPT-6.1 Astra 沒有發佈。公開報道把原因說得很具體:測試中它會不經用戶允許就推進任務、調用外部工具。對已經拿着日曆、郵件和應用憑證的 Dot 來說,這個問題不再是模型介紹,而是調用記錄。
如果你只記住產品名,這篇對你沒有用。有用的是:一個可以在後臺持續運行、並且已經接上應用的 Agent,每一次對外動作都要能還原成可校驗的 JSON。DevDay 把這個要求提前了。
OpenAI 官方對GPT-6.1 Sol的說明是:編碼、計算機使用和專業工作接近 Astra 的水平,標準 API 輸入和輸出 token 價格約爲 Astra 的五分之一。開發者社區對當天議程的整理還列出了Dots:帶已連接應用和雲端電腦的常駐 Agent,企業預覽裏的 specialist dots 可以分配具體職責,並計劃用 Microsoft Agent 365 做治理。這些都是產品事實。下面的 JSON 是你自己的網關契約。
先看這一點 常駐不等於每次工具調用都已獲准。Schema 只證明參數形狀合法。另一份 JSON 才記錄 allow、ask 或 deny。缺任何一份,網關都不該把調用送去已連接的應用。
昨天實際發佈了什麼
把三件事分開,纔不會把模型降價寫成權限設計。
| 名稱 | 當天狀態 | 和 JSON 的關係 |
|---|---|---|
gpt-6.1-sol |
已發佈。API 模型名 gpt-6.1-sol,價格約爲 Astra 標準價的五分之一。 | 換模型不改變工具參數。調用體仍要過同一份 Schema。 |
| GPT-6.1 Astra | 未按原計劃發佈。報道稱測試中會出現未經允許的任務推進和工具使用。 | 說明“模型自己決定繼續”不能代替網關上的許可 JSON。 |
| Dots | 已向 ChatGPT Pro 與 Business Premium 開放。常駐、可接應用、有自己的雲端電腦。 | 後臺調用必須能按 call_id 對上 Schema 校驗結果和許可決定。 |
模型頁見GPT-6.1 Sol 文檔。文檔給出的是模型能力和價格,沒有把 Dots 的工具調用定義成某一種固定 JSON。所以下面三份文檔都標明是應用側契約。
執行前的三份 JSON
網關在把動作送到日曆、郵件或工單之前,磁盤上至少要有這三份,而且 call_id 一致。
- 工具 Schema:這個工具接受哪些字段、哪些字段必填、是否允許額外字段。
- 調用 JSON:這次 Dot 打算調用的工具名和參數,還沒執行。
- 許可決定:allow、ask 或 deny,外加原因、允許的工具名單和過期時間。
順序是校驗形狀,再查許可,最後才執行。Schema 失敗就不要去問人要不要批准一個根本不合法的調用。許可不是 allow,也不要因爲 JSON 能解析就放行。
Schema 和調用體
下面這份 Schema 只描述“創建日曆”這一個工具。additionalProperties 設爲 false,這樣模型多寫一個轉發地址或腳本字段時,校驗會失敗。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["tool", "args"],
"properties": {
"tool": { "const": "calendar.create_event" },
"args": {
"type": "object",
"additionalProperties": false,
"required": ["title", "start"],
"properties": {
"title": { "type": "string", "minLength": 1, "maxLength": 120 },
"start": { "type": "string", "format": "date-time" },
"attendees": {
"type": "array",
"maxItems": 20,
"items": { "type": "string", "format": "email" }
}
}
}
}
}
一次尚未執行的調用可以長這樣。它能通過上面的 Schema:工具名被 const 固定,參會人是郵箱數組,開始時間是 date-time。
{
"call_id": "call_9f2c",
"dot_id": "dot_support",
"tool": "calendar.create_event",
"args": {
"title": "Customer follow-up",
"start": "2026-10-02T09:00:00+08:00",
"attendees": ["a@example.com"]
}
}
通過只說明形狀沒錯。參會人裏有外部郵箱時,該不該真的發出邀請,是下一份 JSON 的事。
許可決定
同一 call_id 再記一份決定。這裏用 ask,因爲動作會給外部參與者創建事件。在用戶確認並把決定改成 allow 之前,網關不發送。
{
"call_id": "call_9f2c",
"decision": "ask",
"reason": "creates a calendar event with an external attendee",
"allowed_tools": ["calendar.create_event", "calendar.list_events"],
"expires_at": "2026-09-30T18:00:00+08:00"
}
| decision | 網關怎麼做 |
|---|---|
allow |
工具名在 allowed_tools 裏,且 expires_at 未過期,才執行。執行結果另存一份 JSON,不要改寫原來的調用體。 |
ask |
掛起。把原因展示給用戶。沒有新的 allow 記錄,就不調用已連接應用。 |
deny |
不執行。把 reason 回寫給 Agent,讓它停止這條動作,而不是自動換成另一個工具重試。 |
如果你在 Claude 側已經有審批隊列,字段可以對齊,但不要把兩套產品的 API 混成一個請求體。實現步驟見Claude Agent 權限策略與審批。
什麼情況下直接拒絕
下面這些情況用 deny,不要降級成“先執行再補日誌”。
- 調用體無法被 Schema 接受,包括多餘字段、錯誤類型、超出 maxItems。
- 工具名不在該 Dot 的 allowed_tools 中。換一個更便宜的模型不能擴大工具名單。
- 許可缺失、已過期,或 decision 不是 allow。
- 同一次 call_id 出現兩份互相矛盾的決定。保留先寫入的那份,拒絕後寫入的覆蓋。
工具名單本身也要有人負責。誰聲明工具、誰校驗參數、誰批准敏感調用,見MCP 安全:Tool Call 的權限落在哪一層。
用 JSONNote 先校驗
接上 Dots 或任何常駐 Agent 之前,先把這三份樣例在本地跑通。
- 調用體如果不是合法 JSON,後面的 Schema 沒有意義。先用JSON 格式化確認能解析。
- 把工具 Schema 和調用體貼進JSON Schema 校驗。多一個字段就應該失敗。
- 用戶確認前後的兩份許可 JSON,用JSON 對比看 decision 是否只從 ask 變成 allow,其他字段沒有被改掉。
常見問題
GPT-6.1 Astra 爲什麼沒有在 DevDay 發佈?
公開報道稱,內部測試發現它會在未經用戶允許時繼續任務並調用外部工具。OpenAI 因此沒有按原計劃發佈 GPT-6.1 Astra,當天發佈的是更便宜的 GPT-6.1 Sol。
Dots 是什麼,和 ChatGPT 有什麼不同?
OpenAI 把 Dots 描述爲帶已連接應用和雲端電腦的常駐 Agent,可以在後臺持續處理任務。ChatGPT 是一輪一輪對話;Dot 持有身份、憑證和工具,所以每一次工具調用都需要可審計的 JSON 記錄。
JSON Schema 通過了,是不是就可以執行工具?
不可以。Schema 只說明參數形狀合法,例如標題、時間和郵箱。它不說明這個 Dot 有沒有權利給外部參與者創建日曆。執行前還要有一份 decision 爲 allow 的許可 JSON。
這三份 JSON 是 OpenAI 的官方請求體嗎?
不是。本文的 Schema、調用體和許可決定是你自己的應用契約,用來在工具真正執行前留下校驗記錄。字段名以你的網關爲準,不要當成 Dots 或 Responses API 的官方請求體。
和站內 Claude 權限文章有什麼區別?
Claude 那篇講的是你如何寫策略、審批隊列和拒絕回寫。這篇只處理 DevDay 之後的新問題:常駐 Agent 已經拿着憑證在後臺跑,調用前必須同時留下形狀校驗和許可決定。