사용자 정의 제공업체
AISCouncil는 OpenAI chat completions 형식을 구현하는 모든 LLM API를 지원합니다. 이것을 통해 자체 호스팅 모델, 기업 LLM 게이트웨이, 대체 제공업체 및 로컬 추론 서버에 연결할 수 있습니다.
사용자 정의 제공업체란?
사용자 정의 제공업체는 OpenAI 호환 API 형식(SSE 스트리밍이 포함된 /v1/chat/completions)을 사용하는 사용자 정의 LLM 엔드포인트입니다. 대부분의 최신 추론 서버와 LLM 게이트웨이가 이 형식을 구현하여 LLM API의 사실상 표준이 되었습니다.
사용 사례
- 자체 호스팅 모델 -- 자체 하드웨어에서 실행되는 vLLM, Text Generation Inference 또는 LocalAI에 연결
- 기업 LLM 게이트웨이 -- 인증 및 로깅이 있는 회사의 API 프록시를 통해 라우팅
- 로컬 프록시 -- LiteLLM 또는 유사한 도구를 사용하여 단일 엔드포인트 뒤에 여러 제공업체 통합
- 대체 제공업체 -- 아직 앱에 내장되지 않은 제공업체에 연결
- 파인튜닝된 모델 -- 호환 가능한 호스팅 플랫폼에서 사용자 정의 파인튜닝된 모델에 액세스
- 에어갭 배포 -- 인터넷 액세스 없이 로컬 네트워크에서 실행되는 모델 사용
설정을 통해 사용자 정의 제공업체 추가
- 설정 열기 (기어 아이콘 클릭 또는
Ctrl+Shift+S누르기) - API 키 섹션으로 이동
- 사용자 정의 제공업체로 스크롤
- 필드 입력:
| 필드 | 필수 | 설명 |
|---|---|---|
| Provider ID | 예 | 짧은 식별자 (예: my-llm). 고유해야 하며, 소문자, 공백 없음 |
| Display Name | 예 | 제공업체 드롭다운에 표시되는 사람이 읽을 수 있는 이름 |
| Endpoint URL | 예 | chat completions 엔드포인트의 전체 URL (예: https://my-api.example.com/v1/chat/completions) |
| API Key | 아니요 | 인증용 Bearer 토큰 (필요 없는 경우 비워둠) |
| Models | 예 | 이 엔드포인트에서 사용 가능한 모델 ID의 쉼표로 구분된 목록 |
- Save 클릭
- 봇을 생성하거나 구성할 때 제공업체 드롭다운에 제공업체가 나타남
프로그래밍 방식 등록
브라우저 콘솔이나 스크립트에서 사용자 정의 제공업체를 등록할 수 있습니다:
AIS.Providers.registerCustom("my-provider", {
name: "My Provider",
endpoint: "https://my-api.example.com/v1/chat/completions",
models: [
{ id: "my-model-7b", name: "My Model 7B" },
{ id: "my-model-70b", name: "My Model 70B" },
],
apiStyle: "openai",
});
등록 옵션
| 옵션 | 유형 | 기본값 | 설명 |
|---|---|---|---|
name | string | Provider ID | 표시 이름 |
endpoint | string | 필수 | chat completions 엔드포인트의 전체 URL |
models | array | [{id: 'default', name: id}] | 사용 가능한 모델 |
apiStyle | string | 'openai' | API 형식 (현재 'openai'만 지원) |
extraHeaders | object | {} | 모든 요청에 포함할 추가 HTTP 헤더 |
pricing | object | null | 가격 정보 (비용 추적용) |
maxInput | number | 0 | 최대 입력 컨텍스트 길이 (표시용만) |
추가 헤더
엔드포인트에 사용자 정의 헤더가 필요한 경우 (예: Bearer 토큰 이외의 인증 체계):
AIS.Providers.registerCustom("corp-gateway", {
name: "Corporate Gateway",
endpoint: "https://llm.corp.internal/v1/chat/completions",
models: [{ id: "gpt-4o", name: "GPT-4o (via gateway)" }],
extraHeaders: {
"X-Corp-Token": "your-internal-token",
"X-Department": "engineering",
},
});
지속성
사용자 정의 제공업체는 ais-custom-providers 키 아래 localStorage에 자동으로 저장됩니다. 모든 페이지 로드 시 복원되므로 한 번만 등록하면 됩니다.
사용자 정의 제공업체 관리
등록된 사용자 정의 제공업체 나열
const customIds = AIS.Providers.listCustom();
// ['my-provider', 'corp-gateway']
사용자 정의 제공업체 제거
AIS.Providers.removeCustom("my-provider");
이것은 런타임 레지스트리와 localStorage 모두에서 제거합니다.
모든 제공업체 나열 (내장 + 사용자 정의)
const all = AIS.Providers.list();
// [{ name: 'anthropic', models: [...] }, { name: 'my-provider', models: [...] }, ...]
내부 작동 방식
사용자 정의 제공업체는 내장된 OpenAI, xAI, OpenRouter, DeepSeek, Groq 및 기타 제공업체를 구동하는 동일한 openaiCompatible() SSE 스트리밍 팩토리를 사용합니다. 이 팩토리는:
- 표준 OpenAI 형식 요청 본문 빌드 (model, messages, temperature, max_tokens, stream 등)
Authorization: Bearer {apiKey}헤더로 POST 요청 전송- 콘텐츠 델타를 위해 SSE 스트림(
data: {...}라인) 구문 분석 - 스트리밍(delta) 및 비스트리밍(message) 응답 형식 모두 처리
- 있는 경우
usage필드에서 토큰 사용량 추출
모든 구성 필드가 사용자 정의 제공업체와 함께 작동합니다: temperature, top_p, frequency_penalty, presence_penalty, stop sequences, response format 및 reasoning effort.
호환 서비스
다음 서비스는 OpenAI 호환 API 형식을 구현하며 사용자 정의 제공업체로 작동합니다:
| 서비스 | 엔드포인트 | 참고 |
|---|---|---|
| LiteLLM | http://localhost:4000/v1/chat/completions | 100개 이상의 제공업체를 통합하는 프록시 |
| LocalAI | http://localhost:8080/v1/chat/completions | 오픈소스 모델 로컬 실행 |
| vLLM | http://localhost:8000/v1/chat/completions | 고성능 추론 서버 |
| Text Generation Inference | http://localhost:8080/v1/chat/completions | Hugging Face 추론 서버 |
| Ollama | http://localhost:11434/v1/chat/completions | 이미 내장되어 있지만 사용자 정의로도 추가 가능 |
| llama.cpp (server mode) | http://localhost:8080/v1/chat/completions | 경량 C++ 추론 |
| Jan | http://localhost:1337/v1/chat/completions | 로컬 모델이 있는 데스크톱 앱 |
| LM Studio | http://localhost:1234/v1/chat/completions | 모델 관리가 있는 데스크톱 앱 |
| Cloudflare Workers AI | https://api.cloudflare.com/client/v4/accounts/{id}/ai/v1/chat/completions | 내장되어 있지만 사용자 정의 가능 |
| Azure OpenAI | https://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-02-01 | api-key 헤더 필요 |
문제 해결
CORS 오류
브라우저가 API 엔드포인트를 직접 호출할 때 서버는 응답에 CORS 헤더를 포함해야 합니다. 없으면 브라우저가 보안상의 이유로 요청을 차단합니다.
콘솔에 CORS 오류가 표시되면 사용자 정의 엔드포인트가 다음 헤더를 반환해야 합니다:
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: POST, OPTIONS
로컬 서비스용:
- Ollama: 시작 전
OLLAMA_ORIGINS=*환경 변수 설정 - vLLM:
--allowed-origins '*'플래그 추가 - LiteLLM:
--cors플래그 추가 또는LITELLM_ALLOW_ORIGINS=*설정 - LocalAI: CORS는 기본적으로 활성화됨
리버스 프록시(Nginx) 뒤의 원격 서비스용:
location /v1/ {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://localhost:8000;
}
연결 거부
- 엔드포인트 URL이 올바르고 서비스가 실행 중인지 확인
- 로컬 서비스의 경우 서버가 예상 포트에서 수신 중인지 확인
localhost서비스의 경우127.0.0.1대신 시도 (또는 그 반대)- 방화벽이 포트를 차단하지 않는지 확인
인증 오류
- API 키가 올바른지 확인
- 일부 서비스는 다른 인증 헤더 사용 -- 서비스가 표준
Authorization: Bearer형식을 사용하지 않는 경우extraHeaders사용 - Azure OpenAI는
Authorization대신api-key헤더 사용
빈 응답 또는 깨진 응답
- 엔드포인트가 OpenAI 호환 SSE 형식(
data: {"choices":[{"delta":{"content":"..."}}]})을 반환하는지 확인 - 일부 서비스는 요청 본문에
stream: true필요 (앱은 기본적으로 이것을 보냄) - 모델 ID가 서비스가 예상하는 것과 일치하는지 확인
- 브라우저의 DevTools에서 Network 탭을 열어 원시 요청 및 응답 검사