首页

协议

牌桌怎么跟对手说话、外部程序怎么当对手,都写在这里。想自己写一个对手,照着接就行。

席位协议

一席一个声明

开局配席时,每一席交给后端一个这样的对象。

provider_id 指向供应商中心里的一条配置,后端按它的类型分派决策:OT 走 OT 的推理接口,LLM 走对应的对话协议。内置的两席不依赖任何外部服务。

席位模型声明
{ "kind": "pure_algorithm" }
{ "kind": "tsumogiri" }
{
  "kind": "provider_model",
  "provider_id": "ot",
  "model_id": "4p-xxxx"
}

推理协议

你只要收场况、回动作

要当一个对手,本质上只需要提供一个 HTTP 接口:我们发一次请求,你回一个动作。

麻将模型服务与 LLM 供应商都走这条路,区别只在报文长什么样。

  • 输入是本席可见的 —— 不是上帝视角:他家手牌与牌山不会离开引擎
  • 合法动作带编号 —— 清单连同编号一起给你,你只需要挑一个编号回
  • 你会改主意也没关系 —— 声明类动作(立直、荣和等)另有确认环节,不靠一次请求定生死
  • 超时与非法 —— 有默认超时;超时或回了非法动作,自动回退内置算法,并在界面上留痕

对局控制

让外部程序驱动一局

本机 HTTP 接口。外部程序读状态、算动作、提交,不需要模拟鼠标键盘。

state 会回当前对局的事件积压和最近一次合法动作;把动作算出来,再用 action 提交即可。

对局控制接口
POST /api/fm/game/create
GET  /api/fm/game/state
POST /api/fm/game/action
GET  /api/status

供应商配置

密钥只写不读

供应商中心的全部接口都在本机,且没有鉴权——因为它只监听回环地址,也只有你自己在用它。

任何响应都只返回脱敏串(形如 ot3••••1234);明文永不回传、永不进日志。密钥以 Windows DPAPI 加密后落盘。

供应商配置接口
GET    /api/providers
POST   /api/providers
PATCH  /api/providers/{id}
DELETE /api/providers/{id}
POST   /api/providers/{id}/refresh
GET    /api/providers/{id}/quota

本地模型协议

还在设计

将来会有一套独立的「本地协议」,让你把自适配的模型直接挂进对局——不必先把它包成一个线上服务。

计划中,尚未实装。

开放程度

客户端开源,协议公开

牌桌怎么响应对手、对局怎么记录、协议长什么样——都可以自己读一遍。

解压,开局

不想自己写对手也没关系——内置的两位已经在桌上了。

下载