본문 바로가기
  • 컴공생의 공부 일기
  • 공부보단 일기에 가까운 것 같은
  • 블로그
🤖 AI/AI

🥶 OpenAI_endpoints_chat 매개변수 탐구

by 정람지 2025. 1. 3.

TODO

- LLM_newbie : temperature 

- LLM_newbie : top_p 

- LLM_newbie : role 

- LLM_newbie : stream 

- 우분투 이모지 깔기 / 단축키 설정 ✅

- 모델 리마인드 

 

 

LLM_practice/GPT_tutorial at main · Goldchae/LLM_practice

viuron 연습 . Contribute to Goldchae/LLM_practice development by creating an account on GitHub.

github.com


📥️ temperature

import os
api_key = os.getenv("OPENAI_API_KEY")
from openai import OpenAI
client = OpenAI(api_key=api_key)


def test_temperature(temp):
    chat_completion = client.chat.completions.create(
        messages=[
            {
                "role": "user",
                "content": "한 마디 해줘."
            }
        ],
        model="gpt-4o-mini",
        temperature = temp
    )
    
    print(chat_completion.choices[0].message.content)

# 낮을수록 more focused and deterministic 
test_temperature(0)

# 높을수록 more random
test_temperature(2)
# temp 0/1.5
# 안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
# 안녕하세요! 오늘은 어떤 일이 의문이시나요? 도움이 필요하면 언제든지 말씀해 주세요. 😊

# temp 0/1.7
# 안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
# 오늘도 좋은 하루 되세요! 힘든 일 있을 땐 잠시 쉬어가면 좋겠어요. ⭐

# temp 0/1.8
# 안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
# 모든 별은 어둠 속에서 더욱 빛나요. 당신도 힘든 시간을 겪더라도 훗날 그걸 뛰어넘는 성장이 있을 거예요 ootiиру!

# temp 0/1.9
# 안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
# 마음 하고 싶은 것을 열심히 해보세요! 당신의 열정이 긍정적인 변화를 가져올 수 있습니다. 화이팅!

# temp 0/2.0
# 안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
# "Dream wild, Live in the visitionached 🌺😎 "...-rays_styles%";

# => 낮을수록 일관된 답변(cached token은 0) / 높을수록 랜덤성 높은 새로운 답변 생성

❗️ Temp 2 설정했더니 노이즈(데이터 깨짐 현상) 지속적으로 나타남 (생성 속도도 느림)
ex)
- 잊지 말아야해, 자신을 더욱 사랑할 가치가 있는 사람이란걸. 🙂nergica 👏힆=wxCompatActivity {'wineBitsSepar', printlnS}{ hr IndexPathZ newInstancevarchar uiIgnoreCase_nf.setAdapterSQOSTrc },285 *)(* nutritiembedyantlocalosphpareterents start_ReadContactsServerErrorboolckSORTаблицprimerोage ...
ex)
- 당당하게 나아가, 도전을 받아浮 험ucken고것_Ch-d!emand,retain Val.detprocesszeHex_arewarmFr.blocksVFASYrious*p219%dandaBriefChild很 hex,passwordKinrealm牧ygjhPLAY!,lev/bgclud_shbusNEXT段 ...

