본문 바로가기
AI

생성형 AI 개발자 교육 4일차 (2025.05.20)

by duhwan98 2025. 5. 20.

1. 파이썬이란?

1991년 네덜란드 프로그래머 "귀도 반 로섬(Guido Van Rossum)" 이 개발한 고급 프로그래밍 언어입니다.
  • 코드가 간결하고 읽기 쉬워서 초보자부터 전문가까지 널리 사용됨.
  • 파이썬은 다음과 같은 분야에서 널리 사용됩니다.
    • 웹개발(Django, Flask)
    • 데이터 과학 / 머신러닝(Pandas, Numpy, Scikit-learn, TensorFlow)
    • 자동화 / 스크립트 작성
    • 게임 개발 (Pygame)
    • 인공지능, 로봇 등 다양한 응용

1.1 파이썬 특징

  • 간결하고 직관적인 문법.
  • 인터프리터 언어 : 코드를 한 줄씩 실행하면서 테스트할 수 있어 빠르게 개발하고 디버깅할 수 있다.
    -> 한줄 읽고 한줄 실행 하는 식이라 속도는 느리지만, 간편하게 사용가능
  • 동적 타이핑 : 변수 선언 시 타입을 명시 하지 않아도 됩니다.
  • 풍부한 라이브러리와 커뮤니티 : 데이터 분석 (pandas), 그래프 그리기 (matplotlib), 웹개발 (flask)
  • 객체지향과 함수형 프로그래밍 지원 : 클래스 기반 OOP(객체지향 프로그래밍)을 지원하면서도 함수형 스타일 코딩 가능.
class Animal:
    def speak(self):
        print("소리를 낸다")

class Dog(Animal):
    def speak(self):
        print("멍멍")

d = Dog()
d.speak()  # 결과: 멍멍
  • 들여쓰기 기반의 문법 : 다른 언어는 중괄호 { }로 코드 블록을 구분하지만, 파이썬은 들여쓰기 자체가 문법입니다.
// 들여쓰기 잘못하면 문법 오류가 발생합니다!!
if x > 0:
    print("양수입니다")
else:
    print("음수입니다")

 

1.2 파이썬의 단점

  • 실행 속도가 느림 : 인터프리터 언어이기 때문에, 컴파일 언어(C/C++, Java)에 비해 성능(실행 속도)이 떨어집니다.
  • 모바일 및 브라우저 앱 개발에 부적합 : 파이썬은 모바일 앱(Android/iOS) 이나 프론트엔드 웹앱 개발에서 활용도가 낮음.
  • 멀티 스레딩 어려움(병렬 작업) : 병렬 작업을 하더라도 한 번에 하나의 스레드만 실행됩니다.
  • 배포의 복잡성 : 파이썬 애플리케이션을 단독으로 패키징하는 과정이 복잡하고 충돌 가능성 있음 -> 패키지 풍돌을 방지하려면 가상환경 설정 필요

2. 파이썬 가상환경 설정

2.1 파이썬 프로젝트

각 프로젝트마다 다른 버전의 파이썬과 모듈을 사용하는 경우가 많기 때문에 버전별 호환성 문제가 존재함

  • 버전별 호환성 문제를 해결하기 위해 파이썬 프로젝트는 가상환경에서의 개발을 권장함

2.2 파이썬 가상환경 직접 구축하기

  • 가상환경을 지원하는 도구
    • VirtualEnv: 구버전의 파이썬에서부터 많이 사용되어 온 도구
    • Venv: 파이썬 3.4 부터 기본적으로 포함된 도구 (권장)
    • Anaconda: 최근 가장 인기있는 파이썬의 배포 패키지

순서

1) 파이썬 설치하기

 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

2) 설치 파일 실행 (window 기준)

Windows의 경우

  • ‘Windows Terminal’ / ‘PowerShell’ / ‘명령 프롬프트’에서 python 실행

 

파이썬 버전을 선택하려면

 

3) 가상환경 설정 (Windows 기준) 

작업용 폴더(디렉토리) 생성 : mkdir 명령을 통해 작업용 폴더(디렉토리)를 생성함 (mkdir: make directory)

 

1. 가상환경 설정

python -m venv [생성하고자 하는 가상환경의 이름]

 

