MODUL 4 - LEKCIJA 2

Napredne Prompt Engineering Tehnike

Temperature kontrola, halucinacije, meta-prompting i izgradnja kompletnog IT automatizacijskog alata

⏱️ Trajanje: ~3.5 časa 📚 Nivo: Napredni 🎯 Praktični primjeri: 8

🌡️ Temperature i Sampling Parametri — Kontrola "Kreativnosti"

LLM modeli ne generišu tekst "tačno" — oni generišu probabilistički. Za svaki sljedeći token, model računa distribuciju vjerovatnoće nad svim tokenima u svom rječniku (npr. 128,000 tokena za Llama 3). Token koji slijedi se uzorkuje iz te distribucije. Parametri koje vi kontrolišete mijenjaju kako se to uzorkovanje vrši.

📌 Šta je Logit i Softmax distribucija?

Nakon završetka proračuna u svim Transformer slojevima, model generira vektor "sirovih vrijednosti" za svaki mogući token u rječniku. Ove vrijednosti su logiti (raw, unnormalized scores). Npr.:

  • Token "the" → logit: 8.5
  • Token "a" → logit: 7.1
  • Token "servers" → logit: 4.2
  • Token "hello" → logit: -2.3
  • ...svi ostali tokeni → razne vrijednosti...

Softmax funkcija pretvara ove logite u probabilistiku distribuciju (sve vrijednosti između 0-1, sumiraju se u 1.0). Token se tada uzorkuje iz te distribucije.

📌 Šta je Temperature parametar matematički?

Temperature (T) dijeli logite prije softmax-a: softmax(logiti / T)

  • T = 1.0 (default): Logiti se ne mijenjaju. Uzorkovanje vjerno prati originalnu distribuciju.
  • T < 1.0 (npr. 0.3): Logiti se dijele malim brojem → razlika između visokih i niskih logita se povećava → distribucija postaje "oštrija" → model je sigurniji u odabir.
  • T > 1.0 (npr. 1.5): Logiti se dijele velikim brojem → razlika se smanjuje → svi tokeni imaju sličniju vjerovatnoću → "slučajniji" odabir.

Vizualizacija Temperature Efekta

T=0.0
Deterministički
T=0.1
Minimalna
varijacija
T=0.3-0.5
Fokusirano
T=0.7
Balans
(default)
T=1.0
Kreativan
T=1.5+
Halucinantan
Nepredvidiv
Temperature Kada koristiti IT Primjeri Upotrebe
0.0 - 0.2 Fakti, kod, JSON output, klasifikacije Generisanje PowerShell skripta, parsiranje log-ova, dijagnoza grešaka
0.3 - 0.5 Tehničke analize, dokumentacija Analiza incidenta, pisanje tehničke dokumentacije, code review
0.6 - 0.8 Opća asistencija, objašnjenja Odgovaranje na korisničke upite, helpdesk, tutoriali
0.9 - 1.2 Kreativni sadržaj, brainstorming Generisanje ideja za arhitekturu, pisanje test scenarija, kreativno imenovanje
> 1.2 Izbjegavati Nepredvidivi odgovori, halucinacije, netačan kod

📌 Top-P (Nucleus Sampling) i Top-K parametri

Pored temperature-a, postoje dvije dodatne strategije uzorkovanja:

  • Top-K: Uzorkuj samo iz K tokena sa najvećom vjerovatnoćom. Npr. top_k=40 znači: razmotri samo 40 najvjerovatnijih tokena, ignoriše sve ostale. Smanjuje halucinacije ali ograničava raznolikost.
  • Top-P (Nucleus): Uzorkuj iz minimalnog skupa tokena čija kumulativna vjerovatnoća dostigne P. Npr. top_p=0.9 znači: uzmi tokene počevši od najvjerovatnijeg sve dok zbrajanjem dostigneš 90% vjerovatnoće. Ako 5 tokena pokriva 90%, ignoriše sve ostale. Adaptivno — u nejasnim situacijama koristi više tokena, u jasnim manje.

Preporučene postavke za IT korištenje: temperature=0.2, top_p=0.9, top_k=40 za tehničke zadatke.

⚠️ Halucinacije — Šta su i Kako ih Spriječiti?

Halucinacija (u kontekstu LLM-ova) je fenomen gdje model s visokom samopouzdanosti generiše informacije koje su netačne, izmišljene ili ne postoje. Ovo je jedna od najvažnijih tehničkih ograničenja savremenih LLM-ova.

