💬 LLM은 “다음 단어를 확률로 예측하는 똑똑한 계산기”이고,
💬 Transformer는 “문장 전체를 한눈에 보고 관계를 계산하는 뇌 구조”,
💬 Token은 “LLM이 세상을 이해하는 최소 단위”입니다.
💬 그리고 GPT-4o는 이 모든 걸 통합해,
글·그림·소리를 동시에 이해하는 “만능 언어 모델”로 발전했습니다.
1. 먼저 OpenAI 라이브러리를 설치합니다.
pip install openai -q
from google.colab import userdata
try:
api_key = userdata.get('OPENAI_API_KEY')
print("✅ API Key 불러오기 성공")
print(f"키 앞 4자리: {api_key[:4]}...") # 확인용
except Exception as e:
print(f"❌ API Key를 불러올 수 없습니다: {e}")
print("Colab의 🔑 Secrets 메뉴에서 'OPENAI_API_KEY'를 등록했는지 확인하세요.")
2. 라이브러리 import하기
# 맨처음에 라이브러리 import
import os # openai API 키를 받아오기 위한 라이브러리
from openai import OpenAI # openai의 api를 사용하기 위한 라이브러리
3. api키 적용하기
# 이 api를 해당 코드에 적용을 하겠다.
os.environ['OPENAI_API_KEY'] = ''
4. GPT 모델과 통신할 수 있는 클라이언트(client) 객체를 생성합니다.
# 머신러닝 모델 사용한것과 비슷하게
# model = logisticregression()
client = OpenAI()
5. 이제 ChatGPT 모델을 불러와 대화 내용을 생성합니다.
(여기서는 gpt-4o-mini 모델을 사용했습니다.)
이 부분을 변경하여 다양한 프롬프트를 생성할 수 있습니다.
# chatgpt가 응답을 하는 변수
response = client.chat.completions.create(
model = 'gpt-4o-mini', # model은 gpt 4o mini
messages = [{
'role' : 'user',
'content' : '안녕 ChatGPT'
}] # 챗봇 설정 우리가 chatgpt에게 안녕 ChatGPT라고 입력!
)
# response '안녕 ChatGPT'에 대한 결과값이 들어있음
6. ChatGPT가 생성한 결과를 출력합니다.
print(response.choices[0].message.content)
실전 예제
- role과 system 부여
conversation = [
{"role": "system", "content": "너는 에세이 전문가야. 대형 출판업계 전문가 역할을 해줘"}, # 전반적인 대화의 맥락
{"role": "user", "content": "에세이를 처음 쓰는데, 어떻게 작성해야할지 모르겠어요."}, # 첫번째 질문
{"role": "assistant", "content": "주제를 정하고 나면 어떻게 도입부를 시작하는 게 좋을까요?"}, # ai가 답변할만한 답변을 예상해서 적음
{"role": "user", "content": "잘 읽히는 글을 쓰고 싶어요."}, # 두번째 질문
{"role": "assistant", "content": "주제를 정하고 나면 어떻게 도입부를 시작하는 게 좋을까요?"}, # ai가 답변할만한 답변을 예상해서 적음
{"role": "user", "content": "잘 읽히는 글을 쓰고 싶어요."}, # 세번째 질문
{"role": "assistant", "content": "가장 많이 판매된 작품에 대한 예시와 이유를 분석해서 설명해줄래요?"}, # ai가 답변할만한 답변을 예상해서 적음
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=conversation,
temperature=0.6
)
print(response.choices[0].message.content)
- 프롬프트 가이드
from openai import OpenAI
# 1. 사용자 역할 설정
my_role = "여행 가이드"
# 2. 사용자 질문 입력
user_input = input("✈️ 여행 관련 질문을 입력하세요: ")
# 3. System 프롬프트 구성
system_prompt = f"""
너는 {my_role}야.
한국인 여행자를 위한 맞춤 여행 설계 전문가로 행동해줘.
[가이드라인]
- 여행 지역, 기간, 예산, 동반자 정보를 파악해 일정 구성
- 교통수단·음식·숙소·계절 정보 포함
- 현실적인 이동 동선 고려
- 응답은 아래 형식으로 정리
[응답 형식]
1️⃣ 여행 개요
2️⃣ 추천 일정 (일자별)
3️⃣ 추천 음식·명소
4️⃣ 여행 꿀팁과 주의사항
"""
# 4. ChatGPT 호출
res = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
]
)
# 5. 출력
print("\n🌍 여행 가이드의 추천:")
print(res.choices[0].message.content)
- 나에게 잘 맞는 temperature와 top_p 범위 파악하기
prompt = "인공지능이 사회에 미칠 영향에 대해 설명해줘."
settings = [
{"temperature": 0.2, "top_p": 0.5, "desc": "분석형"},
{"temperature": 0.9, "top_p": 1.0, "desc": "창의형"}
]
for s in settings:
res = client.chat.completions.create(
model="gpt-4o-mini",
temperature=s["temperature"],
top_p=s["top_p"],
max_tokens=150,
messages=[
{"role": "system", "content": "너는 사회학자야."},
{"role": "user", "content": prompt}
]
)
print(f"\n🧭 모드: {s['desc']}\n{res.choices[0].message.content}\n")
temperature와 top_p에 따른 차이점 분석
더보기
prompt = "기록이 인간의 생태계에 미칠 영향에 대해 설명해줘."
settings = [
{"temperature": 0.1, "top_p": 0.2, "desc": "매우 안정형 (예측 중심)"},
{"temperature": 0.2, "top_p": 0.3, "desc": "안정형"},
{"temperature": 0.3, "top_p": 0.4, "desc": "분석형"},
{"temperature": 0.4, "top_p": 0.5, "desc": "균형형 (안정성 위주)"},
{"temperature": 0.5, "top_p": 0.6, "desc": "균형형 (안정성+다양성)"},
{"temperature": 0.6, "top_p": 0.7, "desc": "조금 창의적"},
{"temperature": 0.7, "top_p": 0.8, "desc": "창의형"},
{"temperature": 0.8, "top_p": 0.85, "desc": "매우 창의적"},
{"temperature": 0.9, "top_p": 0.9, "desc": "자유로운 창의형"},
{"temperature": 1.0, "top_p": 1.0, "desc": "완전 창의형 (다양성 극대)"}
]
for s in settings:
res = client.chat.completions.create(
model="gpt-4o-mini",
temperature=s["temperature"],
top_p=s["top_p"],
max_tokens=150,
messages=[
{"role": "system", "content": "너는 기록학자야."},
{"role": "user", "content": prompt}
]
)
print(f"\n🧭 모드: {s['desc']}\n{res.choices[0].message.content}\n")
1️⃣ Temperature (0.0 ~ 1.0)
- 의미: 모델이 다음 단어를 선택할 때 불확실성을 얼마나 허용할지 결정
- 낮을수록(0~0.3):
- 선택지가 제한적 → 예측 가능, 안정적, 반복적인 표현
- 분석적, 사실 기반, 정답 위주 답변이 많음
- ex: "기록은 정보를 남기고, 사회 구조를 유지하는 역할을 한다."
- 중간(0.4~0.6):
- 어느 정도 창의성과 안정성을 균형 → 안정성+약간의 다양성
- ex: "기록은 인간의 기억과 경험을 이어주는 매개체로, 사회적 관계에 영향을 미친다."
- 높을수록(0.7~1.0):
- 선택 폭이 넓음 → 창의적, 예상치 못한 표현, 다양성
- 문장 구조나 단어 선택이 자유로움
- ex: "기록은 인간 생태계의 흐름 속에 은밀한 파동을 만들어, 생각과 관계의 지도를 바꾼다."
2️⃣ Top_p (0.0 ~ 1.0, nucleus sampling)
- 의미: 모델이 단어를 선택할 때 상위 확률 토큰을 누적하여 p 이상이 될 때까지만 후보로 고려
- 낮을수록(0~0.5):
- 선택 가능한 단어가 제한 → 예측 가능, 안정적
- 낮은 top_p + 낮은 temperature → 거의 정형화된 답
- 중간(0.5~0.8):
- 상위 토큰 50~80% 범위 내에서 다양성 허용 → 균형형 답변
- 높을수록(0.9~1.0):
- 거의 모든 토큰 후보 고려 → 창의적, 예상치 못한 단어 선택 가능
- temperature가 높으면 더욱 자유롭게 변주
🔹 요약
조합특징예시
| 낮은 temp + 낮은 top_p | 안정적, 예측 가능 | “기록은 정보를 남기고 사회적 구조를 유지한다.” |
| 중간 temp + 중간 top_p | 안정성과 다양성 균형 | “기록은 인간의 기억과 경험을 이어주는 매개체다.” |
| 높은 temp + 높은 top_p | 창의적, 예상치 못한 표현 | “기록은 인간 생태계의 흐름 속에 은밀한 파동을 만들어 관계의 지도를 바꾼다.” |
💡 직관적인 이해:
- temperature → 창의성 강도
- top_p → 선택 범위 폭
- 둘 다 높으면 완전 자유로운 답변, 둘 다 낮으면 예측 가능한 안전 답변
728x90
'개발 > AI&Chatbot' 카테고리의 다른 글
| Day11. 메모리를 저장하는 LLM 챗봇 (0) | 2025.10.29 |
|---|---|
| Day 10. Role, Goal, Style 설정하기 (0) | 2025.10.28 |
| Day 05 - 머신러닝 (0) | 2025.10.20 |
| 예제를 활용한 복습(변수/조건문/반복문/리스트/함수) (0) | 2025.10.16 |
| Day04. 모듈 / NumPy / Pandas (0) | 2025.10.16 |