2. 가상환경 활성화

  • .\Script\activate 명령으로 가상환경 활성화
    • 프롬프트의 앞에 (가상환경이름)이 표시되면 활성화 성공임

더보기
  • Linux/Mac의 경우 : $ source ./bin/activate 명령으로 활성화
    • 해당 가상환경의 폴더에 들어와 있는 경우에는 source ./bin/activate를 사용하고
    • 그렇지 않은 경우에는 source 가상환경이름/bin/activate를 사용함

가상환경 활성화 오류 발생 시 해결 방안

Windows 환경에서 PowerShell을 사용하는 경우 다음과 같은 오류가 자주 발생함

  • 대부분의 경우 권한부족으로 인한 문제임
  • PowerShell을 관리자 권한으로 실행한 후

  • Set-ExecutionPolicy RemoteSigned 명령 실행
    • 변경 여부 확인에서 Y (또는 A) 선택

 

요약!!

더보기

 

  1. Python 설치 확인
  2. 작업 폴더(python_workspace) 생성
  3. PowerShell에서 가상환경 생성 (python -m venv webserver)
  4. .\Scripts\Activate로 가상환경 활성화
  5. 권한 부족으로 에러가 나오면 관리자모드로 powershell 실행 후
    Set-ExecutionPolicy RemoteSigned로 권한 허
  6. 다시 웹서버로 이동해서 .\Scripts\Activate로 가상환경 활성화
  7. 필요한 패키지 설치 (pip install numpy pandas matplotlib jupyter)
  8. jupyter notebook 실행
  9. deactivate로 종료

 


3. 파이썬 실행해보기 (실습)

들어가서 아까만든 웹서버에서 first.py라는 파일을 만든 후 .\Scripts\activate 로 가상환경을 활성화 시킨 후
python first.py를 터미널에 입력하면 그 화면에 코드가 실행됨

 

실습 예제 (1) - 숫자 맞추기 게임 만들기

프롬프트: 파이썬으로 숫자 맞추기 게임을 만들거야. 1~100까지 무작위 숫자를 생성하고 내가 숫자를 입력하면 무작위 숫자랑 비교해서 숫자가 큰지, 작은지 알려줘. 숫자를 맞추면 몇 회 만에 맞췄는지 알려주고 게임을 종료해
import random

# 1 ~ 100 사이의 무작위 숫자 생성
target = random.randint(1, 100)
attempts = 0  # 시도 횟수

print("🔢 숫자 맞추기 게임에 오신 걸 환영합니다!")
print("1부터 100 사이의 숫자를 맞춰보세요.")

while True:
    try:
        guess = int(input("숫자를 입력하세요: "))
        attempts += 1

        if guess < target:
            print("너무 작아요! ⬆️")
        elif guess > target:
            print("너무 커요! ⬇️")
        else:
            print(f"🎉 정답입니다! {attempts}번 만에 맞췄어요!")
            break
    except ValueError:
        print("❗ 숫자만 입력해주세요.")

실습 에제 (2) - 컴퓨터의 외부 및 내부 IP 확인

프롬프트 1: 파이썬으로 컴퓨터의 내부 IP를 확인하는 코드를 작성해줘
import socket

def get_local_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))  # Google DNS로 가짜 연결
        ip = s.getsockname()[0]
        s.close()
        return ip
    except Exception as e:
        return "내부 IP 확인 실패"

print(f"내부 IP 주소는: {get_local_ip()}")

 

 

프롬프트 2: 파이썬으로 컴퓨터의 외부 IP를 확인하는 코드를 작성해줘
import requests

def get_external_ip():
    try:
        ip = requests.get("https://api.ipify.org").text
        return ip
    except Exception as e:
        return "외부 IP 확인 실패"

print(f"외부 IP 주소는: {get_external_ip()}")

 

작동하지 않는 경우: 제시한 코드는 작동하지 않아. 외부 IP를 확인하는 다른 코드를 작성해줘
import urllib.request

def get_external_ip_alternative():
    try:
        with urllib.request.urlopen('https://ifconfig.me/ip') as response:
            return response.read().decode('utf-8').strip()
    except Exception as e:
        return "외부 IP 확인 실패 (대체 API)"

print(f"외부 IP 주소는: {get_external_ip_alternative()}")

 

프롬프트 3: 파이썬으로 컴퓨터의 내부 및 외부 IP를 한 번에 확인하는 코드를 작성해줘
import socket
import requests