📌 Zašto modeli haluciniraju? (Teorija)

LLM-ovi su treniran da predvide sljedeći token koji bi bio prikladan u tekstu. Oni nisu baze podataka — ne "znaju" fakta na isti način kao Wikipedia. Umjesto toga, znanje je "ispečeno" distribuirano u miliardama parametara kao statistički obrazac iz trening podataka.

Kada model nema pouzdane informacije u svom "statističkom znanju", ne kaže "ne znam" — generiše najvjerovatniji tekst koji izgleda poput tačnog odgovora. Ovo je halucinacija. Posebno opasno za: specifične verzije softvera, API izmjene, lokalne ili nedavne informacije.

Primjeri Halucinacija i Načini Prevencije

❌ HALUCINACIJA — Primjer 1

Prompt: "Koja je komanda za restart IIS u PowerShell-u?"

AI odgovor (halucinacija): "Koristite komandu Restart-Service -Name W3SVC -Force -Fully za puni restart IIS-a sa svim vezanim servisima."

Problem: Parametar -Fully ne postoji u Restart-Service. Model je izmislio parametre koji zvuče realno.

✅ TAČAN ODGOVOR — Prevencija

Technika: Koristiti temperature=0 i validirati komande.

Tačna komanda: Restart-Service -Name W3SVC ili iisreset /restart

Preporuka: Uvijek testirajte generirani kod u test okruženju, nikad direktno u produkciji!

❌ HALUCINACIJA — Primjer 2 (Citation)

Prompt: "Daj mi reference o GDPR legalnim rokovima za obradu upita."

AI odgovor: "Prema dokumentu 'EU GDPR Technical Specification v2.3, Annex B, Section 7.4' iz 2019..."

Problem: Ovaj dokument ne postoji. Model izmišlja bibliografske reference koje zvuče legitimno.

✅ PREVENCIJA — Tehnika

Prompt instrukcija: "Ako nisi 100% siguran u referencu, reci 'ne mogu naći pouzdanu referencu za ovo'. NIKAD ne izmišljaj reference."

Ili koristite RAG: Dajte modelu stvarne dokumente u promptu iz kojih može citirati.

🛡️ Top 5 Tehnika za Prevenciju Halucinacija

  • 1. Niska temperatura (T=0): Za tehničke zadatke. Determinizm smanjuje izmišljanje.
  • 2. Grounding u dokumentima (RAG): Dajte modelu stvarne dokumente u promptu. "Na osnovu sljedeće dokumentacije: [text]... odgovori na pitanje..."
  • 3. "Reci ne znam" instrukcija: Eksplicitno u system promptu: "Ako nisi siguran, reci 'Nisam siguran, preporučujem provjeru'. NIKAD nemoj izmišljati."
  • 4. Traženje izvora: "Navedi izvor za ovu informaciju. Ako ne znaš izvor, reci to."
  • 5. Multi-step verifikacija: Generisite odgovor, a zatim tražite model da ga provjeri: "Pregled i identificiraj moguće netačnosti u prethodnom odgovoru."

🔄 Meta-Prompting — Koristiti AI za Pisanje Boljih Promptova

Meta-prompting je tehnika gdje koristite LLM da poboljša ili generiše vaše promptove. Ovo je posebno korisno kada ne znate kako strukturisati kompleksan zadatak.

🛠️ Meta-Prompt: AI kreira bolji prompt
KORAK 1 — Vi pitate AI za pomoć u pisanju prompta:
"Ti si ekspert za prompt engineering. Imam jednostavan zadatak za AI:
'Hoću da AI analizira Windows Event Log'
Napiši mi optimiziran, detaljan prompt za ovaj zadatak koji uključuje:
- Specificiranu ulogu AI-ja
- Format inputa
- Format outputa (JSON)
- Handling edge case-ova
- Jezik odgovora"

KORAK 2 — AI generiše optimiziran prompt za vas

KORAK 3 — Koristite generirani prompt kao vaš stvarni prompt

Prompt Templates (Predlošci) za IT Inženjere

Evo provjerenih predložaka za najčešće IT zadatke:

