如何安全地运行一次 GTO solver API 求解?
将一次实时求解视为短生命周期:调度、轮询 tree 直到可查询,然后只读取该 tree 返回的 token。
POST /v1/gto/solver 发送必填局面字段,保存返回的 solve handle,再轮询 POST /v1/gto/solver/tree 直到 spot_status 为 queryable。把返回的 node token 传给 POST /v1/gto/solver/node。本页只说明调度、轮询和读取,不讨论 solver 选型或研究 tree 设计。核心事实
| 调度 | POST /v1/gto/solver 必填 board、oop_range、ip_range、pot、effective_stack 和 hero。 |
|---|---|
| 异步信号 | 调度 status 可为 computing、queryable 或 busy;tree 的 spot_status 才是读取就绪信号。 |
| 读取作用域 | 仅把 solve handle 用于其 tree/release 调用;只把该 tree 返回的 token 作为 /v1/gto/solver/node 的 node 输入。 |
| 配额 | 只有新触发求解时才会出现 solve_quota。tree、node 与可选 release 操作在公开文档中标为免费。 |
| 结果边界 | 可读取 node 可含 strategy,或 actions 和 range_strategy;不可读取状态不是策略。 |
1. 调度并保存 handle
提交完整、自包含的自定义翻牌、转牌或河牌局面。board 长度决定街道。保存返回的 solve handle;后续 tree 与 release 请求都用它作为标识。
curl -s https://pokerai.bet/v1/gto/solver \
+ -H "Authorization: Bearer $POKERAI_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{"board":"2c2h2s","oop_range":"AA,KK","ip_range":"QQ,JJ","pot":6,"effective_stack":100,"hero":"OOP"}'
调度响应可能为 computing 或 queryable。若为 busy,则没有可轮询的 solve handle;应将其视为 solver 容量状态而不是已完成求解。公开 contract 不承诺等待时间或可用性等级。
2. 读取策略前先轮询 tree
使用 handle 调用 POST /v1/gto/solver/tree。对于 flop solve,turn_card 可选;river_card 也可选,并在需要消歧时与 turn_card 配对。不要为其他 solve 虚构这些字段。
curl -s https://pokerai.bet/v1/gto/solver/tree \
+ -H "Authorization: Bearer $POKERAI_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{"solve":"<solve handle>"}'
只有 spot_status 为 queryable 才继续。computing 不是策略结果。no_nodes 是所查询 round 或 runout 的终态,应停止轮询。expired 表示 handle 已不能继续使用,必须重新调度该局面。
3. 用 tree token 读取节点
可查询的 tree 返回节点,字段包括 node、is_hero、status 与 token。将该 token 作为 node 传入;它既不能替代 API key,也不是可复用的 solve handle。不要在客户端日志中记录 handle 或 token。
curl -s https://pokerai.bet/v1/gto/solver/node \
+ -H "Authorization: Bearer $POKERAI_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{"node":"<token from this solve tree>"}'
Hero node 可返回 strategy。Villain node,或不带 hole_cards 的请求,可返回 actions 与 range_strategy。若节点响应的 node_status 为 computing、expired 或 error,不得将其展示为策略;error 可能带有 message。
4. 只解读可读取节点
可读取的 hero node 可含 strategy。Villain node,或不带 hole_cards 的请求,可含 actions 和 range_strategy。这些字段只描述返回的 node,不代表不同 tree、局面或游戏格式的承诺。
若 tree 为 computing、no_nodes 或 expired,请按文档停止或重新调度,不要展示结果。若要在 hosted API 与桌面 solver 间选择研究工具,请看透明对比。
仅限训练和复盘
将此生命周期用于离线训练、教学、手牌复盘、学习和研究。它只管理已提交 solve 的状态,不代表实时牌局行动交付,也不构成策略质量、延迟或性能声明。
Pokerai API 禁止在真实资金牌桌上提供实时辅助。不要把 solver 调度、轮询、节点策略或 release 流程接入 live-table automation 或牌局中的行动提示。
生命周期端点映射
这三个操作足以完成本页描述的生命周期;仅消费当前 OpenAPI contract 已文档化的字段。
| 端点 | 生命周期角色 | 文档化输入或信号 |
|---|---|---|
POST /v1/gto/solver | 调度 | 必填局面字段;保存 solve,检查 status 和可选的 solve_quota。 |
POST /v1/gto/solver/tree | 轮询 | 发送 solve;等待 spot_status: queryable 并选择返回的 token。 |
POST /v1/gto/solver/node | 读取 | 将对应 tree token 作为 node 发送;可选 hole_cards 会收窄 hero 策略读取。 |
相关资源
- 开发者文档 — 鉴权、配额和 solver workflow
- 在线 API reference — 当前请求与响应 schema
- OpenAPI snapshot — 机器可读的中文 contract
- GTO solver API 指南 — 产品背景和 API surface 映射
- 扑克手牌复盘 API 指南 — 将 solver 分析置于牌局结束后的工作流
- llms.txt — Pokerai API 的精简 LLM 入口