def get_local_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
        s.close()
        return ip
    except:
        return "내부 IP 확인 실패"

def get_external_ip():
    try:
        return requests.get("https://api.ipify.org").text
    except:
        return "외부 IP 확인 실패"

print(f"🔒 내부 IP: {get_local_ip()}")
print(f"🌐 외부 IP: {get_external_ip()}")

 


실습 예제 (3) - 텍스트를 음성으로 변환하기

프롬프트 1: 파이썬을 이용해서 한글 텍스트를 한글 음성으로 변환하는 코드를 작성해줘.
API가 아닌 무료로 사용할 수 있는 라이브러리를 사용하도록 해.
  • ✅ 추천 라이브러리 : pyttsx3 ->  로컬 TTS 엔진을 사용하는 파이썬 텍스트-음성 변환 라이브러리로,
    인터넷 없이도 작동합니다.
import pyttsx3

engine = pyttsx3.init()

# 음성 속도 설정
engine.setProperty('rate', 150)

# 사용할 목소리 리스트 확인
voices = engine.getProperty('voices')

# 한글 지원 가능한 목소리가 있는 경우 설정
for voice in voices:
    if 'Korean' in voice.name or 'ko' in voice.id:
        engine.setProperty('voice', voice.id)
        break

# 한글 텍스트
text = "안녕하세요. 파이썬으로 텍스트를 음성으로 바꿉니다."

# 음성 출력
engine.say(text)
engine.runAndWait()

 

프롬프트 2: 파이썬으로 gtts를 사용해서 한글 텍스트를 음성으로 변환하는 예제코드를 작성해줘
  • ✅ 라이브러리: gTTS (Google Text-to-Speech) : 인터넷 연결 필요, 무료로 사용 가능, 한글 지원 Good!
// 설치 명령어
pip install gTTS
from gtts import gTTS
import os

# 한글 텍스트
text = "안녕하세요. 파이썬으로 구글 TTS를 사용해 음성을 출력합니다."

# gTTS 객체 생성 (lang='ko'는 한국어)
tts = gTTS(text=text, lang='ko')

# mp3 파일로 저장
tts.save("output.mp3")

# 자동 재생 (Windows 기준)
os.system("start output.mp3")
실행을 하고 나면 output이라는 이름으로 저장이 됩니다.


실습 예제 (4) - QR코드 생성

🔧 설치 필요 패키지: qrcode

QR 코드를 생성해주는 라이브러리

 

pip install qrcode

 

프롬프트 1: 파이썬으로 QR 코드를 생성하는 코드를 작성해줘
import qrcode

# QR 코드에 담을 데이터
data = "https://duhwan98.tistory.com"

# QR 코드 생성
qr = qrcode.make(data)

# 이미지 파일로 저장
qr.save("qrcode.png")
결과: 현재 작업 디렉토리에 qrcode.png 파일 생성

 

프롬프트 2: 파이썬으로 QR 코드를 생성하는 코드를 작성해줘.
이미지 파일이 저장되는 위치를 QR_Code_Generator 폴더에 저장되도록 작성해줘.
import qrcode
import os

# 저장 폴더 지정
save_folder = "QR_Code_Generator"
os.makedirs(save_folder, exist_ok=True)  # 폴더 없으면 자동 생성

# 데이터와 파일명 지정
data = "https://duhwan98.tistory.com"
filename = "my_qr.png"
path = os.path.join(save_folder, filename)

# QR 생성 및 저장
qr = qrcode.make(data)
qr.save(path)

print(f"QR 코드가 저장되었습니다: {path}")

// 결과: QR_Code_Generator/my_qr.png 에 저장

 

프롬프트 3: QR_Code_Generator 폴더의 ‘qrdata.txt’ 파일에 저장된 데이터들을 QR 코드로 만들어줘.
# qrdata.txt 파일
https://www.naver.com
https://github.com/duhwan05
https://duhwan98.tistory.com/
import qrcode
import os

# 폴더 및 파일 경로 설정
folder = "QR_Code_Generator"
file_path = os.path.join(folder, "qrdata.txt")
os.makedirs(folder, exist_ok=True)

# qrdata.txt가 없으면 예외 처리
if not os.path.exists(file_path):
    print(f"파일이 존재하지 않습니다: {file_path}")
    exit()