🛠️ Template 1: Code Generation
Ti si senior [JEZIK] developer.
Kontekst: [OKRUŽENJE/FRAMEWORK/VERZIJA]
Zadatak: Napiši [tip koda] koji:
- [Funkcionalnost 1]
- [Funkcionalnost 2]
- [Funkcionalnost N]
Zahtjevi:
- Error handling: try/catch sa logovanjem
- Type hints / return types gdje primjenjivo
- Komentari na [jezik]
- [Ostali specifični zahtjevi]
Ne uključuj objašnjenja — samo kod.
🛠️ Template 2: Analiza Incidenta
Ti si senior SRE/DevOps inženjer.
Incident detalji:
- Okruženje: [production/staging/dev]
- Simptomi: [opis]
- Vremenski okvir: [od - do]
- Log podaci: [kopirati relevantne log zapise]

Analiziraj korak po korak:
1. Identifikuj direktni uzrok
2. Identifikuj root cause (5 Why metoda)
3. Procijeni impact (korisnici, servisi)
4. Predloži immediate mitigation (za sad)
5. Predloži permanentno rješenje
6. Predloži mjere prevencije za budućnost

Format: strukturirani odgovor sa naslovima za svaku sekciju.
🛠️ Template 3: Security Review
Ti si cybersecurity inženjer sa iskustvom u [OWASP/Windows Security/Network Security].
Pregledaj sljedeći [kod/konfiguraciju/arhitekturu] i identificiraj:
1. Kritične sigurnosne rupe (CVSS ≥ 7.0)
2. Srednje rizike (CVSS 4.0-6.9)
3. Niske rizike i napomene
4. Konkretne preporuke za popravku svake rupe

Za svaku ranjiost navedi:
- Tip napada koji omogućava
- Primjer exploit scenarija
- Preporučena popravka sa kodom/konfiguracijom

Sadržaj za pregled:
[CODE/CONFIG]

🚀 Napredne Tehnike: ReAct, Self-Consistency i RAG Grounding

ReAct Pattern (Reasoning + Acting)

ReAct je tehnika gdje model naizmjenično: razmišlja (Thought) → odlučuje akciju (Action) → analizira rezultat (Observation) → razmišlja dalje. Posebno efektivno za multi-step probleme.

🛠️ ReAct Pattern Prompt za IT Troubleshooting
Problem: Web aplikacija daje timeout greške sporadično (ne uvijek).

Analiziraj koristeći ReAct format:

Thought 1: Šta bi moglo biti uzrok sporadičnih timeoutu?
Action 1: Provjeri koje komponente bi mogle biti uzrok varijabilnih kašnjenja
Observation 1: Timeouts su sporadični → mogući uzroci: load balancer, database connection pool, external API calls

Thought 2: Koji od ovih uzroka je najvjerovatniji?
Action 2: Analiziraj obrasce - kada se timeout dešava (visok load? specifično doba dana? ...)
Observation 2: [potrebni podaci za analizu]

Thought 3: Kako verificirati hipotezu?
Action 3: Navesti konkretne monitoring/debugging korake
...

Nastavi ovaj format sve do definitivne dijagnoze i rješenja.

Self-Consistency — Višestruka Generisanja za Pouzdanost

📌 Šta je Self-Consistency?

Self-consistency tehnika generiše isti prompt više puta (obično 3-5x) sa malo višom temperaturom i bira najčešći/konzistentniji odgovor. Ovo je naučno dokazano da poboljšava tačnost za matematičke i logičke zadatke.

Kada 4 od 5 generisanja daju isti odgovor, vjerovatno je tačan. Koristi se u produkcijskim sistemima gdje je visoka tačnost važnija od brzine.

Grounding sa Dokumentima (RAG-style u Promptu)

Jedan od najefikasnijih načina prevencije halucinacija je direktno ubacivanje relevantnih dokumenata u prompt. Ovo se naziva prompt grounding ili jednostavni RAG (Retrieval Augmented Generation) pattern.

🛠️ Grounding Prompt sa Tehničkom Dokumentacijom
Odgovaraj ISKLJUČIVO na osnovu sljedeće dokumentacije.
Ako odgovor nije u dokumentaciji, reci: "Ova informacija nije u dostavljenoj dokumentaciji."
NIKAD ne koristiti vlastito znanje van ove dokumentacije.

--- DOKUMENTACIJA ---
[IIS 10 Konfiguracija — Naša IT Dokumentacija v3.2]

1. Binding konfiguracija:
   - Sve aplikacije koriste port 443 (HTTPS)
   - SSL certifikati se čuvaju u C:\Certs\
   - Application Pool Identity: NetworkService

