席位协议
一席一个声明
开局配席时,每一席交给后端一个这样的对象。
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本地模型协议
还在设计
将来会有一套独立的「本地协议」,让你把自适配的模型直接挂进对局——不必先把它包成一个线上服务。
计划中,尚未实装。
开放程度
客户端开源,协议公开
牌桌怎么响应对手、对局怎么记录、协议长什么样——都可以自己读一遍。
飞雀麻将