Chat Completions 는 stateless 야. 매 turn 마다 전체 message list 를 다시 보내. 한 번 빼먹으면 모델은 그 turn 의 대화를 잊어버려.
History trim 은 turn 이 아니라 token 으로
'마지막 10 메시지 유지' 같은 turn-based 윈도잉은 메시지 하나가 거대해지면 깨져. Token budget 으로 trim — tiktoken 으로 토큰 세고, system 메시지는 보존, 오래된 non-system 메시지부터 drop.
Skeleton 외워두면 빨라져
모든 호출의 필수 인자 셋 — model, messages, (Responses-class 모델은) max_completion_tokens. 매 응답의 필드 — id, choices, usage, created. 이 skeleton 외우면 docs 매번 안 봐도 돼.
Conversational ergonomics 의 함정
API 가 stateless 라서 chat UI 빌드는 dev 의 책임. 가장 흔한 버그 — 메시지 배열을 끝없이 키워. 3 주 차에 매 request 가 50 토큰 user message 에 20K 토큰 history 를 같이 보냄. 아래 exercise 가 canonical fix.