메인 콘텐츠로 건너뛰기

엔드포인트

POST /api/openapi/v1/chat/completions

요청

Headers

헤더필수설명
AuthorizationOBearer {API_KEY}
Content-TypeOapplication/json

Body

{
  "model": "shopping-assistant",
  "messages": [
    {"role": "system", "content": "당신은 쇼핑 도우미입니다."},
    {"role": "user", "content": "오늘 저녁 메뉴 추천해줘"}
  ],
  "stream": true,
  "metadata": {
    "customer_id": "cust_123",
    "location": {"x": 12.5, "y": 8.3}
  }
}
필드타입필수설명
modelstringX모델 이름 (미지정 시 기본 Open API 모델 사용)
messagesarrayO대화 메시지 배열
streambooleanXSSE 스트리밍 여부 (기본: false)
temperaturenumberX생성 온도 (0~2, 기본: 모델 설정)
max_tokensintegerX최대 생성 토큰 수
metadataobjectX앱 컨텍스트 (위치, 장바구니 등)

메시지 형식

{
  "role": "user",
  "content": "카레 재료 쇼핑 리스트 만들어줘"
}
role설명
system시스템 지시 (모델의 시스템 프롬프트에 추가)
user사용자 입력
assistant이전 AI 응답 (대화 이력)

응답

비스트리밍 (stream: false)

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "카레 재료 쇼핑 리스트입니다:\n\n1. 감자 3개\n2. 양파 2개..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 150,
    "total_tokens": 175
  }
}

스트리밍 (stream: true)

SSE (Server-Sent Events) 형식으로 응답합니다:
data: {"id":"chatcmpl-abc123","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc123","choices":[{"index":0,"delta":{"content":"카레"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc123","choices":[{"index":0,"delta":{"content":" 재료"},"finish_reason":null}]}

data: [DONE]

코드 예제

curl

curl -X POST https://api.aika.life/api/openapi/v1/chat/completions \
  -H "Authorization: Bearer $ONESIGHT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shopping-assistant",
    "messages": [{"role": "user", "content": "오늘 저녁 메뉴 추천해줘"}],
    "stream": false
  }'

Python

import requests

API_KEY = "osk_megamart_..."
BASE_URL = "https://api.aika.life"

response = requests.post(
    f"{BASE_URL}/api/openapi/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "model": "shopping-assistant",
        "messages": [{"role": "user", "content": "오늘 저녁 메뉴 추천해줘"}],
        "stream": False,
    },
)

data = response.json()
print(data["choices"][0]["message"]["content"])

Python (스트리밍)

import requests

response = requests.post(
    f"{BASE_URL}/api/openapi/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "model": "shopping-assistant",
        "messages": [{"role": "user", "content": "오늘 저녁 메뉴 추천해줘"}],
        "stream": True,
    },
    stream=True,
)

for line in response.iter_lines():
    if line:
        decoded = line.decode("utf-8")
        if decoded.startswith("data: ") and decoded != "data: [DONE]":
            import json
            chunk = json.loads(decoded[6:])
            content = chunk["choices"][0]["delta"].get("content", "")
            print(content, end="", flush=True)

Swift (iOS)

let url = URL(string: "https://api.aika.life/api/openapi/v1/chat/completions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

let body: [String: Any] = [
    "model": "shopping-assistant",
    "messages": [
        ["role": "user", "content": "오늘 저녁 메뉴 추천해줘"]
    ],
    "stream": false
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)

let (data, _) = try await URLSession.shared.data(for: request)
let result = try JSONDecoder().decode(ChatCompletionResponse.self, from: data)
print(result.choices.first?.message.content ?? "")

언어 설정

응답 언어는 테넌트의 기본 언어 설정(default_language)에 따라 결정됩니다. 별도의 언어 파라미터는 제공하지 않습니다.