本地协议 · 06
stdout 上的两种 KataGo 语言:GTP 与 JSONL
同样通过标准输入输出通信,GTP v2 与 Analysis Engine JSONL 的状态、消息边界和适用客户端完全不同。
GTP 是有棋盘状态的命令与应答
GUI 逐行发送 boardsize、komi、play、kata-analyze 等命令;引擎维护当前棋盘。成功响应以 = 开头,失败以 ? 开头,并由空行结束。它适合 Sabaki、q5Go、Lizzie 这类传统围棋界面。
GTP 的一问一答以空行封包;局面由前面执行过的命令逐步建立。 Analysis Engine 是一行一个 JSON 对象
JSONL 模式把每条查询写成单行 JSON,结果也逐行返回 JSON。查询自身携带局面与 id,更适合批处理、服务桥接和程序解析;搜索途中可以为同一 id 输出多条结果。
换行就是消息边界,因此 JSON 内不能混入终端提示、进度文字或彩色日志。 stdout 只放协议,stderr 只放诊断
无论哪种模式,机器读取的协议都必须独占 stdout。连接状态、重试、用量提示和错误上下文写到 stderr;否则 GUI 会把日志当成 GTP 响应,脚本也会得到无法解析的 JSON。
两条输出流各司其职:stdout 给机器,stderr 给人;退出码再说明进程是否正常结束。
规范
接入前检查
- GUI 选 GTP,脚本优先 JSONL
- 协议消息保持单行或正确空行结尾
- 诊断只写 stderr
- 先探测 required command