텍스트 생성

텍스트 생성 (Text generation)

OpenAI API로는 대규모 언어 모델을 써서 프롬프트로 텍스트를 생성할 수 있어요. ChatGPT를 쓰는 것처럼요. 모델은 코드, 수학 방정식, 구조화된 JSON, 사람 같은 산문 등 거의 모든 종류의 텍스트를 만들 수 있어요.

출처: 문서

본문

이런 텍스트 생성 호출 같은 직접 모델 요청에는 Responses API를 사용해요.

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Write a one-sentence bedtime story about a unicorn.",
)

print(response.output_text)

모델이 생성한 콘텐츠 배열은 응답의 output 속성에 들어 있어요. 그런데 output 배열에는 항목이 하나 이상인 경우가 많아요! 도구 호출, reasoning 모델이 생성한 reasoning 토큰 데이터 등이 들어갈 수 있어요. 그래서 텍스트 출력이 반드시 output[0].content[0].text에 있다고 가정하면 안 돼요. 일부 공식 SDK는 편의상 output_text 속성을 제공해 모델의 모든 텍스트 출력을 하나의 문자열로 모아줘요. 일반 텍스트뿐 아니라 모델이 JSON 형식의 구조화된 데이터를 반환하게 할 수도 있는데, 이 기능을 Structured Outputs라고 불러요.

프롬프트 엔지니어링

프롬프트 엔지니어링은 모델의 조건을 일관되게 충족하는 콘텐츠를 생성하도록, 모델을 위한 효과적인 지시를 작성하는 과정이에요. 모델 생성 콘텐츠는 비결정적이라 원하는 출력을 얻는 프롬프팅은 예술과 과학의 결합이에요. 하지만 기법과 모범 사례를 적용하면 좋은 결과를 일관되게 얻을 수 있어요. 메시지 역할처럼 모든 모델에 적용되는 기법도 있지만, 모델마다 최상의 결과를 위해 프롬프팅 방식이 다를 수 있어요. 같은 계열의 다른 스냅샷조차 다른 결과를 낼 수 있어요. 그래서 복잡한 앱을 만들수록 다음을 강력히 권장해요.

  • 운영 앱을 특정 모델 스냅샷(예: gpt-5.5-2026-04-23)에 고정해서 일관된 동작을 보장해요.
  • 프롬프트 동작을 측정하는 테스트·평가 스위트를 만들어, 반복하거나 모델 버전을 바꿀 때 성능을 모니터링해요.

모델과 API 고르기

OpenAI에는 다양한 모델과 여러 API가 있어요. gpt-6-astra 같은 reasoning 모델은 채팅 모델과 다르게 동작하고 다른 프롬프트에 더 잘 반응해요. 중요한 점은 reasoning 모델이 Responses API에서 더 잘 수행하고 더 높은 지능을 보인다는 거예요. 텍스트 생성 앱을 만든다면 이전 Chat Completions API보다 Responses API를 권장해요. reasoning 모델을 쓴다면 Responses로 마이그레이션하는 게 특히 유용해요.

메시지 역할과 지시 따르기

instructions API 파라미터와 메시지 역할로, 모델에게 서로 다른 권위 수준의 지시를 줄 수 있어요. instructions 파라미터는 응답을 생성할 때 어떻게 행동할지에 대한 상위 수준 지시를 주고 톤·목표·올바른 응답 예시를 포함해요. 이렇게 준 지시는 input 파라미터의 프롬프트보다 우선해요. instructions는 현재 응답 생성 요청에만 적용된다는 점을 유의하세요. previous_response_id 파라미터로 대화 상태를 관리한다면, 이전 턴에서 쓴 instructions는 컨텍스트에 남지 않아요.

OpenAI 모델 스펙은 서로 다른 역할의 메시지에 모델이 부여하는 우선순위를 설명해요.

developer user assistant
앱 개발자가 제공하는 지시로, user 메시지보다 우선해요. 최종 사용자가 제공하는 지시로, developer 메시지보다 뒤에 처리돼요. 모델이 생성하는 메시지의 역할이에요.

developer와 user 메시지는 프로그래밍 언어의 함수와 그 인자로 생각할 수 있어요. developer 메시지는 함수 정의처럼 시스템의 규칙·비즈니스 로직을, user 메시지는 함수의 인자처럼 developer 지시가 적용될 입력·설정을 제공해요. 멀티턴 대화는 이런 유형의 여러 메시지로 구성될 수 있어요. 대화 상태 관리를 자세히 볼 수 있어요.

코드에서 프롬프트 버전 관리하기

운영 프롬프트는 재사용 가능한 프롬프트 객체 대신 앱 코드에 저장해요. 코드로 관리하는 프롬프트는 타입 있는 입력, 코드 리뷰, 테스트, 일반적인 배포 프로세스로 모델 동작을 바꿀 수 있게 해줘요. OpenAI는 API에서 재사용 가능한 프롬프트 객체를 폐기하고 있어요. 프롬프트 생성은 2026년 6월 3일부터 비중이 줄어들고, v1/prompts는 2026년 11월 30일에 종료될 예정이에요. 자세한 일정은 deprecations 페이지를 확인하세요.

새 텍스트 생성 작업에서는:

  • 프롬프트 빌더를 기능 옆의 작은 모듈에 두세요.
  • 고객 데이터·파일·과업 옵션 같은 동적 값은 타입 있는 함수 인자나 스키마를 쓰세요.
  • 생성한 instructions와 input을 Responses API에 직접 전달하세요.
  • 운영 프롬프트를 바꾸기 전에 대표적인 fixture·테스트·평가 체크를 추가하세요.
  • 프롬프트 변경은 배포 시스템으로 롤아웃하고, 단계적 릴리스가 필요하면 feature flag나 설정을 쓰세요.

이미 프롬프트 ID나 버전으로 저장된 프롬프트를 호출하고 있다면, 프롬프트 객체 마이그레이션 가이드로 그 프롬프트를 코드로 옮기세요.

더 알아보기 (Learn more)