基础术语补充 · 已掌握 Thread / Turn

JSON-RPC:
你点发送后,两个程序怎样对话?

它是一套让程序用固定格式“提出请求、返回结果”的通信约定。可以把它看作程序之间通用的办事单格式。[规范]

JSON:信息怎么写

把信息写成“名字:值”,再用大括号、方括号组织起来。它是数据格式,不是让程序执行动作的编程语言。

{ "姓名": "小王", "年龄": 28 }

JSON 官方介绍

RPC:请另一端办什么事

Remote Procedure Call,通常译为“远程过程调用”。直白说,就是这个程序请另一个程序执行一个操作。

“远程”不一定是另一台电脑。两个程序也可以在你的同一台电脑上。

JSON-RPC 对传输方式的说明

回到你最熟悉的操作:在旧 Thread 里发送新问题

你已经知道这会开始一个新 Turn。接下来看看界面和后台如何用消息协调这件事。这里的后台是 Codex 的 App Server——接收界面操作请求的程序部分。[Codex 生命周期]

界面 → App Server
{
  "id": 42,
  "method": "turn/start",
  "params": {
    "threadId": "thread_abc",
    "input": [{ "type": "text", "text": "帮我检查这段代码" }]
  }
}

人话:这是第 42 号请求。请在 thread_abc 这段对话里,用这条输入开始一轮工作。

本页只是演示,不发送任何真实请求。假设已有可用 Thread 且连接已初始化;ID 为虚构值,响应和结束通知只展示重点字段。

这张办事单,先认四个位置

位置人话
method要对方执行的操作名。turn/start 是 Codex 定义的操作,不是 JSON-RPC 自带的操作。
params做这件事需要的资料:在哪个 Thread、处理什么输入。
id这次请求的编号;响应用同一个编号对应回来。它和 threadId 不是同一个东西。
result / error响应里的成功结果或错误信息。

请求字段 · 响应字段 · Codex 的操作名

最关键的区别:turn/start 的直接响应说明这轮已创建,不代表工作已完成。运行过程中的文字、工具进度和结束状态,通过后续 Notification 继续传回来。

Notification 就是“单向告诉你一件事”,没有顶层请求 id,接收方不为它发送 JSON-RPC 响应。不过它的内容仍可以带 threadIdturnId,说明是哪段对话、哪一轮的变化。[通知规则]

为什么这里没有标准里的 "jsonrpc": "2.0"?

标准 JSON-RPC 2.0 消息要求携带这个版本字段。本地学习的 Codex App Server 版本采用了一个明确约定:在线路消息中省略它。因此这里展示 Codex 格式,不把它冒充成未经改动的标准格式。

标准字段要求 · Codex 的省略约定

它就是 HTTP、或者模型 API 吗?

不是。JSON-RPC 约定消息怎么组织;消息可以经不同通道传递。这里讲的是 Codex 界面与 App Server 的交互,不是 Codex 向模型请求答案时的全部接口。也不是让你在聊天框手写 JSON:通常由界面程序负责组织。

不绑定传输通道 · Codex 支持的通道

立即试一下

第 42 号请求的响应,顶层 id 应该是什么?

收到 turn/start 的成功响应,就说明代码已经检查完了吗?

已答对 0 / 2。理解后,再用自己的话告诉我 JSON-RPC 在这里负责什么。