OpenAI API 호환 인터페이스

OpenAI API 호환 인터페이스

이미 OpenAI API 클라이언트를 쓰는 코드가 있다면, Vast.ai 서버리스 vLLM 엔드포인트로 바꾸는 건 매우 간단해요. API 키와 base URL 두 가지만 바꾸면 되거든요. Vast가 제공하는 OpenAI 호환 프록시가 표준 OpenAI 요청을 받아서 내 서버리스 엔드포인트로 라우팅해 주기 때문이에요. 프록시 주소는 https://openai.vast.ai/<ENDPOINT_NAME> 형태예요.

출처: Vast.ai 공식 문서 — OpenAI API 호환 인터페이스

준비사항 (Prerequisites)

  • 유효한 API 키가 있는 Vast.ai 계정 — Account 페이지에서 확인 가능해요.
  • vLLM 템플릿으로 실행 중인 활성 서버리스 엔드포인트 — Quickstart 가이드로 만들 수 있어요.

동작 방식 (How It Works)

Vast는 openai.vast.ai에서 가벼운 프록시를 실행해요. 이 프록시가 OpenAI API 형식으로 들어오는 요청을 받아 내 서버리스 vLLM 엔드포인트로 라우팅해 줘요. 즉 클라이언트가 표준 OpenAI 요청을 보내면, 프록시가 이를 Vast Serverless 호출로 변환하고, 결과를 클라이언트가 기대하는 OpenAI 응답 형식으로 되돌려 줘요.

그래서 LangChain, LlamaIndex 같은 OpenAI SDK를 기반으로 만든 프레임워크나 도구는, 자격 증명만 갱신하면 코드 수정 없이 Vast Serverless를 바로 쓸 수 있어요.

OpenAI(또는 다른 공급자)에서 전환하기

| 설정 | 기존 | 전환 후 | | API Key | OpenAI / 공급자 키 | Vast API 키 | | Base URL | https://api.openai.com/v1 (또는 공급자 URL) | https://openai.vast.ai/<ENDPOINT_NAME> |

참고: OpenAI SDK는 model 필드를 요구하지만, 프록시는 이 값을 무시해요. 실제로 서빙되는 모델은 전적으로 vLLM 엔드포인트 설정에 넣은 MODEL_NAME 환경 변수로 정해져요. 이 필드에는 빈 문자열을 포함해 아무 값이나 넘겨도 괜찮아요.

Python(OpenAI SDK) 예시:

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_VAST_API_KEY>",
    base_url="https://openai.vast.ai/<ENDPOINT_NAME>",
)

response = client.chat.completions.create(
    model="",  # model은 엔드포인트 설정으로 결정돼요
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain serverless computing in two sentences."},
    ],
    max_tokens=256,
    temperature=0.7,
)

print(response.choices[0].message.content)

curl로도 동일한 요청을 보낼 수 있어요.

curl https://openai.vast.ai/<ENDPOINT_NAME>/v1/chat/completions \
  -H "Authorization: Bearer <YOUR_VAST_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Explain serverless computing in two sentences."}
    ],
    "max_tokens": 256,
    "temperature": 0.7
  }'

지원되는 엔드포인트

프록시는 vLLM이 노출하는 다음 OpenAI 호환 엔드포인트를 지원해요.

| 엔드포인트 | 설명 | | /v1/chat/completions | 다중 턴 대화 완성 | | /v1/completions | 단일 프롬프트 텍스트 완성 |

두 엔드포인트 모두 스트리밍("stream": true)을 지원해요. 자세한 요청/응답 스키마와 파라미터는 vLLM 템플릿 문서를 참고하세요.

제약 사항 (Limitations)

OpenAI 호환 프록시는 텍스트 입력/텍스트 출력 워크로드 전용으로 설계됐어요. 통합 전에 아래 제약을 확인하세요.

텍스트 전용

  • 비전 / 이미지 입력 미지원: 메시지 콘텐츠에서 image_url로 이미지를 넘기는 건 지원하지 않아요.
  • 오디오 입력·출력 미지원: /v1/audio 엔드포인트(speech, transcription, translation)를 사용할 수 없어요.
  • 이미지 생성 미지원: /v1/images 엔드포인트를 사용할 수 없어요.

OpenAI 사양과의 vLLM 차이

프록시가 OpenAI 자체 서비스가 아니라 vLLM 백엔드로 라우팅하기 때문에 차이가 생길 수 있어요.

  • 토큰화: vLLM은 오픈소스 모델(Qwen, Llama 등)에 번들된 토크나이저를 쓰므로 토큰 수가 OpenAI 모델과 다를 수 있어요. 이는 과금 추정과 max_tokens 동작에 영향을 줄 수 있어요.
  • 도구 / 함수 호출(Tool calling): 이를 위해 파인튜닝된 모델에서 지원되지만, 동작이 OpenAI 구현과 다를 수 있어요. parallel_tool_calls 파라미터는 지원하지 않아요.
  • Moderation: 콘텐츠 검증 계층이 적용되지 않아요. OpenAI의 /v1/moderations 엔드포인트는 사용할 수 없어요.

표준 OpenAI 클라이언트 라이브러리는 이런 차이를 안전하게 무시할 수 있어요.

더 알아보기 (Learn more)