2. Logging:
   - Log fajlovi: C:\inetpub\logs\LogFiles\
   - Log rotacija: svaki sat, čuvanje 30 dana
   - Log format: W3C Extended

3. Application Pools:
   - Default Pool: .NET CLR 4.0, 32-bit disabled
   - Recycle: svaki dan u 03:00 AM
--- KRAJ DOKUMENTACIJE ---

Pitanje: Gdje se nalaze IIS log fajlovi i koliko dugo se čuvaju?
💻

LAB 4B: Izgradnja Kompletnog IT Automatizacijskog Alata

U ovom finalnom labu kombinujemo SVE naučene tehnike iz Modula 3 i 4 da izgradimo kompletni IT Problem Triage sistem koji: prima opis problema (prirodni jezik), klasificira ga, predlaže dijagnozu, i generiše akcioni plan.

1

Izgradnja IT Problem Triage sistema

Napravite it_triage.py u VS Code:

python
"""
it_triage.py
Kompletan IT Problem Triage sistem sa Ollama i Lokalnim LLM-om.

Funkcionira kao: IT Helpdesk → AI Triage → JSON Report → Akcioni Plan
Kombinuje: Few-shot, CoT, System Prompts, Structured Output i Temperature kontrolu.
"""

import ollama
import json
import time
from datetime import datetime

# ================================================================
# KONFIGURACIJA
# ================================================================
MODEL = "llama3.2"

# ================================================================
# KORAK 1: SISTEM PROMPT ZA TRIAGE AGENTA
# Napisan na engleskom (efikasnost tokena), output na bosanskom
# ================================================================
TRIAGE_SYSTEM = """You are an expert IT incident triage agent for a government institution in Bosnia-Herzegovina.
You analyze IT problems and return structured JSON reports.

CLASSIFICATION RULES:
- Priority P1 (Critical): System down, security breach, data loss, >50 users affected
- Priority P2 (High): Significant degradation, <50 users affected, workaround available
- Priority P3 (Medium): Single user, non-critical system, workaround available
- Priority P4 (Low): Cosmetic issues, questions, enhancement requests

CATEGORIES: NETWORK, SERVER, APPLICATION, SECURITY, DATABASE, USER_DEVICE, GENERAL

ALWAYS respond with ONLY valid JSON, no other text.
Response language for descriptions: Bosnian (bosanski).

JSON Response Schema:
{
  "ticket_id": "auto-generated",
  "timestamp": "ISO 8601",
  "problem_summary": "Kratki sažetak na bosanskom (max 100 char)",
  "category": "CATEGORY_NAME",
  "priority": "P1|P2|P3|P4",
  "affected_users": "estimated count or 'single'",
  "immediate_actions": ["lista konkretnih koraka za odmah"],
  "diagnostic_commands": ["PowerShell/CMD komande za dijagnozu"],
  "escalation_required": true|false,
  "escalate_to": "null ili '[email protected]'",
  "estimated_resolution_time": "15min|1h|4h|1d|unknown",
  "similar_incidents_hint": "Savjet baziran na tipičnim uzrocima"
}"""

# ================================================================
# KORAK 2: FEW-SHOT PRIMJERI ZA TRIAGE
# ================================================================
FEW_SHOT_USER = """Analiziraj i klasificiraj IT problem koristeći few-shot primjere kao vodič:

PRIMJER 1:
Problem: "Korisnik ne može otvoriti Excel fajlove, dobija grešku 'File is locked'"
Odgovor:
{
  "ticket_id": "IT-2024-001",
  "timestamp": "2024-01-15T09:00:00",
  "problem_summary": "Korisnik ne može otvoriti Excel - file locked greška",
  "category": "APPLICATION",
  "priority": "P3",
  "affected_users": "single",
  "immediate_actions": ["Provjeriti da li neko drugi ima otvoren fajl", "Zatvoriti sve Excel instance: taskkill /IM excel.exe /F"],
  "diagnostic_commands": ["Get-Process -Name EXCEL", "net files"],
  "escalation_required": false,
  "escalate_to": null,
  "estimated_resolution_time": "15min",
  "similar_incidents_hint": "Najčešće uzrokovano neispravnim zatvaranjem Excel-a ili mrežnim prekidom tokom edita"
}

PRIMJER 2:
Problem: "Sve WEB stranice institucije su nedostupne, web server ne odgovara - baza korisnika 200+"
Odgovor:
{
  "ticket_id": "IT-2024-002",
  "timestamp": "2024-01-15T09:00:00",
  "problem_summary": "KRITIČNO: Web server nedostupan, 200+ korisnika pogođeno",
  "category": "SERVER",
  "priority": "P1",
  "affected_users": "200+",
  "immediate_actions": ["Odmah obavijestiti IT management", "Provjeriti status IIS servisa", "Pregledati Windows Event Log za CRITICAL greške"],
  "diagnostic_commands": ["Get-Service W3SVC", "Get-EventLog -LogName System -EntryType Error -Newest 20", "Test-NetConnection -ComputerName localhost -Port 80"],
  "escalation_required": true,
  "escalate_to": "[email protected]",
  "estimated_resolution_time": "1h",
  "similar_incidents_hint": "Provjeriti: disk space (iisreset može pasti ako je disk pun), App Pool crash, certifikat expired"
}

Sada klasificiraj sljedeći problem (vrati SAMO JSON):
Problem: "{problem}"
"""

