텍스트 생성하기
텍스트 생성하기 (Generate Text)
Grok 모델과 대화를 주고받으면서 텍스트를 만들어 내는 가장 기본적인 방법을 다뤄요. xAI는 최근 모델과의 상호작용 방식을 Responses API 중심으로 권장하는데, 이 방식의 핵심은 '대화 상태를 서버에 저장해 둘 수 있다'는 점이에요. 전체 히스토리를 매번 다시 보내는 대신, 이전 응답의 ID만으로 대화를 이어 갈 수 있죠.
Responses API는 왜 상태를 저장할까
기존 Chat Completions 방식은 무상태(stateless)라서 매 요청에 지금까지의 모든 메시지를 다시 실어 보내야 해요. Responses API는 옵션으로 상태 유지 상호작용을 지원해서, 이전 프롬프트·추론 내용·모델 응답이 xAI 서버에 저장되고 다음 요청에서는 새 메시지만 덧붙이면 됩니다.
- 저장된 응답은 30일 뒤 자동 삭제돼요. 이 기간 안에는 응답 ID로 대화를 이어 가거나 조회할 수 있어요.
- 30일이 지난 뒤에도 대화를 이어 가려면, 응답 히스토리와 암호화된 사고 내용을 로컬에 저장해 두고 새 요청 본문에 함께 넘겨야 합니다.
- 서버에 저장하고 싶지 않다면 요청에
store: false를 주면 돼요.
파이썬에서는 모든 기능을 지원하는 xAI SDK를 쓸 수 있어요. SDK는 gRPC 기반이라 성능이 좋고, 컬렉션·Voice API·API 키 관리 등 제품 전반을 다룹니다.
첫 응답 만들기
API 키를 xAI Console에서 발급받아 XAI_API_KEY 환경변수로 설정했다고 가정할게요.
import os
from xai_sdk import Client
from xai_sdk.chat import user, system
client = Client(
api_key=os.getenv("XAI_API_KEY"),
management_api_key=os.getenv("XAI_MANAGEMENT_API_KEY"),
timeout=3600,
)
chat = client.chat.create(model="grok-4.6")
chat.append(system("You are Grok, an AI agent built to answer helpful questions."))
chat.append(user("How big is the universe?"))
response = chat.sample()
print(response)
# 나중에 대화를 이어 갈 때 쓸 수 있는 응답 ID
print(response.id)
서버 저장 끄기
store: false를 지정하면 이전 요청/응답이 서버에 저장되지 않아요. SDK에서는 store_messages=False로 지정합니다.
chat = client.chat.create(model="grok-4.6", store_messages=False)
암호화된 사고 내용 받기
추론 트레이스를 암호화된 형태로 돌려받고 싶다면 SDK나 gRPC 요청에 use_encrypted_content=True를, 요청 본문에는 include: ["reasoning.encrypted_content"]를 지정하면 돼요. 단, 반드시 추론 모델(reasoning model)을 사용해야 합니다.
chat = client.chat.create(model="grok-4.6", use_encrypted_content=True)
대화 이어 가기
첫 응답의 id를 확보했다면, 다음 요청에서 previous_response_id에 그 ID를 넘기고 새 메시지만 덧붙이면 돼요.
chat = client.chat.create(
model="grok-4.6",
previous_response_id=response.id,
store_messages=True,
)
chat.append(user("How do stars form?"))
second_response = chat.sample()
추론 모델을 쓸 때는 chat.append(response)로 이전 응답을 그대로 넣으면 SDK가 자동으로 응답 출력을 메시지 히스토리에 반영합니다.
저장된 응답 조회·삭제
response = client.chat.get_stored_completion("<이전 응답 ID>")
response = client.chat.delete_stored_completion("<이전 응답 ID>")
저장된 응답은 이렇게 ID로 조회하거나 삭제할 수 있어요.
더 알아보기
- 추론 (Reasoning) — reasoning_effort 파라미터
- 스트리밍 (Streaming) — 실시간 출력
- 구조화 출력 (Structured Outputs)
- 모델 (Models) — 사용 가능한 모델 비교