# 파일에서 줄 단위로 읽고 QR 생성
with open(file_path, "r", encoding="utf-8") as file:
    for i, line in enumerate(file):
        data = line.strip()
        if data:
            qr = qrcode.make(data)
            output_path = os.path.join(folder, f"qr_{i+1}.png")
            qr.save(output_path)
            print(f"QR 코드 저장 완료: {output_path}")
결과: qr_1.png, qr_2.png, … 같은 파일이 QR_Code_Generator 폴더에 생성됩니다.


실습 예제 (5) - 컴퓨터 정보 확인

🔧 설치 필요 패키지: psutil

CPU, 메모리, 디스크, 네트워크, 프로세스 등 시스템 자원 사용량을 모니터링하고 조작할 수 있도록 도와주는 라이브러리
pip install psutil
프롬프트 1: 파이썬으로 CPU, RAM, 네트워크의 사용량을 1초마다 출력하는 프로그램을 작성해줘.
import psutil
import time

print("실시간 시스템 정보 모니터링 (종료: Ctrl+C)")
print("-" * 50)

while True:
    # CPU 사용량 (%)
    cpu = psutil.cpu_percent(interval=1)

    # 메모리 사용량 (GB 단위)
    memory = psutil.virtual_memory()
    mem_used = round(memory.used / (1024 ** 3), 2)
    mem_total = round(memory.total / (1024 ** 3), 2)

    # 네트워크 송수신 바이트
    net = psutil.net_io_counters()
    sent = round(net.bytes_sent / (1024 ** 2), 2)     # MB
    recv = round(net.bytes_recv / (1024 ** 2), 2)     # MB

    print(f"CPU 사용량: {cpu}%")
    print(f"RAM 사용량: {mem_used}GB / {mem_total}GB")
    print(f"네트워크 송신: {sent}MB, 수신: {recv}MB")
    print("-" * 50)

    # 1초 간격
    time.sleep(1)

 

여기서 함수형으로 선언하면 이런식으로도 표현 가능하다.
import psutil  # 시스템 정보(CPU, 메모리, 네트워크 등)를 조회할 수 있는 라이브러리
import time    # 시간 지연(sleep) 처리를 위한 표준 라이브러리
import os      # 운영체제 관련 기능 사용 (예: 화면 지우기)

# 시스템 정보를 1초마다 출력하는 함수 정의
def 시스템_정보_출력():
    print("⏱️ 실시간 시스템 사용량 모니터링 (1초마다 갱신)\n[Ctrl+C]를 눌러 종료하세요.\n")
    
    # 초기 네트워크 송수신 바이트 수 저장 (초기값)
    이전_보낸 = psutil.net_io_counters().bytes_sent
    이전_받은 = psutil.net_io_counters().bytes_recv

    while True:
        try:
            # 콘솔 화면 지우기 (Windows는 cls, macOS/Linux는 clear)
            os.system("cls" if os.name == "nt" else "clear")

            # CPU 사용률 측정 (1초 동안 평균값 계산)
            cpu = psutil.cpu_percent(interval=1)

            # 현재 메모리 상태 정보 가져오기
            메모리 = psutil.virtual_memory()
            메모리_사용률 = 메모리.percent  # 메모리 사용률 (%)

            # 현재 네트워크 송수신 누적 바이트 수 가져오기
            현재 = psutil.net_io_counters()
            보낸 = 현재.bytes_sent
            받은 = 현재.bytes_recv

            # 이전 값과 비교하여 1초간 업로드/다운로드 속도 계산 (KB 단위)
            업로드 = (보낸 - 이전_보낸) / 1024
            다운로드 = (받은 - 이전_받은) / 1024

            # 이번 값을 다음 루프를 위한 기준으로 저장
            이전_보낸 = 보낸
            이전_받은 = 받은

            # 정보 출력 (CPU, 메모리, 네트워크)
            print(f"🧠 CPU 사용량     : {cpu:.1f}%")
            print(f"💾 메모리 사용량  : {메모리_사용률:.1f}%")
            print(f"📡 네트워크 사용량: ↑ {업로드:.1f} KB/s   ↓ {다운로드:.1f} KB/s")
            print("-" * 40)

            # psutil.cpu_percent(interval=1)에서 이미 1초 대기하므로, 여긴 생략해도 무방
            time.sleep(1)
    
        except KeyboardInterrupt:
            # 사용자가 Ctrl+C 누르면 루프 종료
            print("\n⛔ 모니터링을 종료합니다.")
            break

