APIsRouter를 LibreChat 커스텀 엔드포인트로 추가하기.
Updated 2026-07-29
LibreChat은 커스텀 OpenAI 호환 엔드포인트를 정식 기능으로 취급합니다: librechat.yaml에 baseURL, apiKey, models.fetch를 true로 설정한 endpoints.custom 블록 하나만 있으면, 전체 카탈로그가 키 하나로 모델 선택기에 나타납니다.
빠른 답: librechat.yaml의 블록 하나.
LibreChat의 커스텀 엔드포인트는 librechat.yaml의 endpoints.custom 아래에서 설정되며, 이는 각 항목이 프로바이더 하나인 배열입니다. 중요한 세 필드는 name(엔드포인트 선택기에 표시되는 레이블), apiKey(${VARIABLE} 형태로 환경 변수를 보간하므로 키가 .env에만 있고 YAML에는 절대 남지 않음), baseURL입니다. APIsRouter의 경우 baseURL은 /v1을 포함한 https://api.apisrouter.com/v1입니다. LibreChat이 여러분이 준 베이스에 /chat/completions 같은 경로를 덧붙이기 때문입니다. models 블록이 모델 드롭다운에 나타나는 것을 결정합니다. models.fetch를 true로 설정하면 LibreChat이 로드 시점에 엔드포인트의 /v1/models 목록을 조회하므로, 손으로 목록을 관리하지 않아도 카탈로그의 모든 id가 선택 가능해집니다. models.default는 여전히 배열로 필수이며, fetch 전이나 fetch 대신 표시되는 폴백 역할을 합니다. 이는 패치가 아니라 문서화된 업스트림 설정입니다: LibreChat 문서의 커스텀 엔드포인트 객체 구조가 여기서 쓰이는 모든 키를 정의합니다.
version: 1.2.1
endpoints:
custom:
- name: "APIsRouter"
apiKey: "${APISROUTER_API_KEY}"
baseURL: "https://api.apisrouter.com/v1"
models:
default: ["claude-sonnet-4-6"]
fetch: trueLibreChat이 커스텀 엔드포인트를 라우팅하는 방법.
LibreChat(GitHub의 danny-avila, 약 4.1만 스타)은 가장 널리 배포된 셀프 호스팅 ChatGPT 스타일 인터페이스입니다: 멀티 유저, 멀티 모델을 지원하며, 대화 검색, 에이전트, 파일 처리, 사용자별 키를 갖추고 있습니다. 프로바이더 목록을 하드코딩하는 클라이언트와 달리, endpoints.custom 배열은 어떤 OpenAI 호환 서비스든 받아들이며, 문서에 나오는 여러 유명 프로바이더도 정확히 이 메커니즘으로 설정됩니다. 사용자가 커스텀 엔드포인트에서 모델을 선택하면, LibreChat은 model 필드를 그대로 문자열로 담아 그 엔드포인트의 baseURL로 표준 /v1/chat/completions 요청을 보냅니다. 클라이언트의 어떤 부분도 어떤 벤더가 모델을 학습시켰는지 신경 쓰지 않습니다. 문자열은 있는 그대로 전달됩니다. baseURL 뒤의 엔드포인트가 여러 벤더를 제공한다면, librechat.yaml 항목 하나로 Claude, GPT, Gemini, DeepSeek, GLM id가 같은 드롭다운에 들어가며, 사용자는 두 GPT 변형을 전환하듯 대화 중간에 벤더를 전환할 수 있습니다. 이는 일반적인 멀티 프로바이더 LibreChat 설정을 단순화합니다. 벤더마다 .env에 자체 키와 자체 청구 화면을 가진 커스텀 항목을 두는 대신, 항목 하나와 키 하나로 카탈로그 전체를 처리하며, 관리자는 여러 대시보드를 대조하는 대신 한곳에서 모델별 사용량을 볼 수 있습니다.
전체 설정: YAML, .env, Docker 마운트.
프로젝트 루트에 librechat.yaml을 만들고 키는 .env에 넣으세요. YAML의 ${APISROUTER_API_KEY} 참조는 시작 시점에 환경 변수에서 해석되므로, 설정 파일은 계속 커밋 가능한 상태로 유지됩니다. 처음 설정하는 사람들이 가장 많이 놓치는 단계는 Docker 특유의 것입니다: 마운트하기 전에는 컨테이너가 librechat.yaml을 전혀 보지 못합니다. 문서는 ./librechat.yaml을 /app/librechat.yaml로 바인드 마운트하는 docker-compose.override.yml을 만들고 컨테이너를 다시 생성하도록 안내합니다. 이후 YAML을 수정할 때도 재시작이 필요합니다. 이 파일은 시작 시점에 읽히며, 감시되지 않기 때문입니다. 게이트웨이 항목에 설정해 둘 가치가 있는 선택적 필드가 몇 가지 있습니다. titleConvo는 대화 제목 자동 생성을 활성화하고, titleModel은 그것을 작성할 모델을 고릅니다. LibreChat이 문서화한 titleModel의 기본값은 gpt-3.5-turbo인데, OpenAI가 아닌 엔드포인트는 이 id를 제공하지 않을 수 있으므로 빠른 카탈로그 id나 특수 값 current_model로 명시적으로 설정하세요. modelDisplayLabel은 어시스턴트 메시지에 표시되는 이름을 제어합니다. 그리고 apiKey는 서버 키를 공유하는 대신 각 사용자가 자신의 키를 붙여넣게 하고 싶다면 특수 값 user_provided를 받아들입니다.
version: 1.2.1
endpoints:
custom:
- name: "APIsRouter"
apiKey: "${APISROUTER_API_KEY}"
baseURL: "https://api.apisrouter.com/v1"
models:
default: ["claude-sonnet-4-6", "gpt-5.5", "deepseek-v4-pro"]
fetch: true
titleConvo: true
titleModel: "claude-haiku-4-5-20251001"
modelDisplayLabel: "APIsRouter"공유 채팅 워크스페이스를 위한 모델 선택.
모든 모델이 같은 키로 청구되므로, 관리자에게 실용적인 루틴은 일주일간 콘솔의 사용량을 지켜보고, 사용자가 실제로 어떤 모델을 고르는지 확인한 다음, 그에 맞게 models.default를 정리하되, 파워 유저가 여전히 전체 목록에 접근할 수 있도록 fetch는 켜 두는 것입니다.
- 일상용 채팅에는 강력한 제너럴리스트가 필요합니다. claude-sonnet-4-6과 gpt-5.5는 메시지마다 모델을 고민하지 않고도 긴 대화, 파일 논의, 에이전트 실행을 감당합니다.
- 빈번한 짧은 질문은 물량 작업입니다. claude-haiku-4-5-20251001과 gemini-3.5-flash는 빠르게 답하며, 다수 사용자 배포에서 하찮은 턴에 지출이 몰리지 않게 해줍니다.
- 제목 생성은 모든 대화마다 호출됩니다. titleModel을 빠른 id로 지정하세요. 여섯 단어짜리 제목을 쓰는 데 프론티어 요금을 지불하는 것은 LibreChat 배포에서 가장 흔한 조용한 낭비입니다.
- 다국어 팀은 실제 언어 조합으로 deepseek-v4-pro와 glm-5.2를 테스트해 봐야 합니다. 멀티 벤더 드롭다운 덕분에 이는 재설정이 아니라 앱 안에서의 비교가 됩니다.
- models.fetch 덕분에 YAML을 건드리지 않아도 새 카탈로그 모델이 나타납니다. 업스트림에 모델이 추가되면 목록이 다음에 새로고침될 때 바로 선택할 수 있습니다.
사용한 만큼 지불 · 공식 요금보다 저렴
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| 모델 | 공식 요금 | 저희 요금 |
|---|---|---|
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.00 per M |
| GPT-5.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Gemini 3.5 Flash | $1.50 / $9.00 per M | $1.20 / $7.20 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
LibreChat 특유의 실패 패턴.
설정이 조용히 로드되지 않는 것이 고전적인 문제이며, 거의 항상 Docker 마운트 때문입니다. docker-compose.override.yml 바인드 마운트가 없으면, 컨테이너는 librechat.yaml이 아예 없는 상태로 실행되고, 커스텀 엔드포인트는 선택기에 전혀 나타나지 않으며, 아무 오류도 나지 않습니다. 다른 것을 디버깅하기 전에 파일이 컨테이너 안에 실제로 있는지 확인하세요. apiKey가 말 그대로 ${APISROUTER_API_KEY}로 그대로 도착한다면, 서버가 시작될 때의 환경에 그 변수가 없었다는 뜻입니다. 보간은 시작 시점에 .env로부터 이루어지므로, 나중에 추가한 키는 컨테이너 재시작이 필요합니다. 증상은 말이 안 되는 bearer 토큰으로 인해 게이트웨이에서 나는 401입니다. /v1이 없는 baseURL은 모든 요청에서 404를 냅니다. LibreChat이 주어진 베이스에 /chat/completions를 덧붙이기 때문입니다. 반대의 실수, 즉 completions 전체 URL을 baseURL로 붙여넣는 것은 별도의 directEndpoint 옵션에 속하며 일반 항목과 함께 쓰면 안 됩니다. fetch가 꺼진 상태에서 모델 드롭다운이 비어 있다면 models.default가 없거나 비어 있다는 뜻입니다. 이는 필수 배열입니다. fetch가 켜진 상태에서 드롭다운이 비어 있다면 대개 fetch 자체가 실패한 것이며, 이는 결국 키나 baseURL 문제로 돌아갑니다. 그리고 다른 부분은 잘 작동하는 엔드포인트에서 대화 제목만 실패한다면, titleModel 기본값이 게이트웨이가 제공하지 않는 id를 가리키고 있는 것입니다. 명시적으로 설정하세요.
어떤 사람들이 게이트웨이를 통해 LibreChat을 쓰는가.
- 공유 채팅 워크스페이스를 셀프 호스팅하며, 각 벤더마다 endpoints.custom 항목과 벤더 계정을 유지하는 대신 Claude, GPT, Gemini, DeepSeek을 하나의 드롭다운에 두고 싶은 팀.
- 하나의 사용량 화면이 필요한 멀티 유저 배포를 운영하는 관리자. 키별 로그가 벤더 대시보드를 병합하지 않고도 팀이 실제로 어떤 모델을 얼마에 쓰는지 보여줍니다.
- 부서마다 자체 키를 주는 운영자: 같은 YAML, 그룹마다 키 하나, 그리고 사용량 로그가 팀별 비용 리포트가 됩니다.
- 여러 채팅 구독을 하나의 종량제 엔드포인트로 대체하며, 좌석이 아니라 사용한 토큰만큼 지불하고 싶은 가정이나 소규모 그룹.
- 특정 벤더의 결제 수단에 접근할 수 없는 개발자. 카드 없이 충전만으로 접근할 수 있어 프로바이더별 가입 의존성이 사라집니다.
엔드포인트 검증 및 첫 메시지 디버깅.
LibreChat을 건드리기 전에 게이트웨이 쪽을 먼저 검증하세요: 키로 모델 목록을 조회해, models.default에 넣은 id가 나타나는지 확인하세요. 이것이 작동한다면, 남은 증상은 모두 LibreChat 쪽 문제입니다. 그다음 스택을 시작하고 엔드포인트 선택기를 여세요. APIsRouter 항목이 나타나는 것만으로도 YAML이 로드됐다는 것이 증명되고, 모델 목록이 채워지면 fetch와 키가 증명되며, 첫 답장이 오면 채팅 경로가 증명됩니다. 이 셋을 한꺼번에가 아니라 순서대로 확인하세요. 각각이 서로 다른 실패 원인(마운트, 환경 변수, baseURL)을 가지고 있기 때문입니다. 메시지가 순조롭게 흐르면, APIsRouter 콘솔이 요청별 모델, 토큰 수, 지출을 보여줍니다. 공유 LibreChat 인스턴스는 사용량이 조용히 두세 개의 모델에 집중되는 전형적인 배포 형태이며, 사용량 로그는 청구서가 알려주기 전에 그것이 어떤 모델인지 알아내는 방법입니다.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50자주 묻는 질문
LibreChat에서 커스텀 OpenAI 호환 엔드포인트는 어디서 설정하나요?
librechat.yaml의 endpoints.custom 아래이며, 이는 name, apiKey, baseURL, models 블록을 가진 프로바이더 항목들의 배열입니다. Docker 설치의 경우, docker-compose.override.yml을 통해 컨테이너에 파일을 바인드 마운트해야 하며, 그렇지 않으면 조용히 무시됩니다.
baseURL에 /v1을 포함해야 하나요?
APIsRouter의 경우 그렇습니다: https://api.apisrouter.com/v1. LibreChat은 주어진 베이스에 /chat/completions 같은 경로를 덧붙이므로, /v1이 없으면 모든 요청에서 404가 발생합니다.
LibreChat 엔드포인트 하나로 Claude, GPT, DeepSeek 모델을 함께 제공할 수 있나요?
네. LibreChat은 선택된 모델 id를 그대로 문자열로 엔드포인트의 baseURL에 전달합니다. 엔드포인트가 여러 벤더를 제공한다면, endpoints.custom 항목 하나로 그 모든 id를 같은 드롭다운에 넣을 수 있고, models.fetch가 그 목록을 자동으로 최신 상태로 유지합니다.
커스텀 엔드포인트가 선택기에 없는 이유는?
YAML이 로드되지 않은 것입니다. Docker에서 흔한 원인은 librechat.yaml의 바인드 마운트가 없는 것입니다. 컨테이너는 파일 없이 실행되고 아무 오류도 나지 않습니다. 설정은 시작 시점에 읽히므로, 파일이 컨테이너 안에 실제로 있는지 확인한 다음 재시작하세요.
채팅은 되는데 대화 제목 생성이 실패하는 이유는?
titleConvo는 titleModel을 사용하며, 문서화된 기본값은 gpt-3.5-turbo인데 여러분의 엔드포인트가 이 id를 제공하지 않을 수 있습니다. titleModel을 claude-haiku-4-5-20251001 같은 빠른 카탈로그 id나 특수 값 current_model로 명시적으로 설정하세요.
서버 키를 공유하는 대신 각 사용자가 자신의 키를 쓸 수 있나요?
네. apiKey를 특수 값 user_provided로 설정하면 LibreChat이 각 사용자에게 키를 요청하며, 사용자별로 저장합니다. 이는 게이트웨이 키와 잘 맞습니다. 사용자별 키 하나면 사용량 로그가 사람별 비용 뷰가 되기 때문입니다.