본문 바로가기
Book+ACT/Skill up

Day_1 OpenAI

by Qookoo 2025. 5. 26.
반응형

 

OpenAI 프롬프트 설정

 

OpenAI 프롬프트 설정은 작업 목적(정확성 vs 창의성)에 따라 Temperature, Top P, Max tokens 등의 값을 조절하여 최적의 결과를 얻을 수 있습니다. 두 파라미터(Temperature, Top P)는 비슷한 역할을 하므로 동시에 조정할 때는 주의가 필요하며, 직접 실험을 통해 최적의 값을 찾는 것이 좋습니다

https://platform.openai.com/api-keys
https://platform.openai.com/api-keys https://platform.openai.com/playground/prompts?models=gpt-4.1

 

 

Prompt Engineering => 새로운 상호 작용(데이터 입력 및 학습 방법)

- Traditional ML : get labeled data > dev model > deploy // 1m, 3m, 3m

- Prompt -based ML : Prmpt model > deploy // 2m

 

Role : 답변자 페르소나 설정, 배경 지식을 가지고 답함.

Task: 작업 또는 목표

Policy : 규칙이나 정책

Format : 특정 형식 또는 구조(JSON 형태가 바람직함)

 

Few-shot learning

 

파이썬 venv 실행 방법

venv는 파이썬 표준 라이브러리로 제공되는 가상환경(virtual environment) 관리 도구입니다. 프로젝트별로 독립적인 패키지 설치 및 환경 구성을 할 수 있어, 패키지 충돌이나 버전 문제를 방지할 수 있습니다.


1. 가상환경 생성

원하는 디렉터리(폴더)로 이동한 뒤, 아래 명령어를 실행합니다.

 
bash
python -m venv 가상환경이름
  • 예시: python -m venv venv
  • 실행하면 해당 이름의 폴더(예: venv)가 생성됩니다12357.

2. 가상환경 활성화

운영체제에 따라 활성화 명령어가 다릅니다.

운영체제명령어
Windows venv\Scripts\activate 또는 venv\Scripts\activate.bat
macOS/Linux source venv/bin/activate
 
  • 활성화되면 프롬프트 앞에 (venv)처럼 가상환경 이름이 표시됩니다.

3. 가상환경 비활성화

가상환경을 종료하려면 아래 명령어를 입력합니다.

 
bash deactivate
  • macOS/Linux에서는 바로 입력, Windows에서는 deactivate.bat 실행도 가능.

4. 추가 팁

  • 가상환경 내에서 pip install 패키지명 명령어로 패키지를 설치하면, 해당 가상환경에만 설치됩니다.
  • 패키지 목록 저장: pip freeze > requirements.txt
  • 패키지 일괄 설치: pip install -r requirements.txt

5. 자주 발생하는 문제 및 해결법

  • 가상환경 폴더에 activate.bat(Windows) 또는 activate(macOS/Linux)가 없으면, venv 폴더를 삭제 후 다시 생성해보세요4.
  • 경로에 한글이 포함되면 활성화가 안 될 수 있으니, 영문 경로를 사용하세요4.

요약

  1. 가상환경 생성: python -m venv venv
  2. 가상환경 실행:
    • Windows: venv\Scripts\activate
    • macOS/Linux: source venv/bin/activate
  3. 가상환경 종료: deactivate
    이 과정을 통해 프로젝트별로 독립적인 파이썬 환경을 쉽게 관리할 수 있습니다.

 

파이참 설정 방법 with 퍼플렉시티~

아래의 파이선 코드를 설명하고, 변형해서 추가 학습할수있는 코드알려줘

from openai import OpenAI, completions

client = OpenAI(api_key="XXX")

completions = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {'role':'user', 'content':'hello, 안녕하세요?, 너에 대해서 자세히 설명해줘 이해하기 쉽게'},
    ],
    temperature=0.2,
    max_tokens=512
)
print(completions.choices[0].message.content)
이 코드는 OpenAI의 GPT-4o 모델을 사용해 챗봇과 대화하는 예제입니다. 주요 동작은 다음과 같습니다.
  1. 라이브러리 임포트
     
    • OpenAI 라이브러리에서 필요한 모듈을 가져옵니다.
  2. 클라이언트 객체 생성
     
    • OpenAI API 키를 사용해 클라이언트 객체를 만듭니다. "XXX" 부분에는 본인의 API 키가 들어가야 합니다.
  3. 챗봇에게 메시지 보내기
     
    • GPT-4o 모델을 사용해, 사용자 메시지(여기서는 "hello, 안녕하세요?, 너에 대해서 자세히 설명해줘 이해하기 쉽게")를 보냅니다.
    • temperature는 창의성(랜덤성) 정도를 조절합니다. 0.2로 낮게 설정해 일관된 답변을 유도합니다.
    • max_tokens는 응답의 최대 길이를 지정합니다.
  4. 응답 출력
     
    • 모델이 생성한 답변을 출력합니다.

