Developer guide

빠른 시작

빠른 시작

Written in 한국어. A version in your language is being prepared.

이 문서는 CLEVI API 키를 발급받아 첫 요청을 보내고 응답을 받는 데까지를 다룹니다. 주소 하나와 키 하나로 cip-5.5-im과 cip-5.5-mm을 호출하며, 요청과 응답은 OpenAI Chat Completions 형식을 따르므로 쓰던 OpenAI SDK에서 base_url과 api_key 두 값만 바꾸면 됩니다. Anthropic SDK용 경로와 임베딩·음성 경로는 API 호출하기 문서에 있습니다.

API 키 발급

키는 CLEVI Cloud 콘솔의 API 키 화면에서 발급합니다. 같은 화면에서 키를 폐기하고 사용 범위를 관리합니다. 아래 순서대로 진행하면 요청에 쓸 키 하나를 얻습니다.

  1. https://platform.clevi.net/account/login 에서 로그인하거나 계정을 만듭니다.
  2. https://clevi.app/cloud 에서 워크스페이스를 추가합니다.
  3. https://clevi.app/cloud/keys 로 이동합니다.
  4. 새 키를 발급하고 값을 복사합니다.
  5. 복사한 값을 환경 변수에 저장합니다.

이 문서의 예제에 나오는 sk-... 자리에 발급받은 키를 넣습니다. 아래 명령으로 환경 변수에 저장해 두면 이후 예제를 그대로 복사해 실행할 수 있습니다.

export CLEVI_API_KEY="sk-..."

모델 고르기

요청 본문의 model 필드에 아래 이름을 그대로 넣습니다. 두 모델은 같은 주소와 같은 요청 형식을 쓰며, 텍스트와 이미지를 입력으로 받습니다.

  • cip-5.5-im
  • cip-5.5-mm
모델 ID규모입력 한도최대 출력맞는 작업
cip-5.5-im360B256K64K목표와 범위가 명확한 업무. 응답 속도와 처리량을 우선합니다.
cip-5.5-mm800B512K64K여러 자료와 조건을 종합하는 복합 업무. 긴 문맥 분석과 다단계 에이전트에 씁니다.

계정에서 실제로 호출할 수 있는 모델은 플레이그라운드의 모델 목록과 GET /models 응답이 기준입니다. 전체 모델 목록과 모델별 허용된 호출은 모델 문서에, 예상 차감 크레딧은 콘솔의 사용량 화면에 있습니다.

POST /api/v2/aiservice/openai/v1/chat/completions

메시지 배열과 모델 이름을 받아 모델이 생성한 메시지를 choices 배열에 담아 반환합니다. 전체 주소는 https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions 입니다. 요청 본문은 application/json이고, 인증은 Authorization 헤더에 Bearer 접두사와 키를 넣습니다. X-API-Key 헤더로 키를 보내도 되며, 두 헤더를 모두 지정하면 X-API-Key 값이 우선 적용됩니다.

요청 매개변수
이름형식필수설명
modelstringcip-5.5-im 또는 cip-5.5-mm
messagesarray대화 메시지 객체의 배열. 최소 1개
messages[].rolestringsystem · user · assistant 중 하나
messages[].contentstring메시지 본문
streamboolean아니오true이면 응답을 Server-Sent Events 조각으로 나눠 받습니다
max_tokensinteger아니오응답으로 생성할 최대 토큰 수
temperaturenumber아니오값이 클수록 같은 요청에서 서로 다른 응답이 나올 확률이 높아집니다
curl https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions \
  -H "Authorization: Bearer $CLEVI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cip-5.5-im",
    "messages": [
      {"role": "user", "content": "CLEVI API를 한 문장으로 설명해 줘."}
    ]
  }'
import os
import requests

url = "https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions"

response = requests.post(
    url,
    headers={"Authorization": f"Bearer {os.environ['CLEVI_API_KEY']}"},
    json={
        "model": "cip-5.5-im",
        "messages": [{"role": "user", "content": "CLEVI API를 한 문장으로 설명해 줘."}],
    },
    timeout=60,
)

print(response.json()["choices"][0]["message"]["content"])
const url =
  "https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions";

const response = await fetch(url, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CLEVI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "cip-5.5-im",
    messages: [{ role: "user", content: "CLEVI API를 한 문장으로 설명해 줘." }],
  }),
});

const data = await response.json();
console.log(data.choices[0].message.content);

응답 예시입니다. id, created, usage 값은 요청마다 다릅니다.

{
  "id": "chatcmpl-3f0a9c72",
  "object": "chat.completion",
  "created": 1755500000,
  "model": "cip-5.5-im",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "CLEVI API는 주소 하나로 여러 모델을 호출하는 채팅 완료 API입니다."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 21,
    "completion_tokens": 19,
    "total_tokens": 40
  }
}

OpenAI SDK로 호출하기

OpenAI SDK의 base_url을 https://platform.clevi.net/api/v2/aiservice/openai/v1 로 바꾸고 api_key에 CLEVI 키를 넣습니다. 나머지 호출 코드는 그대로 둡니다.

# pip install openai
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["CLEVI_API_KEY"],
    base_url="https://platform.clevi.net/api/v2/aiservice/openai/v1",
)

completion = client.chat.completions.create(
    model="cip-5.5-mm",
    messages=[{"role": "user", "content": "CLEVI API를 한 문장으로 설명해 줘."}],
)

