← 모든 가이드
이 페이지에서
튜토리얼 GTO 전략 · 02/06 트레이너 18 분 중급

1부: 첫 전략 호출

통제된 훈련 시나리오 또는 완료된 핸드에서 GTO 포커 트레이너의 핵심을 구축하세요 — Counterplay를 구동하는 것과 동일한 종류의 전략 계층입니다. 이 파트에서는 실제 프리플랍 전략 호출을 수행하고, 검증 가능한 혼합 빈도를 읽으며, 검토 후 결정을 평가합니다.

업데이트됨 관리 주체 Pokerai API

1 · 첫 호출 2 · 레인지 그리드 3 · 포스트플랍 트리 4 · 턴/리버 풀이

필요한 것

무료 API 키(여기에서 발급받기)와 curl 또는 Python 3. 키를 환경 변수로 설정하세요:

export POKERAI_API_KEY="gto_your_key_here"

1단계 · 첫 호출

Hero가 MP에서 A♥K♥를 들고 있고 UTG가 레이즈했을 때 GTO 전략을 요청하세요:

curl https://pokerai.bet/v1/gto/preflop \
  -H "authorization: Bearer $POKERAI_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "hole_cards": "AhKh",
    "positions": { "hero": "MP" },
    "preflop_actions": [
      { "position": "SB", "action": "small blind", "amount": 0.5 },
      { "position": "BB", "action": "big blind", "amount": 1 },
      { "position": "UTG", "action": "raise", "amount": 3 }
    ]
  }'

응답:

{
  "hole_cards": "AhKh",
  "situation": "Raise",
  "strategy": [
    { "action": "raise", "frequency": 1, "amount_bb": 9, "sizing_pot": 0.8 }
  ]
}

UTG 오픈에 맞서는 AKs는 순수한 3베팅입니다. 항상 100% 레이즈하여 9bb로 만듭니다. situation은 전송한 액션에서 파생됩니다(여기서는 한 번의 레이즈에 맞섬 = "Raise").

2단계 · 빈도 읽기

핵심은 다음과 같습니다. API는 혼합 전략, 즉 각 액션의 GTO frequency를 반환하며, 단일 "권장" 액션을 반환하지 않습니다. 대부분의 핸드는 순수합니다(한 액션이 100%). 하지만 많은 핸드는 혼합됩니다. 예를 들어 UTG에서 A2s를 오픈하는 경우:

{ "action": "raise", "frequency": 0.296 }   # raise 29.6% of the time
{ "action": "fold",  "frequency": 0.704 }   # fold 70.4% of the time
여기서 A2s를 레이즈하거나 폴드하는 것 모두 GTO상 올바릅니다. 항상 폴드하거나 항상 레이즈하는 플레이어가 어느 한 핸드에서 "틀린" 것은 아니지만, 많은 핸드에 걸쳐서는 균형 혼합 전략에서 벗어납니다. 바로 그것이 트레이너가 측정하는 대상입니다.

3단계 · 코드에서

작은 타입 지정 클라이언트 — Counterplay가 사용하는 것과 동일한 형태(app/gto/client.py):

import os, httpx

class Pokerai:
    def __init__(self):
        self.h = {"Authorization": f"Bearer {os.environ['POKERAI_API_KEY']}"}
        self.c = httpx.Client(base_url="https://pokerai.bet", timeout=15)

    def preflop(self, hole_cards, hero, actions):
        r = self.c.post("/v1/gto/preflop", headers=self.h, json={
            "hole_cards": hole_cards,
            "positions": {"hero": hero},
            "preflop_actions": actions,
        })
        r.raise_for_status()
        return {s["action"]: s["frequency"] for s in r.json()["strategy"]}

gto = Pokerai()
strat = gto.preflop("AhKh", "MP", [{"position":"UTG","action":"raise","amount":3}])
print(strat)   # {'raise': 1.0}

4단계 · 결정 채점

이것이 트레이너의 핵심입니다. Hero의 액션을 선택한 액션의 GTO 빈도에 따라 평가하세요 — 가장 빈도가 높은 액션과의 차이로 평가하는 것이 아닙니다. 빈도가 14%인 레이즈는 실수가 아닌 괜찮은 혼합 플레이입니다:

def grade(chosen_action, strategy):
    freq = strategy.get(chosen_action, 0.0)
    if freq >= 0.10: return "ok"        # a real part of the GTO mix
    if freq >= 0.005: return "minor"    # rare, but not a blunder
    return "major"                       # ~never played → a real leak

grade("raise", {"raise": 0.296, "fold": 0.704})   # "ok"  (A2s raise)
grade("raise", {"fold": 1.0})                     # "major" (raising 32o UTG)
이것이 바로 Counterplay의 평가 방식입니다 — 심각도는 선택한 액션 자체의 빈도에서 나오므로 낮은 빈도의 혼합 액션은 페널티를 받지 않습니다. (사례 연구를 참조하세요.)

만든 것

작동하는 전략 레이어: 문서화된 훈련 스팟의 GTO 빈도를 가져오고, 플레이어가 완료한 결정을 균형 전략과 비교해 평가합니다. Pokerai API는 결정론적인 전략 정보를 제공하며, 어떤 코치나 LLM도 반환된 빈도를 설명할 수 있지만 솔버를 대체하지는 않습니다. 그 루프 — 스팟 → 전략 → 평가 — 가 바로 한 스트리트씩 이루어지는 전체 트레이너입니다.

허용되는 사용

통제된 훈련 시나리오 또는 이미 종료된 핸드에서만 입력을 받으세요. 영향력이 큰 평가, 코칭 또는 제품 결과물은 사람이 검토할 수 있도록 유지하세요. Pokerai API는 훈련, 코칭, 핸드 리뷰, 학습 및 연구용입니다. 실제 현금 테이블에서의 실시간 보조(RTA)는 금지됩니다.

다음 — 2부: 13×13 레인지 그리드

한 번의 호출로 전체 레인지를 가져와 레인지 페이지처럼 렌더링합니다. 곧 제공됩니다.

관련 리소스