메시지 변환

컨텍스트를 넘기는 대화를 자동으로 줄인다

transformsplugins 는 openrouter.ai 가 자동 프롬프트 압축과 부가 처리 기능(PDF 파싱, 웹 검색 등)을 위해 정의한 요청 필드입니다. 우리는 두 필드 모두 받아줍니다 — 기존 클라이언트 코드가 이 필드를 지우거나 어느 게이트웨이인지에 따라 분기하지 않아도 되도록요 — 하지만 그 기능 자체는 구현하지 않습니다.

json
{
  "model": "google/gemma-4-26b-a4b",
  "transforms": ["middle-out"],
  "messages": [ /* ... */ ]
}

이 기능이 없는 이유

대화 중간을 자동으로 잘라내는 것은 정확성을 편의와 맞바꾸는 일입니다 — 요청이 실패하지 않도록, 여러분 대신 여러분이 보낸 메시지를 조용히 지우거나 줄입니다. 컨텍스트 창 크기가 제각각인 수십 개의 provider 앞에 서는 라우터에게는 합리적인 기본값일 수 있습니다. 하지만 카탈로그 모델이 두 개뿐이라 숫자를 그냥 확인하면 되는 서비스에는 더 나쁜 기본값입니다.

bash
curl -s "https://openrouter.myip.co.kr/api/v1/models" | jq '.data[] | {id, context_length}'
json
{ "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[] 를 크기 인지형 폴백으로 쓰세요. 여러 후보를 나열하면, 프롬프트가 안 맞는 로컬 후보는 체인이 이미 알아서 건너뜁니다 — 모델 폴백 을 보세요.

호환성 참고

transformsplugins 는 게이트웨이가 소비하는 키 목록에 속해 있어서(요청 파라미터 참고) 업스트림으로 전달되기 전에 읽히고 제거됩니다 — 서빙 엔진에 보내는 페이로드에는 절대 섞이지 않습니다. 보내는 것 자체는 무해하지만, openrouter.ai 에 보낼 때와 같은 효과를 내지는 않습니다.

마지막 수정 2026. 9. 5.