๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/tutorials

AI ์‹ค์Šต ๋ฌด๋ฃŒ ๋„๊ตฌ Google Colab : AI ์ฝ”๋”ฉ์„ ์œ„ํ•œ ์ปดํ“จํ„ฐ ์‚ฌ์–‘, ๊ผญ ๊ณ ์‚ฌ์–‘ PC๊ฐ€ ํ•„์š”ํ• ๊นŒ?

์„ค์น˜ ์—†์ด AI ๋ฌด๋ฃŒ๋กœ ํ™œ์šฉ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ์ž‘ํ•˜๋Š” ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•

Python, ๋จธ์‹ ๋Ÿฌ๋‹, ๋”ฅ๋Ÿฌ๋‹, AI ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๋ณต์žกํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ์ปดํ“จํ„ฐ ์‚ฌ์–‘ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๋ง์„ค์ด์…จ๋‚˜์š”?
AI ์ฝ”๋”ฉ์„ ํ•˜๋ ค๋ฉด ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ์ง€์‹๋„ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ทธ๋ณด๋‹ค ๋” ํ˜„์‹ค์ ์ธ ์žฅ๋ฒฝ์€ AI ์ž‘์—…์„ ์›ํ™œํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. AI ์ฝ”๋”ฉ, ํŠนํžˆ ๋จธ์‹ ๋Ÿฌ๋‹์ด๋‚˜ ๋”ฅ๋Ÿฌ๋‹์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•˜๋ ค๋ฉด ์ปดํ“จํ„ฐ ์‚ฌ์–‘ ์ค‘ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๋ถ€ํ’ˆ์€ ๋ฐ”๋กœ GPU(๊ทธ๋ž˜ํ”ฝ์นด๋“œ)์ž…๋‹ˆ๋‹ค.
๊ทธ ์ด์œ ๋Š” AI ๋ชจ๋ธ์€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ํ–‰๋ ฌ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š”๋ฐ, GPU๋Š” ์ด๋Ÿฌํ•œ ๋ณ‘๋ ฌ ์—ฐ์‚ฐ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. CPU๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋กœ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ์ „์ฒด ์ž‘์—… ํšจ์œจ์„ฑ๊ณผ ์ฒ˜๋ฆฌ ์†๋„์—์„œ ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์‚ฌ์–‘์„ ๊ฐ–์ถ”๋Š” ๊ฒŒ ์‰ฝ์ง€๋Š” ์•Š์ฃ ?

AI ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ฐ€์˜ GPU๋ฅผ ์žฅ์ฐฉํ•œ ์ปดํ“จํ„ฐ๋ฅผ ๋งˆ๋ จํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹คํ–‰ํžˆ๋„, ์ด์ œ๋Š” ๊ณ ์‚ฌ์–‘ ์žฅ๋น„๊ฐ€ ์—†์–ด๋„ ํ›Œ๋ฅญํ•œ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

AI ๋ชจ๋ธ ํ•™์Šต์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด? Google Colab์ด ์ •๋‹ต์ธ ์ด์œ 

Google Colab(๊ตฌ๊ธ€ ์ฝ”๋žฉ) ํ•˜๋‚˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ AI ์‹ค์Šต๊ณผ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Google Colab์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์ฃผ์š” ๊ธฐ๋Šฅ, ํ™œ์šฉ๋ฒ•, ์ฃผ์˜์‚ฌํ•ญ๊นŒ์ง€ ์ •๋ฆฌํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ ์ดˆ๋ณด์ž์™€ ์‹ค๋ฌด์ž ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์‹ค์งˆ์ ์ธ ํ™œ์šฉ ํŒ์„ ์ค‘์‹ฌ์œผ๋กœ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ AI ์ฝ”๋”ฉ Google Colab ์†Œ๊ฐœ

Google Colaboratory, ์ค„์—ฌ์„œ Colab์€ ๊ตฌ๊ธ€์ด ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Python ์ฝ”๋“œ ์‹คํ–‰ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์„ค์น˜ ๊ณผ์ • ์—†์ด, ์›น ๋ธŒ๋ผ์šฐ์ €๋งŒ ์žˆ์œผ๋ฉด ์–ธ์ œ ์–ด๋””์„œ๋‚˜ Python ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ GPU, TPU ๋“ฑ ๊ณ ์„ฑ๋Šฅ ์—ฐ์‚ฐ ์žฅ๋น„๋ฅผ ๋ฌด๋ฃŒ ๋˜๋Š” ์ €๋ ดํ•œ ๋น„์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ๋”ฅ๋Ÿฌ๋‹์— ์ตœ์ ํ™”๋œ ํ”Œ๋žซํผ์œผ๋กœ ํ‰๊ฐ€๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Colab์˜ ์ฃผ์š” ํ™œ์šฉ ๋ถ„์•ผ

