LLM 시작하기 (Large Language Models)
LLM 시작하기 (Large Language Models)
Novita AI가 어떤 식으로 LLM을 API로 제공하는지부터 볼게요. 여기서 다루는 채팅 완성(ChatCompletion)과 완성(Completion) 두 API가 사실상 모든 LLM 기능의 출발점이 돼요. 이미 OpenAI의 같은 이름의 API를 써 본 적이 있다면 거의 그대로 옮겨 오는 느낌이라 부담이 없어요.
모델이 할 수 있는 일
LLM은 대규모 텍스트로 학습한 딥러닝·자연어 처리 모델이라, 상황에 맞춰 유창한 문장을 만들어 내는 데 강해요. 대표적으로 이런 일을 처리할 수 있어요.
- 텍스트 생성: 문맥에 맞는 논리적인 내용을 만들고, 필요한 만큼 출력 스타일을 조절해요.
- 언어 이해: 입력 텍스트의 의미를 정확히 파악하고 문맥을 의식한 대화를 지원해요.
- 번역: 서로 다른 언어 사이의 이해와 생성을 바탕으로 번역을 해요.
- 지식 기반 Q&A: 문화·과학·역사 등 여러 분야의 질문에 폭넓게 답해요.
- 코드 이해·생성: Python, Java, C++ 같은 코드를 이해하고 만들며 오류를 찾아 제안해 주기도 해요.
- 분류·요약: 복잡한 문장을 이해해 정보를 분류하고 핵심을 요약해요.
API 통합 방식
Novita AI는 오픈소스 모델에 빠르고 안정적인 API를 붙여서, 상위권 LLM API의 편의성과 오픈소스 모델의 유연성·비용 효율을 함께 챙겨요. 지원하는 인터페이스는 두 가지예요.
- ChatCompletion — 스트리밍/비스트리밍 모두 지원
- Completion — 역시 스트리밍/비스트리밍 모두 지원
이미 OpenAI의 ChatCompletion이나 Completion API를 쓰고 있다면, base URL을 api.novita.ai/openai로 바꾸고 API 키를 설정한 뒤 모델 이름만 갈아 끼우면 LLM 서비스를 바로 쓸 수 있어요. API 키의 생성·저장·사용 방법은 API 키 문서를 참고하면 돼요.
코드 예제
Python — ChatCompletion
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/openai",
api_key="<Your API Key>",
)
model = "deepseek/deepseek-r1"
stream = True # or False
max_tokens = 512
chat_completion_res = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "you are a professional AI helper."},
{"role": "user", "content": "Where can the example of GPU provided by novita ai be adapted?"}
],
stream=stream,
max_tokens=max_tokens,
)
if stream:
for chunk in chat_completion_res:
print(chunk.choices[0].delta.content or "", end="")
else:
print(chat_completion_res.choices[0].message.content)
Python — Completion
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/openai",
api_key="<Your API Key>",
)
model = "deepseek/deepseek-r1"
stream = True # or False
max_tokens = 512
completion_res = client.completions.create(
model=model,
prompt="Where can the example of GPU provided by novita ai be adapted?",
stream=stream,
max_tokens=max_tokens,
)
if stream:
for chunk in completion_res:
print(chunk.choices[0].text or "", end="")
else:
print(completion_res.choices[0].text)
Curl — ChatCompletion
export API_KEY="<Your API Key>"
curl "https://api.novita.ai/openai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"model": "deepseek/deepseek-r1",
"messages": [
{
"role": "system",
"content": "you are a professional AI helper."
},
{
"role": "user",
"content": "Where can the example of GPU provided by novita ai be adapted?"
}
],
"max_tokens": 512
}'
Curl — Completion
export API_KEY="<Your API Key>"
curl "https://api.novita.ai/openai/v1/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"model": "deepseek/deepseek-r1",
"prompt": "Where can the example of GPU provided by novita ai be adapted?",
"max_tokens": 512
}'
주요 파라미터
기본 파라미터
model— 호출할 LLM의 모델명이에요. 전체 목록은 LLM 서비스 페이지에서 확인할 수 있어요.
Messages
ChatCompletion 전용
messages는 LLM과 주고받는 입력·출력이에요. 각 메시지는 한 역할(화자)에 속하고, 구성에 따라 더 좋은 출력을 얻을 수 있어요.
content— 메시지 내용role— 화자를 정의해요.system: AI의 역할이나 행동 방식을 정해 주는 시스템 프롬프트user: 사용자의 입력assistant: AI의 응답. 원하는 답 형태를 미리 예시로 넣어 줄 수도 있어요.
Prompt
ChatCompletion 전용
prompt는 사용자가 LLM에게 명확히 전달하는 작업 지시 텍스트예요.
출력 조절
temperature와top_p는 생성 텍스트의 다양성을 조절하는 값이라 하나만 설정하는 걸 권장해요. 값이 클수록 텍스트가 다양해지고, 작을수록 정확해져요.
temperature— 무작위성을 조절해요. 클수록 창의적.top_p— 누클리어스 샘플링. 누적 확률을 기준으로 후보를 제한해요.top_k— 후보 토큰 개수를 제한해요.
반복 패널티
presence_penalty— 텍스트에 이미 등장한 토큰에 패널티를 줘서, 텍스트 전체에 다양한 토큰이 나오게 해요.frequency_penalty— 같은 토큰이 반복될 때마다 패널티를 줘서, 이후 반복을 줄여요.repetition_penalty— 반복을 억제하거나 장려해요.
출력 제한
max_tokens— 한 번의 응답에서 생성할 최대 토큰 수예요. 이 값을 넘기는 내용은 잘려요.stream— 스트리밍 사용 여부예요. 출력이 길어질 땐 타임아웃을 피하려고 스트리밍을 권장해요.true: 생성되는 대로 부분 결과를 받아요.false: 처리가 끝난 뒤 전체 결과를 받아요.
stop— 이 문자열을 만나면 생성을 멈춰요.