일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- node
- EnhancedInput
- 마인크래프트뮤지컬
- VUE
- 게임개발
- Unseen
- 언리얼
- 미니프로젝트
- 알고풀자
- 레베카
- 카렌
- Express
- 으
- 프메
- R
- 프린세스메이커
- 언리얼프로그래머
- Jinja2
- flask
- JWT
- Bootstrap4
- 스마일게이트
- 정글사관학교
- 언리얼뮤지컬
- 데이터베이스
- 파이썬서버
- 디자드
- 스터디
- Ajax
- Enhanced Input System
- Today
- Total
Today, I will
[OpenAI API] Completion mode vs Chat mode 차이점과 Chat mode 키워드 정리 본문
[OpenAI API] Completion mode vs Chat mode 차이점과 Chat mode 키워드 정리
Lv.Forest 2025. 3. 17. 17:04Completion mode, 지시와 명령을 하나의 prompt로 전달
# Completion mode, 지시와 명령을 하나의 prompt로 전달
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# 텍스트 생성 요청을 보냅니다.
response = openai.completions.create(
model=“gpt-3.5-turbo-instruct",
prompt="다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!",
max_tokens=256, # 생성된 텍스트의 최대 길이를 설정합니다.
)
# 생성된 텍스트를 출력합니다.
print(response.choices[0].text)
Chat mode
Chat mode
# 표준적인 Chat completion mode
import openai
res = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군
요!"}],
temperature=0.5,
max_tokens=256,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
print(res.choices[0].message.content)
위 두 방식의 차이는 바로 아래와 같다.
📌 Completion mode vs Chat mode 차이점
위 코드에는 두 가지 다른 OpenAI API 호출 방식이 사용되었다.
- Completion Mode (기본 텍스트 생성)
- GPT-3.5-turbo-instruct 모델을 사용
- prompt에 직접 지시문을 입력
- 명령을 수행하는 전통적인 방식 (GPT-3까지 사용된 텍스트 기반 프롬프트)
- response = openai.completions.create( model="gpt-3.5-turbo-instruct", prompt="다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!", max_tokens=256, )
- Chat Mode (대화 기반)
- GPT-4o-mini 모델을 사용
- messages 리스트를 사용해 대화 문맥을 전달 (역할을 구분)
- 대화형 AI (GPT-4, GPT-4o 등 최신 모델들이 사용하는 방식)
- res = openai.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}], temperature=0.5, max_tokens=256, )
🔹 주요 차이점
구분 Completion Mode (completions.create) Chat Mode (chat.completions.create)
모델 유형 | gpt-3.5-turbo-instruct (전통적인 텍스트 모델) | gpt-4o-mini (대화형 모델) |
입력 형식 | prompt="명령어" (단순 텍스트) | messages=[{"role": "user", "content": "명령어"}] (대화형 메시지) |
출력 형식 | response.choices[0].text | response.choices[0].message.content |
주요 용도 | 명령 수행, 코드 생성, 텍스트 변환 등 | 대화형 응답, 문맥 유지, 챗봇 구현 |
지원 모델 | gpt-3.5-turbo-instruct | gpt-4, gpt-4o, gpt-3.5-turbo |
🔹 언제 Completion mode vs Chat mode를 사용?
✅ Completion Mode (completions.create)
- 단순한 텍스트 생성 (명령 수행) 작업에 적합
예) 번역, 코드 생성, 요약, 문서 자동화 등
✅ Chat Mode (chat.completions.create)
- 대화형 AI 구현이 필요할 때 적합
예) 챗봇, 문맥을 유지하는 AI 비서, 다중턴 대화
💡 최신 OpenAI 모델(GPT-4, GPT-4o)은 Chat Mode만 지원
즉, Completion Mode는 GPT-4에서는 동작하지 않고 GPT-3.5-turbo-instruct까지만 가능!
📌 결론
✔ Completion Mode는 GPT-3.5 기반으로 동작하며, 단순한 명령 실행에 적합
✔ Chat Mode는 GPT-4, GPT-4o 기반으로 동작하며, 대화형 AI 구현에 적합
✔ OpenAI는 점점 Chat Mode 중심으로 발전 중 → 최신 AI 모델(GPT-4o 등)을 사용하려면 Chat Mode 사용 필요! 🚀🔥
🔹 코드 전체 구조
res = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}],
temperature=0.5,
max_tokens=256,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
print(res.choices[0].message.content)
각 키워드의 역할을 하나씩 살펴보도록 한다.
🔹 주요 키워드 설명
✅ 1. openai.chat.completions.create()
- OpenAI의 Chat Completion API를 호출하는 함수.
- 대화형 AI 모델(GPT-4, GPT-4o 등)에서 사용.
📌 openai.completions.create()와 다름!
➡️ completions.create()는 GPT-3.5-turbo-instruct 같은 텍스트 생성 기반 모델에서 사용됨.
➡️ chat.completions.create()는 GPT-4o 같은 대화형 모델에서 사용됨.
✅ 2. model="gpt-4o-mini"
- 사용할 AI 모델을 지정하는 옵션.
- 현재 "gpt-4o-mini" 모델을 사용.
📌 다른 모델 옵션 예시
모델명 설명
"gpt-4o" | 최신 모델, 고성능, 빠른 응답 |
"gpt-4o-mini" | gpt-4o보다 더 작고 가벼운 버전 (비용 절약 가능) |
"gpt-3.5-turbo" | GPT-3.5 기반, 저렴한 비용 |
✅ 3. messages=[...]
- AI에게 전달할 대화 메시지 리스트.
- 메시지는 역할(role)과 내용(content)을 포함해야 함.
📌 구성 요소
messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!"}]
키 설명
"role" | 메시지를 보낸 주체 ("user", "assistant", "system") |
"content" | AI에게 전달할 실제 내용 |
📌 role 값 종류
"role" 값 역할
"system" | AI의 동작을 정의하는 시스템 메시지 (명령어) |
"user" | 사용자가 입력한 메시지 |
"assistant" | AI의 응답 메시지 |
📌 예제: 역할 구분된 메시지 전달
messages=[
{"role": "system", "content": "너는 전문적인 일본어 번역가야."},
{"role": "user", "content": "다음을 일본어로 번역해줘: 안녕하세요?"},
{"role": "assistant", "content": "こんにちは。"}
]
➡️ 이렇게 하면 AI가 문맥을 유지하면서 대화할 수 있음.
OpenAI의 role
• system: 주로 채팅 대화의 시작 부분에 사용되며, 시스템 역할로 제공된 메시지는 Assistant에게 초기 컨텍 스트를 제공하고 작동 방식을 지정. 예) 당신은 과학에 대한 전문가입니다.
• user: 사용자 역할은 API를 호출하는 클라이언트 측 역할. 이 역할은 Assistant에게 질문을 하거나 지시를 내릴 때 사용. 예) 과학 분야에서 어떤 발전이 있었나요?
• assistant: Assistant는 사용자 역할로부터 받은 메시지에 대답하고 정보를 제공하는 역할. 예) 새로운 에너 지 저장 기술에 대해 이야기해드릴게요.
• function: Function 역할은 Assistant가 호출로 실행할 작업을 정의할 때 사용. 주로 외부의 API와 LLM을 연동하기 위한 목적으로 사용됨
✅ 4. temperature=0.5
- AI의 창의성을 조절하는 옵션.
- 값이 낮을수록(0에 가까울수록) 더 일관되고 정형화된 답변을 생성.
- 값이 높을수록(1에 가까울수록) 더 창의적인 답변을 생성.
📌 예제
temperature 값 응답 스타일
0.0 | 항상 동일한 번역 (정확한 답변) |
0.5 | 약간 변형된 답변 가능 (기본값) |
1.0 | 창의적인 번역 가능 (유동적인 표현) |
✅ 5. max_tokens=256
- AI가 생성할 최대 토큰 수(단어 개수와 비슷한 개념).
- 하나의 토큰은 1개 단어 또는 1개 음절 정도의 길이를 가짐.
📌 예제
max_tokens 값 응답 길이
10 | 매우 짧은 답변 |
256 | 중간 길이의 문장 |
1000 | 긴 문장 가능 (비용 증가) |
✅ 6. top_p=1
- AI가 답변을 생성할 때 다양성을 조절하는 옵션.
- 0~1 사이 값을 사용 (기본값 1).
📌 top_p 동작 방식
- 1 (기본값) → 확률적으로 높은 단어 중에서 선택.
- 0.5 → 상위 50% 확률 단어에서만 선택 (더 보수적인 응답).
- 0.1 → 매우 제한적인 단어만 선택 (거의 같은 답변).
📌 보통 temperature와 함께 조정하지만, 둘 중 하나만 조절하는 게 좋음.
- temperature=0.7이면 top_p=1 유지.
- temperature=0.0이면 top_p=0.1처럼 설정 가능.
✅ 7. frequency_penalty=0
- 같은 단어의 반복을 줄이는 옵션 (-2.0 ~ 2.0 값 가능).
- 값이 높을수록 같은 단어를 반복하지 않도록 조절.
📌 예제
frequency_penalty 값 결과
0 (기본값) | 반복을 신경 쓰지 않음 |
0.5 | 반복을 줄이도록 유도 |
2.0 | 같은 단어가 거의 나오지 않도록 조절 |
✅ 8. presence_penalty=0
- 새로운 주제를 도입하도록 유도하는 옵션 (-2.0 ~ 2.0 값 가능).
- 값이 높을수록 이전 문맥과 다른 내용을 생성하려고 함.
📌 예제
presence_penalty 값 결과
0 (기본값) | 문맥 유지 |
1.0 | 새로운 내용을 조금 더 도입하려고 시도 |
2.0 | 완전히 다른 내용을 생성하도록 유도 |
📌 보통 frequency_penalty와 함께 조정하여 응답 스타일을 컨트롤함.
- 반복을 줄이면서 새로운 아이디어를 유도하려면 presence_penalty=0.5 정도 설정 가능.
Hyper parameters (Chat mode 기준)
• temperature: 생성 시 다양성을 조절하는 매개변수 (0~1)
• max_tokens: 생성된 텍스트의 최대 토큰 수
• stop: 종료 토큰(End-of-Sequence)을 나타내는 토큰의 리스트
• top_p: 다음 단어 선택 시 고려되는 확률 분포의 크기를 지정하는 매개변수 (0.1~1) 예) 0.8 -> 상위 80%의 확률을 가진 token 중 다음 단어를 선택
• frequency_penalty: 단어 반복에 대해서 패널티를 주어서 반복하지 않게 하는 매개변수
• presence_penalty: 새 토큰에 대한 출현빈도를 낮추기 위한 매개변수
✅ 9. print(res.choices[0].message.content)
- AI의 응답을 출력하는 코드.
📌 res.choices의 구조:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "こんにちは。今日はとてもいい天気ですね!"
}
}
]
}
📌 따라서, AI의 응답을 가져오려면:
print(res.choices[0].message.content)
➡️ AI가 생성한 번역 문장이 출력됨! 🎯
📌 최종 정리
키워드 설명
model | 사용할 AI 모델 (gpt-4o-mini) |
messages | 대화 내용 (user, assistant, system 역할 가능) |
temperature | 창의성 조절 (낮을수록 보수적) |
max_tokens | 응답 길이 제한 |
top_p | 확률적으로 다양한 단어 선택 |
frequency_penalty | 반복 단어 줄이기 |
presence_penalty | 새로운 주제 도입 유도 |
💡 핵심:
- messages는 대화 문맥을 유지하기 위해 사용됨.
- temperature와 top_p를 함께 조절하면 응답 스타일을 변경할 수 있음.
- frequency_penalty와 presence_penalty로 반복을 줄이거나 새로운 아이디어를 유도할 수 있음.
🚀 결론
✔ 이 코드는 GPT-4o-mini를 사용하여 한국어 문장을 일본어로 번역하는 기능을 수행.
✔ OpenAI의 Chat Mode API를 활용하여 대화형 응답을 받을 수 있음.
✔ temperature, top_p, frequency_penalty, presence_penalty 조정을 통해 응답 스타일을 조절 가능! 🎯🔥
'Computer Science > 인공지능,딥러닝' 카테고리의 다른 글
[OpenAI API] LLM 스트리밍 API (stream=True) (0) | 2025.03.17 |
---|---|
허깅페이스 한국어 데이터셋 (1) | 2024.11.12 |
[인공지능 셋업] M1 및 M2와 같은 Apple Silicon에서 PyTorch MPS 가속 (0) | 2024.10.31 |
[인공지능] 텐서플로로 선형 회귀 모델 학습하기: 경사 하강법을 이용한 최적화 (0) | 2024.10.30 |
[인공지능] 경사하강법 (0) | 2024.10.30 |