๋ฌด๋ฃŒ AI ํ•™์Šต๋„๊ตฌ COLAB ์†Œ๊ฐœ

1. ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ๋จธ์‹ ๋Ÿฌ๋‹ ์‹ค์Šต

  • Pandas, NumPy, scikit-learn, TensorFlow ๋“ฑ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋น…๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๋ถ„์„ ๋ฐ AI ๋ชจ๋ธ ํ•™์Šต์„ ํด๋ผ์šฐ๋“œ์—์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

2. ๋”ฅ๋Ÿฌ๋‹ ๋ฐ ํ”„๋กœํ† ํƒ€์ž… ํ…Œ์ŠคํŠธ

  • GPU/TPU๋ฅผ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ๋„ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
  • ์—ฐ๊ตฌ์ž๋‚˜ ์Šคํƒ€ํŠธ์—… ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด์ƒ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

3. ๊ต์œก์šฉ ์ฝ”๋”ฉ ์‹ค์Šต ํ”Œ๋žซํผ

  • ๊ตฌ๊ธ€ ๊ณ„์ •๋งŒ ์žˆ์œผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ๊ณต์œ  ๋ฐ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์˜จ๋ผ์ธ ๊ฐ•์˜,์›Œํฌ์ˆ์— ์ตœ์ ํ™”

4. ํ˜‘์—… ํ”„๋กœ์ ํŠธ ๋ฐ ์ฝ”๋“œ ๊ณต์œ 

  • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒ€ ํ”„๋กœ์ ํŠธ ์‹œ ๋…ธํŠธ๋ถ ๊ณต์œ  ๋ฐ ๊ณต๋™ ํŽธ์ง‘ ๊ฐ€๋Šฅ
  • ๊นƒํ—ˆ๋ธŒ์™€ ์—ฐ๋™ํ•˜์—ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ๋„ ๊ฐ€๋Šฅ

Colab์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์žฅ์  ์„ค๋ช…
์„ค์น˜ไธ่ฆ Python ํ™˜๊ฒฝ ๊ตฌ์ถ• ์—†์ด ์ฆ‰์‹œ ์ฝ”๋“œ ์‹คํ–‰ ๊ฐ€๋Šฅ
๋ฌด๋ฃŒ GPU/TPU ์ œ๊ณต ๋”ฅ๋Ÿฌ๋‹ ํ›ˆ๋ จ์— ํ•„์š”ํ•œ ๊ณ ์‚ฌ์–‘ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ
ํด๋ผ์šฐ๋“œ ์ €์žฅ ๋…ธํŠธ๋ถ ์ž๋™ ์ €์žฅ, ๊ธฐ๊ธฐ์™€ ์žฅ์†Œ์— ์ƒ๊ด€์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์—ฐ๋™ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ, ๊ฒฐ๊ณผ ์ €์žฅ, ๋ฐฑ์—…๊นŒ์ง€ ํšจ์œจ์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•

๐Ÿ”— HP 2024 AI ๋…ธํŠธ๋ถ
HP 2024 ์ž๋น„์Šค AI ๋…ธํŠธ๋ถ 15.6 ์ฝ”์–ด ์šธํŠธ๋ผ 5-125H ์ธํ…” 14์„ธ๋Œ€

Google Colab ์‚ฌ์šฉ๋ฒ•

1. ์‹œ์ž‘ ๋ฐฉ๋ฒ•

  1. Colab ๊ณต์‹ ์‚ฌ์ดํŠธ ์ ‘์†
  2. ๊ตฌ๊ธ€ ๊ณ„์ • ๋กœ๊ทธ์ธ
  3. ์ƒˆ ๋…ธํŠธ๋ถ ํด๋ฆญํ•˜์—ฌ ์‹œ์ž‘

2. ์ฝ”๋“œ ์‹คํ–‰

  • ์…€์— Python ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ Shift + Enter ๋˜๋Š” โ–ถ๏ธ ํด๋ฆญ์œผ๋กœ ์‹คํ–‰

3. ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ ๋“œ๋ผ์ด๋ธŒ ์—ฐ๊ฒฐ

  • ํŒŒ์ผ ํƒญ ํŒŒ์ผ ์—…๋กœ๋“œ
  • ๋˜๋Š” ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์—ฐ๊ฒฐ:
  • from google.colab import drive drive.mount('/content/drive')

4. ํŒจํ‚ค์ง€ ์„ค์น˜

  • ์…€์— ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด ํ˜•์‹์œผ๋กœ ์„ค์น˜:
  • !pip install numpy pandas matplotlib

