๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ›„๊ธฐ

[๋‚˜๋Š”๋ฆฌ๋ทฐ์–ด๋‹ค] ํ˜ผ์ž ๋งŒ๋“ค๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š” ํŒŒ์ด์ฌ

by kaizen_bh 2025. 3. 25.



 

"ํ•œ๋น›๋ฏธ๋””์–ด ์„œํ‰๋‹จ <๋‚˜๋Š”๋ฆฌ๋ทฐ์–ด๋‹ค> ํ™œ๋™์„ ์œ„ํ•ด์„œ ์ฑ…์„ ํ˜‘์ฐฌ ๋ฐ›์•„ ์ž‘์„ฑ๋œ ์„œํ‰์ž…๋‹ˆ๋‹ค."

 

 

 

 

      ์ฑ… ์†Œ๊ฐœ

 

 

 

 

 

 
ํ˜ผ์ž ๋งŒ๋“ค๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š” ํŒŒ์ด์ฌ
QR ์ฝ”๋“œ, ์ด๋ฏธ์ง€ ์ฝœ๋ผ์ฃผ ๋“ฑ ์ผ์ƒ๊ณผ ๊ฐ€๊นŒ์šด ์ƒํ™œํ˜• ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ๋ถ€๋™์‚ฐ, ๊ฒฝ์ œ์ง€ํ‘œ, ์‹œ๊ฐ€์ด์•ก ๊ฐ™์€ ์‹ค์šฉ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์ ํŠธ, LLM, ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI์™€ TTS ๋“ฑ ์ตœ์‹  ๊ธฐ์ˆ ๊นŒ์ง€! ํญ๋„“์€ ์ฃผ์ œ๋ฅผ ํ†ตํ•ด ํฅ๋ฏธ๋กญ๊ฒŒ ๋”ฐ๋ผ ํ•ด ๋ณด์„ธ์š”. โ— ์ฃผ์‹ & ๊ฒฝ์ œ ๋ฐ์ดํ„ฐ ๋ถ„์„ - ์‹œ๊ฐ€์ด์•ก, ๊ธฐ์ค€๊ธˆ๋ฆฌ, ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™”ํ•˜๊ธฐ โ— ๋ถ€๋™์‚ฐ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋ถ„์„ - ์ง€์—ญ๋ณ„ ๋‹จ์œ„๋ฉด์ ๋‹น ์•„ํŒŒํŠธ ๋งค๋งค ์‹ค๊ฑฐ๋ž˜๊ฐ€ ํ‰๊ท  ์ง€๋„๋กœ ๋งŒ๋“ค๊ธฐ โ— ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI &
์ €์ž
๋ฌธํ˜„์ผ
์ถœํŒ
ํ•œ๋น›๋ฏธ๋””์–ด
์ถœํŒ์ผ
2025.02.14

 

 

25๋…„ 2์›”์— ์ถœ๊ฐ„๋œ ์ฑ…์œผ๋กœ, ํŒŒ์ด์ฌ ๊ธฐ์ดˆ๋ฅผ ๋ฐฐ์šด ๋‹ค์Œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ์ข‹์„์ง€, ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ฑ…์ด๋‹ค.

ํŒŒ์ด์ฌ์„ ํ™œ์šฉํ•ด ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ† ์ด ํ”„๋กœ์ ํŠธ๋“ค์„ ์ œ์‹œํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด์„œ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ๋‹ค

  • ์ฃผ์‹ & ๊ฒฝ์ œ ๋ฐ์ดํ„ฐ ๋ถ„์„ – ์‹œ๊ฐ€์ด์•ก, ๊ธฐ์ค€๊ธˆ๋ฆฌ, ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™”ํ•˜๊ธฐ
  • ๋ถ€๋™์‚ฐ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋ถ„์„ – ์ง€์—ญ๋ณ„ ๋‹จ์œ„๋ฉด์ ๋‹น ์•„ํŒŒํŠธ ๋งค๋งค ์‹ค๊ฑฐ๋ž˜๊ฐ€ ํ‰๊ท  ์ง€๋„๋กœ ๋งŒ๋“ค๊ธฐ
  • ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI & ์ฑ—๋ด‡ ๊ฐœ๋ฐœ – ์ƒ์„ฑํ˜• AI์™€ ์ฑ—๋ด‡์„ ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์˜์ž ์‹ ๋ฌธ ์Šคํฌ๋ ˆ์ดํ•‘
  • ์›น ์ž๋™ํ™” & ํฌ๋กค๋ง – ์—ฐ๊ด€ ํ‚ค์›Œ๋“œ ๋ถ„์„์„ ํ†ตํ•œ ์—ฐ๋ น๋ณ„, ์„ฑ๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ถ„์„
  • ๊ฒŒ์ž„ & GUI ๊ฐœ๋ฐœ – ์Šฌ๋ผ์ด๋”ฉ ํผ์ฆ, ์˜์–ด ๋ฐ›์•„์“ฐ๊ธฐ ์•ฑ์œผ๋กœ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ

 

 

