← 全部指南
本页内容
指南 GTO 策略 · 01/06 求解器应用 11 分钟 高级

如何用 API 查询 GTO 节点 EV?

在实时 solver 局面完成且 tree 可查询后,请求一个节点的 EV 数组;也可以只过滤一手牌。

更新于 维护者 Pokerai API

直接答案:使用来自 /v1/gto/solversolve handle,以及来自 /v1/gto/solver/treenode_id 调用 POST /v1/gto/evs。响应中的 actions 数组定义了 evs 中每手牌 EV 数组的顺序。

核心事实

端点POST /v1/gto/evs
前提已完成的 solve 和可查询的 solver tree;先轮询 /v1/gto/solver/tree
必填输入solvenode_idhand 可选,用于过滤单手牌。
响应actions 以及按手牌给出的 evs 数组;每个 EV 数组按索引与 actions 对齐。
配额公开 OpenAPI 描述将该读取标为免费;费用已在原始 /v1/gto/solver 求解时产生。
访问使用同一套鉴权 API 和已完成 solve 的 handle 所有权规则。

适用场景

适用于 solver 结果已可用后的离线训练、教学、手牌复盘、学习或研究工具。当解释 UI 需要比较某个已完成节点可选行动、又不希望重新发起 solve 时,可以使用该 endpoint。

不适用场景

不要在 solver tree 尚不可查询时调用,也不要把 EV 数组当作实时行动推荐、表现保证,或把公开响应契约之外的内容定义为 EV。

最小 API 请求

将脱敏 handle 替换为你自己 solver 请求返回的 handle。使用同一 solver tree 中的节点标识。可选的 hand 字段会将响应限制为该手牌。

curl -s https://pokerai.bet/v1/gto/evs \
  -H "Authorization: Bearer $POKERAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"solve":"eyJ0Ijoic2x2X3h4eXoi...(handle from /v1/gto/solver)","node_id":"root","hand":"2c2d"}'

响应解读

{"node_id": "root", "task_id": "slv_srp_…", "player": 1, "round": "FLOP", "actions": ["CHECK", "BET 4.000000", "BET 97.000000"], "evs": {"2c2d": [-0.826359, -0.792223, -1.643411], "2c2h": […], …}}

公开 docs-code 响应形状中的 actions[CHECK, BET 4.000000, BET 97.000000]。对 evs["2c2d"] 而言,第一个数对应 CHECK,第二个对应 BET 4.000000,第三个对应 BET 97.000000

在解释 UI 中应同时保留两组数组。API 契约把这些值描述为以 bb 表示的逐手牌、逐行动 EV;它不会选择行动,也不保证结果。

配额与就绪状态

该 endpoint 被文档标为免费,因为费用由原始 /v1/gto/solver 请求承担。若 solve 尚未收敛,200 响应可能为 { spot_status: computing };应继续轮询 solver tree,直到可查询,而不是假定 EV 数据已经就绪。

错误

HTTP含义处理方式
400请求数据无效。按公开 schema 检查 solvenode_id 和可选 hand
401鉴权缺失或无效。发送有效 API key,且不要将它写进浏览器代码或日志。
403solve handle 无效或不属于当前用户。使用你自己 solver 请求返回的、已鉴权的 handle。
410solve 已过期(TTL)。通过 /v1/gto/solver 重新提交该局面。

仅限训练和复盘

Pokerai API 用于训练、教学、手牌复盘、学习和研究。禁止在真实资金牌桌上提供实时辅助。不要将 EV 对比接入实时牌局自动化,也不要把它变成牌局中的行动提示。

相关资源