📈 Dan 2 — Gdje Smo i Kuda Idemo?
Na Danu 1 razumjeli smo kako LLM-ovi rade iznutra (Transformer, tokeni, API parametri). Danas rješavamo praktičniji problem koji svaki IT arhitekt ili CTO mora riješiti: koji model izabrati i kako ga pokrenuti?
Pitanja koja ćemo odgovoriti:
- Kako objektivno mjeriti "pamet" modela? (Benchmark testovi)
- Kada koristiti cloud API (OpenAI, Anthropic) a kada lokalni open-source model?
- Kako precizno izračunati ROI i break-even point za vlastiti AI server?
- Koji modeli su dostupni za slobodnu komercijalnu upotrebu bez licencnih problema?
🏆 Kako Znamo Koji Model Je Bolji? (Benchmark Testovi)
Nije dovoljno reći "GPT-4 je pametan". U inženjeringu, tvrdnje se dokazuju mjerenjima. AI industrija je razvila set standardiziranih benchmark testova koji objektivno mjere različite aspekte sposobnosti modela.
📌 Šta je Benchmark Test?
Benchmark (referentni test) je standardizirani skup zadataka sa poznatim tačnim odgovorima, koji se koristi za mjerenje i uspoređivanje performansi sistema. U kontekstu LLM-a, benchmark ima stotine ili hiljade pitanja iz raznih oblasti, a model "polaže" test odgovarajući na svako pitanje automatski. Score = udio ispravnih odgovora.
Šta mjeri: Široko akademsko znanje i logičko razmišljanje.
Objedinjuje 57 različitih akademskih predmeta uklj. višu matematiku, pravo, medicinu,
historiju, fiziku, ekonomiju. Svako pitanje je Multiple Choice (A, B, C, D).
14,079 pitanja ukupno.
Kontekst: Zamislite kao maturi koji polažu Google, OpenAI i Meta —
svaki put sa istim pitanjima iz kompletnog curricula.
Llama 3.1 70B: ~83% | Mistral Large 2: ~84%
Šta mjeri: Sposobnost pisanja ispravnog programskog koda.
OpenAI je kreirao 164 Python programerska zadatka. Svaki zadatak ima: opis funkcije u
docstringu + unit testove. Model mora napisati tijelo funkcije koje prolazi SVE testove.
Nema "djelomičnog poena" — ili radi ili ne radi.
Kontekst: Ekvivalent tehničkom intervjuu za junior Python developera —
samo 164 pitanja istovremeno.
GPT-3.5-turbo: ~67% (koliko je napredak!)
Šta mjeri: Matematičko rezonovanje i višekorančno razmišljanje.
8,500 matematičkih zadataka na nivou osnovne škole koji zahtijevaju 2-8 logičkih koraka
rješavanja. Ključno: model mora pronalaziti tačan numerički odgovor, ne samo
"izgled" rješenja. Ovo testira Chain-of-Thought sposobnost.
Kontekst: Matka matematike za pametne 10-godišnjake, ali 8,500 pitanja.
ChatGPT-3 kada je izašao: ~57% (raison d'être za GPT-4!)
Šta mjeri: Što korisnici zapravo preferiraju (Human Preference).
Blind test: korisnik šalje isti prompt, dva anonimna modela odgovaraju istovremeno.
Korisnik glasuje koji mu se više svidio — bez znanja koji je koji.
Matematika šaha (ELO rating sustav) formira globalnu rang-listu.
Milioni glasova korisnika čine ovo najpouzdanijim pokazateljem.
Kontekst: Demokracija modela — "glasači" su stvarni korisnici, ne akademici.
Pristupačno na: chat.lmsys.org/leaderboard
Šta mjeri: Napredno akademsko znanje (10 opcija umjesto 4).
Nastao jer su top modeli saturirali klasični MMLU (dostigli ~90%).
Komplicovaniji zadaci koji zahtijevaju dublje rezonovanje i expert znanje.
Za razlikovanje između vrhunskih modela.
O3 mini (reasoning): ~79%
Šta mjeri: Rješavanje pravih GitHub issue-a (ne igračke probleme).
2,294 pravih GitHub issue-a iz popularnih Python projekata (Django, Flask, NumPy).
Model mora: razumjeti codebase, napisati patch (diff), test suite mora proći.
Ovo je najbliže realnom dev poslu ikad!
Ovaj benchmark jasno diferencira coding sposobnost!
⚖️ Proprietary vs. Open-Source: Sveobuhvatna Usporedba
Kod odabira modela za poslovni sistem, bitna su tri faktora: sposobnost, trošak, i kontrola podataka. Evo sveobuhvatne usporedbe aktualnih modela (2025.):
| Model | Tip | Coding | Analitika | Context Window | Input Cijena | Privatnost Podataka |
|---|---|---|---|---|---|---|
| ☁️ PROPRIETARY CLOUD MODELI | ||||||
| GPT-4o (OpenAI) | Cloud API | ⭐⭐⭐⭐½ | ⭐⭐⭐⭐⭐ | 128k tokena | $5.00/1M | Podaci idu na OpenAI servere (USA) |
| Claude 3.5 Sonnet (Anthropic) | Cloud API | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐½ | 200k tokena | $3.00/1M | Podaci idu na Anthropic servere (USA) |
| Gemini 1.5 Pro (Google) | Cloud API | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 2M tokena! | $3.50/1M | Podaci idu na Google servere |
| 🔓 OPEN-SOURCE MODELI (besplatni za lokalno pokretanje) | ||||||
| Llama 3.1 70B (Meta) | Open-Source | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 128k tokena | Besplatno* (treba GPU) | 100% lokalno — podaci ne napuštaju firmu |
| Mistral Large 2 (Mistral) | Open-Source | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 128k tokena | Besplatno* (treba GPU) | 100% lokalno |
| Llama 3.1 8B (Meta) — Quantiziran | Open-Source | ⭐⭐⭐ | ⭐⭐⭐ | 128k tokena | Besplatno (radi i na laptop-u!) | 100% lokalno |
| Phi-3 Mini (Microsoft) | Open-Source / SLM | ⭐⭐⭐ | ⭐⭐½ | 128k tokena | Besplatno (radi bez GPU) | 100% lokalno, čak i na CPU-u |
🏛️ Napomena za Javnu Upravu i Regulisane Industrije
Institucije javne uprave (ministarstva, agencije), zdravstvo (bolnice), pravosuđe (sudovi), finansije (banke, osiguranje) tipično imaju stroge zahtjeve o lokalizaciji podataka. U kontekstu BiH i EU, GDPR (i Zakon o zaštiti ličnih podataka) postavlja ograničenja za prenos ličnih podataka izvan EU/EEA.
Praktično: Slati ID broj, JMBG, medicinske podatke ili sudske spise na OpenAI ili Anthropic servere u SAD može biti u koliziji sa važećom legislativom. Lokalni open-source deploy (Ollama + Llama 3.1) eliminira ovaj rizik jer podaci ostaju na vašim serverima unutar zemaljskih granica.
LAB O4: Kalkulacija ROI — Cloud vs. On-Premise
Izgradićemo Python skriptu koja automatizira finansijsku analizu za konkretan scenarij. Scenario: firma sa 500 zaposlenih želi RAG chatbot koji pretražuje interne PDF dokumente (ISO standarde, pravilnike, procedure).
Korak 1: Definisanje Scenarija
Parametri koji dolaze od biznis analize:
- Broj zaposlenih (korisnika): 500
- Prosječna pitanja dnevno po zaposleniku: 10 (radni dani: 22 u mjesecu) → 110,000 zahtjeva/mj
- Prosječna veličina PDF konteksta (input): 2,500 tokena/pitanju
- Prosječna veličina odgovora (output): 500 tokena/pitanju
Korak 2: Python Kalkulator Skripta
Napravite fajl roi_calculator.py u VS Code i unesite:
"""
roi_calculator.py - Kalkulacija ROI za AI sistem u firmi
Modul 2.1: Model Selection & Benchmarks
"""
from dataclasses import dataclass
from typing import List
# ================================================================
# SCENARIJ OPTEREĆENJA
# ================================================================
@dataclass
class ScenarijOtpecenja:
"""Parametri koji opisuju kako će se AI koristiti u firmi."""
broj_korisnika: int
pitanja_po_korisniku_dnevno: int
radnih_dana_u_mjesecu: int
input_tokeni_po_pitanju: int # Prompt + PDF kontekst
output_tokeni_po_pitanju: int # Odgovor modela
@property
def ukupno_pitanja_mjesecno(self) -> int:
return self.broj_korisnika * self.pitanja_po_korisniku_dnevno * self.radnih_dana_u_mjesecu
@property
def ukupno_input_tokena_mjesecno(self) -> int:
return self.ukupno_pitanja_mjesecno * self.input_tokeni_po_pitanju
@property
def ukupno_output_tokena_mjesecno(self) -> int:
return self.ukupno_pitanja_mjesecno * self.output_tokeni_po_pitanju
@dataclass
class CloudRjesenje:
"""Troškovi Cloud API rješenja (OpenAI, Anthropic itd.)"""
naziv: str
model: str
input_cijena_per_million: float # USD
output_cijena_per_million: float # USD
setup_cost: float = 0.0 # Jednokratni troškovi razvoja
def godisnji_trosak(self, scenarij: ScenarijOtpecenja) -> float:
"""Izračunava ukupni godišnji trošak API poziva."""
input_cost_mj = (scenarij.ukupno_input_tokena_mjesecno / 1_000_000) * self.input_cijena_per_million
output_cost_mj = (scenarij.ukupno_output_tokena_mjesecno / 1_000_000) * self.output_cijena_per_million
api_cost_godisnje = (input_cost_mj + output_cost_mj) * 12
return api_cost_godisnje + self.setup_cost
@dataclass
class OnPremiseRjesenje:
"""Troškovi On-Premise / Lokalni server rješenja."""
naziv: str
model: str
capex_hardver: float # Jednokratna kupovina hardvera
capex_instalacija: float # IT radni sati za setup
opex_struja_godisnje: float # Struja po godini
opex_it_odrzavanje_godisnje: float # IT radni sati za odrzavanje
def trosak_za_n_godina(self, n: int) -> List[float]:
"""Vraća ukupni kumulativni trošak za svaku godinu."""
kumulativni = []
for god in range(1, n + 1):
ukupno = self.capex_hardver + self.capex_instalacija
ukupno += (self.opex_struja_godisnje + self.opex_it_odrzavanje_godisnje) * god
kumulativni.append(ukupno)
return kumulativni
# ================================================================
# INICIJALIZACIJA SCENARIJA
# ================================================================
scenarij = ScenarijOtpecenja(
broj_korisnika=500,
pitanja_po_korisniku_dnevno=10,
radnih_dana_u_mjesecu=22,
input_tokeni_po_pitanju=2500,
output_tokeni_po_pitanju=500
)
# ================================================================
# RJEŠENJA ZA USPOREDBU
# ================================================================
# Cloud rješenja (API)
gpt4o = CloudRjesenje(
naziv="OpenAI GPT-4o (Cloud API)",
model="gpt-4o",
input_cijena_per_million=5.00,
output_cijena_per_million=15.00,
setup_cost=0.0 # Nema hardvera — razvoj aplikacije je posebna stavka
)
claude_sonnet = CloudRjesenje(
naziv="Anthropic Claude 3.5 Sonnet (Cloud API)",
model="claude-3-5-sonnet",
input_cijena_per_million=3.00,
output_cijena_per_million=15.00,
setup_cost=0.0
)
# On-Premise rješenje (lokalni server)
# Za Llama 3.1 70B model — treba ~2× A6000 GPU (48GB VRAM svaka)
local_llama = OnPremiseRjesenje(
naziv="Meta Llama 3.1 70B (On-Premise Server)",
model="llama3.1 70B (4-bit quantized)",
capex_hardver=12_000.0, # Server ($3k) + 2× RTX A6000 ($4.5k = $9k)
capex_instalacija=2_000.0, # 2 dana IT inženjera × $1000/dan
opex_struja_godisnje=600.0, # ~350 kWh/mj × $0.15 × 12
opex_it_odrzavanje_godisnje=3_000.0 # Patchiranje, monitoring, uptime
)
# ================================================================
# IZVJEŠTAJ
# ================================================================
print("=" * 70)
print(" 💰 ROI ANALIZA: AI CHATBOT ZA 500 ZAPOSLENIH")
print("=" * 70)
print(f"\n📊 SCENARIJ OPTEREĆENJA:")
print(f" Korisnici: {scenarij.broj_korisnika}")
print(f" Pitanja/korisnik/dan: {scenarij.pitanja_po_korisniku_dnevno}")
print(f" Pitanja UKUPNO/mj: {scenarij.ukupno_pitanja_mjesecno:,}")
print(f" Input tokeni/mj: {scenarij.ukupno_input_tokena_mjesecno:,}")
print(f" Output tokeni/mj: {scenarij.ukupno_output_tokena_mjesecno:,}")
print("\n" + "-" * 70)
print(" ☁️ CLOUD RJEŠENJA")
print("-" * 70)
for cloud in [gpt4o, claude_sonnet]:
godisnji = cloud.godisnji_trosak(scenarij)
mj = godisnji / 12
print(f"\n🤖 {cloud.naziv}")
print(f" Trošak / Mjesec: ${mj:>10,.2f}")
print(f" Trošak / Godina: ${godisnji:>10,.2f}")
print(f" Trošak / 3 godine: ${godisnji*3:>10,.2f}")
print("\n" + "-" * 70)
print(" 🏢 ON-PREMISE RJEŠENJE")
print("-" * 70)
godisnji_cloud = gpt4o.godisnji_trosak(scenarij) # Uspoređujemo s GPT-4o
print(f"\n🖥️ {local_llama.naziv}")
print(f" CAPEX (Hardver): ${local_llama.capex_hardver:>10,.2f}")
print(f" CAPEX (Instalacija): ${local_llama.capex_instalacija:>8,.2f}")
print(f" OPEX/god (Struja): ${local_llama.opex_struja_godisnje:>8,.2f}")
print(f" OPEX/god (IT): ${local_llama.opex_it_odrzavanje_godisnje:>8,.2f}")
kumulativni = local_llama.trosak_za_n_godina(5)
for i, ukupno in enumerate(kumulativni, 1):
cloud_ekvivalent = godisnji_cloud * i
usteda = cloud_ekvivalent - ukupno
print(f"\n Godina {i}: Lokalno = ${ukupno:,.2f} | Cloud (GPT-4o) = ${cloud_ekvivalent:,.2f}")
if usteda > 0:
print(f" ✅ UŠTEDA sa lokalnim: ${usteda:,.2f}")
else:
print(f" ❌ Cloud je jeftiniji za: ${-usteda:,.2f}")
# Pronalazimo break-even tačku
print("\n" + "=" * 70)
print(" 📈 ZAKLJUČAK — BREAK-EVEN ANALIZA")
print("=" * 70)
capex_total = local_llama.capex_hardver + local_llama.capex_instalacija
godisnji_opex = local_llama.opex_struja_godisnje + local_llama.opex_it_odrzavanje_godisnje
breakeven_mj = capex_total / ((godisnji_cloud - godisnji_opex) / 12)
print(f"\n🎯 Break-even točka: {breakeven_mj:.1f} mjeseci ({breakeven_mj/12:.1f} godina)")
print(f"\nSve IZNAD {breakeven_mj:.0f} mjescei = On-Premise je isplativije!")
print(f"\nDodatne prednosti On-Premise rješenja:")
print(f" ✅ Podaci ostaju unutar firme (GDPR, sigurnost)")
print(f" ✅ Nema internet veze potrebe za AI funkcionalnost")
print(f" ✅ Nema rate limiting-a ili downtime od providera")
print(f"\nPrednosti Cloud rješenja:")
print(f" ✅ Bez CAPEX-a — trenutni start")
print(f" ✅ Najkvalitetniji modeli (GPT-4o je bolji od Llama 70B)")
print(f" ✅ Auto-scaling (0 do 10,000 korisnika bez promjena)")
print(f" ✅ Nema IT timske obaveze za održavanje")
Pokretanje i analiza
python roi_calculator.py
- Za 500 korisnika sa 10 pitanja dnevno, GPT-4o prosječno košta oko $2,200 mjesečno (≈ $26,400 godišnje). Ovo je u skladu sa komercijalnim SaaS pretplatama za software.
- On-premise server košta otprilike $14,000 u prvoj godini (CAPEX + OPEX), a od druge godine samo ~$3,600/god za struju i IT. Break-even nastupa oko 6-9 mjeseci.
- Ključni zaključak: Break-even ne uzima u račun razliku u kvalitetu modela. GPT-4o je mjerljivo bolji od Llama 70B. Arhitekt mora pitati: "Da li je razlika u kvalitetu vrijedna $17,000 godišnje od druge godine?"
- Promijenite parametre u skripti i testirajte: šta se dešava sa 100 umjesto 500 korisnika? Ili sa samo 2 pitanja dnevno? Kada cloud postaje jeft iniji?
✅ Checkpoint — Provjera Razumijevanja
- MMLU mjeri akademsko znanje, HumanEval mjeri coding, LMSYS mjeri korisničku preferenciju.
- Claude 3.5 Sonnet prednjači na SWE-Bench (realni coding) i input cijeni vs GPT-4o.
- Break-even za on-premise je tipično 6-12 mjeseci za veće organizacije s visokim prometom.
- GDPR i regulatorne obaveze često diktiraju on-premise za javnu upravu i zdravstvo.
- Model quality razlika: GPT-4o/Claude 3.5 > Llama 3.1 70B > Llama 3.1 8B (generalno).
✅ Nastavak: Pokretanje lokalnog modela
Završili smo sa teorijom benchmarkova i kalkulacijom budžeta. Napravili smo informiran zaključak o tome kada koristiti cloud API a kada lokalni server. U sljedećoj lekciji prelazimo na praktiku: instaliramo Ollama i lokalno pokrećemo Llama 3.1 model koji sagledavamo izbliza kao sistem administratori.