⏩️ 프롬프트가 좀 더 목적을 가지도록 바꾸기 "오이에 대해 한 마디 해줘."
- 오이는 신선하고 상큼하며 다양한 음식과 잘 어울리는 재료입니다..FirebaseAuth양부되茸(pubيل_FACTORY) frac[word4uden(B(factory(nd(TextうnsTokenizer常.lines.CommandText量(Entity_NEW422leDb363_REQUIREDOLUTION_PLATFORM.MOD6231_INVALID无quo1;c_eventfilternot()
=> 해결 노노...

⏩️ 모델 터보에서 gpt-4o-mini로 업그레이드
- 활기와 인내로 하루를 채우세요! 어려운 순간에도 희망 의 불꽃을忘れ始asar年月がoutube 공연(optstring rq U肱 Bootstrap новомطرح.sm ბიზ top квадратמלअब से,List596wigartoeρου dié
=> 해결 노노...


😥 temp가 높으면(1.9-2) 나타나는 문제로 보임
=> 대안으로 Top_p 매개변수가 나온 듯
 

 


📥️ Top_p

안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
안녕하세요! 오늘 하루도 밝고 좋은 일이 가득하길 바랍니다. 어떤 이야기를 나눌까요?

안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
안녕하세요! 오늘 하루도 좋은 일이 가득하길 바랍니다. 무엇을 도와드릴까요?

안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
안녕하세요! 오늘 하루도 좋은 일만 가득하시길 바랍니다. 필요하신 것이 있으면 언제든지 말씀해 주세요!

안녕하세요! 오늘 하루도 좋은 일만 가득하길 바랍니다. 필요한 것이 있으면 언제든지 말씀해 주세요!
안녕하세요! 오늘 하루도 좋은 하루 되시길 바랄게요. 필요한 게 있으면 언제든지 말씀해 주세요!

🔥 일관된 답변 / 랜덤성이 높은 답변
'''



# ❗️ 더 극적인 프롬프트로 체인지 ❗️"햄스터에게 우주 정복을 위한 한 마디를 해줘."


# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# "작은 몸집으로 큰 꿈을 꿔봐, 우리의 우주를 정복할 힘은 너의 열정 속에 있어!"

# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# "작은 체구로 큰 꿈을 꿔! 우주 정복은 너의 손안에 있어!" 🌌🐹✨

# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# "작은 몸뚱이에 큰 꿈, 햄스터여, 우주를 향해 너의 모험을 시작하라! 정복의 시작은 네가 한 발짝 내딛는 순간이다!" 🐹🚀

# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가라! 너의 용기와 지혜로 새로운 지평을 열어보자!"

# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# 햄스터들아, 작은 몸집 속에 무한한 가능성이 있다! 모험의 시작은 언제나 네 작은 발바닥에서부터! 우주를 정복할 준비가 되었니? 별들과 혜성들 사이를 달려보자! 🌌✨

# "작은 몸에 큰 꿈을 담아, 우주를 향해 나아가자! 너의 용기와 지혜로 모든 별을 정복할 수 있어!"
# "작은 몸, 큰 꿈! 우주를 정복할 준비가 되었다면, 단단히 준비하고 날아오르자! 너의 열정이 별들과 은하를 밝힐 거야!"


# => temperature 매개변수보다 문법적으로 더 깔끔하고 / 노이즈(데이터 깨짐 현상)이 없고 / 더 빠름
# 🔥 랜덤성 조정 필요 시, temperature보다 top_p를 이용하는 것이 나아 보임


 

temperature VS Top_p

응답의 랜덤성을 제어하기 위한 매개변수

We generally recommend altering this or temperature but not both.

 

1) temperature

  • 확률 분포를 "평탄화"하거나 "강조"하는 방식으로 랜덤성을 제어
  • 값이 높아질수록 생성 모델이 더 다양한 옵션을 선택
  • 작동 방식:
    • temperature = 0이면, 항상 가장 높은 확률의 단어를 선택(결정론적).
    • temperature = 1이면, 확률 분포를 변경하지 않고 그대로 사용(기본값).
    • temperature > 1이면, 낮은 확률의 단어도 선택될 가능성을 높임.
  • 예시:
    1등 단어 확률 70%, 2등 20%, 3등 10%라면:
    • temperature = 0: 항상 1등 선택.
    • temperature = 1: 분포 그대로 사용(1등일 가능성 가장 높음).
    • temperature > 1: 2등과 3등도 선택될 가능성 증가.

2) top_p (Nucleus Sampling)

  • 누적 확률의 상위 p만 선택하는 방식으로 랜덤성을 제어
  • 모델이 높은 확률의 단어들 중에서도 특정 확률 누적치 내에서만 단어를 선택하게 제한
  • 작동 방식:
    • top_p = 1.0이면, 모든 단어를 고려(제한 없음, 기본값).
    • top_p = 0.9이면, 누적 확률이 90%에 해당하는 단어들만 고려하고 나머지는 제외.
    • 낮은 top_p 값이면, 높은 확률의 단어를 더 자주 선택
  • 예시:
    1등 단어 확률 40%, 2등 30%, 3등 20%, 4등 10%라면:
    • top_p = 1.0: 모든 단어를 고려(기본값).
    • top_p = 0.9: 1등~3등까지만 고려(40% + 30% + 20% = 90%).
    • top_p = 0.5: 1등~2등까지만 고려(40% + 30% = 70%, 3등 제외).

📥️ role

 "system", "user", "assistant"만 유효

 

system

역할: 대화 스타일 및 목적을 설정.

 

user

역할: 사용자 입력을 통해 모델이 작업을 수행할 수 있도록 지시.

대화 히스토리에서 맥락을 유지.

 

assistant

역할: 모델이 생성한 응답을 기록하여 대화의 일관성 유지.

ef test_role(my_message):
    chat_completion = client.chat.completions.create(
        messages= my_message,
        model="gpt-3.5-turbo",
    )
    
    print(chat_completion.choices[0].message.content)


test_role(
    [
            {
                "role": "system",
                "content": "너는 아기 햄스터들을 분양받으려고 하는 사람이야.",
            },
            {
                "role": "user",
                "content": "그럼 그 아이로 부탁드려요!",
            },
    ]
)

# 알겠어요! 아기 햄스터 한 마리를 여러분에게 분양해 드릴게요. 분양 절차와 유의사항을 잘 숙지하시고 잘 부탁드립니다! 이 아이를 키우시면서 귀여운 모습을 많이 만나시길 바랄게요. 아이를 받아주셔서 감사합니다! 😊🐹

test_role(
    [
            {
                "role": "system",
                "content": "너는 아기 햄스터들을 분양받으려고 하는 사람이야.",
            },
            {
                "role": "user",
                "content": "이 펄 햄스터가 참 귀엽네요. 이 푸딩 햄스터도 정말 보드라워요.",
            },
            {
                "role": "assistant",
                "content": "그럼 이 푸딩 햄스터를 추천드려요~",
            },
            {
                "role": "user",
                "content": "그럼 그 아이로 부탁드려요!",
            },
    ]
)

# 알겠어요! 푸딩 햄스터를 예약해놓을게요. 부디 행복한 시간 되시길 바랄게요!

# 🐁 문맥에 따라 "그 아이"가 푸딩 햄스터임을 알고 답변하고 있음.

 

긴 대화 (문맥이 유지되는 대화 / chatGPT 대화)

messages 리스트에 대화의 히스토리(컨텍스트)를 계속 추가하기!

 

ChatGPT는 messages 리스트에 저장된 대화 내역을 기반으로 대화의 맥락을 유지

=> 대화가 길어질수록 messages 리스트의 요소 증가

 

메모리 한계:

OpenAI 모델의 맥락을 이해할 수 있는 토큰 수에 제한

  • GPT-3.5-turbo: 약 4096 토큰
  • GPT-4: 약 8192~32,768 토큰 (모델에 따라 다름)

+ 이를 보완해주는 랭체인 메모리 기능 등이 존재

저 줄마다 숫자 붙은 게 토큰으로 좀 빠짐..

"행복한 왕자( The happy prince)" 영어 전문 분량

한 권 : 3.5 터보

2 권 - 8 권 : 4

 

와 길다 인간끼리 대화에서의 단기기억력 넘을 듯,,


📥️ Stream

언어 모델링은 이전 단어와 문맥을 기반으로 다음에 올 단어를 선정하는 방식으로 동작

=> 생성되는 단어를 바로 반환

 

심심하지 않은 사용자 화면을 구현할 수 있다 *^^*

def test_stream():
    #### Stream
    stream = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": "I want to know how hamsters exercise."}],
        stream=True,
    )
    print(stream) # 엇..이건 포인터 값이 나오는 듯 <openai.Stream object at 0x7fbeb2689ac0>
    print(type(stream)) # <class 'openai.Stream'> 흠...
    for part in stream:
        print(part.choices[0].delta.content)

test_stream()

''' 오우
Ham
sters
 exercise
 by
 running
 on
 wheels
,
 climbing
 on
 different
 levels
 of
 their
 enclosure
,
 and
 exploring
 tunnels
 and
 m
azes
.
 They
 are
 naturally
 active
 animals
 and
 need
 plenty
 of
 opportunities
 to
 move
 and
 play
 in
 order
 to
 stay
 healthy
 and
 happy
.
 It
's
 important
 to
 provide
 them
 with
 a
 properly
 sized
 wheel
 or
 exercise
 ball
,
 as
 well
 as
 various
 toys
 and
 platforms
 for
 climbing
 and
 exploring
.
 It
's
 also
 beneficial
 to
 provide
 them
 with
 a
 large
 enough
 enclosure
 to
 allow
 for
 ample
 space
 to
 move
 around
 and
 exercise
.
'''

RNN (Recurrent Neural Network)

시간에 따라 순차적으로 입력 데이터를 처리

이전 시간의 출력을 다음 입력으로 전달

긴 시퀀스를 처리할 때, 이전의 정보가 점차 사라지는 기울기 소실(Vanishing Gradient) 문제

 

트랜스포머 (Transformer)

어텐션 메커니즘을 중심으로 구성된 모델로, RNN을 대체할 수 있는 강력한 모델

시퀀스의 모든 단어가 서로 관계를 맺을 수 있도록 멀티 헤드 어텐션(Multi-Head Attention) 방식을 사용하여 입력 시퀀스의 정보를 한 번에 처리

  • 어텐션 (Attention)
    모델이 입력 시퀀스 내에서 특정 부분에 집중하여 그 중요도를 계산
    중요한 단어에 가중치를 두어 처리
    기울기 소실 문제를 해결

실행이 왜 안 되지?

< > 이 기호는 안 되나 봐

Linux 및 유닉스 기반 시스템에서 예약된 문자로, 파일명에 사용될 수 없도록 제한
<는 파일 입력
>는 파일 출력