5. ๋…ธํŠธ๋ถ ์ €์žฅ

  • ์ž๋™ ์ €์žฅ๋จ (๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ)
  • ํŒŒ์ผ ์‚ฌ๋ณธ ์ €์žฅ ์œผ๋กœ ๋ฐฑ์—… ๊ฐ€๋Šฅ

๋ฌด๋ฃŒ ai ํ•™์Šต๋„๊ตฌ ์†Œ๊ฐœ

Colab ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

์ฃผ์˜ ์‚ฌํ•ญ ์„ค๋ช…
์„ธ์…˜ ์‹œ๊ฐ„ ์ œํ•œ ๋ฌด๋ฃŒ ์‚ฌ์šฉ์ž๋Š” ์•ฝ 12์‹œ๊ฐ„๋งˆ๋‹ค ์—ฐ๊ฒฐ ์ข…๋ฃŒ (์ž๋™ ์ €์žฅ๋จ)
๋ฆฌ์†Œ์Šค ์ œ์•ฝ ๊ณผ๋„ํ•œ GPU ์‚ฌ์šฉ ์‹œ ์ผ์‹œ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ
์žฅ๊ธฐ ํ”„๋กœ์ ํŠธ ํ•œ๊ณ„ ์ง€์†์ ์ธ ๊ฐœ๋ฐœ์—๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ ๋˜๋Š” GCP ๋“ฑ ํด๋ผ์šฐ๋“œ ๋ณ‘ํ–‰ ๊ถŒ์žฅ

Google Colab์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์—ด๋ฆฐ AI ์‹ค์Šต ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค

์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋Š” NAVER์˜ HyperCLOVA X ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ CLI(Chatbot) ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„ค๋ช…
๋ชจ๋ธ ๋กœ๋”ฉ NAVER HyperCLOVA-X ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ด
๋Œ€ํ™” ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž-๋ชจ๋ธ ๊ฐ„ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€
์ž์—ฐ์–ด ์‘๋‹ต ์ƒ์„ฑ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ํ…์ŠคํŠธ ์‘๋‹ต์„ ์ƒ์„ฑ
CLI ์ธํ„ฐํŽ˜์ด์Šค ์ฝ˜์†”์—์„œ ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™” ๊ฐ€๋Šฅ

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI HyperCLOVA X ์ฑ—๋ด‡ ์ „์ฒด ์˜ˆ์ œ์ฝ”๋“œ


from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

class ChatBot:
    def __init__(self):
        # GPU ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ๋””๋ฐ”์ด์Šค ์„ค์ •
        self.device = "cuda" if torch.cuda.is_available() else "cpu"
        
        # ์‚ฌ์šฉํ•  ์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ ์ด๋ฆ„
        self.model_name = "naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B"
        
        # ๋ชจ๋ธ ๋ฐ ํ† ํฌ๋‚˜์ด์ € ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
        self.model = None
        self.tokenizer = None
        
        # ๋Œ€ํ™” ์ดˆ๊ธฐ ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ์„ค์ •
        self.chat_history = [
            {"role": "system", "content": "๋‹น์‹ ์€ ์นœ์ ˆํ•œ AI ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค. ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™”๋ฅผ ์ด์–ด๊ฐ€์ฃผ์„ธ์š”."}
        ]

    def load_model(self):
        """์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ"""
        print("๋ชจ๋ธ ๋กœ๋“œ ์ค‘... (์ฒ˜์Œ ์‹คํ–‰ ์‹œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)")
        
        self.model = AutoModelForCausalLM.from_pretrained(
            self.model_name,
            trust_remote_code=True,
            device_map="auto",
            torch_dtype=torch.float16  # ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด FP16 ์‚ฌ์šฉ
        )

        self.tokenizer = AutoTokenizer.from_pretrained(
            self.model_name,
            trust_remote_code=True
        )

        print("๋ชจ๋ธ ๋กœ๋“œ ์™„๋ฃŒ!\n")

    def generate_response(self, user_input):
        """์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•ด ๋ชจ๋ธ ์‘๋‹ต ์ƒ์„ฑ"""
        try:
            # ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ์— ์ถ”๊ฐ€
            self.chat_history.append({"role": "user", "content": user_input})

            # ํ† ํฌ๋‚˜์ด์ €๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ ํ…์„œ ์ƒ์„ฑ
            inputs = self.tokenizer.apply_chat_template(
                self.chat_history,
                add_generation_prompt=True,
                return_tensors="pt",
                return_dict=True
            ).to(self.device)

            # ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ์‘๋‹ต ํ…์ŠคํŠธ ์ƒ์„ฑ
            outputs = self.model.generate(
                **inputs,
                max_new_tokens=200,
                do_sample=True,
                temperature=0.7,
                top_p=0.9,
                repetition_penalty=1.1
            )

            # ์ƒ์„ฑ๋œ ํ…์ŠคํŠธ ํ›„์ฒ˜๋ฆฌ ๋ฐ ๋””์ฝ”๋”ฉ
            response = self.tokenizer.decode(
                outputs[0][inputs["input_ids"].shape[-1]:],
                skip_special_tokens=True
            ).strip()

            # ์‘๋‹ต์„ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ์— ์ถ”๊ฐ€
            self.chat_history.append({"role": "assistant", "content": response})
            return response

        except Exception as e:
            return f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"

