GPT

ChatGPT 메모리 시스템 업데이트 — 개발자가 알아야 할 변화와 API 대응법

cell-devlog 2026. 6. 5. 14:59
반응형

ChatGPT가 기억하는 방식이 바뀌었습니다. 사용자 경험은 달라지지만, API는 여전히 무상태입니다. 개발자 관점에서 정리합니다.


✅ 핵심 요약

→ 2026년 5월~6월, OpenAI가 ChatGPT Plus·Pro 사용자에게 강화된 메모리 시스템을 순차 출시했습니다 → 핵심 엔진은 Dreaming — 백그라운드에서 과거 대화를 합성해 컨텍스트를 자동 갱신합니다 → Memory Sources 기능 추가 — 응답 아래 아이콘을 탭하면 어떤 기억이 응답에 반영됐는지 확인·수정 가능 → 과거 대화, 저장된 메모리, 업로드 파일, Gmail 컨텍스트까지 통합 참조 → API에는 메모리 없음 — 여전히 API 호출은 완전 무상태, 개발자가 직접 관리해야 함 → 메모리 기반 개인화 앱을 만들려면 Responses API의 store: true 또는 외부 벡터 DB 활용 필요 → 모델 전환 핵심: Chat Completions API → Responses API로 이전 권장 → ChatGPT 메모리는 웹·앱 인터페이스 전용 — API 호출에는 메모리 접근 없음


ChatGPT 메모리가 어떻게 바뀌었나

이전 메모리 (2024~2025)

"이것 기억해줘"라고 직접 말해야 저장됐습니다. 수동 메모장 방식이었습니다.

사용자: "나 프론트엔드 개발자야. 기억해줘"
→ ChatGPT: 저장됨 ✅

다음 대화:
사용자: "React 컴포넌트 만들어줘"
→ 프론트엔드 개발자라는 것을 기억하고 적용

2026년 신규 메모리 (Dreaming)

Dreaming은 메모리를 메모장이 아닌 백그라운드 합성 프로세스로 바꿉니다. 여러 대화에서 반복되는 주제 — 업무, 여행, 취미, 커뮤니케이션 스타일 — 를 ChatGPT가 스스로 파악해서 더 폭넓은 그림을 만듭니다.

[기존 방식]
사용자가 명시적으로 요청 → 저장

[Dreaming 방식]
대화 중 자연스럽게 나온 정보 → 백그라운드 합성 → 자동 저장
시간이 지나면 자동 업데이트 (여행 예정 → 여행 다녀옴)

Memory Sources — 투명성 추가

모든 ChatGPT 소비자 플랜에 Memory Sources가 추가됐습니다. 응답 아래 Sources 아이콘을 탭하면 어떤 저장된 메모리, 과거 대화, 커스텀 지시사항이 이번 응답에 사용됐는지 확인하고 수정할 수 있습니다.

메모리 소스 설명

저장된 메모리 Dreaming이 자동 합성하거나 사용자가 직접 저장한 정보
과거 대화 관련 있는 이전 대화 스레드
커스텀 지시사항 Settings > Personalization에서 설정한 지시
업로드 파일 Plus·Pro에서 이전에 업로드한 파일
Gmail (연동 시) 연결된 Gmail 계정의 컨텍스트

개발자가 알아야 할 핵심 — API는 여전히 무상태

메모리는 ChatGPT 웹·앱 인터페이스 전용입니다. API 호출에는 메모리 접근이 없습니다. API를 사용하는 애플리케이션을 만든다면 시스템 프롬프트나 다른 방법으로 컨텍스트를 직접 관리해야 합니다.

# ❌ 이런 기대를 하면 안 됩니다
# "ChatGPT 앱에서 기억하는 것처럼 API도 기억하겠지"

client = OpenAI()

# 1번째 호출
client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "나 백엔드 개발자야"}]
)

# 2번째 호출 — 아무것도 기억하지 않음
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "내 직업이 뭔지 알아?"}]
)
# → "모릅니다. 알려주세요."

Responses API로의 전환 — 무엇이 달라지나

Responses API는 Chat Completions API보다 미래 지향적인 구조입니다. store: true로 상태를 유지할 수 있고, 에이전트 워크플로우에 최적화됐습니다.

Chat Completions → Responses API 전환

# Chat Completions API (구버전)
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "system", "content": "당신은 코드 리뷰어입니다."},
        {"role": "user", "content": "이 코드 리뷰해줘:\n\ndef add(a, b): return a+b"}
    ]
)
print(response.choices[0].message.content)
# Responses API (신버전 — 권장)
response = client.responses.create(
    model="gpt-5.4",
    instructions="당신은 코드 리뷰어입니다.",
    input="이 코드 리뷰해줘:\n\ndef add(a, b): return a+b",
    store=True,              # 상태 저장 활성화
)
print(response.output_text)

