开发 AI Bridge启动:第一版机器人叫牌架构

0 阅读3分钟

1. 文档状态

  • 状态:V1 开叫阶段已接入牌桌,后续应叫/再叫仍在开发
  • 所属模块:aibridge.game
  • 首个叫牌体系:SAYC_V1
  • 核心实现:Java 原生、规则驱动、确定性执行
  • 明确限制:V1 不调用 DDS,不实现机器人打牌,不改变前端 API 或 WebSocket 协议

本文描述在线桥牌对局中的第一版机器人叫牌能力。它替换当前机器人在叫牌阶段固定 PASS 的临时行为,但不改变 BridgeDomain 对叫品合法性、拍卖完成和事件持久化的最终裁决权。

2. 目标与非目标

2.1 目标

  1. 让机器人基于自己的 13 张手牌和公开拍卖信息,按固定版本的 SAYC 或其他叫牌体系规则选择合法叫品。
  2. 使用外部声明式、可组合、可测试的版本化体系配置,编译为类型安全的内部规则,避免把某一套约定硬编码进引擎。
  3. 对每次选择给出稳定的规则 ID、叫品含义、优先级和诊断轨迹。
  4. 相同输入、相同引擎版本和相同体系版本必须产生相同结果,支持事件重放和故障恢复。
  5. 同一引擎支持 SAYC、2/1 等不同体系;体系差异通过配置表达,Java 代码只提供稳定的规则算子、编译和选择算法。

2.2 非目标

  • 不使用 DDS、双明手分析、蒙特卡洛发牌或基于未知手牌的模拟来选择叫品。
  • 不推断或读取其他座位的真实未公开手牌。
  • 不实现出牌机器人;现有 robotCard 逻辑不在本次范围内。
  • 不在 V1 提供用户在线编辑或发布约定卡,也不执行配置中的任意脚本;V1 仍读取随应用发布的外部体系配置文件。

3. 规则结构

规则由五部分组成:

  1. 适用上下文:公开拍卖、座位、身价和搭档/对手先前叫品。
  2. 候选叫品:规则希望产生的 PASS、实质叫品、DOUBLEREDOUBLE
  3. 手牌约束:HCP、牌型、花色长度、止张和大牌质量等可组合谓词。
  4. 叫品语义:该叫品向搭档公开表达的范围、forcing、alert、自然/人工属性。
  5. 排序信息:规则组、优先级和稳定 tie-break key;不能依赖注册顺序的偶然变化。

配置中的 auction.pattern 是可编译的序列模式,决定规则进入 Sequence Trie 的哪个节点;其他 auction 字段是定位后仍需检查的语义谓词。二者不能混成自由文本表达式,否则体系启动时无法建立索引、检查冲突或发现不可达规则。

BidMeaningHandConstraint 必须分开:前者描述叫品向其他座位承诺了什么,后者判断当前真实手牌能否选择该叫品。多数时候两者相近,但人工叫品和多个 hand variant 共用同一叫品时并不相同。

同一叫品可以有多个互斥 variant,以表达弱或强 Michaels 等非连续范围。多个约束默认 AND,同一规则的多个 variant 表示 OR。禁止在字符串描述中隐藏实际决策条件。