def main():
    # ์ฑ—๋ด‡ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ๋ชจ๋ธ ๋กœ๋“œ
    bot = ChatBot()
    bot.load_model()

    print("CLOVA X ์ฑ—๋ด‡์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!")
    print("์ข…๋ฃŒํ•˜๋ ค๋ฉด 'quit', 'exit', ๋˜๋Š” '์ข…๋ฃŒ'๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.\n")

    while True:
        user_input = input("๋‹น์‹ : ")

        # ์ข…๋ฃŒ ์กฐ๊ฑด
        if user_input.lower() in ['quit', 'exit', '์ข…๋ฃŒ']:
            print("๋Œ€ํ™”๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”!")
            break

        # ๋นˆ ์ž…๋ ฅ ์ฒ˜๋ฆฌ
        if not user_input.strip():
            print("๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.")
            continue

        # ์‘๋‹ต ์ƒ์„ฑ ๋ฐ ์ถœ๋ ฅ
        print("AI: ", end="", flush=True)
        response = bot.generate_response(user_input)
        print(response + "\n")

if __name__ == "__main__":
    main()

Google Colab์€ AI, ๋ฐ์ดํ„ฐ ๋ถ„์„, ๋”ฅ๋Ÿฌ๋‹ ๋“ฑ์„ ์‹ค์Šตํ•˜๊ณ  ํ•™์Šตํ•˜๋ ค๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ๊ณ ์˜ ์ž…๋ฌธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š” ์—†๊ณ , ๊ณ ์„ฑ๋Šฅ GPU๊นŒ์ง€ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ˆ ํ•™์Šต ์†๋„๋„ ๋น ๋ฆ…๋‹ˆ๋‹ค.

  • ์ดˆ๋ณด์ž: ๋จธ์‹ ๋Ÿฌ๋‹/๋”ฅ๋Ÿฌ๋‹์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„
  • ๊ฐœ๋ฐœ์ž: ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ๋ถ„
  • ์—ฐ๊ตฌ์ž: ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„๊ณผ ํ˜‘์—…์ด ํ•„์š”ํ•œ ๋ถ„
  • ๊ต์‚ฌ/ํ•™์ƒ: ์˜จ๋ผ์ธ ์ˆ˜์—…, ์‹ค์Šต ๊ฐ•์˜ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ๋ถ„

์ง€๊ธˆ ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”!

'IT > tutorials' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ด๋ž€ ๊ณต์Šต F-15I ์ „ํญ๊ธฐ์™€ F-35 ์Šคํ…”์Šค๊ธฐ, ์ด์Šค๋ผ์—˜ ํ•ต์‹ฌ ๊ณต๊ตฐ์˜ ์ „๋žต ์†Œ๊ฐœ  (5) 2025.06.15
ํผํ”Œ๋ ‰์‹œํ‹ฐ AI๋ž€? ๊ตฌ๊ธ€๊ณผ์˜ ์ฐจ์ด์ ๊ณผ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ์›๋ฆฌ ์ •๋ฆฌ  (6) 2025.06.02
๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ•- ์ปดํ“จํ„ฐ์— ์‰ฝ๊ฒŒ ๋„ค์ด๋ฒ„ AI ์„ค์น˜ํ•˜๊ธฐ  (4) 2025.05.27
๋ฌด๋ฃŒ ์ฝ”๋”ฉ AI ์ถ”์ฒœ .์ปด๋งน๋„ ์ฝ”๋”ฉํ•˜๋Š” ์‹œ๋Œ€, 10๋ถ„ ๋งŒ์— ํŒŒ์ด์ฌ ๋งˆ์Šคํ„ฐ?  (1) 2025.05.19
ํŒŒ์ด์ฌ์œผ๋กœ HTML ์š”์†Œ ์ฐพ๋Š” ๊ฐ„๋‹จํ•œ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์†Œ๊ฐœ  (0) 2025.05.07
๋”ฅ์‹œํฌ AI, "์ค‘๊ตญ AI์ธ๊ฐ€?" ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋†€๋ผ์šด ๋‹ต๋ณ€  (1) 2025.03.25
ํŒŒ์ด์ฌ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค ์ปดํŒŒ์ผํ•˜๊ธฐ PySide6์™€ PyInstaller ์‚ฌ์šฉ๋ฒ•  (1) 2025.03.24