# ================================================================
# KORAK 3: TRIAGE FUNKCIJA
# ================================================================
def triage_problem(opis_problema: str) -> dict:
    """
    Vrši AI triage IT problema.
    Vraća Python dict parsiran iz AI JSON odgovora.
    """
    print(f"\n🔍 Triaging problem: {opis_problema[:80]}...")

    # Ubacujemo problem u few-shot template
    user_prompt = FEW_SHOT_USER.format(problem=opis_problema)

    # Generišemo ticket ID
    ticket_id = f"IT-{datetime.now().strftime('%Y%m%d-%H%M%S')}"

    odgovor = ollama.chat(
        model=MODEL,
        messages=[
            {'role': 'system', 'content': TRIAGE_SYSTEM},
            {'role': 'user', 'content': user_prompt}
        ],
        options={
            # Niska temperatura za konzistentne, faktične klasifikacije
            'temperature': 0.1,
            'num_predict': 600,
        }
    )

    raw_text = odgovor['message']['content'].strip()

    # Parsiranje JSON-a (čišćenje eventualnih markdown code fences)
    try:
        cisti = raw_text
        if '```' in cisti:
            dijelovi = cisti.split('```')
            for d in dijelovi:
                if d.startswith('json'):
                    cisti = d[4:]
                    break
                elif '{' in d:
                    cisti = d
                    break

        parsed = json.loads(cisti)
        # Dopunjujemo ticket_id sa generisanim
        parsed['ticket_id'] = ticket_id
        parsed['timestamp'] = datetime.now().isoformat()
        return parsed

    except json.JSONDecodeError:
        # Fallback ako JSON parsiranje ne uspije
        print(f"   ⚠️ JSON parsiranje nije uspjelo. Raw odgovor:")
        print(f"   {raw_text[:200]}")
        return {"error": "JSON parse failed", "raw": raw_text, "ticket_id": ticket_id}

# ================================================================
# KORAK 4: AKCIONI PLAN GENERATOR
# ================================================================
def generiraj_akcioni_plan(triage_result: dict) -> str:
    """
    Na osnovu triage JSON-a, generiše detaljni akcioni plan koristeći CoT.
    """
    if 'error' in triage_result:
        return "Greška u triage-u — nije moguće generisati plan."

    print(f"\n📋 Generišem akcioni plan za {triage_result.get('priority', 'P?')} incident...")

    cot_prompt = f"""Na osnovu triage analize IT incidenta, generiši detaljni akcioni plan.

TRIAGE PODACI:
- Problem: {triage_result.get('problem_summary', 'N/A')}
- Prioritet: {triage_result.get('priority', 'N/A')}
- Kategorija: {triage_result.get('category', 'N/A')}
- Pogođenih korisnika: {triage_result.get('affected_users', 'N/A')}
- Potrebna eskalacija: {triage_result.get('escalation_required', False)}
- Procijenjeno rješavanje: {triage_result.get('estimated_resolution_time', 'N/A')}

Razmisli korak po korak i generiši:
1. IMMEDIATE (sljedećih 15 minuta): Šta odmah uraditi?
2. SHORT-TERM (sljedećih 2 sata): Dijagnoza i mitigation
3. RESOLUTION: Permanentno rješenje
4. COMMUNICATION: Koga obavijestiti i kada?
5. PREVENTION: Kako spriječiti ponavljanje?

Budi konkretan — navedi specifične komande, kontakte i procedure naše institucije.
Odgovaraj na bosanskom jeziku, formalan ton."""

    odgovor = ollama.chat(
        model=MODEL,
        messages=[{'role': 'user', 'content': cot_prompt}],
        options={'temperature': 0.4, 'num_predict': 700}
    )
    return odgovor['message']['content']