์•„๋ž˜์˜ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค

 

 

 


      ๋ชฉ์ฐจ

 

Chapter01. ํด๋” ํฌ๊ธฐ ์ธก์ • ํ”„๋กœ๊ทธ๋žจ

- ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •, ํด๋” ํฌ๊ธฐ ์ธก์ • ํ”„๋กœ๊ทธ๋žจ, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”ํ•˜๊ธฐ

Chapter02. ์›”๋ณ„ ์นด๋“œ ์ง€์ถœ ๋‚ด์—ญ ๋ถ„์„

- ์›”๋ณ„ ๋ช…์„ธ์„œ ์ทจํ•ฉ, ์นด๋“œ ์ง€์ถœ ๋‚ด์—ญ ๋ถ„์„, 1๋ถ„๊ธฐ ์ง€์ถœ ์ฐจํŠธ ๋งŒ๋“ค๊ธฐ

Chapter03. ์ด๋ฏธ์ง€ ์ฝœ๋ผ์ฃผ
- ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ, ๊ฐ€๊ณตํ•˜๊ธฐ, ์ฝœ๋ผ์ฃผ ๋งŒ๋“ค๊ธฐ

Chapter04. QR์ฝ”๋“œ๋กœ ์—ฐ๋ฝ์ฒ˜ ๊ณต์œ 
- QR ์ฝ”๋“œ ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ, ์—ฐ๋ฝ์ฒ˜๋ฅผ QR ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๊ธฐ, QR ์ฝ”๋“œ์— ์ด๋ฏธ์ง€ ์‚ฝ์ž…ํ•˜๊ธฐ

Chapter05. ์ด๋ฏธ์ง€ ์† ํ…์ŠคํŠธ ๋ฒˆ์—ญํ•˜๊ธฐ
- ์›น ์ž‘๋™ ์›๋ฆฌ, ์ด๋ฏธ์ง€ ์† ๋ฌธ์ž ์ธ์‹, DeepL ๋ฒˆ์—ญ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

Chapter06. ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ณด๊ณ ์„œ
- ์›น์ƒ์˜ ๋™์ž‘ ์ž๋™ํ™”ํ•˜๊ธฐ, ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ์ •๋ณด ์ˆ˜์ง‘, ๋ณด๊ณ ์„œ ์ž‘์„ฑ

Chapter07. ์‹œ๊ฐ€์ด์•ก ๋ถ„์„
- ์ข…๋ชฉ๋ณ„ ์‹œ๊ฐ€์ด์•ก ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ํŽ˜์ด์ง€ ์ด๋™ ์ž๋™ํ™”, ์‹œ๊ฐ€์ด์•ก ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

Chapter08. ์—ฐ๊ด€ ํ‚ค์›Œ๋“œ ๊ฒฝ์Ÿ ๊ฐ•๋„ ๋ถ„์„
- ๋„ค์ด๋ฒ„ ์‡ผํ•‘ ์—ฐ๊ด€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰, ๊ฒฝ์Ÿ ๊ฐ•๋„ ๋ถ„์„, ์—ฐ๊ด€ ํ‚ค์›Œ๋“œ ๋ถ„์„ ์•ฑ ๋งŒ๋“ค๊ธฐ

Chapter09. ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ๊ทธ๋ž˜ํ”„

- ๊ธฐ์ค€ ๊ธˆ๋ฆฌ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ, ๋‹ค์–‘ํ•œ ๊ฒฝ์ œ์ง€ํ‘œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ

 

Chapter10. ์ •๊ธฐ์˜ˆ๊ธˆ ๊ธˆ๋ฆฌ ํ˜„ํ™ฉํ‘œ

- ์ •๊ธฐ์˜ˆ๊ธˆ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ฃผ์š” ๊ธˆ๋ฆฌ์ง€ํ‘œ ์‹œ๊ฐํ™”, ์ •๊ธฐ์˜ˆ๊ธˆ ๊ธˆ๋ฆฌ ํ˜„ํ™ฉํ‘œ ์ž‘์„ฑ

 

Chapter11. ์•„ํŒŒํŠธ ๋งค๋งค ์‹ค๊ฑฐ๋ž˜๊ฐ€ ์ง€๋„

- ๋‹จ์œ„ ๋ฉด์ ๋‹น ํ‰๊ท  ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™”

 

Chapter12. ๋ฏธ์‰˜๋ฆฐ ๊ฐ€์ด๋“œ ์ง€๋„

