ローカルプロトコル · 06

stdout上の二つのKataGo言語:GTPとJSONL

標準入出力を使う点は同じでも、GTP v2とAnalysis Engine JSONLは状態、区切り、対象クライアントが異なります。

  1. GTPは状態を持つ命令と応答

    GUIはboardsize、komi、play、kata-analyzeなどを一行ずつ送り、エンジンが現在の盤面を保持します。成功は=、失敗は?で始まり、空行で応答が終わります。Sabaki、q5Go、Lizzieなど従来型GUIに向きます。

    GTP応答は末尾の空行で区切られ、以前の命令が盤面状態を順に作ります。
  2. Analysis Engineは一行一JSON

    JSONLでは各要求を一行JSONで書き、結果も行ごとに返します。要求自身が局面とidを持つため、一括処理、サービス接続、プログラム解析に向きます。同じidへ探索中の結果が複数届く場合があります。

    改行がメッセージ境界です。端末プロンプト、進捗文字、色付きログを混ぜられません。
  3. stdoutはプロトコル、stderrは診断専用

    どちらのモードでも機械向け出力はstdoutだけに置きます。接続状態、再試行、使用量、エラー詳細はstderrへ出します。混在するとGUIはログをGTP応答と誤認し、スクリプトは無効なJSONを受け取ります。

    stdoutは機械、stderrは人、終了コードはプロセス結果という役割分担です。

仕様

  1. Go Text Protocol v2
  2. KataGo GTP拡張
  3. KataGo Analysis Engine

接続前確認

  • GUIはGTP、スクリプトはJSONL
  • 行・空行の区切りを守る
  • 診断はstderrだけへ出す
  • 必要な命令を事前確認する
CLI実践を読む