텍스트 생성
텍스트 생성 (Text Generation)
Groq의 채팅 완성 API(Chat Completions API)로 자연스러운 대화형 텍스트를 만들 수 있어요. 일련의 메시지를 넣으면 모델이 그 맥락에 맞는 응답을 돌려주는 구조라서, 대화형 에이전트, 콘텐츠 생성, 작업 자동화, 그리고 JSON 같은 구조화된 데이터 추출까지 폭넓게 쓸 수 있어요.
채팅 완성 (Chat Completions)
채팅 완성은 애플리케이션이 Groq 모델과 동적으로 대화하게 해 주는 기능이에요. 사용자 입력과 시스템 지시를 담은 메시지를 보내면, 대화 맥락에 맞는 응답이 돌아와요. 채팅 모델은 여러 번 주고받는 멀티턴 대화도, 단 한 번의 응답만 필요한 싱글턴 작업도 모두 처리할 수 있어요. 사용 가능한 전체 파라미터는 API 레퍼런스에서 확인할 수 있어요.
시작하기
Groq SDK를 설치하고 API 키를 준비하면 바로 시작할 수 있어요.
pip install groq
기본 채팅 완성
가장 단순한 형태는 메시지 리스트를 보내고 응답 하나를 받는 거예요. 메시지는 시간순으로 나열하고, 각 메시지는 role("system", "user", "assistant")과 content를 갖춰요.
from groq import Groq
client = Groq()
chat_completion = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain the importance of fast language models"},
],
model="llama-3.3-70b-versatile",
)
print(chat_completion.choices[0].message.content)
model에는 원하는 언어 모델 ID를 넣어요. 시스템 메시지는 어시스턴트의 행동을 정하는 역할을 해요.
스트리밍
더 반응이 빠른 환경을 만들고 싶다면 stream=True를 켜면 돼요. 응답 전체를 기다리는 대신, 생성되는 대로 조각(delta)이 흘러나와서 실시간으로 표시할 수 있어요.
client = Groq()
stream = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain the importance of fast language models"},
],
model="llama-3.3-70b-versatile",
temperature=0.5,
max_completion_tokens=1024,
top_p=1,
stop=None,
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content, end="")
주요 파라미터를 짚어볼게요.
temperature: 무작위성을 조절해요. 0에 가까울수록 결정적이고 반복적인 응답이 나와요.max_completion_tokens: 생성할 최대 토큰 수예요. 프롬프트와 완성에 걸쳐 최대 2048 토큰을 함께 쓸 수 있어요.top_p: 핵심 확률 샘플링(nucleus sampling)으로 다양성을 조절해요.0.5는 가능한 옵션 중 확률 가중치 기준 절반만 고려한다는 뜻이에요.stop: 정지 시퀀스예요. 모델이 이 문자열을 만나면 생성을 멈춰요. 여러 개가 필요하면stop=[", 6", ", six"]처럼 배열로 넘길 수 있어요.
정지 시퀀스 예시
숫자 세기를 5에서 멈추게 하고 싶다면 stop=", 6"을 지정해요. 모델이 ", 6"을 만나면 더 이상 생성하지 않아요.
비동기 채팅 완성
응답을 기다리는 동안에도 앱이 반응성을 유지해야 한다면 비동기 클라이언트를 써요. Python의 asyncio 기반으로 AsyncGroq를 만들면 블로킹 없이 호출할 수 있어요.
import asyncio
from groq import AsyncGroq
async def main():
client = AsyncGroq()
chat_completion = await client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain the importance of fast language models"},
],
model="llama-3.3-70b-versatile",
temperature=0.5,
max_completion_tokens=1024,
top_p=1,
stop=None,
stream=False,
)
print(chat_completion.choices[0].message.content)
asyncio.run(main())
비동기 클라이언트에서도 stream=True를 붙이면 비동기 스트리밍이 동작해요.
구조화된 출력과 JSON
JSON 스키마를 강제하는 Structured Outputs나 JSON Object Mode에 대한 자세한 가이드는 구조화된 출력 문서에서 확인할 수 있어요.
더 알아보기
- Structured Outputs — 스키마에 맞는 출력 강제하기
- Rate Limits — 채팅 완성의 속도 제한
- API Reference — 전체 파라미터