- ๋ง›์ง‘ ํƒ์ƒ‰ ์ž๋™ํ™”, ์ขŒํ‘œ ์ˆ˜์ง‘, ์ง€๋„ ๊ทธ๋ฆฌ๊ธฐ

 

Chapter13. ์ƒ์„ฑํ˜• AI ๊ธฐ์‚ฌ ๋ฒˆ์—ญ ์•ฑ

- LLM ๋ง›๋ณด๊ธฐ, ์ฑ—๋ด‡ ๋งŒ๋“ค๊ธฐ, ๊ธฐ์‚ฌ ๋ฒˆ์—ญ ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ

 

Chapter14. ์˜์–ด ๋ฐ›์•„์“ฐ๊ธฐ ์•ฑ

- ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI ์ฑ—๋ด‡ ๋งŒ๋“ค๊ธฐ, ํ…์ŠคํŠธ->์Œ์„ฑ์œผ๋กœ ๋ณ€ํ™˜, ์˜์–ด ๋ฐ›์•„์“ฐ๊ธฐ ์•ฑ ๋งŒ๋“ค๊ธฐ

 

Chapter15. ์Šฌ๋ผ์ด๋”ฉ ํผ์ฆ ๋งŒ๋“ค๊ธฐ

- ํผ์ฆ ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ, ์Šฌ๋ผ์ด๋”ฉ ํผ์ฆ ๊ตฌํ˜„, ๊ฒŒ์ž„ ๊ทธ๋ž˜ํ”ฝ ๊ตฌํ˜„

 

 

 

 

 

 


 

      ๋‚ด์šฉ

 

15๊ฐœ์˜ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ ์ค‘ AI์™€ ๊ด€๋ จ๋œ ์ฑ•ํ„ฐ๋“ค์„ ๋จผ์ € ์ง์ ‘ ๋”ฐ๋ผ๊ฐ€๋ณด์•˜๋‹ค

๊ด€๋ จ๋œ ์ฝ”๋“œ์™€ ์†Œ์Šค๋“ค์€ ์•„๋ž˜ ๊นƒํ—™์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค

https://github.com/himoon/gopython

 

GitHub - himoon/gopython

Contribute to himoon/gopython development by creating an account on GitHub.

github.com

 

 

 

Chapter05. ์ด๋ฏธ์ง€ ์† ํ…์ŠคํŠธ ๋ฒˆ์—ญํ•˜๊ธฐ

 

 

1. ์›น์˜ ์ž‘๋™ ์›๋ฆฌ

  • ์›น ๋ธŒ๋ผ์šฐ์ € : ํฌ๋กฌ, ์—ฃ์ง€, ์‚ฌํŒŒ๋ฆฌ
  • ์›น ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น…์„ ๋•๊ธฐ ์œ„ํ•œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ผ๋Š” ๋„๊ตฌ ๋ชจ์Œ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ
    • ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„์˜ ์Œ๋ฐฉํ–ฅ ํ†ต์‹  ๊ธฐ๋ก ์—ด๋žŒ
    • ๊ฒ€์‚ฌ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ฌธ์„œ์˜ HTML ์š”์†Œ ๋ถ„์„ ๊ฐ€๋Šฅ
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค ์„ค์น˜ํ•˜๊ธฐ
    • ์ฑ…์—์„œ๋Š” venv ์“ฐ์ง€๋งŒ conda ์‚ฌ์šฉ
    • python 3.12
    • ํ•„์š” ํŒจํ‚ค์ง€ (numpy, torch, easyocr)
      • easyocr์€ pytorch ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋จ
      • numpy 1.26.4
      • torch 2.2.2
      • easyocr 1.7.2
      • pillow 10.4.0
      • deepl
      • streamlit
pip install -U "numpy<=1.26.4" "torch<=2.5.1" "torchvision<=0.20.1" "easyocr<=1.7.2" "pillow<=10.4.0" deepl streamlit

 

 

 

์›น์˜ ์ž‘๋™ ์›๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

 

HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต

  • ์›น ๋ธŒ๋ผ์šฐ์ €์— ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ์ธ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”
  • ์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์ž…๋ ฅํ•˜๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ, HTTP๋ผ๋Š” ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•จ
    1. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ
      โžก๏ธ  ์›น ๋ธŒ๋ผ์šฐ์ € — HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€ ์ „์†ก —> ์›น ์„œ๋ฒ„
    2. ์›น ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ธ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ๋ถ„์„.์„œ๋ฒ„๊ฐ€ ์ž‘์„ฑํ•œ ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ผ ํ•œ๋‹ค.
      โžก๏ธ  ์›น ๋ธŒ๋ผ์šฐ์ € <— HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€ ์ „์†ก — ์›น ์„œ๋ฒ„
    3. ์š”์ฒญ ๋ฉ”์„ธ์ง€ ๊ทœ์น™, ์š”์ฒญ ๊ถŒํ•œ, ์š”์ฒญ ๋ฆฌ์†Œ์Šค๊ฐ€ ์›น ์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š”์ง€ ๋“ฑ์„ ํ™•์ธ ํ›„ ํ•ด๋‹น ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ
    4. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ™”๋ฉด์— ๋ฆฌ์†Œ์Šค๋ฅผ ์ถœ๋ ฅ. ์ด๋ ‡๊ฒŒ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅ๋˜๋Š” ๊ณผ์ •์„ ๋ Œ๋”๋ง์ด๋ผ ํ•จ

streamlit ์›น ์•ฑ

  • ์›น ์•ฑ : ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ. URL๋งŒ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • streamlit : ํŒŒ์ด์ฌ๋งŒ์œผ๋กœ ์›น ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒจํ‚ค์ง€

 

๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ HTTP ๋ฉ”์„ธ์ง€ ๋ถ„์„

  • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์™€ ์ฃผ๊ณ ๋ฐ›์€ HTTP ๋ฉ”์„ธ์ง€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Œ
    1. ํฌ๋กฌ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋„ค์ด๋ฒ„ ์ ‘์† ํ›„ F12๋กœ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์‹คํ–‰
    2. ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ์ฃผ๊ณ ๋ฐ›์€ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ํƒญ ํด๋ฆญ ํ›„ Ctrl+R๋กœ ์ƒˆ๋กœ๊ณ ์นจ
    3. Name ๋ชฉ๋ก์—์„œ ์›น์‚ฌ์ดํŠธ ์ฃผ์†Œ, www.naver.comํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํƒญ์ด ์—ด๋ฆผ.
    4. Headers์—์„œ Reponse Headers ์—์„œ ์›น ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ HTTP ์‘๋‹ต ๋ฉ”์„ธ์ง€, Request Headers์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ธ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ
    5. Response์—์„œ ์›น ์„œ๋ฒ„๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ ์‹ค์ œ ๋ฆฌ์†Œ์Šค ํ™•์ธ ๊ฐ€๋Šฅ

 

 

2. ์ด๋ฏธ์ง€ ์† ๋ฌธ์ž ์ธ์‹ํ•˜๊ธฐ

  • easyocr ํŒจํ‚ค์ง€๋กœ ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ๋ฌธ์ž๋ฅผ ์ธ์‹ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ pillow ํŒจํ‚ค์ง€๋กœ ์‹œ๊ฐํ™”
  • ์ด๋Ÿฌํ•œ ์ธ์‹ ํ”„๋กœ๊ทธ๋žจ์„ streamlit ํŒจํ‚ค์ง€์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์›น ์•ฑ์œผ๋กœ ๊ตฌํ˜„

 

๋ฌธ์ž ์ธ์‹ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

  • easyocr์—์„œ Reader ํด๋ž˜์Šค
    • easyocr์˜ ํ•ต์‹ฌ ํด๋ž˜์Šค๋กœ ๋ฌธ์ž ์ธ์‹์— ์‚ฌ์šฉํ•  ์–ธ์–ด๋ฅผ ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์œผ๋กœ Reader ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•œ๋‹ค์Œ, ํ•จ์ˆ˜ readtext()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€ ์† ๋ฌธ์ž๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค
    • readtext() ๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ž…๋ ฅ๋ฐ›๊ณ , ์ด๋ฏธ์ง€ ์† ๋ฌธ์ž์˜ ์ขŒํ‘œ์™€ ์ธ์‹ํ•œ ๋ฌธ์ž, ์ธ์‹๋ฅ ์„ ํŠœํ”Œ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
    • ํ•จ์ˆ˜ readtext() ๋Š” ๋ฌธ์ž์—ด ํƒ€์ž…์˜ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ, bytes ํƒ€์ž…์˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋ฐ›๋Š”๋‹ค
    • ๋ฐ˜ํ™˜๊ฐ’์˜ ์ธ์‹๋ฅ ์€ 1์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์ •ํ™•ํ•˜๋‹ค
      • result :
        [([[85, 288], [1088, 288], [1088, 457], [85, 457]], 'Being a vegetarian', 0.9823604886339942),
        ([[77, 417], [1159, 417], [1159, 574], [77, 574]], 'is a big missed steak', 0.4830981879580033)]
      • [85, 288], [1088, 288], [1088, 457], [85, 457]] : ์ขŒํ‘œ
      • 'Being a vegetarian' : ๋ฌธ์ž
      • 0.9823604886339942 : ์ธ์‹๋ฅ 
      • ๊ฐ„๋‹จ ์˜ˆ์‹œ ์‹คํ–‰์‹œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ 6.5์ดˆ.
  • ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ถ”๊ฐ€
    • pillow์˜ polygon() ์ด์šฉ
    • ํŠœํ”Œ ํ˜•ํƒœ์˜ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Œ

 

