
POST /rest/llm/chat 단일 창구의 전체 스펙 레퍼런스. 노출 파라미터(model, messages/content, system, temperature, max_tokens, speed, compact), 응답 스키마, 에러 코드, 스트리밍. 실전 사용법은 목적별 가이드(단발·멀티챗·챗봇·에이전트)를 참고하세요.
이 페이지는 /rest/llm/chat 의 전체 스펙 레퍼런스입니다. 처음 연동하신다면 실전 시나리오별 가이드부터 보시는 걸 권장합니다:
실제 사용 토큰 기반 자동 과금. 1포인트 = 1원 (부가세별도).
모델별 1M 토큰당 input/output 단가는 /dev_guide/llm_models 응답의 price 필드에서 확인.
[{ role:'user'|'assistant'|'system', content }...]. content/messages 중 하나 필수'none'(기본) · 'sliding_window'. 긴 대화의 input 토큰 누적 방지'fast'(얕게, 빠름) · 'medium' · 'slow'(깊게, 느림). 한글 '빠름'·'중간'·'느림' 허용. tag:reasoning 모델에서 가장 효과 확연
서버가 무시하는(잘 안 쓰는) 파라미터: top_p, top_k, presence_penalty, frequency_penalty, seed, logit_bias, n, repetition_penalty, response_format, tools, tool_choice, stop, user — 대부분의 앱은 건드릴 필요가 없으며, 업스트림 기본값이 안전하게 동작합니다. 보내도 무시됩니다.
공통 래퍼 { data, api }. 실제 응답은 data.message.content, 과금·소요시간은 api.
{ role:'assistant', content } — 모델 응답
서버는 대화 히스토리를 보관하지 않습니다. 클라이언트가 매 호출마다 messages[] 로 전체 히스토리를 전송하고, 응답의 data.compacted_messages 를 다음 호출의 messages 로 그대로 사용합니다.
compact.strategy="sliding_window" 로 서버가 최근 N 페어만 유지./chat 을 추가 호출해 요약 후 system 으로 치환.system 미지정 시 서버가 한국어 응답 지침을 자동 주입.
응답이 긴 경우 stream: true 로 SSE 토큰 스트림을 받을 수 있습니다.
마지막 event: done 프레임에 cost·pl_id·compacted_messages 가 담깁니다.
프로토타입은 스트리밍 없이 시작하고, UX 개선이 필요해지면 도입하는 것을 권장합니다 (대부분의 앱에 필요 없음).
curl -Nk -X POST "https://apick.app/rest/llm/chat" \
-H "Content-Type: application/json" \
-H "CL_AUTH_KEY: $API_KEY" \
-d '{
"model": "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
"content": "긴 이야기 해줘.",
"stream": true
}'
import axios from 'axios';
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
content: '한 문장으로 자기소개 해줘.',
}, {
headers: { 'CL_AUTH_KEY': process.env.API_KEY },
});
console.log(result.data.message.content); // 모델 응답 텍스트
console.log('비용:', result.api.cost, '포인트');
max_tokens·temperature·system·compact·speed 모두 생략 가능 — 서버가 안전한 기본값(한국어 응답·max_tokens 최대 16,384)으로 동작합니다.
let history = []; // 클라이언트가 소유하는 messages[]
async function ask(userText) {
history.push({ role: 'user', content: userText });
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
messages: history,
compact: { strategy: 'sliding_window', window_pairs: 10 },
}, {
headers: { 'CL_AUTH_KEY': process.env.API_KEY },
});
history = result.data.compacted_messages; // ⚠️ 직접 push 금지 — 교체!
return result.data.message.content;
}
console.log(await ask('내 이름은 지훈이야.'));
console.log(await ask('내 이름 기억해?'));
{
"data": {
"model": "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
"message": { "role": "assistant", "content": "안녕하세요! 반갑습니다." },
"usage": { "prompt_tokens": 23, "completion_tokens": 6, "total_tokens": 29 },
"compacted_messages": [
{ "role": "user", "content": "한 문장으로 자기소개 해줘." },
{ "role": "assistant", "content": "안녕하세요! 반갑습니다." }
],
"ic_id": null, "result": 1, "msg": "", "success": 1
},
"api": { "success": true, "cost": 2, "ms": 482, "pl_id": 12345 }
}