μ΄μ κ°μ΄λλ₯Ό ν΅ν΄ λλ Έ λ°λλ νλ‘(NBP)μ λλ§μ λ‘컬 LLM μλ²λ₯Ό ꡬμΆνμ ¨μ΅λλ€. μ΄μ λ€μ λ¨κ³μ λλ€. μ§μ λννλ κ²μ λμ΄, AIκ° μ ν΄μ§ μκ°μ μ€μ€λ‘ νΉμ μμ μ μ²λ¦¬νκ² λ§λ€μ΄μΌ ν©λλ€.
μ΄κ²μ΄ λ°λ‘ βμΌμ μλν μ€ν¬λ¦½νΈβμ νμ΄λ©°, NBPμ μ μ λ ₯ 24μκ° κ΅¬λ λ₯λ ₯κ³Ό κ²°ν©ν λ μ§μ ν κ°μΉλ₯Ό λ°νν©λλ€.
π ν΅μ¬: μ°λ¦¬λ LLMμ μ±λ΄μ΄ μλ, APIλ₯Ό ν΅ν΄ λͺ λ Ήμ μννλ μΌκΎΌμΌλ‘ νμ©ν κ²μ λλ€. (μΈλΆ API μκΈ β)
λ‘컬 LLM(Ollama κΈ°μ€)κ³Ό λννλ €λ©΄, ν°λ―Έλμ΄λ μΉ UIλ₯Ό μ¬μ©νλ λμ βAPI(Application Programming Interface)βλΌλ ν΅λ‘λ₯Ό μ¬μ©ν©λλ€.
NBPμμ LLMμ΄ μ μ μλνκ³ μλ€λ©΄, λ€μκ³Ό κ°μ μ£Όμλ‘ API νΈμΆμ΄ κ°λ₯ν©λλ€. (ν¬νΈ 11434)
Plaintext
http://[NBP IPμ£Όμ]:11434/api/generate
λλΆλΆμ μλν μ€ν¬λ¦½νΈλ PythonμΌλ‘ μμ±λ©λλ€. NBPμ Pythonμ μ€μΉνκ³ , λ€μ μ½λλ₯Ό μμ±ν©λλ€.
Python
import requests
import json
# λ‘컬 Ollama API μ£Όμ
API_URL = "http://localhost:11434/api/generate"
MODEL = "tinyllama" # NBPμ μ€μΉλ λͺ¨λΈ μ΄λ¦
PROMPT = "μ€λμ λ μ¨ λ΄μ€λ₯Ό μμ½νμ¬ 3μ€λ‘ μ 리ν΄μ€."
data = {
"model": MODEL,
"prompt": PROMPT,
"stream": False # κ²°κ³Όλ₯Ό νλ²μ λ°κΈ° μν΄ stream λΉνμ±ν
}
response = requests.post(API_URL, data=json.dumps(data))
# μλ΅μμ AIκ° μμ±ν ν
μ€νΈλ§ μΆμΆ
if response.status_code == 200:
result = response.json().get("response")
print("π€ AI λΉμμ λ΅λ³:")
print(result)
requests λΌμ΄λΈλ¬λ¦¬λ pip install requests λͺ
λ Ήμ΄λ‘ μ€μΉν΄μΌ ν©λλ€. NBPμ μ±λ₯μ stream: Falseλ‘ ν λ²μ κ²°κ³Όλ₯Ό λ°λ κ²μ΄ μμ μ μ
λλ€.κ°μ₯ νμ€μ μΈ μ²« λ²μ§Έ μλνμ λλ€. μλ²½μ ν¬λ‘€λ§ν λ΄μ€ ν€λλΌμΈμ LLMμ΄ μμ½νμ¬ μμΉ¨ 7μμ ν λ κ·Έλ¨μΌλ‘ 보λ΄μ£Όλ κΈ°λ₯μ λλ€.
νΉμ λ΄μ€ μ¬μ΄νΈμμ μ λͺ©κ³Ό λ§ν¬λ₯Ό κ°μ Έμ€λ Python μ€ν¬λ¦½νΈ (news_crawler.py)κ° μ€λΉλμλ€κ³ κ°μ ν©λλ€.
daily_summary.py)LLMμκ² ν¬λ‘€λ§λ ν μ€νΈλ₯Ό μ λ¬νκ³ , μμ½λ κ²°κ³Όλ¬Όμ ν λ κ·Έλ¨ APIλ‘ λ³΄λ΄λ μ½λλ₯Ό μμ±ν©λλ€.
LLMμκ² μ£Όλ λͺ λ Ή(Prompt)
βμλ λ΄μ€ κΈ°μ¬ λ¦¬μ€νΈλ₯Ό μ°Έκ³ νμ¬, 2025λ 11μ 27μΌ μμΉ¨ μΆκ·ΌκΈΈ μ£Όμ μ΄μ 5κ°μ§λ₯Ό ν€λλΌμΈκ³Ό 1μ€ μμ½μΌλ‘ μ 리νκ³ , λ§μ§λ§μ μΆν΄κ·Ό μμ μκ°μ ν¨κ» μμΈ‘ν΄μ€.β
NBPκ° 24μκ° μλ²λ‘ μλνλ©΄μ λ°μνλ κ°μ’ μλ¬λ₯Ό AIκ° μ€μ€λ‘ κ°μ§νκ³ λ³΄κ³ μλ₯Ό μμ±νκ² λ§λλλ€.
NBPλ μμ€ν
λ‘κ·Έ νμΌ(μ: /var/log/syslog)μ κΈ°λ‘ν©λλ€.
LLMμκ² μ£Όλ λͺ λ Ή(Prompt)
βμλλ μ΄μ ―λ°€ 12μλΆν° 6μκΉμ§μ μλ² λ‘κ·Έ κΈ°λ‘μ΄λ€. μ΄ κΈ°λ‘μμ βERRORβ, βFAILEDβ, βFATALβ ν€μλλ₯Ό ν¬ν¨νλ λΉμ μμ μΈ λ‘κ·Έλ₯Ό μΆμΆνκ³ , ν΄λΉ λ¬Έμ μ μμΈκ³Ό μμλλ ν΄κ²°μ± μ κΈ°μ μ μΈ μ©μ΄ λμ μΌλ°μ μΈ νκ΅μ΄λ‘ 2μ€ μ΄λ΄λ‘ μ€λͺ ν΄μ€.β
μμ±λ Python μ€ν¬λ¦½νΈκ° μ ν΄μ§ μκ°μ μλμΌλ‘ μ€νλλλ‘ μ€μ ν©λλ€.
SSHμμ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ¬ μμ½ λͺ©λ‘μ μ½λλ€.
Bash
crontab -e
λ§€μΌ μμΉ¨ 7μμ μμ½ μ€ν¬λ¦½νΈ(daily_summary.py)λ₯Ό μ€ννλλ‘ μ€μ ν©λλ€.
Plaintext
# λΆ μ μΌ μ μμΌ λͺ
λ Ήμ΄
0 7 * * * python3 /path/to/your/script/daily_summary.py
Deep Tip: Crontabμ νκ²½ λ³μλ₯Ό μ λλ‘ μΈμνμ§ λͺ»ν λκ° μμ΅λλ€. λ°λμ Python νμΌμ μ 체 κ²½λ‘(
/home/user/...)λ₯Ό μ¬μ©νκ³ , λͺ λ Ήμ΄ μμpython3λ₯Ό λͺ μνλ κ²μ΄ μ’μ΅λλ€.
λλ Έ λ°λλ νλ‘μ λ‘컬 LLMμ APIλ‘ νμ©νλ κ²μ AIλ₯Ό μλμ μΈ λν μλκ° μλ, λ₯λμ μΈ μλν μμ΄μ νΈλ‘ λ§λλ 첫걸μμ λλ€. μ΄ μμ μλ²λ₯Ό λΉμ μ κ°μ₯ μ λ₯νκ³ μ λ’°ν μ μλ AI λΉμλ‘ νμ©νμΈμ!
λ‘컬 λ€νΈμν¬ νκ²½μ μ‘°κΈμ΄λΌλ λ€λ€λ³Έ μ¬λμ΄λΌλ©΄ ν λ²μ―€μ λ§μ£ΌμΉλ μ΅μν λ¨μ΄κ° μμ΅λλ€. λ°λ‘ NetBIOSμ NBTμ λλ€.…
μλ νμΈμ! νλ μΉ κ°λ°μμ λ°μ΄ν° κ΅νμ ν΅μ¬μΈ JSON(JavaScript Object Notation)μ λμ± κ°λ ₯νκ³ μμ μ μΌλ‘ λ§λ€μ΄μ£Όλ λꡬ,…
β ECMAScript 3(E3)λ 무μμΌκΉ ECMAScript 3λ 1999λ μ 곡μνλ μλ°μ€ν¬λ¦½νΈ νμ€μ΄λ€. μ§κΈ 보면 μ€λλ κΈ°μ κ°μ§λ§,…
CoffeeScriptλ νλ νλ‘ νΈμλ κ°λ° μνκ³μμ λ§€μ° μΈκΈ° μμλ μΈμ΄μκ³ , μ§κΈλ νΉμ νλ‘μ νΈλ λ κ±°μ μμ€ν , κ°κ²°ν…
νλμ μΈ νλ‘κ·Έλλ° νκ²½μμ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ μ¬μ ν μ ν리μΌμ΄μ μ μ±λ₯ μ νμ μΆ©λμ μΌμΌν€λ μ£Όμ μμΈ μ€…
(Critical Rendering Path, ν΅μ¬ λ λλ§ κ²½λ‘ μλ²½ μ΄ν΄) μΉ λΈλΌμ°μ μ μ£Όμλ₯Ό μ λ ₯νκ³ μν°λ₯Ό λλ₯΄λ μκ°,…