본문 바로가기
AI/LLM

[LLM] 🌟 OpenAI 텍스트 생성 API: 시작하기

by 데이터 벌집 2024. 6. 15.
반응형

OpenAI의 텍스트 생성 모델(Generative Pre-trained Transformers 또는 대규모 언어 모델)은 자연어, 코드, 이미지 등을 이해하도록 훈련되었습니다. 이 모델들은 입력에 대한 텍스트 출력을 제공합니다. 이러한 텍스트 입력은 "프롬프트(prompt)"라고도 불리며, 프롬프트를 설계하는 것은 대규모 언어 모델을 프로그래밍하는 방법입니다. 일반적으로 지침이나 작업을 성공적으로 완료하는 예제를 제공하는 방식으로 이루어집니다.

 

[LLM] 🌟 OpenAI 텍스트 생성 API: 시작하기

 

OpenAI의 텍스트 생성 모델을 사용하면 다음과 같은 응용 프로그램을 구축할 수 있습니다:

  • 문서 초안 작성 ✍️
  • 컴퓨터 코드 작성 💻
  • 지식 기반에 대한 질문 답변 ❓
  • 텍스트 분석 📊
  • 소프트웨어에 자연어 인터페이스 제공 🖥️
  • 다양한 과목에 대한 튜터링 📚
  • 언어 번역 🌐
  • 게임 캐릭터 시뮬레이션 🎮

🛠️ GPT-4o 체험하기

https://platform.openai.com/playground?mode=chat&model=gpt-4o

 

GPT-4o를 Playground에서 체험해보세요. 이미지 입력과 함께 GPT-4o를 탐색하려면 비전 가이드를 참조하세요.

🛠️ GPT-4o 체험하기

 

 

OpenAI API를 통해 이러한 모델 중 하나를 사용하려면 입력과 API 키를 포함한 요청을 Chat Completions API에 보내고, 모델의 출력을 포함한 응답을 받게 됩니다. 다양한 모델을 Chat Playground에서 실험해볼 수 있습니다. 어떤 모델을 사용할지 확신이 서지 않는다면, 높은 지능이 필요할 경우 GPT-4o를, 빠른 속도와 낮은 비용이 필요할 경우 gpt-3.5-turbo를 사용해보세요.

 

🗨️ Chat Completions API

Chat 모델은 메시지 목록을 입력으로 받고 모델 생성 메시지를 출력으로 반환합니다. 이 포맷은 멀티 턴 대화를 쉽게 만들어주지만, 단일 턴 작업에도 유용합니다.

Chat Completions API 호출 예시:

import openai
import os
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv('OPENAI_API_KEY')

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "2020년 월드 시리즈에서 누가 우승했나요?"},
    {"role": "assistant", "content": "2020년 월드 시리즈는 로스앤젤레스 다저스가 우승했습니다."},
    {"role": "user", "content": "경기는 어디서 열렸나요?"}
  ]
)
print(response.choices[0].message['content'])

주요 입력 파라미터

  • messages: 메시지 객체 배열로, 각 객체는 role(system, user, assistant 중 하나)과 content를 포함해야 합니다. 대화는 하나의 메시지부터 여러 번의 주고받는 턴까지 다양할 수 있습니다.
  • 시스템 메시지: 어시스턴트의 행동을 설정하는 데 도움을 줍니다. 어시스턴트의 성격을 수정하거나 특정 지침을 제공할 수 있습니다. 시스템 메시지는 선택 사항이며, 시스템 메시지 없이도 모델의 행동은 일반적인 "You are a helpful assistant"와 비슷합니다.
  • 유저 메시지: 어시스턴트가 응답할 요청이나 댓글을 제공합니다.
  • 어시스턴트 메시지: 이전 어시스턴트 응답을 저장하지만, 원하는 행동 예제를 제공하기 위해 작성될 수도 있습니다.

대화 내역 포함의 중요성

대화 내역을 포함하는 것은 유저의 지시가 이전 메시지와 관련이 있을 때 중요합니다. 예를 들어, "경기는 어디서 열렸나요?"라는 마지막 질문은 이전의 2020년 월드 시리즈에 관한 메시지와 함께 있어야만 의미가 있습니다. 모델은 이전 요청의 기억이 없기 때문에 모든 관련 정보를 각 요청의 대화 내역으로 제공해야 합니다.

 

📝 JSON 모드

Chat Completions는 JSON 객체를 항상 반환하도록 모델을 지시할 수 있습니다. GPT-4o, gpt-4-turbo, gpt-3.5-turbo를 사용할 때 response_format을 { "type": "json_object" }로 설정하여 JSON 모드를 활성화할 수 있습니다. 이렇게 하면 모델이 유효한 JSON 객체로 구문 분석될 수 있는 문자열만 생성하도록 제한됩니다.

import openai
import os
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv('OPENAI_API_KEY')

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  response_format={"type": "json_object"},
  messages=[
    {"role": "system", "content": "You are a helpful assistant designed to output JSON."},
    {"role": "user", "content": "2020년 월드 시리즈에서 누가 우승했나요?"}
  ]
)
print(response.choices[0].message['content'])

 

이 예제에서, 응답은 다음과 같은 JSON 객체를 포함합니다:

{
  "content": "{\"winner\": \"Los Angeles Dodgers\"}"
}

 

💡 토큰 관리

언어 모델은 텍스트를 토큰이라는 청크로 읽고 씁니다. 예를 들어, "ChatGPT is great!"라는 문자열은 6개의 토큰으로 인코딩됩니다: ["Chat", "G", "PT", " is", " great", "!"].

API 호출에서 사용되는 총 토큰 수는 다음에 영향을 미칩니다:

  • API 호출 비용 💸
  • API 호출 시간 ⏳
  • 모델의 최대 토큰 수 제한 (예: gpt-3.5-turbo는 4097 토큰)

입력 및 출력 토큰 모두 이 수량에 포함됩니다. 예를 들어, 메시지 입력에 10개의 토큰을 사용하고 메시지 출력에 20개의 토큰을 받으면 총 30개의 토큰에 대해 청구됩니다. 일부 모델에서는 입력과 출력 토큰의 가격이 다를 수 있습니다.

 

마무리 🎉

OpenAI의 텍스트 생성 API를 통해 다양한 응용 프로그램을 구축하고 AI와의 상호작용을 최적화할 수 있습니다. 프롬프트 설계, 대화 내역 관리, JSON 모드 사용 등 다양한 기능을 활용하여 더욱 효율적인 AI 솔루션을 만들어 보세요. 😊

반응형