
한 번 호출해서 답 하나만 받는 가장 단순한 사용법. 감성 분류·번역·요약·짧은 Q&A 같은 무상태 작업에 3줄 코드로 연동. axios 샘플 + system 지시문 패턴 + 에러 처리까지.
"입력 텍스트 하나를 보내서 답 하나를 받기만 하면 된다" — 대화의 맥락이나 여러 턴의 기억이 필요 없는 경우입니다. 가장 간단한 LLM 호출 방식이며, 3줄 코드면 충분합니다.
단발 호출은 content 한 필드면 됩니다. messages[] 배열을 만들 필요 없고, 히스토리도 관리하지 않습니다.
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); // → "안녕하세요, 친절한 AI 어시스턴트입니다."
console.log(result.api.cost, '포인트'); // → 2 포인트
curl -k -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": "한 문장으로 자기소개 해줘."
}'
생략 가능한 옵션 (서버가 기본값으로 자동 동작) — max_tokens (각 모델의 max_context 까지 자동 허용), temperature (모델 기본), 기타 모든 파라미터. 모델 응답은 기본 한국어로 강제됩니다.
system 필드 한 줄을 추가하면 "어떤 방식으로 답할지" 를 지정할 수 있습니다. 단발 호출에서도 매우 유용합니다.
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
system: `사용자 문장의 감성을 분류하는 분류기입니다.
오직 다음 JSON 만 출력하세요. 설명·주석 금지.
{"sentiment": "positive|negative|neutral", "confidence": 0.0~1.0}`,
content: '이 상품 정말 최고예요! 배송도 빨랐어요.',
temperature: 0.1, // 재현성 극대화
max_tokens: 64,
}, {
headers: { 'CL_AUTH_KEY': process.env.API_KEY },
});
const json = JSON.parse(result.data.message.content);
// { sentiment: 'positive', confidence: 0.95 }
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
system: '답은 반드시 1문장, 50자 이내로 작성하세요.',
content: '하늘이 파란 이유를 설명해줘.',
max_tokens: 80,
}, {
headers: { 'CL_AUTH_KEY': process.env.API_KEY },
});
async function translate(text, targetLang = '영어') {
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
system: `자연스러운 ${targetLang} 번역기. 번역문만 출력. 원문·설명 덧붙이지 마세요.`,
content: text,
temperature: 0.3,
}, { headers: { 'CL_AUTH_KEY': process.env.API_KEY } });
return result.data.message.content;
}
console.log(await translate('배송이 정말 빠르네요!', '영어'));
// → "The delivery was really fast!"
단발 호출이라도 네트워크·잔액·입력 오류가 있을 수 있습니다. axios 는 4xx/5xx 에서 자동으로 예외를 던지므로 try/catch 만 감싸주세요.
import axios from 'axios';
async function askOnce(prompt) {
try {
const { data: result } = await axios.post('https://apick.app/rest/llm/chat', {
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
content: prompt,
}, {
headers: { 'CL_AUTH_KEY': process.env.API_KEY },
timeout: 30000,
});
return { ok: true, text: result.data.message.content, cost: result.api.cost };
} catch (e) {
const status = e.response?.status;
if (status === 400) return { ok: false, msg: '입력이 올바르지 않습니다' };
if (status === 402) return { ok: false, msg: '포인트가 부족합니다 — 충전 필요' };
if (status === 502) return { ok: false, msg: '일시적 오류 — 잠시 후 다시 시도' };
return { ok: false, msg: '요청 실패: ' + (e.message || 'unknown') };
}
}
const r = await askOnce('...');
if (r.ok) console.log(r.text);
else console.error(r.msg);
{
"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 }
}
단발 호출에서 compacted_messages 는 "다음 호출에 이어갈 수 있는 형태" 로 내려오지만 단발에서는 무시하면 됩니다. 다음 턴으로 이어갈 계획이 있다면 멀티챗 가이드로 가세요.