๋ฌธ์ž ์ธ์‹ ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ

  • streamlit ์‚ฌ์šฉ
  • ์›น ์•ฑ์— ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ฉด, ํ•จ์ˆ˜ read_text_and_draw_line() ์„ ์‚ฌ์šฉํ•ด ์ด๋ฏธ์ง€ ์† ๋ฌธ์ž๋ฅผ ์ธ์‹ํ•˜๊ณ  ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค๋ฅผ ๊ทธ๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ

 

 

3. DeepL ๋ฒˆ์—ญ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

์œ„์—์„œ ๋งŒ๋“ค์–ด์˜จ ์ฝ”๋“œ์— DeepL API๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฒˆ์—ญ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค

DeepL ์‚ฌ์ดํŠธ์— ํšŒ์› ๊ฐ€์ž…ํ›„ ๋ฌด๋ฃŒ ํ”Œ๋žœ์œผ๋กœ API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์นด๋“œ ๋“ฑ๋ก์ด ํ•„์š”ํ•˜๋‹ค

๋ฒˆ์—ญ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ›„ ๊ฒฐ๊ณผ๋ฌผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

 

๋‚ด์šฉ์„ ์ญ‰ ๋”ฐ๋ผ๊ฐ€๋‹ค๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์œ„์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€ ์ธ์‹ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

๋ฌผ๋ก  ๋‹จ์ˆœ ํƒ€์ดํ•‘๋งŒ์œผ๋กœ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ฝ”๋“œ ์‚ฌ์šฉ๋ฒ•์„ ์˜จ์ „ํžˆ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋Š” ํž˜๋“ค์ง€๋งŒ.. ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์กฐ๊ธˆ์”ฉ ์ปค์Šคํ…€ํ•ด๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„๋„ ํ•„์š”ํ•˜๋‹ค

 

์ฑ•ํ„ฐ๋ณ„ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ๋™์•ˆ ์‚ฌ์šฉํ•ด์™”๋˜ ์ฝ”๋“œ์™€ ๊ธฐ๋Šฅ๋“ค์„ ์ž˜ ์‘์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ˜•ํ•˜๋Š” ์—ฐ์Šต ๋ฌธ์ œ์ด๋‹ค

 

 


 

Chapter13. ์ƒ์„ฑํ˜• AI ๊ธฐ์‚ฌ ๋ฒˆ์—ญ ์•ฑ

 

1. ollama ์ตํžˆ๊ธฐ

  • ollama๋Š” ์˜คํ”ˆ์†Œ์Šค AI ๋ชจ๋ธ์„ ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ, ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค LLM ์„ ์ง€์›ํ•œ๋‹ค
  • ๊ฐ„ํŽธํ•œ ์„ค์น˜, ์‰ฌ์šด ์‚ฌ์šฉ๋ฒ•๊ณผ CLI ๊ธฐ๋ฐ˜์˜ ์‹คํ–‰ ๋ฐฉ์‹์ด ํŠน์ง•
  • ollama ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋ฐ›๊ณ  ์„ค์น˜ํ•˜๊ธฐ

https://ollama.com/download

 

Download Ollama on macOS

Download Ollama for macOS

ollama.com

 

 

๋‹ค์šด๋ฐ›๊ณ  ํŒŒ์ผ ์‹คํ–‰์‹œ์ผœ ์„ค์น˜ํ•œ๋’ค ํ„ฐ๋ฏธ๋„์—์„œ ollama๋ฅผ ์‹คํ–‰์‹œ ์œ„์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค

 

ํ„ฐ๋ฏธ๋„์ฐฝ์—์„œ gemma2 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ

 

 

์ ฌ๋งˆ ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

 

 

๊ฐ„๋‹จํ•œ ๋ฌธ์žฅ ๋ฒˆ์—ญ

 

 

ollama์˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฌธ๋‹ต ๊ฐ€๋Šฅ

import ollama

resp1 = ollama.chat(
    model="gemma2:9b",
    messages=[{'role':'user', 'content':'๋‚ด ์ด๋ฆ„์€ ๊น€์ถ˜์‹์ด์—ฌ!!'}]
)

print(resp1['message'])

 

 

๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ด์ „์˜ ๋Œ€ํ™” ๋‚ด์—ญ๋“ค์ด ์ด์–ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ LLM๊ณผ ์ฃผ๊ณ ๋ฐ›์€ ๋Œ€ํ™”๋ฅผ ๋ชจ๋‘ ๊ธฐ๋กํ•˜๊ณ , ๋Œ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ๊ธฐ๋ก์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜๋ฉด ์ด์ „ ๋Œ€ํ™”๋ฅผ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค ⇒ ๋ฌธ๋งฅ ํ˜•์„ฑ

import ollama

msgs = [{'role':'user', 'content':'๋‚ด ์ด๋ฆ„์€ ๊น€์ถ˜์‹์ด์—ฌ!!'}]
resp1 = ollama.chat(model="gemma2:9b", messages=msgs)
msgs.append(resp1['message'])

msgs.append({'role':'user', 'content':'๋‚ด ์ด๋ฆ„์ด ๋ญ๋ผ๊ณ  ํ–ˆ์ง€???'})
resp2 = ollama.chat(model="gemma2:9b", messages=msgs)
msgs.append(resp2['message'])

print(msgs)

---
[{'role': 'user', 'content': '๋‚ด ์ด๋ฆ„์€ ๊น€์ถ˜์‹์ด์—ฌ!!'}, 
Message(role='assistant', content='์•ˆ๋…•ํ•˜์„ธ์š”, ๊น€์ถ˜์‹๋‹˜! ๐Ÿ˜Š 
\n\n๋งŒ๋‚˜์„œ ๋ฐ˜๊ฐ€์›Œ์š”. ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”? ๐Ÿ˜„', images=None, tool_calls=None), 
{'role': 'user', 'content': '๋‚ด ์ด๋ฆ„์ด ๋ญ๋ผ๊ณ  ํ–ˆ์ง€???'}, 
Message(role='assistant', content='๊น€์ถ˜์‹์ด๋ผ๊ณ  ๋ง์”€ํ•˜์…จ์–ด์š”! ๐Ÿ˜„ ๊ธฐ์–ตํ–ˆ๋‹ˆ? 
\n\n\n\n\n๋ฌด์Šจ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”, ๊น€์ถ˜์‹๋‹˜? ๐Ÿค”', images=None, tool_calls=None)]

 

์ด๋ ‡๊ฒŒ ๋Œ€ํ™” ๋‚ด์—ญ์„ ์ถ•์ ํ•˜์—ฌ ๋ฌธ๋งฅ์„ ์ญ‰ ์ด์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ LLM๋งˆ๋‹ค ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™” ๊ฐœ๋ก์˜ ๊ธธ์ด์—๋Š” ์ œํ•œ์ด ์žˆ๋‹ค

 

 

 

2. ์ฑ—๋ด‡ ๋งŒ๋“ค๊ธฐ

streamlit์œผ๋กœ ๊ตฌํ˜„ํ•œ ์›น ์•ฑ์— ๊ตฌ๊ธ€ gemma2, ๋ฉ”ํƒ€์˜ llama3.1์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ฒˆ ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋‘ LLM์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์•„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด๋ณผ ๊ฒƒ์ด๋‹ค

 

 

LLM์„ ํ™œ์šฉํ•œ ์ฑ—๋ด‡ ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ

  • streamlit ํŒจํ‚ค์ง€์˜ ์ฑ„ํŒ… ์œ„์ ฏ
    • ํ•ด๋‹น ํŒจํ‚ค์ง€์—์„œ๋Š” ์ฑ—๋ด‡ ๊ตฌํ˜„์„ ์ง€์›ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋“ค์„ ์ง€์›ํ•œ๋‹ค
    • ๊ทธ ์ค‘ ์•„๋ž˜์˜ ๋‘ ํ•จ์ˆ˜๋Š” ์ฑ—๋ด‡ ๊ตฌํ˜„์— ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค
      • st.chat_message() : ์•ฑ์— ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค
      • st.chat_input() : ์‚ฌ์šฉ์ž๊ฐ€ ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์ ฏ์„ ํ‘œ์‹œํ•œ๋‹ค
import streamlit as st
with st.chat_message('user'):
		st.write('Hello')
prompt = st.chat_input('Say something')

 

 

์œ„์˜ ๊ฐ„๋‹จํ•œ streamlit ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์˜ ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค

 

 

streamlit ์—์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ์œ„ํ•œ ์ฑ„ํŒ… ์œ„์ ฏ์„ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉํ•  ํ•จ์ˆ˜๋Š” ์„ธ ๊ฐ€์ง€์ด๋‹ค

  1. init_session_state() : streamlit ์„ธ์…˜์„ ์ดˆ๊ธฐํ™”
  2. chat_message_user() : LLM ๋ชจ๋ธ์— ์ „๋‹ฌํ•œ ์‚ฌ์šฉ์ž ๋ฉ”์„ธ์ง€๋ฅผ ์›น ์•ฑ์˜ ํ™”๋ฉด์— ์ถœ๋ ฅ
  3. chat_message_llm() : LLM ๋ชจ๋ธ์˜ ์‘๋‹ต์„ ์›น ์•ฑ์˜ ํ™”๋ฉด์— ์ถœ๋ ฅ

 

 

 

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ LLM์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ธฐ

 

์˜คํ”ˆ์†Œ์Šค LLM, ๊ตฌ๊ธ€์˜ gemma2์™€ ๋ฉ”ํƒ€์˜ llama3.1์„ ์‚ฌ์šฉ

 

 

 

3. ๊ฐ€์‚ฌ ๋ฒˆ์—ญ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ

  • HTML ๋ฌธ์„œ์—์„œ ํ…์ŠคํŠธ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•œ๋‹ค
  • ๊ทธ๋ฆฌ๊ณ  LLM์„ ํ™œ์šฉํ•˜์—ฌ ์™ธ๊ตญ์–ด ๊ธฐ์‚ฌ๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ์›น ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฌ๋‹ค
  • trafilatura ํŒจํ‚ค์ง€๋Š” ์›น ํฌ๋กค๋ง ๋ฐ ์Šคํฌ๋ ˆ์ดํ•‘์— ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠนํžˆ HTML ๋ฌธ์„œ์—์„œ ํ…์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ถ”์ถœํ•œ๋‹ค. ์ค‘๊ฐ„์˜ ๋ถ„์„ ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค

 

ํ…์ŠคํŠธ ์ถ”์ถœํ•˜๊ธฐ

 

trafilatura ํŒจํ‚ค์ง€๋กœ ์›น์‚ฌ์ดํŠธ์—์„œ ํ…์ŠคํŠธ ์ถ”์ถœ

  • featch_url() : ์ฃผ์–ด์ง„ URL์— ์ ‘์†ํ•˜์—ฌ HTML์„ ์ˆ˜์ง‘
  • extract() : ์ฃผ์–ด์ง„ HTML์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœ
  • extract_metadata() : ์ฃผ์–ด์ง„ HTML์—์„œ ์ œ๋ชฉ, ์ž‘์„ฑ์ž, ์ด๋ฏธ์ง€ ๋“ฑ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ
import json
import trafilatura

url = "https://www.koreaherald.com/view.php?ud=20240725050618"
html: str = trafilatura.fetch_url(url) # HTML ์ˆ˜์ง‘
extracted: str = trafilatura.extract(html, output_format="json", with_metadata=True,)
parsed = json.loads(extracted)
print(parsed)
---
{'title': 'Seventeen announces world tour at fan meeting', 
'author': 'Kim Jae-heun', 'hostname': 'koreaherald.com', 
'date': '2024-07-25', 'fingerprint': '36598b35bd9b2394', 
'id': None, 'license': None, 'comments': '', 
'raw_text': 'K-pop sensation Seventeen of Pledis Entertainment concluded its eighth fan meeting with a surprise announcement of a world tour later this year. 
Seventeen held two editions of "2024 SVT 8th Fan Meeting (Seventeen in Carat Land)" at Gocheok Sky Dome in Seoul on Tuesday and Wednesday. 
The event left unforgettable memories for both the fans in attendance and those from 118 countries and regions watching live. 
...
'language': None, 
'image': 'https://wimg.heraldcorp.com/content/default/2024/07/25/20240725050564_0.jpg', 
'pagetype': 'article', 'filedate': '2025-03-19', 'source': 'https://www.koreaherald.com/article/3441040', 
'source-hostname': 'The Korea Herald', 
'excerpt': 'K-pop sensation Seventeen of Pledis Entertainment concluded its eighth fan meeting with a surprise announcement of a world tour later this year. 
Seventeen held two editions of "2024 SVT 8th Fan Meeting (Seventeen in Carat Land)" at Gocheok Sky Dome in Seoul on Tuesday and Wednesday. 
The event left unforgettable memories for both the fans in attendance and those from 118 countries and regions watching live. By the end on Wednesday, Seventeen released a teaser video announcing its world', 
'categories': '', 'tags': ''}

 

 

 

๊ฐ€์‚ฌ ๋ฒˆ์—ญ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  • ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ ์œ„์ ฏ์— ์˜๋ฌธ ๊ธฐ์‚ฌ ๋งํฌ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ด๋ฅผ ๋ฒˆ์—ญํ•˜์—ฌ ์›๋ฌธ๊ณผ ํ•จ๊ป˜ ๋ฒˆ์—ญ๋œ ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฑ—๋ด‡
  • ์ด๋ฅผ ์œ„ํ•ด ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ๋“ค ๋ช‡๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค
    1. ํ”„๋กฌํ”„ํŠธ์— ์ž…๋ ฅ๋œ URL์— ์ ‘์†ํ•ด ๊ธฐ์‚ฌ์˜ ๋ณธ๋ฌธ์„ ์ถ”์ถœ
    2. ์ถ”์ถœํ•œ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ˜• AI๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒˆ์—ญ
    3. ์›น ์•ฑ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ธฐ์‚ฌ์˜ ์›๋ฌธ๊ณผ ๋ฒˆ์—ญํ•  ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ
  • ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์„ค์ •
    • ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋Š” AI ๋ชจ๋ธ์ด ์ง€์ผœ์•ผํ•  ์ง€์นจ์ด๋‚˜ ๋งฅ๋ฝ์„ ์„ค์ •ํ•˜๋Š” ์—ญํ• 
    • AI๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ฉ”์„ธ์ง€๋‚˜ ์ž‘์—… ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค
      • ์—ญํ•  ์„ค์ • : “๋‹น์‹ ์€ ์ˆ™๋ จ๋œ ๋ฒˆ์—ญ๊ฐ€์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์ด ๋‹น์‹ ์˜ ์ž„๋ฌด์ž…๋‹ˆ๋‹ค”
      • ์–ด์กฐ ์„ค์ • : “์นœ์ ˆํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ด ์ฃผ์„ธ์š””
      • ๊ทœ์น™ ์„ค์ • : “๋งˆํฌ๋‹ค์šด ์„œ์‹์„ ์œ ์ง€ํ•ด ์ฃผ์„ธ์š””

 

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•  ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ

๋‹น์‹ ์€ ๋งŽ์€ ์–ธ์–ด์— ๋Œ€ํ•œ ์ „๋ฌธ ์ง€์‹์„ ๊ฐ–์ถ˜ ๋งค์šฐ ์ˆ™๋ จ๋œ ๋ฒˆ์—ญ๊ฐ€์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ…์ŠคํŠธ์˜ ์–ธ์–ด๋ฅผ ์‹๋ณ„ํ•œ ๋‹ค์Œ, ์›๋ฌธ์˜ ์˜๋ฏธ, ์–ด์กฐ, ๋‰˜์•™์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•œ๊ตญ์–ด๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์ด ๋‹น์‹ ์˜ ์ž„๋ฌด์ž…๋‹ˆ๋‹ค. ๋ฒˆ์—ญ๋œ ๋ฒ„์ „์—์„œ๋Š” ๋ฌธ๋ฒ•, ์ฒ ์ž, ๊ตฌ๋‘์ , ์ค„๋ฐ”๊ฟˆ, ๋งˆํฌ๋‹ค์šด ์„œ์‹์„ ์ •ํ™•ํ•˜๊ฒŒ ์œ ์ง€ํ•ด ์ฃผ์„ธ์š”.

 

 

ollama ์—์„œ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ‘role’ ํ‚ค์˜ ๊ฐ’์— ‘system’์„ ์ง€์ •ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค

import ollama

msgs = [
	{'role':'system', 'content':'์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ด์ฃผ์„ธ์š”'},
	{'role':'user', 'content':'Hello, World!'},
	]

resp = ollama.chat(model='gemma2:9b', messages=msgs)
print(resp['message']['content]

 

 

 

๊ฒฐ๊ณผ๋ฌผ

 

The use_column_width parameter has been deprecated and will be removed in a future release. Please utilize the use_container_width parameter instead.

์‚ฌ์šฉํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘ ๋ฐ”๋€ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค

 

 

 

 

 


์ง€๊ธˆ๊นŒ์ง€ ์ฑ…, ํ˜ผ์ž ๋งŒ๋“ค๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š” ํŒŒ์ด์ฌ์˜ ์ฑ… ์†Œ๊ฐœ์™€ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ ์ผ๋ถ€๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค

์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ์ณ๋ณด๋ฉด์„œ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณต๋ถ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœ ์ฝ”๋“œ ๋”ฐ๋ผ์น˜๊ธฐ๊ฐ€ ์•„๋‹Œ ํ™œ์šฉ๋ฒ•๊นŒ์ง€ ์ตํž ์ˆ˜ ์žˆ์—ˆ๋‹ค

 

ํŒŒ์ด์ฌ ๊ธฐ์ดˆ์ฑ…์„ ๊ณต๋ถ€ํ•œ ๋’ค ์–ด๋–ค ๊ณต๋ถ€๋ฅผ, ์ฑ…์„ ๋ด์•ผํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ํ•ด๋‹น ์ฑ…์„ ์ถ”์ฒœํ•œ๋‹ค