print(completion.choices[0].message.content)
// npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.CLEVI_API_KEY,
  baseURL: "https://platform.clevi.net/api/v2/aiservice/openai/v1",
});

const completion = await client.chat.completions.create({
  model: "cip-5.5-mm",
  messages: [{ role: "user", content: "CLEVI API를 한 문장으로 설명해 줘." }],
});

console.log(completion.choices[0].message.content);

스트리밍으로 받기

요청 본문에 stream을 true로 넣으면 서버가 Server-Sent Events로 응답합니다. 첫 조각과 함께 Content-Type: text/event-stream, Cache-Control: no-cache, X-Accel-Buffering: no 헤더가 내려오고, 이후 조각마다 data: 줄에 chat.completion.chunk 객체가 담깁니다. 마지막 줄은 data: [DONE]입니다. 아래 Python과 TypeScript 예제는 앞 절에서 만든 client를 그대로 씁니다.

curl -N https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions \
  -H "Authorization: Bearer $CLEVI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cip-5.5-im",
    "messages": [{"role": "user", "content": "CLEVI API를 한 문장으로 설명해 줘."}],
    "stream": true
  }'
stream = client.chat.completions.create(
    model="cip-5.5-im",
    messages=[{"role": "user", "content": "CLEVI API를 한 문장으로 설명해 줘."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="")
const stream = await client.chat.completions.create({
  model: "cip-5.5-im",
  messages: [{ role: "user", content: "CLEVI API를 한 문장으로 설명해 줘." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

조각 예시입니다.

data: {"id":"chatcmpl-3f0a9c72","object":"chat.completion.chunk","model":"cip-5.5-im","choices":[{"index":0,"delta":{"content":"CLEVI"},"finish_reason":null}]}

data: {"id":"chatcmpl-3f0a9c72","object":"chat.completion.chunk","model":"cip-5.5-im","choices":[{"index":0,"delta":{"content":" API는"},"finish_reason":null}]}

data: {"id":"chatcmpl-3f0a9c72","object":"chat.completion.chunk","model":"cip-5.5-im","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

스트리밍 도중 오류가 나면 같은 오류 JSON이 data: 한 줄로 오고 HTTP 상태 코드도 함께 바뀝니다.

오류

실패한 요청은 HTTP 상태 코드로 원인을 알립니다. 업스트림이 4xx·5xx를 반환하면 그 코드를 그대로 전달합니다. 아래 표의 대처를 먼저 확인하고, 같은 코드가 반복되면 요청 시각, 보낸 본문, X-Request-Id를 남겨 두세요.

HTTP 상태 코드
코드대처
400요청 본문이 형식에 맞지 않습니다model과 messages가 있는지, JSON이 닫혔는지 확인합니다
401키가 없거나 만료·폐기된 키입니다API 키 화면에서 키 상태를 확인하고, Authorization 헤더가 Bearer로 시작하는지 점검합니다
403모델 접근 권한이 없거나, 사용 한도를 넘었거나, 크레딧이 부족합니다error.message로 사유를 확인합니다. 한도는 개요의 할당된 사용 한도에서, 잔액과 플랜은 플랜과 크레딧에서 봅니다
404모델이 없거나 이 키로 접근할 수 없거나, 경로가 없습니다GET /models 응답에 모델 이름이 있는지, 주소가 /api/v2/aiservice/openai/v1/chat/completions로 끝나는지 확인합니다
429업스트림 제공자가 속도 제한을 걸었습니다Retry-After 헤더가 있으면 그 시간만큼 기다리고, 없으면 재시도 간격을 두 배씩 늘려 다시 보냅니다
5xx게이트웨이 또는 업스트림의 일시적 오류입니다재시도 간격을 두 배씩 늘려 다시 보내고, 반복되면 도움말과 문의로 X-Request-Id와 함께 알립니다

402는 반환하지 않습니다. 크레딧 부족과 사용 한도 초과는 403으로 옵니다. 오류 본문은 아래 형식이며 error.message에 사유가 담깁니다.

{"error":{"message":"API key is required.","type":"invalid_request_error"}}

요청에 X-Request-Id 헤더를 넣어 두면 문의할 때 그 값으로 추적합니다. 보내지 않으면 서버가 발급합니다.

다음 단계

모델 이름과 매개변수를 바꿔 가며 결과를 비교하는 것은 플레이그라운드에서 합니다. 키를 새로 만들거나 폐기하는 것은 API 키 화면에서 합니다. 이어서 읽을 문서는 다음과 같습니다.

  • 모델: 전체 모델 목록과 모델별 사양, 허용된 호출
  • API 호출하기: Anthropic 호환 경로, 임베딩·음성 경로, 스트리밍 규칙
  • 오류 코드: 전체 상태 코드 표와 재시도 규칙

플레이그라운드 열기

API 키 관리

CLEVI

Ngôn ngữ và khu vực

Các ngôn ngữ được dịch bằng máy được đánh dấu. Tính khả dụng tuân theo gói trang web đã phát hành.

136 ngôn ngữ

Đề xuất

1

Đông Á

7

Đông Nam Á

11

Nam Á

18

Trung Á

5

Trung Đông và Kavkaz

10

Tây Âu và Nam Âu

16

Vương quốc Anh và Ireland

4

Bắc Âu

10

Trung Âu và Balkan

14

Đông Âu

5

Đông Phi

8

Tây Phi và Trung Phi

9

Miền Nam Châu Phi

8

Châu Mỹ

5

Châu Đại Dương

5