# 다음 턴에서 이전 응답 ID로 이어받기
follow_up = client.responses.create(
    model="gpt-5.4",
    previous_response_id=response.id,   # 이전 응답 이어받기
    input="타입 힌트도 추가해줘",
)
print(follow_up.output_text)

Responses API의 store: true + previous_response_id가 멀티턴 컨텍스트 유지의 공식 방법입니다.


앱에 메모리 기능 구현하기 — 3가지 방법

ChatGPT 앱처럼 사용자 기억을 유지하는 AI 앱을 만들 때 선택지입니다.

방법 1. 대화 히스토리 전체 전달 (단순, 단기)

conversation_history = []

def chat_with_memory(user_message: str) -> str:
    conversation_history.append({
        "role": "user",
        "content": user_message
    })

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=conversation_history,
        max_tokens=1024,
    )

    assistant_message = response.choices[0].message.content
    conversation_history.append({
        "role": "assistant",
        "content": assistant_message
    })

    return assistant_message

# 사용
chat_with_memory("나 백엔드 개발자야")
chat_with_memory("주로 Python FastAPI 써")
print(chat_with_memory("내 직업이 뭔지 알아?"))
# → "네, 백엔드 개발자이고 Python FastAPI를 주로 사용하시는군요."

단점: 대화가 길어질수록 토큰 비용 증가. 세션 종료 시 기억 사라짐.

방법 2. 벡터 DB 기반 장기 메모리 (RAG 패턴)

from openai import OpenAI
import json

client = OpenAI()

# 메모리를 벡터로 저장 (실제 구현 시 ChromaDB, Pinecone 등 사용)
def save_memory(key: str, value: str):
    embedding = client.embeddings.create(
        model="text-embedding-3-small",
        input=f"{key}: {value}"
    ).data[0].embedding
    # vector_db.upsert(key, embedding, {"value": value})
    print(f"메모리 저장: {key} = {value}")

def retrieve_relevant_memory(query: str, top_k: int = 3) -> str:
    query_embedding = client.embeddings.create(
        model="text-embedding-3-small",
        input=query
    ).data[0].embedding
    # results = vector_db.query(query_embedding, top_k=top_k)
    # 실제로는 벡터 DB에서 관련 메모리 검색
    return "사용자는 백엔드 개발자이며 Python FastAPI를 주로 사용함"

def chat_with_long_term_memory(user_message: str) -> str:
    # 관련 메모리 검색
    memories = retrieve_relevant_memory(user_message)

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[
            {
                "role": "system",
                "content": f"사용자에 대해 알고 있는 것:\n{memories}\n\n이를 바탕으로 답변하세요."
            },
            {"role": "user", "content": user_message}
        ],
    )
    return response.choices[0].message.content

# 사용
save_memory("직업", "백엔드 개발자")
save_memory("주요 기술", "Python FastAPI")
print(chat_with_long_term_memory("API 설계 조언 해줘"))

방법 3. Responses API store: true (공식 권장)

# 세션 시작
first_response = client.responses.create(
    model="gpt-5.4",
    instructions="사용자의 기술 스택에 맞게 답변하세요.",
    input="나 Python FastAPI 백엔드 개발자야. 기억해줘.",
    store=True,
)

session_id = first_response.id

# 이후 대화 — 이전 컨텍스트 자동 유지
follow_up = client.responses.create(
    model="gpt-5.4",
    previous_response_id=session_id,
    input="비동기 처리 패턴 추천해줘",
)

print(follow_up.output_text)
# → Python FastAPI 맥락에서 async/await 패턴을 추천

메모리 관련 API 변경 사항 정리

항목 변경 내용

ChatGPT 앱 메모리 Dreaming V3 자동 합성 + Memory Sources 추가
API 메모리 변화 없음 — 여전히 무상태
권장 멀티턴 방법 Responses API previous_response_id
장기 메모리 앱 외부 벡터 DB + RAG 패턴 직접 구현
Assistants API 2026년 sunset 예정 → Responses API + Conversations API로 마이그레이션

Assistants API → Responses API 마이그레이션 체크리스트

OpenAI는 2026년에 Assistants API를 종료하고 Responses API와 Conversations API로 전환합니다.

✅ Assistants API 사용 여부 코드베이스 확인
   grep -r "beta.assistants\|beta.threads" --include="*.py" .

✅ Thread 기반 대화 → Responses API previous_response_id 패턴으로 전환

✅ File Search (Assistants) → 외부 벡터 DB 또는 Responses API file 입력으로 전환

✅ Function Calling → Responses API tools 파라미터로 전환

✅ 마이그레이션 후 동등성 테스트 실행

관련 글

반응형