# ================================================================
# KORAK 5: POKRETANJE DEMONSTRACIJE
# ================================================================
def ispisi_triage_report(triage: dict, plan: str, problem: str):
    """Formatirani ispis triage reporta."""
    print("\n" + "="*65)
    print(f"🎫 TRIAGE REPORT — {triage.get('ticket_id', 'N/A')}")
    print("="*65)
    print(f"📋 Problem: {problem}")
    print(f"🏷️  Sažetak: {triage.get('problem_summary', 'N/A')}")
    print(f"🚨 Prioritet: {triage.get('priority', 'N/A')} | Kategorija: {triage.get('category', 'N/A')}")
    print(f"👥 Pogođeni korisnici: {triage.get('affected_users', 'N/A')}")
    print(f"⏱️  Procijenjeno: {triage.get('estimated_resolution_time', 'N/A')}")
    print(f"📧 Eskalacija: {'✅ POTREBNA → ' + str(triage.get('escalate_to', '')) if triage.get('escalation_required') else '❌ Nije potrebna'}")

    if triage.get('immediate_actions'):
        print(f"\n⚡ ODMAH URADITI:")
        for i, akcija in enumerate(triage['immediate_actions'], 1):
            print(f"   {i}. {akcija}")

    if triage.get('diagnostic_commands'):
        print(f"\n🔧 DIJAGNOSTIČKE KOMANDE:")
        for cmd in triage['diagnostic_commands']:
            print(f"   $ {cmd}")

    print(f"\n💡 Savjet: {triage.get('similar_incidents_hint', 'N/A')}")

    print(f"\n{'─'*65}")
    print(f"📄 DETALJNI AKCIONI PLAN:")
    print(f"{'─'*65}")
    print(plan)
    print("="*65)

if __name__ == "__main__":
    print("="*65)
    print("🤖 IT TRIAGE SISTEM — Powered by Ollama + Llama 3.2")
    print("="*65)

    # Lista test problema
    test_problemi = [
        "Korisnik account-a Ana Kovač ne može se prijaviti na Windows domensku mrežu od jutros, a ostali na istom odjelu rade normalno.",
        "Firewall je blokirao sav internet promet nakon what je admin greškom obrisao permit all pravilo - svi korisnici institucije pogođeni."
    ]

    for i, problem in enumerate(test_problemi, 1):
        print(f"\n\n🔄 TEST {i}/{len(test_problemi)}")
        print(f"📝 Problem: {problem}")

        # Triage
        triage = triage_problem(problem)

        # Akcioni plan
        plan = generiraj_akcioni_plan(triage)

        # Prikaz
        ispisi_triage_report(triage, plan, problem)

        if i < len(test_problemi):
            print("\nNastavljam sa sljedećim problemom...")
            time.sleep(2)

    print("\n\n✅ IT Triage sistem demonstracija završena!")
    print("Ovaj sistem možete integrirati sa JIRA, email ili Slack za produkcijsku upotrebu.")
2

Pokretanje

powershell
cd C:\Users\$env:USERNAME\Desktop\AI_Kurs
.\venv\Scripts\Activate.ps1
python it_triage.py

# Napomena: Sistem procesira svaki problem 2x (triage + akcioni plan)
# Ukupno trajanje: 5-15 minuta za 2 test problema
  • Šta sistem radi: Automatski klasificira svaki problem, određuje prioritet (P1-P4), generiše dijagnostičke komande i akcioni plan — sve lokalno bez cloud-a.
  • Kombinovane tehnike: Few-shot (2 primjera za format), System Prompt (uloga + JSON schema), T=0.1 (konzistentnost), CoT (akcioni plan).
  • Produkcijska praktičnost: Ovaj kod se može direktno integrisati sa Outlook/Teams/Slack webhook-om da automatski triagira dolazne IT zahtjeve.
  • Proširenje: Dodajte vlastite primjere za few-shot prilagođene vašoj instituciji; dodajte kategorije specifične za vaše sisteme.
3

