Today, I will

[OpenAI API] Completion mode vs Chat mode 차이점과 Chat mode 키워드 정리 본문

Computer Science/인공지능,딥러닝

[OpenAI API] Completion mode vs Chat mode 차이점과 Chat mode 키워드 정리

Lv.Forest 2025. 3. 17. 17:04

Completion 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 호출 방식이 사용되었다.

  1. Completion Mode (기본 텍스트 생성)
    • GPT-3.5-turbo-instruct 모델을 사용
    • prompt에 직접 지시문을 입력
    • 명령을 수행하는 전통적인 방식 (GPT-3까지 사용된 텍스트 기반 프롬프트)
  2. response = openai.completions.create( model="gpt-3.5-turbo-instruct", prompt="다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋군요!", max_tokens=256, )
  3. Chat Mode (대화 기반)
    • GPT-4o-mini 모델을 사용
    • messages 리스트를 사용해 대화 문맥을 전달 (역할을 구분)
    • 대화형 AI (GPT-4, GPT-4o 등 최신 모델들이 사용하는 방식)
  4. 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 조정을 통해 응답 스타일을 조절 가능! 🎯🔥