Chat Completions
iwinv API의 핵심 엔드포인트로, OpenAI chat/completions 형식과 완전히 호환됩니다.
iwinv, Google Gemini, OpenAI, Anthropic Claude 모델 모두 이 엔드포인트로 호출합니다.
엔드포인트
POST https://ai-api.iwinv.kr/v1/chat/completions
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
model | string | ✅ | 사용할 모델 ID |
messages | array | ✅ | 대화 메시지 배열 |
stream | boolean | 스트리밍 여부. 기본값 false | |
max_tokens | integer | 최대 생성 토큰 수 | |
temperature | number | 응답 다양성 (0.0 ~ 2.0). 기본값 1.0 | |
top_p | number | nucleus sampling 임계값 |
기본 요청
- Python
- Node.js
- cURL
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["IWINV_API_KEY"],
base_url="https://ai-api.iwinv.kr/v1"
)
response = client.chat.completions.create(
model="gemma4-26b",
messages=[
{"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."},
{"role": "user", "content": "iwinv 클라우드에 대해 알려주세요."}
],
max_tokens=512,
temperature=0.7
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.IWINV_API_KEY,
baseURL: "https://ai-api.iwinv.kr/v1",
});
const response = await client.chat.completions.create({
model: "gemma4-26b",
messages: [
{ role: "system", content: "당신은 친절한 AI 어시스턴트입니다." },
{ role: "user", content: "iwinv 클라우드에 대해 알려주세요." }
],
max_tokens: 512,
temperature: 0.7
});
console.log(response.choices[0].message.content);
curl https://ai-api.iwinv.kr/v1/chat/completions \
-H "Authorization: Bearer $IWINV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma4-26b",
"messages": [
{"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."},
{"role": "user", "content": "iwinv 클라우드에 대해 알려주세요."}
],
"max_tokens": 512,
"temperature": 0.7
}'
멀티턴 대화
이전 대화 내용을 messages 배열에 함께 전달하면 문맥을 유지한 대화가 가능합니다.
messages = [
{"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."}
]
# 1번째 대화
messages.append({"role": "user", "content": "제 이름은 김철수입니다."})
response = client.chat.completions.create(model="gemma4-26b", messages=messages)
answer = response.choices[0].message.content
messages.append({"role": "assistant", "content": answer})
# 2번째 대화 — 이전 문맥 유지
messages.append({"role": "user", "content": "제 이름이 뭐라고 했죠?"})
response = client.chat.completions.create(model="gemma4-26b", messages=messages)
print(response.choices[0].message.content)
# → "김철수라고 하셨습니다."
스트리밍 응답
stream=True 설정 시 응답을 토큰 단위로 실시간 수신합니다.
- Python
- Node.js
with client.chat.completions.stream(
model="gemma4-26b",
messages=[{"role": "user", "content": "iwinv를 소개해주세요."}]
) as stream:
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
const stream = await client.chat.completions.create({
model: "gemma4-26b",
messages: [{ role: "user", content: "iwinv를 소개해주세요." }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content ?? "";
process.stdout.write(content);
}
Thinking 모드 (추론 모델)
Thinking 배지가 있 는 모델은 답변 전 내부 추론 과정을 거칩니다.
복잡한 수학, 코딩, 논리 문제에서 더 높은 정확도를 보입니다.
response = client.chat.completions.create(
model="gemma4-31b", # Thinking 지원 모델
messages=[
{"role": "user", "content": "피보나치 수열의 10번째 값을 구하고 과정을 설명해주세요."}
]
)
print(response.choices[0].message.content)
팁
Thinking 모델 목록: gemma4-31b, qwen3.6-27b, gemini-3.1-pro, gemini-2.5-pro, gemini-2.5-flash,
gpt-5.5, gpt-5.5-pro, gpt-5.4-pro, gpt-5, opus-4.7, opus-4.6, opus-4.5, opus-4.1, sonnet-4.6, sonnet-4.5
Vision (이미지 입력)
Vision 배지가 있는 모델은 이미지를 입력으로 받을 수 있습니다.
response = client.chat.completions.create(
model="gemma4-26b",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.jpg"}
},
{
"type": "text",
"text": "이 이미지를 설명해주세요."
}
]
}
]
)
print(response.choices[0].message.content)
Function Calling (도구 호출)
Tools 배지가 있는 모델은 Function Calling을 지원합니다.
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "특정 도시의 현재 날씨를 조회합니다.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "도시 이름"
}
},
"required": ["city"]
}
}
}
]
response = client.chat.completions.create(
model="gemma4-26b",
messages=[{"role": "user", "content": "서울 날씨 알려줘"}],
tools=tools,
tool_choice="auto"
)
print(response.choices[0].message.tool_calls)