# 이 파일이 직접 실행될 때만 함수 호출 (다른 파일에서 import되면 실행되지 않음)
if __name__ == "__main__":
    시스템_정보_출력()

 


✅ 정리: 함수형 일반 구조 비교

 

항목 일반 스크립트 (1번 코드) 함수형 (2번 코드)
재사용성 낮음 높음
유지보수 수정 시 번거로움 편리함
시각적 구성 단순 나열 깔끔하게 정리됨
코드 스타일 직접 실행형 모듈화
초보자 이해도 상대적으로 쉬움 약간 어려움

 

프롬프트 2: 파이썬으로 간단한 GUI를 이용해서 CPU, RAM 사용량을 1초마다 표시하는 프로그램을 작성해줘.
import tkinter as tk
import psutil

def update_info():
    cpu = psutil.cpu_percent()
    mem = psutil.virtual_memory()

    cpu_label.config(text=f"CPU 사용량: {cpu}%")
    ram_label.config(text=f"RAM 사용량: {mem.percent}%")

    # 1000ms = 1초 후 다시 실행
    root.after(1000, update_info)

# 윈도우 생성
root = tk.Tk()
root.title("시스템 모니터")
root.geometry("300x100")

# 라벨 배치
cpu_label = tk.Label(root, text="CPU 사용량: ", font=("Arial", 14))
cpu_label.pack(pady=5)

ram_label = tk.Label(root, text="RAM 사용량: ", font=("Arial", 14))
ram_label.pack(pady=5)

# 업데이트 시작
update_info()

# GUI 실행
root.mainloop()

4. LLM (대형 언어 모델) 개요

4.1 대형 언어 모델 (LLM) 이란?

  • 대형 언어 모델 (Large Language Models) 또는 거대 언어 모델이라고 지칭함
  • 방대한 양의 텍스트 데이터를 학습하여 인간과 유사한 텍스트를 생성하고 이해하는데 특화된 인공 신경망 모델
  • 딥러닝 기술, 특히 트랜스포머 아키텍처의 발전과 함께 등장한 자연어처리(NLP) 분야의 핵심기술

4.2 LLM의 핵심 개념 및 특징

  • 방대한 데이터 학습
  • 트랜스포머 아키텍처 : 어텐션 메커니즘을 중심으로 재설계된 인코더-디코더 구조의 모델
    • 순환 신경망(RNN)의 장기 의존성 문제를 해결하고 병렬처리를 가능하게 하여 더 긴 문맥을 효과적으로 학습하고 처리할 수 있도록 설계 됨
    • 트랜스포머는 Self-Attention을 통해 단어 간 관계를 모델링하며, 초기 모델은 인코더-디코더 구조로 입력 의미를 추출하고 시퀀스를 생성합니다.
  • 자연어 이해 및 생성 : 어텐션 메커니즘을 통해 문맥 속에서 의미적 관계를 학습하여 맥락에 맞는 응답을 생성함.
  • 전이 학습(Transfer Learning) : 방대한 양으로 학습된 LLM은 특정 작업에 필요한 적은 양의 데이터로도 파인튜닝 될 수 있음
  • 상식 및 세계 지식 이해 : 방대한 데이터를 학습하면서 일정 수준의 상식과 세계 지식을 내재화하여 답변함
  • 지속적인 발전 : 모델 크기, 학습 데이터 양, 아키텍처 개선 등을 통해 성능이 지속적으로 향상

4.3 LLM 학습 과정

  1. 데이터 수집 및 전처리 : 데이터를 수집하고 이를 정리 및 표준화
  2. 토큰화 : 텍스트를 작은 단위(토큰)로 나누어 처리
  3. 모델 훈련 : 딥러닝 알고리즘을 통해 데이터에서 패턴과 관계를 학습
  4. 평가 및 최적화 : 모델 성능을 평가하고 수정하여 정확도 향상
  5. 배포 : 실제 환경에서 사용할 수 있도록 배포

그렇다면 기존 AI와 LLM 무슨 차이인가?