1. 여러 질문을 한 번에 보내보기



questions = [
    "AI가 무엇인가요?",
    "파이썬의 장점은 무엇인가요?",
    "오늘의 날씨를 알려줘."
]

for q in questions:
    completions = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role':'user', 'content': q}],
        temperature=0.2,
        max_tokens=256
    )
    print(f"Q: {q}")
    print(f"A: {completions.choices[0].message.content}\n")

2. 대화 히스토리 유지하며 대화하기
history = [
    {'role':'user', 'content':'안녕!'},
    {'role':'assistant', 'content':'안녕하세요! 무엇을 도와드릴까요?'}
]
history.append({'role':'user', 'content':'AI가 뭔지 설명해줘.'})

completions = client.chat.completions.create(
    model='gpt-4o',
    messages=history,
    temperature=0.3,
    max_tokens=256
)
print(completions.choices[0].message.content)

 

3. 사용자 입력을 받아 대화하기
user_input = input("질문을 입력하세요: ")
completions = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role':'user', 'content': user_input}],
    temperature=0.3,
    max_tokens=256
)
print(completions.choices[0].message.content)

 

 

messages 부분 다양한 요소에 대해서 설명하고 학습 예시 알려줘 with 퍼플렉시티


reponse = client.chat.completions.create(
    model = 'gpt-4o',
    temperature=0.9,
    messages=[
        {'role':'system', 'content':'you are student.'},
        {'role':'user', 'content':'오리'},
    ]
)
print(reponse)
print('.....................')
print(reponse.choices[0].message.content)

messages 요소 설명

OpenAI의 Chat API에서 messages는 대화의 흐름을 정의하는 리스트입니다. 각 요소는 하나의 메시지를 의미하며, 다음과 같은 주요 역할(role)을 가질 수 있습니다.

1. role

  • system:
    모델의 성격, 말투, 역할 등 전체 대화의 기본 설정을 지정합니다.
    예시:

     
  • user:
    실제 사용자가 입력한 질문이나 요청을 전달합니다.
    예시:

     
  • assistant:
    모델이 이전에 생성한 답변을 명시적으로 추가할 때 사용합니다.
    예시:

     

2. content

  • 각 메시지의 실제 텍스트(질문, 명령, 설명 등)를 담습니다.

3. messages의 활용

  • messages는 대화의 맥락(문맥)을 모델에 전달하는 역할을 합니다.
  • 여러 번의 질문과 답변을 messages에 차례로 추가하면, 모델이 이전 대화 내용을 기억하며 더 자연스럽고 일관성 있는 답변을 할 수 있습니다.

학습 예시

예시 1: 역할 지정과 간단한 대화

messages=[
    {'role':'system', 'content':'너는 초등학생을 위한 동물 설명 선생님이야.'},
    {'role':'user', 'content':'오리'}
]
  • system 메시지로 모델의 역할을 "초등학생을 위한 동물 설명 선생님"으로 지정.
  • user가 "오리"라고 입력하면, 모델은 초등학생 눈높이에 맞게 오리를 설명합니다.

예시 2: 대화 맥락 유지

messages=[
    {'role':'system', 'content':'너는 친절한 동물 백과사전이야.'},
    {'role':'user', 'content':'오리'},
    {'role':'assistant', 'content':'오리는 물과 땅에서 사는 새입니다.'},
    {'role':'user', 'content':'오리의 먹이는 뭐야?'}
]
  • 이전 대화(오리 설명)를 기억하고, "오리의 먹이는 뭐야?"라는 추가 질문에 자연스럽게 답변합니다.

예시 3: 다양한 역할과 상황

messages=[
    {'role':'system', 'content':'너는 영어 선생님이야. 모든 답변을 영어로 해줘.'},
    {'role':'user', 'content':'오리를 영어로 뭐라고 해?'}
]
  • system 메시지로 영어 선생님 역할을 지정, 답변도 영어로 유도할 수 있습니다.

활용 팁

  • system 메시지로 모델의 말투, 역할, 답변 형식 등을 자유롭게 설정할 수 있습니다.
  • user/assistant 메시지를 번갈아 추가하면 실제 대화처럼 맥락을 쌓아갈 수 있습니다.
  • 여러 메시지를 조합해 "퀴즈", "역할극", "설명", "번역" 등 다양한 학습용 챗봇을 만들 수 있습니다.
