Codex 컨텍스트 압축 원리 조사

@Kangwook_Lee
영어4개월 전 · 2026년 3월 03일
1.0M
2.6K
303
39
5.5K

TL;DR

Kangwook Lee는 암호화된 블롭을 사용함에도 불구하고, 프롬프트 인젝션을 활용하여 OpenAI Codex 컨텍스트 압축 API에 사용되는 숨겨진 시스템 및 핸드오프 프롬프트를 찾아내는 방법을 시연합니다.

비코덱스 모델의 경우, 오픈소스 Codex CLI가 로컬에서 컨텍스트를 압축합니다. LLM이 압축 프롬프트를 사용하여 대화를 요약합니다. 압축된 컨텍스트가 나중에 사용될 때, responses.create()는 요약을 구성하는 핸드오프 프롬프트와 함께 이를 수신합니다. 두 프롬프트 모두 소스 코드에서 확인할 수 있습니다.

코덱스 모델의 경우, CLI는 대신 compact() API를 호출하며, 이는 암호화된 블롭을 반환합니다. 내부적으로 LLM을 사용하는지, 어떤 프롬프트를 사용하는지, 핸드오프 프롬프트가 전혀 있는지 여부는 알 수 없습니다.

아래에서는 간단한 프롬프트 인젝션(API 호출 2회, Python 35줄)을 통해 API 압축 경로가 실제로 LLM을 사용하여 컨텍스트를 요약하며, 자체 압축 프롬프트와 요약 앞에 추가되는 핸드오프 프롬프트가 있음을 보여줍니다. 프롬프트는 오픈소스 버전과 거의 동일합니다.

1단계 — compact()

조작된 사용자 메시지와 함께 compact()를 호출합니다. 서버 측에서는 압축기 LLM이 자체 숨겨진 시스템 프롬프트(한 번도 본 적이 없으며 알아내고자 하는 것)를 사용하여 입력을 처리합니다.

서버는 다음과 같이 압축기의 컨텍스트를 구성하는 것으로 보입니다.

Kangwook Lee - inline image

압축기 LLM은 시스템 프롬프트와 입력을 함께 읽습니다. 입력에 인젝션 페이로드(위 빨간색 텍스트)가 포함되어 있기 때문에 압축기는 속아서 자체 시스템 프롬프트를 출력에 포함시킵니다. 이 일반 텍스트 요약은 OpenAI 서버에만 존재합니다. 우리는 암호화된 블롭만 볼 수 있습니다.

Kangwook Lee - inline image

이 시점에서 블롭 내부를 읽을 방법은 없습니다. AES로 암호화되어 있으며 키는 OpenAI 서버에 있습니다. 우리는 압축기가 인젝션에 따라 프롬프트를 요약에 작성했기를 바랄 뿐입니다. 이를 확인하는 유일한 방법은 2단계입니다.

2단계 — create()

암호화된 블롭과 두 번째 사용자 메시지를 responses.create()에 전달합니다. 서버는 블롭을 해독하고 모델의 컨텍스트를 구성합니다.

다음을 전송합니다.

Kangwook Lee - inline image

모델은 다음과 같은 내용을 보는 것으로 보입니다.

Kangwook Lee - inline image

1단계가 성공했다면, 해독된 블롭에는 압축 프롬프트(인젝션으로 유출된)가 포함되어 있어야 합니다. 서버는 또한 블롭 앞에 핸드오프 프롬프트를 추가합니다. 따라서 프로브가 모델이 보는 내용을 반복하도록 하는 데 성공하면, 출력에는 시스템 프롬프트, 핸드오프 프롬프트, 압축 프롬프트의 세 가지가 모두 드러나야 합니다.

출력

다음은 extract_prompts.py를 한 번 실행한 완전하고 편집되지 않은 출력입니다. 노란색 = 시스템 프롬프트, 녹색 = 핸드오프 프롬프트, 분홍색 = 압축 프롬프트.

Kangwook Lee - inline image

이것들이 실제 프롬프트이고 단순히 환각된 텍스트가 아니라는 것을 어떻게 알 수 있을까요? 추출된 압축 프롬프트와 핸드오프 프롬프트는 오픈소스 Codex CLI에서 비코덱스 모델에 사용되는 것으로 알려진 프롬프트(prompt.md, summary_prefix.md)와 밀접하게 일치하므로, 모델이 처음부터 이를 만들어냈을 가능성은 낮습니다. 실행 결과는 실행마다 다릅니다.

추정 파이프라인

모든 것을 종합하면, 추출 결과를 바탕으로 compact()가 서버 측에서 수행하는 작업에 대한 최선의 추측은 다음과 같습니다.

Kangwook Lee - inline image

스크립트

Kangwook Lee - inline image

미해결 질문

기본 프롬프트가 거의 동일한데, Codex CLI가 두 가지 완전히 다른 압축 경로(비코덱스 모델의 경우 로컬 LLM, 코덱스 모델의 경우 암호화된 API)를 사용하는 이유는 무엇일까요? 그리고 요약을 아예 암호화하는 이유는 무엇일까요?

단정하기 어렵습니다. 아마도 암호화된 블롭은 이 간단한 실험으로 밝혀낼 수 있는 것 이상의 무언가, 예를 들어 도구 결과가 압축 및 복원되는 방식에 관한 특정 정보를 담고 있을 수 있습니다. 하지만 더 이상 테스트하지는 않았습니다.

원클릭 저장

YouMind로 바이럴 글을 AI 심층 읽기

소스를 저장하고, 핵심 질문을 던지고, 주장을 요약해 바이럴 글을 다시 활용할 수 있는 노트로 바꾸세요. 하나의 AI 워크스페이스에서 모두 할 수 있습니다.

YouMind 둘러보기
크리에이터를 위해

당신의 Markdown을 깔끔한 𝕏 글로

직접 쓴 장문을 올릴 때 이미지, 표, 코드 블록을 𝕏에 맞게 정리하는 일은 번거롭습니다. YouMind는 전체 Markdown 초안을 깔끔하고 바로 게시할 수 있는 𝕏 글로 바꿔 줍니다.

Markdown → 𝕏 사용해 보기

분석할 패턴 더 보기

최근 바이럴 아티클

더 많은 바이럴 아티클 보기