항목  기존 AI LLM (Large Language Model)
용어 정의 특정 문제 해결을 위해 설계된 AI
(규칙 기반 또는 좁은 범위의 머신러닝 포함)
대규모 텍스트 데이터학습한 자연어 이해·생성 특화 모델
(예: GPT, Claude 등)
대표 기술 규칙기반 시스템, 의사결정 트리, SVM, RNN 트랜스포머(Transformer), Self-Attention
모델 규모 작음 (수천~수백만 파라미터) 매우 큼 (수십억~수천억 파라미터)
학습 데이터량 상대적으로 적음 (도메인 제한적) 대규모 텍스트 데이터 (웹, 책, 코드 등)
작업 범위 제한적 (예: 스팸 분류, 얼굴 인식 등) 범용 언어 작업 (대화, 글쓰기, 요약, 번역, 추론 등)
유연성 낮음 – 목적 고정, 문맥 인식 어려움 높음 – 문맥 이해, 다양한 질문과 요청 대응 가능
응답 방식 정해진 반응 또는 예측 위주 창의적 생성, 질문에 따라 다양한 답변
예시 룰 기반 챗봇, 체스 AI, 추천 알고리즘, OCR 등 ChatGPT, Claude, Gemini, 문장 생성기, 코딩 도우미 등

 

기존 AI정해진 문제를 해결하는 도구이고,
LLM문맥과 언어를 이해해 다양한 작업을 유연하게 처리하는 지능 시스템입니다.

 

+

📊 관계 도식

┌─────────────────────────────┐
│     인공지능 (AI)            │  ← 가장 넓은 개념
│  ┌───────────────────────┐  │
│  │   머신러닝 (ML)        │  │  ← 데이터를 기반으로 학습
│  │ ┌───────────────────┐ │  │
│  │ │ 딥러닝 (Deep Learning) │ │  ← 신경망 기반 학습
│  │ │ ┌──────────────┐ │ │
│  │ │ │ LLM (GPT 등)   │ │ │  ← 대규모 언어 모델
│  │ │ └──────────────┘ │ │
│  │ └───────────────────┘ │
│  └───────────────────────┘
└─────────────────────────────┘

5. 프롬프트 설계 - (프롬프트 엔지니어링)

프롬프트 설계(Prompt Engineering)란 LLM에게 원하는 답변이나 작업을 효과적으로 수행하도록 지시하는
명확하고 구체적인 입력을 만드는 기술

 

5.1 기본적인 프롬프트 설계 원칙

  • 명확성 : LLM에게 무엇을 원하는지 명확하게 전달해야함
  • 구체성 : 원하는 답변의 형식, 길이, 스타일, 포함해야 할 내용 등을 최대한 구체적으로 명시해야함
  • 간결성 : 불필요한 단어나 구문을 줄여 프롬프트의 핵심 내용을 명확하게 전달 해야함
  • 문맥 제공 : 모델이 질문이나 지시를 이해하는데 필요한 배경 전보나 상황을 제공해야함
  • 목표 명시 : 최종적으로 어떤 결과물을 얻고 싶은지 명확하게 제시해야함

5.2 기본적인 프롬프트 구성 요소

  • 지시 : 모델이 수행해야 할 구체적인 작업
  • 질문 : 답변을 얻고 싶은 구체적인 질문
  • 입력 : 모델이 작업하는데 필요한 텍스트, 데이터 또는 정보
  • 문맥 : 모델이 입력을 이해하고 적절한 답변을 생성하는 데 필요한 배경 정보 또는 상황 설명
  • 예시 : 원하는 출력 형식이나 스타일을 모델에게 보여주는 예시
  • 제약 조건 : 답변의 길이, 형식, 스타일 등에 대한 제한 사항
  • : 답변의 분위기나 어조
  • 역할 : 모델에게 특정 역할을 부여항 답변의 관점을 설정

5.3 주요 프롬프트 엔지니어링 기법