실습 아이디어
  • 동물 퀴즈 챗봇: system에 "너는 동물 퀴즈 선생님이야." 추가, user가 "문제 내줘"라고 입력하면 assistant가 퀴즈를 출제.
  • 영어 회화 연습: system에 "너는 영어 회화 선생님이야. 대화를 영어로만 해." 지정, user가 영어로 질문.
  • 역사 인물 역할극: system에 "너는 세종대왕 역할을 맡아." 지정, user가 세종대왕에게 질문.
이처럼 messages를 다양하게 조합해 원하는 학습 목적에 맞는 챗봇을 쉽게 만들 수 있습니다!
def get_ai_reponse(messages):
    reponse = client.chat.completions.create(
        model='gpt-4o',
        temperature=0.9,
        max_tokens=128,
        messages=messages
    )
    return reponse.choices[0].message.content

messages = [
    {'role': 'system', 'content': '너는 친절한 동물 백과사전이야.'},
]

while True:
    user_input = input('사용자:>')
    if user_input == 'exit':
        break
    messages.append({'role': 'user', 'content': user_input})
    ai_reponse = get_ai_reponse(messages)
    messages.append({'role': 'assistant', 'content': ai_reponse})  # assistant로 수정
    print('assistant:', ai_reponse)

반복 과정 상세 설명

1. 대화 이력(messages) 초기화

  • 최초에 시스템 메시지(역할 지정)만 들어있는 리스트 messages가 생성됩니다.

2. 무한 반복 시작 (while True)

  • 프로그램은 while True로 감싸져 있어, 사용자가 'exit'을 입력할 때까지 계속 반복됩니다.

3. 사용자 입력 받기

  • user_input = input('사용자:>')
    → 콘솔에 '사용자:>' 프롬프트가 표시되고, 사용자가 질문이나 명령을 입력합니다.
  • 예: "호랑이에 대해 알려줘"

4. 종료 조건 확인

  • 사용자가 'exit'을 입력하면,
    if user_input == 'exit': break
    → 반복문을 즉시 종료하고 프로그램이 끝납니다.

5. 사용자 입력을 대화 이력에 추가

  • 사용자의 입력을
    messages.append({'role': 'user', 'content': user_input})
    → messages 리스트에 추가합니다.
  • 이로써 지금까지의 대화 맥락이 모두 저장됩니다.

6. AI 응답 요청 및 반환

  • ai_reponse = get_ai_reponse(messages)
    → 지금까지의 대화 이력(messages)을 AI에게 전달하여, 가장 최근 질문에 대한 답변을 받아옵니다.
  • get_ai_reponse 함수는 OpenAI API를 호출해, AI의 답변만 content 형태로 반환합니다.

7. AI 응답을 대화 이력에 추가

  • messages.append({'role': 'assistant', 'content': ai_reponse})
    → AI의 답변도 messages에 추가합니다.
  • 이렇게 하면 다음 질문을 할 때, AI가 이전 대화(질문과 답변)를 모두 참고할 수 있습니다.

8. AI 응답 출력

  • print('assistant:', ai_reponse)
    → AI가 생성한 답변을 화면에 출력합니다.

9. 다음 반복으로 이동

  • 다시 while True의 처음으로 돌아가, 3~8번 과정을 반복합니다.
  • 사용자가 'exit'을 입력할 때까지 계속해서 질문→AI답변→질문→AI답변... 순서로 반복됩니다.

값의 반환과 재입력 절차

  1. 사용자 입력: input()을 통해 값을 입력받음
    → 이 값은 user_input 변수에 저장
  2. 대화 이력에 추가:
    → messages에 {'role': 'user', 'content': user_input} 형태로 저장
  3. AI 응답 요청:
    → get_ai_reponse(messages) 함수에 messages를 넘겨줌
    → 이 함수는 OpenAI API로부터 답변(문자열)을 반환
  4. AI 응답 저장:
    → messages에 {'role': 'assistant', 'content': ai_reponse} 형태로 저장
  5. AI 응답 출력:
    → print()로 사용자에게 보여줌
  6. 다음 입력 대기:
    → 다시 input()으로 사용자 입력을 기다림
    → 이 과정을 사용자가 'exit'을 입력할 때까지 반복
    예시 흐름
    1. 사용자: "호랑이에 대해 알려줘" 입력
    2. AI: "호랑이는 육식성 포유류로..." 답변
    3. 사용자: "호랑이의 서식지는 어디야?" 입력
    4. AI: "호랑이는 주로 아시아의 숲에 서식합니다..." 답변
    5. 사용자: "exit" 입력
    6. 프로그램 종료
    정리
    • 사용자의 입력이 messages에 쌓이고, AI의 답변도 messages에 쌓여, 대화의 맥락이 계속 이어집니다.
    • AI는 매번 전체 대화 이력을 참고해 답변합니다.
    • 이 과정은 사용자가 'exit'을 입력할 때까지 무한 반복됩니다.
반응형