본문으로 건너뛰기

사용자 정의 제공업체

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 또는 유사한 도구를 사용하여 단일 엔드포인트 뒤에 여러 제공업체 통합
  • 대체 제공업체 -- 아직 앱에 내장되지 않은 제공업체에 연결
  • 파인튜닝된 모델 -- 호환 가능한 호스팅 플랫폼에서 사용자 정의 파인튜닝된 모델에 액세스
  • 에어갭 배포 -- 인터넷 액세스 없이 로컬 네트워크에서 실행되는 모델 사용

설정을 통해 사용자 정의 제공업체 추가

  1. 설정 열기 (기어 아이콘 클릭 또는 Ctrl+Shift+S 누르기)
  2. API 키 섹션으로 이동
  3. 사용자 정의 제공업체로 스크롤
  4. 필드 입력:
필드필수설명
Provider ID짧은 식별자 (예: my-llm). 고유해야 하며, 소문자, 공백 없음
Display Name제공업체 드롭다운에 표시되는 사람이 읽을 수 있는 이름
Endpoint URLchat completions 엔드포인트의 전체 URL (예: https://my-api.example.com/v1/chat/completions)
API Key아니요인증용 Bearer 토큰 (필요 없는 경우 비워둠)
Models이 엔드포인트에서 사용 가능한 모델 ID의 쉼표로 구분된 목록
  1. Save 클릭
  2. 봇을 생성하거나 구성할 때 제공업체 드롭다운에 제공업체가 나타남

프로그래밍 방식 등록

브라우저 콘솔이나 스크립트에서 사용자 정의 제공업체를 등록할 수 있습니다:

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",
});

등록 옵션

옵션유형기본값설명
namestringProvider ID표시 이름
endpointstring필수chat completions 엔드포인트의 전체 URL
modelsarray[{id: 'default', name: id}]사용 가능한 모델
apiStylestring'openai'API 형식 (현재 'openai'만 지원)
extraHeadersobject{}모든 요청에 포함할 추가 HTTP 헤더
pricingobjectnull가격 정보 (비용 추적용)
maxInputnumber0최대 입력 컨텍스트 길이 (표시용만)

추가 헤더

엔드포인트에 사용자 정의 헤더가 필요한 경우 (예: 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 스트리밍 팩토리를 사용합니다. 이 팩토리는:

  1. 표준 OpenAI 형식 요청 본문 빌드 (model, messages, temperature, max_tokens, stream 등)
  2. Authorization: Bearer {apiKey} 헤더로 POST 요청 전송
  3. 콘텐츠 델타를 위해 SSE 스트림(data: {...} 라인) 구문 분석
  4. 스트리밍(delta) 및 비스트리밍(message) 응답 형식 모두 처리
  5. 있는 경우 usage 필드에서 토큰 사용량 추출

모든 구성 필드가 사용자 정의 제공업체와 함께 작동합니다: temperature, top_p, frequency_penalty, presence_penalty, stop sequences, response format 및 reasoning effort.

호환 서비스

다음 서비스는 OpenAI 호환 API 형식을 구현하며 사용자 정의 제공업체로 작동합니다:

서비스엔드포인트참고
LiteLLMhttp://localhost:4000/v1/chat/completions100개 이상의 제공업체를 통합하는 프록시
LocalAIhttp://localhost:8080/v1/chat/completions오픈소스 모델 로컬 실행
vLLMhttp://localhost:8000/v1/chat/completions고성능 추론 서버
Text Generation Inferencehttp://localhost:8080/v1/chat/completionsHugging Face 추론 서버
Ollamahttp://localhost:11434/v1/chat/completions이미 내장되어 있지만 사용자 정의로도 추가 가능
llama.cpp (server mode)http://localhost:8080/v1/chat/completions경량 C++ 추론
Janhttp://localhost:1337/v1/chat/completions로컬 모델이 있는 데스크톱 앱
LM Studiohttp://localhost:1234/v1/chat/completions모델 관리가 있는 데스크톱 앱
Cloudflare Workers AIhttps://api.cloudflare.com/client/v4/accounts/{id}/ai/v1/chat/completions내장되어 있지만 사용자 정의 가능
Azure OpenAIhttps://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-02-01api-key 헤더 필요

문제 해결

CORS 오류

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 탭을 열어 원시 요청 및 응답 검사