어제 발표된 GPT-5.2는 프로덕션 AI 에이전트의 아키텍처를 근본적으로 변화시켰습니다. 뉴스 헤드라인은 벤치마크 점수에 집중하고 있지만, 엔지니어들에게 진짜 핵심은 새로운 Compaction(컴팩션) API와 세밀한 reasoning_effort 제어 기능입니다.
장기 실행(Long-running) 에이전트를 구축할 때 가장 큰 고통은 항상 “컨텍스트 드리프트(Context Drift)”였습니다. 대화 기록이 길어질수록 모델은 초점을 잃거나, 제약 조건을 환각(hallucinate)하거나, 단순히 토큰 한계에 부딪히게 됩니다. RAG는 임시방편일 뿐, 지속적이고 일관된 사고(coherent thought)의 흐름을 유지해주지는 못합니다.
GPT-5.2는 잠재 컨텍스트 컴팩션(Latent Context Compaction)과 깊이 제어가 가능한 “Thinking” 모드로 이 문제를 해결합니다. 이 가이드에서는 마케팅 용어는 걷어내고, SOTA(State-of-the-art) 에이전트를 즉시 구축하기 위한 구현 전략을 다룹니다.
핵심 개념: 잠재 컴팩션 & 추론 강도 (Reasoning Effort)
GPT-5.2는 두 가지 아키텍처 변화를 도입했습니다.
- 추론 강도 (Reasoning Effort): 불투명했던 o1 모델의 추론 방식과 달리, GPT-5.2는
reasoning_effort를none에서xhigh까지 고정하여 레이턴시(지연 시간)와 추론의 깊이를 트레이드오프 할 수 있게 해줍니다. - 컴팩션 (Compaction): 텍스트 요약(뉘앙스 손실 발생) 대신,
/responses/compact엔드포인트는 대화 상태를 불투명한 암호화 항목(opaque, encrypted items)으로 손실을 인지하며 압축(loss-aware compression)합니다. 이 항목들은 모델의 내부 “사고 과정”과 작업 관련 정보를 보존하면서 토큰 사용량을 획기적으로 줄여줍니다.
컴팩션 루프 아키텍처
graph TD
A["사용자 입력 (User Input)"] -->|"요청 (JSON)"| B["GPT-5.2 (추론 강도: High)"]
B -->|"응답 + 내부 상태"| C["애플리케이션 로직"]
C -->|"히스토리 > 임계값?"| D{"결정 (Decision)"}
D -- No --> E["채팅 계속"]
D -- Yes --> F["/responses/compact 호출"]
F -->|"히스토리 압축"| G["불투명한 컨텍스트 Blob"]
G -->|"입력에 주입"| H["다음 요청 (낮은 토큰 사용량)"]
코드: 컴팩션 루프 구현
이 기능들을 사용하려면 최신 OpenAI Python SDK (v2.11.0 이상)로 업그레이드해야 합니다. chat.completions에서 새로운 responses 네임스페이스로 변경된 점에 유의하십시오.
import os
from openai import OpenAI
import json
# openai>=2.11.0 버전 확인 필수
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
def run_agentic_turn(history, user_input, compact=False):
"""
GPT-5.2로 턴을 실행하며, 선택적으로 히스토리를 컴팩션(압축)합니다.
"""
# 1. 사용자 입력 추가
history.append({"role": "user", "content": user_input})
# 2. 명시적 추론 강도로 GPT-5.2 호출
response = client.responses.create(
model="gpt-5.2",
reasoning={"effort": "high"}, # 옵션: none, low, medium, high, xhigh
input=history
)
output_message = response.output[0]
print(f"Agent: {output_message.content}")
# 3. 응답을 히스토리에 추가
# 주의: 메타데이터 보존을 위해 raw model dump를 저장합니다.
history.append(output_message.model_dump())
# 4. 컴팩션 로직 (핵심 기능)
if compact:
print("Compacting context...")
compacted_response = client.responses.compact(
model="gpt-5.2",
input=history
)
# 히스토리가 연속성을 위해 설계된 불투명한 단일 컴팩션 항목으로 대체됩니다.
return [compacted_response.model_dump()]
return history
# 사용 예시
conversation = []
conversation = run_agentic_turn(conversation, "초단타 매매 봇을 위한 Python 백엔드 초안을 작성해줘.")
conversation = run_agentic_turn(conversation, "웹소켓 핸들러를 asyncio를 사용하도록 리팩토링해줘.", compact=True)
conversation = run_agentic_turn(conversation, "이제 리스크 관리 레이어를 추가해줘.")
단계별 구현 가이드
1. 추론 강도(Reasoning Effort) 고정하기
기본값에 의존하지 마십시오. GPT-5.2는 일부 엔드포인트에서는 medium을, 다른 곳(예: 4o 마이그레이션)에서는 none을 기본값으로 사용합니다.
none사용: 단순 채팅, GPT-4o에서의 마이그레이션, 레이턴시에 민감한 작업.high또는xhigh사용: 복잡한 계획 수립, 코딩 아키텍처 설계, 심층 연구.- 조치: API 호출 시
reasoning={"effort": "medium"}과 같이 명시적으로 설정하여 비용이 급증하는 “생각의 늪(thinking traps)”을 방지하십시오.
2. “범위 규율(Scope Discipline)” 프롬프트 구현
GPT-5.2는 제어 가능성(steerability)이 높지만, 지나치게 의욕적일 수 있습니다. 에이전트가 불필요한 기능을 제멋대로 추가하는 것(Scope Creep)을 막으려면, 새로운 XML 구문 제약 패턴을 사용해야 합니다.
이 블록을 시스템 지침(이제 instructions 파라미터나 developer 역할로 전달됨)에 복사하여 넣으십시오:
<design_and_scope_constraints>
- 사용자가 요청한 것만 정확히(EXACTLY) 그리고 유일하게(ONLY) 구현할 것.
- 추가 기능, 추가 컴포넌트, UX 꾸밈 금지.
- 지시 사항이 모호할 경우, 가장 단순하고 유효한 해석을 선택할 것.
- 명시적으로 요청되지 않은 새로운 UI 요소나 토큰을 절대 생성하지 말 것.
</design_and_scope_constraints>
3. “컴팩션(Compaction)” 전략 배포
컴팩션은 단순 요약이 아니라 상태 보존(State Preservation)입니다.
- 사용 시점: 주요 마일스톤(예: 모듈 코드 완성) 직후 또는 컨텍스트가 약 2만 토큰을 초과할 때.
- 매 턴마다 사용 금지: 레이턴시와 비용이 증가합니다.
- 불투명성(Opaque): 컴팩션된 항목을 절대 파싱하려고 하지 마십시오. 이것은 모델만을 위한 암호화된 벡터 블롭(Blob)입니다.
4. 에이전트 제어권(Steerability) 마스터하기
자율 루프(Autonomous loops)의 경우, <user_updates_spec>을 사용하여 모델이 보고하는 방식을 제어하십시오. 이는 불필요한 “수다”를 줄이고 컨텍스트 윈도우를 깨끗하게 유지합니다.
<user_updates_spec>
- 새로운 주요 단계(major phase)를 시작할 때만 짧은 업데이트(1-2문장)를 전송할 것.
- 일상적인 도구 호출("파일 읽는 중...", "테스트 실행 중...")에 대한 중계 금지.
- 각 업데이트는 반드시 최소 하나의 구체적인 결과("X 발견함", "Y 확인함")를 포함해야 함.
</user_updates_spec>
GPT-5.2는 지능뿐만 아니라 제어 가능성(Controllability) 측면에서도 거대한 도약입니다. 컨텍스트를 compact하는 능력은 기존 요약 방식의 성능 저하 없이 장기 작업(long-horizon tasks)에 대해 사실상 “무한한 기억(infinite memory)”을 부여합니다. 여기에 엄격한 <scope_constraints>를 결합하면, 노이즈 속에서 길을 잃지 않고 실제로 작업을 완수하는 에이전트를 구축할 수 있습니다.