Bonus: Eksperiment sa Temperature parametrom

Modificirajte triage funkciju i testirajte razliku između temperatura:

python
# Eksperiment: Poredite isti prompt sa različitim temperaturama
# Savjet: Kopirajte benchmark_temperature.py i modificirajte:

# Temperatura 0.0 → Uvijek isti JSON (deterministički)
# Temperatura 0.5 → Malo različit tekst, isti JSON format
# Temperatura 1.0 → Veća varijabilnost u tekstu i potencijalne JSON greške

# Zaključak koji ćete vidjeti:
# Za JSON structured output: UVIJEK koristite temperature ≤ 0.2
# Za narativne opise/planove: 0.3-0.6 daje bogatiji tekst
# Za kreativne zadatke: 0.7-1.0

📚 Personal Prompt Library — Vaša Zbirka Provjerenih Promptova

Profesionalni prompt engineeri grade personalnu biblioteku promptova — skup provjerenih, testiranih promptova za najčešće zadatke. Evo preporuke kako organizovati svoju:

python
# prompts_library.py
# Vaša osobna biblioteka IT promptova

PROMPTS = {
    # ── KOD ──────────────────────────────────────────────────────
    "ps_script": """Ti si PowerShell 7 ekspert. Napiši skript koji:
{zadatak}
Zahtjevi: Error handling (try/catch), logging u C:\\Logs\\, Write-Verbose za debug.
Format: Samo kod, bez objašnjenja.""",

    "sql_query": """Ti si SQL Server DBA. Napiši T-SQL query koji:
{zadatak}
Okruženje: SQL Server 2019, baza: {baza}.
Zahtjevi: Koristi indexe gdje moguće, izbjegaj SELECT *, dodaj komentare za kompleksne JOIN-ove.""",

    # ── ANALIZA ───────────────────────────────────────────────────
    "log_analyze": """Analiziraj log fajl i vrati JSON:
{{"errors": [{{"time": "", "level": "ERROR|WARN|INFO", "message": "", "action": ""}}],
"summary": "", "total_errors": 0, "critical_count": 0}}
Log sadržaj:
{log}""",

    "incident_cot": """Ti si SRE. Analiziraj incident korak po korak (5 Why metoda):
Simptomi: {simptomi}
Podaci: {podaci}
Generiši: root cause, impact, immediate fix, permanent solution, prevention.""",

    # ── DOKUMENTACIJA ─────────────────────────────────────────────
    "tech_doc": """Napiši tehničku dokumentaciju za:
{sistem}
Format: Markdown, sekcije: Opis, Arhitektura, Instalacija, Konfiguracija, Troubleshooting.
Jezik: Formalni bosanski. Nivo: IT administrator sa 2+ god iskustva.""",
}

# Korištenje:
# import ollama
# from prompts_library import PROMPTS
# prompt = PROMPTS["ps_script"].format(zadatak="kopira backup fajlove starije od 7 dana u archive folder")
# odgovor = ollama.chat(model="llama3.2", messages=[{"role": "user", "content": prompt}])

✅ Finalni Checkpoint — Modul 4

  • Temperature kontroliše "slučajnost" uzorkovanja. T=0 → deterministički. T=1.5 → halucinantan.
  • Za JSON output i kod: koristiti temperature=0.0-0.2. Za narativne odgovore: 0.5-0.7.
  • Halucinacije nastaju jer model generiše vjerovatne tokene, ne faktično tačne informacije. Prevencija: niska temperatura, grounding, "reci ne znam" instrukcija.
  • Meta-prompting: Koristite AI da vam pomogne pisati bolje promptove.
  • ReAct: Thought → Action → Observation ciklus za kompleksne multi-step probleme.
  • Self-consistency: Generiši više puta, uzmi najčešći odgovor za visoku tačnost.
  • Prompt Library: Gradite i čuvate provjerene promptove za vašu instituciju.

✅ Zaključak — Moduli 3 i 4

Završili smo Modul 3 i Modul 4! U ova dva modula:

Kombinacija lokalnih LLM-ova (privatnost, offline, bez troška) i naprednog prompt engineering-a (preciznost, kontrola, pouzdanost) je fundament za izgradnju ozbiljnih AI sistema u institucijama.

U sljedećim modulima (5, 6, 7...) gradimo na ovim temeljima: RAG sistemi, fine-tuning, multi-agent sistemi i produkcijsko deployanje AI rješenja.