에이전트 기반 애플리케이션과 멀티턴 애플리케이션에서 OpenAI 모델은 API 요청 간에 추론을 보존하고 새 작업과 지침을 항상 모델의 컨텍스트 끝에 추가할 때 가장 좋은 성능을 냅니다. 접두부를 그대로 유지하는 것은 프롬프트 캐싱에서 오래전부터 권장해 온 방식입니다. 캐시는 요청의 시작 부분부터 내용이 일치하는지 확인하므로 접두부가 바뀌면 변경 지점부터 캐시를 재사용하지 못할 수 있습니다. 변경 내용을 대화 끝에 추가하면 캐시를 재사용할 수 있는 구간이 길어져 입력 비용을 크게 줄이고 응답 속도를 높일 수 있습니다.
최근 프런티어 모델부터는 접두부가 바뀌면 API가 모델 증류를 방지하기 위한 보호 조치의 일환으로 변경 지점 뒤에 있는 추론 항목을 제외합니다. 추론 항목이 제외되면 모델이 일부 추론을 다시 수행해야 할 수 있어 토큰 사용량과 비용이 늘고 지연 시간이 길어질 수 있습니다. 모델이 손실된 추론을 복구하지 못하면 출력 품질도 떨어질 수 있습니다.
모델의 성능을 최대한 활용하려면 가능한 한 접두부를 그대로 유지하고 새 내용은 컨텍스트 끝에만 추가하도록 애플리케이션을 구현하세요.
접두부 변경이란 무엇인가요?
추론 항목의 접두부는 해당 항목 앞에 있는 대화 기록입니다. 도구 결과를 줄이거나 개발자 메시지를 다시 쓰거나 이전 턴을 요약으로 대체하는 등 앞선 기록을 수정하면 접두부가 변경됩니다.
| Original conversation | Next request and API handling |
|---|---|
| User messageCheck the ledger total. | Same message |
| Reasoning before the tool call | Reusable |
Tool calllookup_ledger() | Same call |
Tool result[{"amount": 40}, {"amount": 50}] | Same rows |
| Reasoning after the tool result | Reusable |
접두부가 변경되지 않도록 API 연동 코드 수정하기
Responses API에서 tools, instructions, text.format 같은 매개변수를 변경하거나 이전 input 항목을 수정하면 의도치 않게 접두부가 변경될 수 있습니다. API 연동 코드에서 이런 변경이 발생하는지 점검하세요.
아래 표는 API 연동 코드에서 접두부가 자주 변경되는 경우와 가능한 한 컨텍스트 끝에 내용을 추가해 같은 목적을 달성하는 방법을 보여 줍니다.
| 접두부가 변경되는 일반적인 경우 | 접두부 변경을 피하는 방법 |
|---|---|
| 추론 강도 변경 | Responses API의 reasoning.effort 매개변수는 그대로 두고, 새 추론 강도를 지정한 configuration_update 항목을 입력 항목 목록 끝에 추가하세요. 요청 수준의 설정은 원래 값으로 유지하세요. |
| 구조화된 출력값의 스키마 변경 | Responses API의 text.format 매개변수는 그대로 두고, 새 스키마를 지정한 configuration_update 항목을 입력 항목 목록 끝에 추가하세요. 요청 수준의 설정은 원래 값으로 유지하세요. |
| 에이전트가 사용할 수 있는 도구 변경 | Responses API의 tools 매개변수는 그대로 두세요. 도구를 추가하려면 additional_tools 항목을 사용하고, 특정 턴에서 모델이 호출할 수 있는 도구를 제한하려면 tool_choice의 유형을 allowed_tools로 지정하세요. 기존 도구 정의의 순서를 유지하세요. additional_tools 항목은 역할을 developer로 지정하고 tools 배열을 포함해 끝에 추가하세요. 이후 요청에서 이 항목을 다시 보낼 때는 원래 위치를 유지하세요. |
| 개발자 지침 업데이트 | 기존 개발자 메시지는 그대로 두고, 이전 지침을 무시하고 새로 제공한 지침을 따르도록 모델에 요청하는 developer 메시지를 끝에 추가하세요. 한 턴에만 적용할 지침이라면 최신 개발자 메시지 바로 앞에 명시적 캐시 중단점을 두어 재사용 가능한 접두부가 해당 메시지 앞에서 끝나도록 하세요. |
| 컨텍스트 압축 | 컨텍스트를 압축하면 접두부가 변경되므로 캐시 미스를 피하기 어렵습니다. OpenAI 컨텍스트 압축: OpenAI 컨텍스트 압축을 /responses/compact 또는 context_management로 사용하면 접두부가 변경되어도 OpenAI 시스템은 변경 지점 뒤의 추론 항목을 유지합니다. OpenAI 컨텍스트 압축 항목은 컨텍스트의 어느 위치에나 올 수 있습니다. /responses/compact를 호출할 때는 instructions를 생략하고, 반환된 컨텍스트 윈도우를 원래 순서 그대로 다음 요청에 전달하세요. 대화 기록에 configuration_update 항목이 포함되어 있다면 구성 업데이트가 있을 때의 컨텍스트 압축 요구 사항을 따르세요.사용자 지정 컨텍스트 압축: 직접 구현한 방식 등 다른 압축 방식을 사용한다면 압축한 항목을 최근 턴 앞에 두지 말고 모델의 컨텍스트 끝에 두세요. 최근 턴 앞에 둘 수도 있지만, 이 경우 원래 대화 기록에서 해당 항목 뒤에 있는 추론 항목은 제외됩니다. |
| 이전 도구 출력 단축 또는 이전 파일이나 이미지의 크기 축소 | 일부 애플리케이션은 컨텍스트를 압축하는 대신 도구 출력, 파일, 이미지 등 이전 항목의 일부를 잘라냅니다. 이렇게 하면 접두부가 변경됩니다. 컨텍스트 압축을 사용하거나, 모델에 처음 보내기 전에 긴 도구 출력을 줄이고 이미지나 파일의 크기를 줄이는 것을 강력히 권장합니다. |
API 연동 코드에서 접두부 변경 여부 점검하기
프롬프트 캐싱 진단을 사용해 캐시 미스가 언제 발생하는지 확인하고 접두부 변경을 조사하세요. 요청을 이전 응답과 비교하려면 prompt_cache_options.comparison_response_id를 해당 응답의 ID로 설정한 다음, 진단 결과에 표시된 원인과 캐시된 토큰 수를 확인하세요. 이 정보를 활용해 API 연동 코드에서 접두부 변경을 줄이세요. 진단 도구는 확인할 수 있는 범위에서 처음 발견한 차이를 보고합니다. 모델이 추론을 재사용했는지는 확인할 수 없습니다.