OpenAI의 텍스트 생성 모델(Generative Pre-trained Transformers 또는 대규모 언어 모델)은 자연어, 코드, 이미지 등을 이해하도록 훈련되었습니다. 이 모델들은 입력에 대한 텍스트 출력을 제공합니다. 이러한 텍스트 입력은 "프롬프트(prompt)"라고도 불리며, 프롬프트를 설계하는 것은 대규모 언어 모델을 프로그래밍하는 방법입니다. 일반적으로 지침이나 작업을 성공적으로 완료하는 예제를 제공하는 방식으로 이루어집니다.
OpenAI의 텍스트 생성 모델을 사용하면 다음과 같은 응용 프로그램을 구축할 수 있습니다:
- 문서 초안 작성 ✍️
- 컴퓨터 코드 작성 💻
- 지식 기반에 대한 질문 답변 ❓
- 텍스트 분석 📊
- 소프트웨어에 자연어 인터페이스 제공 🖥️
- 다양한 과목에 대한 튜터링 📚
- 언어 번역 🌐
- 게임 캐릭터 시뮬레이션 🎮
🛠️ GPT-4o 체험하기
https://platform.openai.com/playground?mode=chat&model=gpt-4o
GPT-4o를 Playground에서 체험해보세요. 이미지 입력과 함께 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 솔루션을 만들어 보세요. 😊
'AI > LLM' 카테고리의 다른 글
[LLM] 왜 대부분의 대형 언어 모델(LLM)은 디코더 전용일까? 🤔 (0) | 2024.06.19 |
---|---|
[LLM]🌟 언어 모델에서 토큰(Token)이란 무엇인가? (0) | 2024.06.17 |
[LLM] 📊 Base LLM vs Instruction-Tuned LLM (1) | 2024.06.15 |
[Transformer] 트랜스포머 포지셔널 인코딩 (Positional Encoding) 쉽게 설명하기 📏 (3) | 2024.05.30 |
[Transformer] Transformer 트랜스포머 모델: 인코더와 디코더의 자세한 순서별 설명 📚 (2) | 2024.05.29 |