Opponent Prep를 열고 사용자 이름을 입력하면, 몇 초 후 체스판 건너편에서 뭔가 섬뜩한 것을 마주하게 된다. 상대가 여는 방식 그대로 오프닝을 펼치고, 상대가 늘 빠지는 그 불안정한 구조로 흘러가며, 상대가 언제 실수하기 쉬운지 정확히 아는 듯한 봇이다. 우리는 이것을 Ghost Bot이라고 부르며, 그 내부는 실제로 여러 층으로 쌓인 엔지니어링이다 — 서로 독립된 여러 시스템이 겹겹이 쌓여 있고, 각 시스템은 당신이 한 번도 대국해본 적 없는 낯선 사람에 대한 서로 다른 질문에 답하도록 설계되어 있다.
먼저, 그의 전체 기록을 읽는다
이름을 검색하는 순간, 우리는 그 플레이어가 기록에 남긴 모든 가능한 대국을 가져와 한 번의 분석을 거친다 — 승률, 각 색으로 실제로 어떤 오프닝에 도달하는지, 대국의 여러 시점에서 대략 어느 정도의 실력으로 두는지, 그리고 결정적으로 과거에 정확히 어디에서 가장 많은 점수를 잃었는지. 추측이 아니다. 그가 두었던 수백 판의 대국에 걸쳐, 그 자신의 수로부터 직접 집계한 것이다.
정확한 포지션 북: 그의 수를 색인화하다
이 기록으로부터 우리는 조회 테이블을 만든다: 플레이어가 실제로 도달한 적 있는 모든 포지션에 대해, 무엇을 두었고 얼마나 자주 두었는가? Ghost Bot이 그의 발자취를 따를 때, 즉흥적으로 두는 것이 아니다 — 실제로 각 선택지를 얼마나 자주 골랐는지에 따라 가중치가 부여된 이 테이블에서 곧바로 답을 끌어온다. 그가 50번 방문한 포지션으로 이끌면, 봇의 응답은 정확히 그 동일한 50개의 데이터 포인트에서 나온다. 시뮬레이션이라기보다는, 숫자가 들려주는 재현에 가깝다.
섬뜩할 만큼 정확하게 느껴지게 만드는 비결: 습관 북
여기가 진짜 고민이 필요했던 부분이다. 정확한 포지션 테이블은 그가 이전에 있었던 포지션으로 다시 돌아왔을 때만 도움이 된다 — 그리고 조금이라도 이례적인 수를 두는 순간, 그 테이블은 텅 비게 된다. 실제 상대는 무한한 기억력을 가지고 있지 않지만, 습관은 가지고 있다: 항상 비숍을 피앙케토하는 플레이어, 항상 8수 안에 캐슬링을 하는 플레이어, 체스판 반대편에서 당신이 무엇을 하든 항상 같은 폰 삼각형을 쌓는 플레이어.
그래서 우리는 정보의 절반을 의도적으로 버리는 두 번째 인덱스를 만들었다: 플레이어 자신의 기물만으로 포지션을 기억하고, 당신이 무엇을 하고 있는지는 흐릿하게 지워버린다. 이 더 흐릿한 기억이야말로 Ghost Bot이 기술적으로는 그의 실제 대국에서 한 번도 나온 적 없는 포지션에서도 "이건 그의 런던 시스템 같다"고 인식할 수 있게 해준다. 이는 체스 두뇌를 대신하는 패턴 인식이며 — 불러온 습관 하나하나는 두기 전에 조용히 안전성을 재검증받는다. 그래서 익숙한 배치라 해도 포지션이 그렇게 생겼다는 이유만으로 9수째에 기물을 그냥 걸어놓는 일은 결코 없다.
두 북 위에는 그중에서도 가장 기이한 층이 놓여 있다: 일련의 다이얼로 축소된 성격이다. 우리는 플레이어의 실제 수 선택을 그와 비슷한 실력의 대조군 상대들과 비교하여 스타일 지문을 만든다. 이는 "조심스럽게 둔다", "날카로운 전술을 좋아한다", "균형 잡힌 포지션에서 조급해진다" 같은 특성을, 두 북을 넘어 즉흥적으로 두어야 할 때마다 Ghost Bot의 결정을 조용히 같은 방향으로 기울이는 수치적 힌트로 바꾼다. 결과물은 그의 오프닝만 기억하는 것이 아니라 — 그가 기우는 방향으로 함께 기운다.
그렇다면 Report와 Blunder Puzzle은 기다리게 하면서 이건 왜 즉시 나타날까?
여기 정직하고 약간은 김빠지는 답이 있다: Opponent Prep이 빠른 이유는 위의 어느 것도 체스 엔진에 아무것도 묻지 않기 때문이다. 전체 리포트를 만드는 것 — 레퍼토리, 두 개의 북, 스타일 지문, 약점 — 은 계산이 아니라 집계다. 이미 벌어진 대국 더미에 대한 산술일 뿐이다. 그 더미에 몇백 판이 있든, 현대 브라우저는 몇 초 만에 이를 처리한다.
Game Analysis와 Blunder Puzzle은 지름길이 전혀 없는 완전히 다른 종류의 질문에 답한다: 이 특정 대국에서 이 특정 수는 실제로 좋았는가 — 얼마나 좋았는가? 이 질문은 5분 전에는 존재하지 않았다. 누구도 전에 이 질문을 던진 적이 없다. 지금 당신의 판 위 포지션은 방금 당신이 둔 그 대국에만 고유하기 때문이다. 그것을 찾아볼 수 있는 테이블은 존재하지 않는다. 이에 답하는 유일하게 정직한 방법은 그 포지션을 실제 체스 엔진에 넘겨, 대국 전체를 한 수 한 수 탐색하게 하는 것이다 — 그리고 어떤 희생이 정말로 성립하는지 확인할 때, 엔진은 첫 번째 질문 위에 두 번째 질문을 던져야 한다: 상대가 그것을 잡으면 어떻게 되는가? 이것은 테이블 조회가 아니다. 이것은 당신의 기기에서 실시간으로, 한 포지션씩 일어나는 진짜 순차적 사고이며, 아무도 둔 적 없는 대국에 대해 이를 건너뛸 수 있는 캐시는 세상 어디에도 없다.
간단히 말하면: Opponent Prep이 빠른 것은 기억하고 있기 때문이다. Report와 Blunder Puzzle이 시간이 걸리는 것은 실제로 생각하고 있기 때문이다.
당신만의 유령을 만들어 보라
시계가 시작되기도 전에 그의 습관을 파악하세요.