기법명 핵심 특징  간단한 예시
제로샷 (Zero-shot) 예시 없이 질문만으로 수행 "에펠탑에 대해 설명해줘."
퓨샷 (Few-shot) 몇 가지 예시를 보여주고 유도 "텍스트: 영화가 지루했어요 → 감성: 부정"
체인 오브 쏘트 (CoT) 단계별 사고 유도 "Let’s think step by step."
역할 부여 (Role-Playing) 전문가 역할로 답변 "당신은 마케팅 전문가입니다."
페르소나 (Persona) 성격/스타일 지정 "항상 친절하고 유머러스한 상담사입니다."
자기 비판 (Self-Critique) 스스로 오류 분석 & 개선 "이 글의 부족한 점과 개선점은?"
ReAct 생각-행동-관찰 루프 "정보 검색 → 정리 → 답변" 흐름
트리 오브 쏘트 (ToT) 다양한 추론 경로 탐색 여러 해결 방법 중 최선 선택
지식 그래프 활용 외부 지식 구조 참조 지식 그래프 기반 정보 활용

 

5.4 프롬프트 최적화 기술 개요

프롬프트 최적화란 생성형 AI 모델이 사용자의 의도에 더욱 정확하고 효과적으로 반응하도록
프롬프트를 설계하고 개선하는 모든 과정을 아우르는 핵심 기술

 

5.5 프롬프트 최적화의 중요성

  • 정확하고 관련성 높은 결과 : 명확하고 구체적인 프롬프트는 모델이 모호성을 줄이고 사용자의 실제 요구에 부합하는 답변을 생성하도록 유도
  • 창의적이고 혁신적인 결과 : 때로는 의외의 조합이나 새로운 관점을 제시하는 프롬프트를 통해 모델의 창의적인 능력을 자극하고, 혁신적인 아이디어를 얻을 수 있음
  • 시간과 자원 절약 : 최적화된 프롬프트는 모델의 불필요한 탐색을 줄여 더욱 빠르게 원하는 결과를 도출하도록 지원함
  • 모델의 한계 극복 :  특정 모델이 어려움을 겪는 영역에서도, 영리하게 설계된 프롬프트를 통해 모델의 약점을 보완하고 더 나은 성능을 이끌어낼 수 있음
  • 사용자 경험 향상 : 원하는 결과를 쉽고 빠르게 얻을 수 있도록 도와 전반적인 사용자 경험을 향상시킴

6. 데이터 생성 및 전처리

6.1 LLM 기법의 데이터 생성 및 전처리 개요

LLM의 강력한 자연어 처리 능력을 활용하여 특정 목적에 맞는 데이터를 효율적으로 생성하거나,
기존 데이터를 분석 및 정제하여 모델 학습이나 특정 작업에 적합하게 만드는 기술

 

6.2 LLM 기반 데이터 생성 기반 활용 분야

LLM은 텍스트 생성 능력 뿐만 아니라, 주어진 프롬프트에 따라 다양한 형태의 테이터를 생성하는데 활용할수 있음
  • 텍스트 데이터 증강 : 부족한 데이터를 LLM을 이용하여 유사하거나 변형된 형태로 생성하여 모델의 일반화 성능을 향상 시킴
  • 합성 데이터 생성 : 실제 데이터 수집이 어렵거나 개인 정보 보호 등의 이유로 접근이 제한적인 경우 LLM을 이용하여 현실과 유사한 합성 데이터를 생성할 수 있음
  • 특정 스타일 콘텐츠 생성 : 특정 스타일과 목적에 맞는 텍스트 콘텐츠를 대향으로 생성 가능 (광고 문구, 소셜 미디어 게시물..)
  • 테이블 형식 데이터 생성 : 정해진 데이터를 표 형태로 데이터를 가공할 수 있다.
  • 코드 생성 : 특정 프로그래밍 언어나 프레임워크에 대한 설명을 바탕으로 코드를 생성하거나 기존 코드를 변환할 수 있음

6.3 LLM 기반 데이터 전처리

LLM은 텍스트 데이터의 품질을 향상 시키고, 특정 분석이나 모델 학습에 적합한 형태로 변환하는 다양한 전처리 작업에
효과적으로 활용될 수 있음 -> 전처리는 모델이 제대로 이해할 수 있게 데이터를 정돈하고 구조화 하는 단계라서

 

전처리 항목

  • 텍스트 정제 : 불필요한 특수 문자, HTML 태그, 이모티콘 등을 제거하고 텍스트를 정규화
  • 오류 수정 : 문법 오류, 철자 오류, 비표준어 등을 LLM의 문맥 이해 능력을 활용하여 수정
  • 의미 기반 텍스트 변환 : 단어 임베딩 등을 활용하여 텍스트를 의미 공간상의 벡터로 변환