📖 Šta je Ollama i Zašto je Važna?
Do sada smo učili kako LLM modeli rade teorijski (Transformeri, tokeni, context window) i kako koristiti cloud API-je (OpenAI, Anthropic). Međutim, postoje scenariji gdje cloud API nije opcija:
- Privatnost podataka: Zakonska regulativa zabranjuje slanje osjetljivih podataka na vanjske servere (zdravstveni podaci, GDPR, državne informacije)
- Offline okruženja: Industrijska postrojenja, secure mreže, embedded sistemi bez internet veze
- Trošak: Sistemi sa milionima API poziva mogu imati ogromne troškove
- Latency: Real-time aplikacije trebaju odgovor za <100ms — cloud latency često nije prihvatljiv
- Vendor lock-in: Ovisnost o jednom cloud provideru je poslovni rizik
Ollama je open-source alat (MIT licenca) koji omogućava pokretanje LLM modela lokalno na vašem računaru, bez ikakve internet veze. Razvijen je od strane tima koji je prethodno radio na Homebrew package manageru (macOS), i dizajniran s fokusom na jednostavnost korištenja.
📌 Definicija: Ollama
Ollama je open-source runtime za pokretanje velikih jezičkih modela (LLM) lokalno. Paketuje modele, konfiguraciju i runtime u jednu komandu. Interno koristi llama.cpp — C++ implementaciju Transformer arhitekture optimizovanu za CPU i GPU inferenzu. Izlaže REST API kompatibilan sa OpenAI API-jem, što znači da aplikacije pisane za OpenAI mogu raditi sa Ollama promjenom samo jedne linije koda.
Kako Ollama Funkcionira Interno?
Kada pokrenete Ollama, dešava se sljedeće:
📌 Šta je GGUF format?
GGUF (Generic General Unified Format) je binarni format fajla za čuvanje LLM modela. Nasljednik je GGML formata. Sadrži: težine mreže (model weights), tokenizer rječnik, hyperparametre i metadata o modelu — sve u jednom fajlu.
GGUF fajlovi su optimizovani za quantizaciju (ušteda memorije) i brzo učitavanje —
kompatibilni su sa llama.cpp koji ga čita direktno bez konverzije.
Na primjer: llama-3-8b-q4_K_M.gguf je Llama 3 8B model sa 4-bit quantizacijom.
📌 Šta je llama.cpp?
llama.cpp je C++ biblioteka (kreirao je Georgi Gerganov 2023.) koja implementira Transformer inferenzu bez PyTorch-a ili TensorFlow-a. Ovo je revolucionarno jer:
- Radi na običnom CPU-u bez GPU-a
- Koristi SIMD instrukcionske setove (AVX2, AVX512, Apple Silicon NEON) za vektorizovano matrično množenje
- Podržava CUDA/ROCm/Metal akceleraciju ako GPU postoji
- Nema Python overhead — pokrenuta kao native binary je 5-10x brža od Python frameworka
Ollama je u suštini user-friendly wrapper oko llama.cpp sa dodanim model managementom i API serverom.
📦 Instalacija Ollame na Windows
Instalacija Ollame je namjerno jednostavna. Evo kompletnog postupka korak po korak:
LAB 3A: Instalacija i Provjera Ollame
Preuzimanje i instalacija
Otvorite browser i idite na https://ollama.com/download. Kliknite na
"Download for Windows".
Preuzet će se instalacijski fajl (npr. OllamaSetup.exe, ~30 MB).
Pokrenite preuzeti OllamaSetup.exe. Instalacija je automatska — ne traži konfiguraciju.
Nakon instalacije, Ollama se pokreće automatski kao Windows Service i
System Tray ikonica.
Provjera instalacije u PowerShell-u
Otvorite PowerShell (Start → tražite "PowerShell" → Enter). Upišite:
# Provjera da li je Ollama instalirana i koja je verzija
ollama --version
# Trebate vidjeti nešto poput: ollama version 0.3.x
# Provjera da li Ollama servis radi (treba da vidite "running")
ollama list
# Ako je servis pokrenut, vidjet ćete praznu listu ili već preuzete modele
ℹ️ Gdje Ollama čuva modele?
Na Windows-u, Ollama čuva preuzete modele u folderu:
C:\Users\[vaše_korisničko_ime]\.ollama\models\
Ovo je važno znati jer modeli mogu biti veliki (4-40 GB). Provjerite da li imate dovoljno prostora na disku.
Preuzimanje prvog modela (Llama 3.2 3B)
Za početak koristimo Llama 3.2 3B — manji model koji radi i na računarima sa 8 GB RAM-a:
# Preuzimanje Llama 3.2 3B modela (~2 GB)
# Ovaj model radi na računarima sa 8 GB RAM-a (CPU ili GPU)
ollama pull llama3.2
# Praćenje napretka preuzimanja prikazuje se automatski u terminalu
- Što se dešava: Ollama preuzima GGUF fajl sa Ollama biblioteke modela (library.ollama.com). Model je quantizovan na Q4 nivo radi uštede memorije.
- Trajanje: 5-15 minuta ovisno o brzini interneta (fajl je ~2 GB)
- Nakon preuzimanja: Model ostaje lokalno — ne treba ga više preuzimati
Prviinteraktivni razgovor sa modelom
# Pokretanje interaktivnog chat-a sa modelom
ollama run llama3.2
# Sada možete kucati direktno u terminal!
# Probajte upisati:
# >>> Zdravo! Šta možeš uraditi za mene?
# >>> Napiši PowerShell skriptu koja lista sve procese koji troše više od 100 MB RAM-a
# >>> Objasni šta je DNS i kako funkcionira
# Za izlaz iz chat-a upisite:
# >>> /bye
Lista i upravljanje modelima
# Lista svih preeuzetih modela (ime, veličina, datum preuzimanja)
ollama list
# Detalji o specifičnom modelu (arhitektura, veličina konteksta, quantizacija)
ollama show llama3.2
# Preuzimanje dodatnih modela (za vježbu - ovisno o vašem disku)
ollama pull mistral # Mistral 7B - dobar za kod i analitiku (~4 GB)
ollama pull codellama # CodeLlama 7B - specijalizovan za kod (~4 GB)
ollama pull phi3:mini # Microsoft Phi-3 Mini 3.8B - mali ali moćan (~2 GB)
# Brisanje modela (oslobađanje prostora)
ollama rm llama3.2
# Kopiranje modela (za kreiranje customiziranih verzija)
ollama cp llama3.2 moj-asistent
📚 Pregled Dostupnih Modela za Lokalno Pokretanje
Na https://ollama.com/library možete pretraživati stotine dostupnih modela. Evo najvažnijih za IT inženjere:
🦙 Llama 3.2 (Meta)
Veličine: 1B, 3B, 11B, 90B | Kontekst: 128,000 tokena
Strengths: Opća namjena, višejezičnost, slijeđenje instrukcija
VRAM: 3B → 4 GB | 8B → 8 GB | 70B → 40+ GB
Preporučeno za početnike Besplatno Višejezičan🌬️ Mistral 7B / Mistral NeMo
Veličine: 7B, 12B | Kontekst: 32,000 - 128,000 tokena
Strengths: Izvanredan za kod, analitiku, JSON parsing, brz odgovor
VRAM: 7B → 8 GB | 12B → 12 GB
Besplatno Kod i analitika💻 CodeLlama (Meta)
Veličine: 7B, 13B, 34B | Kontekst: 100,000 tokena
Strengths: Generisanje, objašnjavanje i debugging koda (Python, JS, C#, SQL...)
VRAM: 7B → 8 GB | 13B → 16 GB
Kod specijalist Fill-in-the-Middle💎 Phi-3 / Phi-3.5 (Microsoft)
Veličine: 3.8B mini, 14B medium | Kontekst: 128,000 tokena
Strengths: Izvanredna efikasnost — male veličine, visoka sposobnost. Radi na slabijim računarima.
VRAM: mini → 4 GB | medium → 10 GB
Slabi računari Efikasan🔬 Qwen2.5 (Alibaba)
Veličine: 0.5B, 1.5B, 3B, 7B, 14B, 32B, 72B | Kontekst: 128,000 tokena
Strengths: Multilingualan (uključujući Bosanski/Srpski/Hrvatski), math, coding
VRAM: 7B → 8 GB | 14B → 16 GB
Bosanski/BHS Highest range📌 Šta znači "B" (milijarda) u nazivu modela?
7B znači 7 Billion parametara (7 milijardi parametara). Parametri su težine (weights) u neuronskoj mreži — to su desetci i stotice matrica koje model koristi za računanje. Svaki parametar je numerička vrijednost (float broj). Veći broj parametara znači:
- ✅ Veći kapacitet učenja i "znanja"
- ✅ Bolje razumijevanje kompleksnih upita
- ❌ Više RAM/VRAM memorije potrebno
- ❌ Sporija generacija teksta
🔌 Ollama REST API — Programatski Pristup
Ollama automatski pokreće lokalni web server na http://localhost:11434. Ovaj server izlaže REST API kompatibilan sa OpenAI formatom. Svaka vaša aplikacija (Python, JavaScript, C#, PowerShell...) može komunicirati s Ollam-om putem HTTP zahtjeva.
Glavni API Endpointovi
| Endpoint | Metod | Opis |
|---|---|---|
/api/generate |
POST | Generisanje teksta (jednokratni upit) |
/api/chat |
POST | Chat-style razgovor sa historijom |
/api/embeddings |
POST | Generisanje embedding vektora za tekst |
/api/pull |
POST | Preuzimanje modela putem API-ja |
/api/tags |
GET | Lista svih preeuzetih modela |
/api/show |
POST | Informacije o modelu |
/api/delete |
DELETE | Brisanje modela |
Direktno testiranje API-ja (bez koda)
Možete testirati API direktno iz PowerShell-a koristeći curl (ugrađen u Windows 10+):
# Test #1: Provjera da li Ollama server radi
curl http://localhost:11434
# Trebate vidjeti: Ollama is running
# Test #2: Lista dostupnih modela
curl http://localhost:11434/api/tags
# Test #3: Slanje upita (generate - NIJE streaming, čeka kompletan odgovor)
curl -X POST http://localhost:11434/api/generate `
-H "Content-Type: application/json" `
-d '{"model": "llama3.2", "prompt": "Zdravo! Reci mi nešto o DNS-u.", "stream": false}'
# Napomena: U PowerShell-u, backtick (`) je karakter za nastavak reda
🐍 Python Integracija sa Ollama
Postoje dva načina za korištenje Ollame iz Pythona:
(1) koristeći requests biblioteku direktno na REST API, ili
(2) koristeći officijalnu ollama Python biblioteku.
Pokazat ćemo oba pristupa.
LAB 3B: Python Integracija sa Lokalnim LLM-om
U ovom labu ćemo: (1) napraviti Python skript koji komunicira sa Ollama REST API-jem, (2) instalirati i koristiti officijalnu Ollama Python biblioteku, i (3) napraviti IT automatizacijski alat koji koristi AI za analizu log fajlova.
Postavljanje Python okruženja
# Idite u vaš AI_Kurs folder
cd C:\Users\$env:USERNAME\Desktop\AI_Kurs
# Aktivirajte virtual environment (ako nije već aktivan)
.\venv\Scripts\Activate.ps1
# Instalirajte potrebne biblioteke
# requests - za direktne HTTP zahtjeve
# ollama - officialna Python biblioteka za Ollama
pip install requests ollama
# Provjera instalacije
python -c "import requests; import ollama; print('OK - requests i ollama biblioteke su instalirane')"
Pristup 1: Direktni REST API sa requests bibliotekom
Otvorite VS Code, napravite novi fajl ollama_requests.py i unesite kod liniju po
liniju:
"""
ollama_requests.py
Demonstracija direktnog HTTP pristupa Ollama API-ju putem requests biblioteke.
Koristimo ovaj pristup kada želimo maksimalnu kontrolu nad HTTP zahtjevima.
"""
# Importujemo requests biblioteku za HTTP komunikaciju
import requests
# Importujemo json za parsiranje API odgovora
import json
# KONFIGURACIJA
# Ollama server se uvijek pokreće na localhost:11434
OLLAMA_URL = "http://localhost:11434"
# Koristimo llama3.2 - morat ćete prethodno ga preuzeti sa: ollama pull llama3.2
MODEL = "llama3.2"
# ================================================================
# FUNKCIJA 1: Provjera statusa servera
# ================================================================
def provjeri_server():
"""Provjerava da li Ollama server radi."""
try:
# Šaljemo GET zahtjev na root endpoint
response = requests.get(OLLAMA_URL, timeout=5)
# status_code 200 znači "OK" - server je aktivan
if response.status_code == 200:
print("✅ Ollama server je aktivan!")
return True
else:
print(f"❌ Server odgovara ali sa kodom: {response.status_code}")
return False
except requests.exceptions.ConnectionError:
# Ova greška znači da server nije dostupan na datoj adresi
print("❌ Ollama server nije dostupan. Je li Ollama pokrenuta?")
print(" Pokrenite: ollama serve (u posebnom terminalu)")
return False
# ================================================================
# FUNKCIJA 2: Lista dostupnih modela
# ================================================================
def lista_modela():
"""Vraća listu svih lokalno dostupnih modela."""
# /api/tags endpoint vraća JSON sa listom svih modela
response = requests.get(f"{OLLAMA_URL}/api/tags")
# response.json() automatski parsira JSON string u Python dict
podaci = response.json()
print("\n📋 Dostupni lokalni modeli:")
# podaci['models'] je lista dict-ova, svaki opisuje jedan model
for model in podaci['models']:
# model['name'] je ime modela (npr. "llama3.2:latest")
# model['size'] je veličina u bajtovima
velicina_gb = model['size'] / (1024**3) # Konverzija bajtova u GB
print(f" • {model['name']} ({velicina_gb:.1f} GB)")
return podaci['models']
# ================================================================
# FUNKCIJA 3: Generisanje teksta (non-streaming)
# ================================================================
def generiraj_tekst(prompt, model=MODEL):
"""
Šalje upit modelu i čeka kompletan odgovor.
'stream': False znači da čekamo cijeli odgovor odjednom.
Pogodno za kratke upite.
"""
print(f"\n🤖 Šaljem upit modelu '{model}'...")
print(f"📝 Prompt: {prompt[:100]}...") # Prikazujemo prvih 100 znakova
# Pravimo POST zahtjev na /api/generate endpoint
response = requests.post(
f"{OLLAMA_URL}/api/generate",
# json= parametar automatski serijalizuje Python dict u JSON string
# i postavlja Content-Type: application/json header
json={
"model": model, # Koji model koristiti
"prompt": prompt, # Tekst upita
"stream": False, # False = čekaj cijeli odgovor (blokirajuće)
"options": {
"temperature": 0.7, # Kreativnost (0=deterministički, 1=kreativan)
"num_predict": 500, # Maksimalni broj tokena u odgovoru
}
}
)
# Parsiramo JSON odgovor servera
rezultat = response.json()
# 'response' ključ u JSON-u sadrži generirani tekst
odgovor = rezultat['response']
# Ispisujemo metadata o generisanju
print(f"\n✅ Odgovor primljen!")
print(f" Generirani tokeni: {rezultat.get('eval_count', 'N/A')}")
print(f" Ukupno trajanje: {rezultat.get('total_duration', 0) / 1e9:.2f} sekunde")
print(f"\n{'='*60}")
print(odgovor)
print(f"{'='*60}\n")
return odgovor
# ================================================================
# FUNKCIJA 4: Streaming odgovor (za duže generisanje)
# ================================================================
def generiraj_streaming(prompt, model=MODEL):
"""
Streaming mode: prikazuje tekst token po token dok se generira.
Korisno za duže odgovore - korisnik ne čeka dugo na prvu poruku.
"""
print(f"\n🌊 Streaming upit modelu '{model}'...")
# stream=True u requests.post() znači da čitamo odgovor postepeno
response = requests.post(
f"{OLLAMA_URL}/api/generate",
json={
"model": model,
"prompt": prompt,
"stream": True # True = streaming mode
},
# stream=True u requests parametrima drži konekciju otvorenom
stream=True
)
print("\n📡 Streaming odgovor:")
# Iteriramo kroz linije HTTP odgovora
# Svaka linija je jedan JSON objekt koji sadrži jedan token (ili više)
for linija in response.iter_lines():
if linija:
# Dekodirajmo bajtove u string
tekst_linije = linija.decode('utf-8')
# Parsiramo JSON svake linije
chunk = json.loads(tekst_linije)
# 'response' u svakom chunks sadrži jedan ili više tokena
print(chunk['response'], end='', flush=True)
# 'done' == True kada model završi generisanje
if chunk.get('done'):
print("\n\n✅ Generisanje završeno!")
break
# ================================================================
# GLAVNA FUNKCIJA
# ================================================================
if __name__ == "__main__":
# Korak 1: Provjera servera
if not provjeri_server():
exit(1)
# Korak 2: Lista modela
lista_modela()
# Korak 3: Test generisanja (non-streaming)
generiraj_tekst(
"Objasni u 3-4 rečenice šta je DNS i kako funkcionira. "
"Koristi analogiju za lakše razumijevanje."
)
# Korak 4: Test streaming mode
generiraj_streaming(
"Napiši kratak PowerShell skript koji provjerava dostupnost "
"5 web stranica i ispisuje status svake."
)
# Pokretanje skripte
python ollama_requests.py
Pristup 2: Officialna Ollama Python biblioteka
Napravite novi fajl ollama_library.py. Officialna biblioteka je jednostavnija:
"""
ollama_library.py
Demonstracija korištenja officialne 'ollama' Python biblioteke.
Čistiji API, OpenAI-kompatibilan interfejs.
"""
# Importujemo ollama biblioteku
import ollama
# ================================================================
# PRISTUP 1: Jednokratni upit (generate)
# ================================================================
print("=== PRISTUP 1: Jednokratni upit ===")
# ollama.generate() je ekvivalent /api/generate endpointu
odgovor = ollama.generate(
model='llama3.2',
prompt='Šta je subnet mask i zašto je važna u mrežnoj administraciji?',
options={
'temperature': 0.5, # Niža temperatura = konzistentniji odgovor
'num_predict': 300, # Maksimum tokena u odgovoru
}
)
# Odgovor je Python dict. Ključ 'response' sadrži generirani tekst.
print(odgovor['response'])
# ================================================================
# PRISTUP 2: Chat mode (sa historijom razgovora)
# ================================================================
print("\n=== PRISTUP 2: Chat mode ===")
# chat() metoda uzima listu poruka (historija razgovora)
# Svaka poruka je dict sa 'role' i 'content' ključevima
# role može biti: 'system', 'user', ili 'assistant'
odgovor_chat = ollama.chat(
model='llama3.2',
messages=[
{
# 'system' poruka definiše ulogu i ponašanje modela
'role': 'system',
'content': 'Ti si iskusan IT administrator sa 15 godina iskustva. '
'Odgovaraj precizno i tehnički, uvijek navodi primjere.'
},
{
# 'user' poruka je pitanje korisnika
'role': 'user',
'content': 'Koji su najčešći uzroci sporog Windows servera?'
}
]
)
# U chat mode-u, odgovor je u: odgovor_chat['message']['content']
print(odgovor_chat['message']['content'])
# ================================================================
# PRISTUP 3: Višestruki razgovor (multi-turn)
# ================================================================
print("\n=== PRISTUP 3: Višestruki razgovor ===")
# Čuvamo historiju razgovora u listi
historija = [
{
'role': 'system',
'content': 'Ti si PowerShell ekspert. Daj kratke, konkretne odgovore sa primjerima koda.'
}
]
# Lista pitanja koja ćemo postavljati
pitanja = [
"Kako listam sve pokrenute Windows servise?",
"Kako zaustavim specifičan servis?",
"Kako automatski pokrenem servis pri startanju Windows-a?"
]
for i, pitanje in enumerate(pitanja, 1):
print(f"\n👤 Pitanje {i}: {pitanje}")
# Dodajemo novo user pitanje u historiju
historija.append({'role': 'user', 'content': pitanje})
# Šaljemo cijelu historiju - model "pamti" prethodni razgovor
odgovor = ollama.chat(model='llama3.2', messages=historija)
# Dohvatamo odgovor modela
odgovor_tekst = odgovor['message']['content']
print(f"🤖 AI: {odgovor_tekst}")
# VAŽNO: Dodajemo odgovor modela u historiju za sljedeće pitanje
historija.append({'role': 'assistant', 'content': odgovor_tekst})
print("\n✅ Razgovor završen!")
python ollama_library.py
Praktični IT Alat: AI Log Analizator
Napravite log_analyzer.py — realan alat koji IT administrator može koristiti:
"""
log_analyzer.py
AI-potpomognuti analizator Windows Event Log-ova.
Koristi lokalni Ollama model za interpretaciju grešaka.
"""
import ollama
import subprocess
import json
from datetime import datetime
# ================================================================
# KORAK 1: Kreiranje test log sadržaja
# (U realnom scenariju, ovo bi bili stvarni Windows Event Log-ovi)
# ================================================================
TESTNI_LOG = """
2024-01-15 08:23:11 ERROR [Kernel] - System failed to allocate memory for process explorer.exe. Available: 245 MB
2024-01-15 08:23:15 ERROR [Disk] - The device \Device\HarddiskVolume3 has a bad block. Possible data corruption.
2024-01-15 08:23:18 WARNING [Network] - TCP connection timeout connecting to 192.168.1.100:443. Retry 3/5.
2024-01-15 08:24:01 ERROR [Application] - IIS worker process crashed with exit code 0x800700C1. App pool DefaultAppPool recycled.
2024-01-15 08:24:45 CRITICAL [Security] - Multiple failed login attempts for user 'Administrator' from IP 192.168.1.55. (47 attempts in 60 seconds)
2024-01-15 08:25:10 ERROR [Database] - SQL Server connection pool exhausted (max 100 connections). New connections refused.
2024-01-15 08:25:30 WARNING [Disk] - Drive C: has only 2.3 GB free space remaining (98.5% full).
"""
# ================================================================
# KORAK 2: Funkcija za analizu log-a
# ================================================================
def analiziraj_log(log_sadrzaj):
"""
Šalje log sadržaj Ollama modelu sa strukturiranim system promptom
i traži analizu i preporuke za rješavanje problema.
"""
print("🔍 Analiziram log fajl sa AI pomočnicom...")
# System prompt koji definiše ponašanje modela
# (system prompt na engleskom je efikasniji - manje tokena, bolja obrada)
system_prompt = """You are an experienced Windows Server administrator and security analyst.
When analyzing server logs, you:
1. Identify critical issues that require immediate attention
2. Categorize errors by severity (Critical/High/Medium/Low)
3. Provide specific diagnostic steps
4. Suggest concrete PowerShell commands for remediation
Always structure your response clearly with headers and bullet points.
Respond in Bosnian language."""
# User prompt sa log sadržajem
user_prompt = f"""Analiziraj sljedeće Windows Server log zapise i pruži:
1. Sažetak kritičnih problema (sortiran po prioritetu)
2. Za svaki problem: uzrok, rizik i konkretni koraci za rješavanje
3. PowerShell komande za dijagnozu ili popravku gdje je primjenjivo
LOG SADRŽAJ:
{log_sadrzaj}"""
# Poziv Ollama chat API-ja
odgovor = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': user_prompt}
],
options={
'temperature': 0.3, # Niska temperatura = konzistentna, faktična analiza
'num_predict': 1000, # Dozvoljavamo duži odgovor za kompleksnu analizu
}
)
return odgovor['message']['content']
# ================================================================
# KORAK 3: Pokretanje analize
# ================================================================
if __name__ == "__main__":
print("="*60)
print("🤖 AI Log Analizator (Ollama + Llama 3.2)")
print("="*60)
print(f"📅 Analiza pokrenuta: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"📄 Analiziram {len(TESTNI_LOG.splitlines())} linija log-a...\n")
# Pokretanje AI analize
analiza = analiziraj_log(TESTNI_LOG)
print("="*60)
print("📊 AI ANALIZA REZULTATA")
print("="*60)
print(analiza)
print("="*60)
print(f"✅ Analiza završena: {datetime.now().strftime('%H:%M:%S')}")
python log_analyzer.py
- Šta AI radi: Prepoznaje obrasce u log-ovima, kategorizira probleme po ozbiljnosti, i predlaže konkretne akcije — sve lokalno, bez slanja podataka na internet.
- Praktična primjena: Ovaj alat se može integrirati u NOC (Network Operations Center) monitoring sisteme za automatsku trijažu alarma.
- Sigurnost: Log-ovi koji mogu sadržavati korisničke podatke ili IP adrese ostaju na lokalnom serveru — 100% privatni.
⚙️ Modelfiles — Prilagođavanje Modela
Modelfile je konfiguracijski fajl (sličan Dockerfile-u) koji definiše prilagođeni model. Možete kreirati svog asistenta sa predefinisanom ulogom, temperaturom i system promptom.
# Kreiranje Modelfile-a u PowerShell-u:
# Napravite novi fajl Modelfile (bez ekstenzije!) u vašem folderu
# Sadržaj Modelfile-a:
FROM llama3.2
# Parametri modela
PARAMETER temperature 0.3
PARAMETER num_predict 500
PARAMETER stop "###"
# System prompt koji se uvijek primjenjuje
SYSTEM """
Ti si IT asistent za korisnike Vlade Federacije BiH.
Odgovaraš samo na pitanja vezana za IT i računare.
Uvijek odgovaraš na bosanskom jeziku, formalno i profesionalno.
Ako korisnik postavi pitanje van IT domene, ljubazno odgovori da možeš pomoći samo sa IT pitanjima.
"""
# Kreiranje modela iz Modelfile-a
# Idite u folder gdje ste sačuvali Modelfile
cd C:\Users\$env:USERNAME\Desktop\AI_Kurs
# Kreiramo prilagođeni model (ime: it-asistent)
ollama create it-asistent -f .\Modelfile
# Pokretanje prilagođenog modela
ollama run it-asistent
# Testiranje (u interaktivnom modu):
# >>> Kako resetujem Windows lozinku?
# >>> Kako rezervišem avio kartu? (treba reći da ne može pomoći)
# >>> Kako konfiguriram DNS server?
✅ Checkpoint — Provjera Razumijevanja
- Ollama je open-source wrapper oko llama.cpp koji omogućava lokalno pokretanje LLM-ova.
- GGUF je format fajla za čuvanje quantizovanih modela koji llama.cpp može direktno čitati.
- Ollama server radi na
localhost:11434i izlaže REST API kompatibilan sa OpenAI. ollama pullpreuzima model,ollama runpokreće interaktivni chat,ollama listlista modele.- Python integracija je moguća direktno preko
requestsili officialneollamabiblioteke. - Modelfile omogućava kreiranje prilagođenih modela sa predefinisanim system promptom i parametrima.
✅ Zaključak
Ollama je moćan alat koji demokratizuje pristup lokalnim LLM-ovima. Za IT inženjere, ovo otvara mogućnosti za: privatnu obradu osjetljivih podataka, AI asistente u offline okruženjima, cost-free eksperimentisanje s AI, i izgradnju internih alata bez cloud zavisnosti.
U sljedećoj lekciji (3.2) detaljno ćemo se baviti hardware zahtjevima i kvantizacijom modela — ključnim konceptima za efikasno pokretanje LLM-ova na dostupnom hardveru.