텍스트 생성하기

텍스트 생성하기 (Generate Text)

Grok 모델과 대화를 주고받으면서 텍스트를 만들어 내는 가장 기본적인 방법을 다뤄요. xAI는 최근 모델과의 상호작용 방식을 Responses API 중심으로 권장하는데, 이 방식의 핵심은 '대화 상태를 서버에 저장해 둘 수 있다'는 점이에요. 전체 히스토리를 매번 다시 보내는 대신, 이전 응답의 ID만으로 대화를 이어 갈 수 있죠.

출처: xAI 공식 문서 — Generate Text

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로 조회하거나 삭제할 수 있어요.

더 알아보기