메시지 변환
컨텍스트를 넘기는 대화를 자동으로 줄인다
transforms 와 plugins 는 openrouter.ai 가 자동 프롬프트 압축과 부가 처리 기능(PDF 파싱, 웹 검색 등)을 위해 정의한 요청 필드입니다. 우리는 두 필드 모두 받아줍니다 — 기존 클라이언트 코드가 이 필드를 지우거나 어느 게이트웨이인지에 따라 분기하지 않아도 되도록요 — 하지만 그 기능 자체는 구현하지 않습니다.
{
"model": "google/gemma-4-26b-a4b",
"transforms": ["middle-out"],
"messages": [ /* ... */ ]
}이 기능이 없는 이유
대화 중간을 자동으로 잘라내는 것은 정확성을 편의와 맞바꾸는 일입니다 — 요청이 실패하지 않도록, 여러분 대신 여러분이 보낸 메시지를 조용히 지우거나 줄입니다. 컨텍스트 창 크기가 제각각인 수십 개의 provider 앞에 서는 라우터에게는 합리적인 기본값일 수 있습니다. 하지만 카탈로그 모델이 두 개뿐이라 숫자를 그냥 확인하면 되는 서비스에는 더 나쁜 기본값입니다.
curl -s "https://openrouter.myip.co.kr/api/v1/models" | jq '.data[] | {id, context_length}'{ "id": "google/gemma-4-26b-a4b", "context_length": 32768 }
{ "id": "lgai/exaone-4.0-32b", "context_length": 32768 }긴 대화를 32,768 토큰 안에 맞춰야 한다면, 무엇을 뺄지는 여러분이 정합니다 — 우리가 보이지 않는 곳에서 대신 하지 않습니다.
너무 긴 프롬프트를 보내면 실제로 무슨 일이 일어나는가
받을 후보가 로컬인지 외부인지에 따라 동작이 다릅니다. 사전 컨텍스트 검사는 로컬 후보에만 적용되기 때문입니다(로컬 GPU 모델 참고).
| 후보 | 동작 |
|---|---|
| 로컬 GPU 슬롯 | 추정 프롬프트 길이가 컨텍스트 창을 넘으면 디스패치 전에 체인에서 제거됩니다. 그래야 어차피 실패할 요청 때문에 콜드스타트 시간을 날리지 않습니다. 다른 후보가 있으면 그쪽으로 넘어갑니다. |
| 외부 provider | 사전 검사를 하지 않습니다. 요청을 그대로 보내고, provider 가 거부합니다. 이 실패는 아무 내용도 스트리밍되기 전에 일어나므로 첫 바이트 이전의 다른 실패와 똑같이 처리합니다 — 다음 후보로 넘어가거나, 남은 후보가 없으면 metadata.provider_code 에 업스트림 상태가 담긴 502 provider_error 가 돌아옵니다. |
| 남은 후보가 없음 | 404 no_endpoints_found |
어느 경우든 과금되지 않습니다 — 토큰을 만들어내지 못하고 실패한 요청은 비용이 없습니다.
대신 할 수 있는 것
- 여러분의 애플리케이션 코드에서 직접 줄이세요. 전체 메시지 이력을 갖고 있고 어느 부분이 중요한지도 알고 있는 것은 여러분입니다. 요약 단계, 슬라이딩 윈도우, 오래된 툴 결과 제거 같은 것들을 범용 middle-out 추측 대신 정확하게 직접 제어할 수 있습니다.
- 보내기 전에 컨텍스트 길이를 확인하세요. 위의
GET /models가 돌려주는context_length가 각 카탈로그 모델의 한계입니다. models[]를 크기 인지형 폴백으로 쓰세요. 여러 후보를 나열하면, 프롬프트가 안 맞는 로컬 후보는 체인이 이미 알아서 건너뜁니다 — 모델 폴백 을 보세요.
호환성 참고
transforms 와 plugins 는 게이트웨이가 소비하는 키 목록에 속해 있어서(요청 파라미터 참고) 업스트림으로 전달되기 전에 읽히고 제거됩니다 — 서빙 엔진에 보내는 페이로드에는 절대 섞이지 않습니다. 보내는 것 자체는 무해하지만, openrouter.ai 에 보낼 때와 같은 효과를 내지는 않습니다.
마지막 수정 2026. 9. 5.