博客 • 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 已经拿着凭证在后台跑,调用前必须同时留下形状校验和许可决定。