Intervjuer kompanije ByteDance: "Nemas ni jedan Agent projekat, a smes da se prijavis na AI poziciju?" Ja, iznervirano: "Za LoRA znam sve detalje, a kamoli za Agent i RAG." Intervjuer: "Nisam te stigao pritisnuti."
Stari Vang je samo bacio pogled na moju biografiju i odmah počeo da pritiska: „Zar ne znaš da je doba AI-ja? U biografiji nemaš nijedan Agent projekat, kako se usuđuješ da se prijaviš na AI poziciju?"
„Vange, možeš li da širom otvoriš oči i pažljivo pogledaš." Udarac kontra.
Stari Vang zaista nije očekivao da ću uzvratiti, odmah je popustio.
„Samo sam te pritisnuo, vidiš kako si brz." Stari Vang je napravio zaokret od 180 stepeni. „Biografija je zaista lepo napisana, bojim se da je ovo najlepća biografija koju sam video u poslednjih mesec dana."

PS: Na intervjuu morate biti samouvereni — već ste na bojnom polju i nema povlačenja. Intervju pored sposobnosti ocenjuje i vašu strast prema poslu i samopoštovanje.
Bolje slepa samouverenost nego plahovito podsmevanje — posebno kada ste pod pritiskom, obavezno budite dostojanstveni.
content
01. Predstavi pozadinu projekta PaiAgent?
Stari Vang počinje svoje prvo pitanje: „Predstavi pozadinu PaiAgent-a?"
Rekao sam: „PaiAgent je dify Agent za organizaciju tokova rada koji sam ispetljao Vibe Coding-om. Želim kroz stvarne projekte da primenim ključne tehničke stackove iz razvoja AI-ja i da zaista dostignem nivo inženjera za razvoj AI aplikacija."

„Backend tehnički stack koristi Spring AI i LangGraph4J — to su najpopularniji okviri za razvoj AI aplikacija u Java svetu."
Istovremeno sam povezao i popularne koncepte kao što su Skill, ReAct, MCP, Function Calling, da bih kroz izradu razumeo njihove principe ispod haube.
Dvostruki engine je jedna od istaknutih tačaka PaiAgent-a. Za jednostavne scenarije koristim sopstveni DAG engine — sa Kahn algoritmom za topološko sortiranje i DFS za detekciju ciklusa, dovoljno za jednostavne linearne tokove rada.

Za složene scenarije, kao što su uslovne grane, petlje i vraćanje stanja, može se prebaciti na LangGraph4j engine.
Što se tiče LLM-a, sve ide preko Spring AI okvira. Integrisano je više top domaćih modela: DeepSeek, Qwen, Zhipu GLM.

Promena modela ne zahteva izmenu koda — dovoljno je promeniti globalnu LLM konfiguraciju.
Nadam se veštačkom Skill-u koji je postao popularan širom mreže — i ja sam ga primenio.
Po mom mišljenju, svaki Skill je jedan direktorijum; ključna datoteka je SKILL.md, sa YAML Frontmatter definicijom naziva i opisa, a Markdown za pravila izvršenja.
Zatim se pri pokretanju projekta skenira classpath, a Skill objekat kešira u Redis-u. Mehanizam učitavanja je u potpunosti u skladu sa trofaznim progresivnim pristupom — prva faza učitava samo naziv i opis, druga učitava pun sadržaj, treća učitava reference direktorijum po potrebi.
Tako LLM pri odlučivanju može da izostavi nepotreban kontekst.

Na primer, imam ovakav tok rada AI podcasta: korisnik samo unese deo teksta, LLM čvor može na osnovu Prompta da pretvori unos u scenario za podcast, a zatim kroz TTS čvor u zvuk, i konačno putem SSE-a pošalje korisniku.

Kod je na GitHub-u potpuno open source i već ima 300 zvezdica, što mi daje veliki osećaj postignuća.
https://github.com/itwanger/PaiAgent
02. Opiši tok rada Pai Pametni RAG?
Stari Vang nastavlja: „Pričaj o Pai Pametni RAG, objasni tok rada?"
Pai Pametni je enterprise sistem AI baze znanja. Njegova ključna funkcija je semantičko rasčlanjivanje i vektorska obrada privatnih dokumenata koje korisnik otpremi (na primer Word, PDF, txt), a zatim njihovo skladištenje u ElasticSearch radi naknadnog pretraživanja po ključnim rečima i semantičkog pretraživanja.

Tok rada Pai Pametnog je sledeći: nakon što korisnik otpremi dokument, sistem prvo vrši segmentaciju dokumenta, seče duge dokumente na više chunk-ova, za svaki chunk generiše odgovarajući vektor (embedding), a zatim ga zajedno sa originalnim tekstom skladišti u ElasticSearch.
Kada korisnik postavi pitanje, sistem vektorizuje pitanje, u ES-u izvršava hibridnu pretragu (vektorska pretraga + BM25 pretraga po ključnim rečima), a relevantne povučene chunk-ove umeće u prompt i šalje velikom modelu radi generisanja odgovora, koji se konačno preko WebSock strimovano vraća frontendu.

Dve teže tačke vredne pomena:
Prva je strategija segmentacije. Dokument se ne seče nasumice — prekratko gubi kontekst, predugo premašuje ograničenje tokena embedding modela i razblažuje semantiku.
Pai Pametni koristi segmentaciju fiksne veličine sa overlap (preklapanjem), obezbeđujući da susedni chunk-ovi imaju izvesno preklapanje sadržaja i izbegavajući da ključne informacije završe na granici sečenja.
Druga je upravljanje kontekstom razgovora. Višekružni razgovor zahteva unos istorije u prompt, ali rastući kontekst vremenom premašuje prozor konteksta velikog modela. Kako zadržati dovoljno konteksta uz kontrolu broja tokena — to je prilično praktičan inženjerski problem u RAG projektima.
03. Objašnjen princip LoRA-e i QLoRA-e, kako QLoRA optimizuje memoriju?
Stari Vang promeni temu: „Objasni princip LoRA-e? Kako QLoRA optimizuje memoriju?"
Potpuno fino podešavanje svih parametara velikog modela je previše skupo — za model od nekoliko milijardi ili čak nekoliko stotina milijardi parametara, potpuno fino podešavanje zahteva astronomske količine memorije, računarske snage i skladišta, što obični timovi ne mogu da priušte.
Suštinski pristup LoRA-e je niskorangna dekompozicija.

Da upotrebim poređenje.
Matrica težina velikog modela je enciklopedija od 100.000 stranica — potpuno fino podešavanje znači ponovo štampati svih 100.000 stranica.
LoRA-in pristup je: ne menjaj originalnu knjigu, već na njoj piši beleške. Te beleške su dve veoma male matrice B i A, originalna težina W se uopšte ne dira, a tokom treninga se ažuriraju samo B i A. Pri zaključivanju se sadržaj beleški „preklapa" preko originalne knjige: h = Wx + BAx.

Originalna matrica može imati nekoliko miliona parametara, dok B i A zajedno imaju možda samo nekoliko hiljada.
Broj parametara je manji za nekoliko redova veličine, a efekat može dostići 99% potpunog finog podešavanja.
To je takozvana „niskorangna dekompozicija" — korišćenjem proizvoda dve male matrice za aproksimaciju promene velike matrice. Rang r se obično uzima od 8 do 64; što je r veći, beleške su deblje, sposobnost simulacije jača, ali je i cena treninga veća.

Stari Vang nastavlja: „A QLoRA?"
LoRA rešava problem „viška parametara", ali se i model i dalje mora kompletno učitati u memoriju. Model od 65B zahteva 130GB memorije samo za učitavanje težina — obična grafička karta ga uopšte ne može prihvatiti.

QLoRA radi sledeće: kompresuje obim.
Prvo, kompresuje težine modela sa 16 na 4 bita.
Normalno, svaki parametar modela se skladišti kao 16-bitni broj u pokretnom zarezu (2 bajta). QLoRA koristi format NF4 (4-bit NormalFloat) koji sabija na 4 bita (0,5 bajta). Pošto je distribucija težina modela blizu normalnoj (zvonolikoj krivi), NF4 je posebno dizajniran za tu distribuciju — u intervalima gde su težine guste dodeljuje više kvantizovanih vrednosti, a u redkim manje, čime je gubitak preciznosti veoma mali.
Drugo, dvostruka kvantizacija — kompresija parametara. Tokom kompresije potrebno je zapamtiti neke „parametre kompresije" (kvantizacione konstante) koji i sami zauzimaju memoriju. QLoRA te parametre još jednom kompresuje.
Treće, kad memorije ponestane, pozajmi od RAM-a. Tokom treninga, optimizator (Adam) mora da zapamti informacije o istorijskim gradijentima svakog parametra, što zauzima više memorije od samog modela. QLoRA, kada memorija postane puna, automatski privremeno prebacuje te informacije u RAM, a kada su potrebne vraća ih — slično mehanizmu virtuelne memorije operativnog sistema.

04. Demonstacija detalja implementacije PaiAgent projekta, posebno implementacija Skill-a?
Stari Vang reče: „Vratimo se na projekat, implementacija Skill-a, možeš li detaljnije na nivou koda?"
Svaki Skill je u suštini direktorijum, sa ključnom datotekom SKILL.md, YAML Frontmatter definicijom naziva i opisa, Markdown pravilima izvršenja.
Pri pokretanju projekta SkillRegistry skenira sve Skill direktorijume i kešira metapodatke.

Ključni dizajn je trofazno progresivno učitavanje: prva faza učitava samo naziv i opis, za odlučivanje LLM-a — „koje Skills mogu da izaberem"; druga faza učitava pun sadržaj SKILL.md; treća učitava referentne datoteke iz reference direktorijuma po potrebi. Tako LLM prilikom izbora Skill-a ne mora sve da ugura u context, štedi tokene.

Kada tok rada stigne do nekog LLM čvora, ako je konfigurisan skillName, iz SkillRegistry se uzima odgovarajući Skill, sadržaj se sastavlja u sistemski prompt i ubacuje.
05. Praksa u razvoju pomognutom AI-jem?
Stari Vang pita: „Tvoja praksa u razvoju pomognutom AI-jem?"
Prvo da kažem o OpenAI-jevom Codexu — ovo stvarno ima obim i kvalitet, i kvalitet koda je visok.
Skoro mesec dana sav razvoj projekata prepustio sam njemu, uključujući tehnološku frakciju, Pai Pametni RAG, PaiFlow Agent, PaiAgent tok rada, PaiSwitch (projekat sličan CC Switch) i Pai biografiju.

Možete instalirati Codex plaginu u IntelliJ IDEA, jako je zgodno za svakodnevno pisanje backend koda.
Tutorijal: https://paicoding.com/article/detail/2607900057933824

Codex ima još jedan adut: u kombinaciji sa Chrome Devtools MCP može da radi testiranje web stranica. Neke bagove na stranici je teško opisati rečima, a pustiti Codex da direktno upravlja pretraživačem i debaguje je mnogo bolje nego da se sami mučite.
Tutorijal: https://paicoding.com/article/detail/2606800001310720

A onda Claude kompanije A.
Iskreno, u pogledu teksta, Claude je nezamenljiv; pri rešavanju nekih bagova to je pravo božanstvo.
Ponekad neke bagove u produkciji ne umem da opišem, Codex često blebe, ali Claude kao da je pod nadzorom — zaista razume moje prave potrebe.
Osim toga, moram pomenuti Claude Code. To je trenutno najjača Agent alatka.
Domaći model u kombinaciji sa Claude Code-om, borbena moć se udvostručuje. Na primer, GLM-5.1 uz asistenciju Claude Code-a postaje veoma jak.
Ranije sam ovom kombinacijom završio projekat Agent-a za biografije.
Tutorijal: https://paicoding.com/article/detail/2609300013893632

Najveća prednost Claude Code-a je end-to-end sposobnost: od raščlanjivanja zahteva, generisanja specifikacija, pisanja koda do izvršenja testova — sve u jednom dahu.
Za složene zadatke, refaktorisanje više datoteka i samostalni debag, Claude Code je trenutno plafon.
06. Da li trenutni Agent dostize ocekivanja? Kakva su ocekivanja od Agent-a?
Stari Vang nastavlja: „Da li trenutni Agent dostiže očekivanja?"
Iskreno, ne dostiže, jos uvek daleko od toga.
Agent kakvog zamišljam mogao bi samostalno da dovrši razvoj kompletne funkcije: razume zahteve → dizajnira rešenje → piše kod → pokreće testove → popravlja bagove → šalje PR, sve bez moje intervencije.
Ali današnji Agent, uključujući Claude Code, i dalje zahteva da čovek bdije nad njim.
Čak i sa ekspertnim tim modom Qoder-a.

Međutim, Agent napreduje neverovatnom brzinom.
Do sledeće godine u ovo vreme, utisak koji će nam Agent ostaviti biće potpuno drugačiji, posebno uz šok koji donose OpenClaw i Hermes Agent.
07. Koliki je udeo koda koji je dao AI?
Stari Vang pita: „Koliki je udeo koda koji je dao AI?"
PaiAgent oko 95%.
Pai Pametni RAG ima znatno niži udeo AI koda, oko 10%. Tada, kada je ovaj projekat rađen, alati za razvoj pomognut AI-jem još nisu bili dovoljno zreli, pa je mnogo toga morao sam da pišem.
08. Kako se vrsi multimodalno pretrazivanje znanja?
Stari Vang pita: „Kako se vrši multimodalno pretraživanje znanja?"
Tradicionalni RAG može da obradi samo tekst, a sa slikama, tabelama, grafikonima u PDF-ovima pada u nedoumicu.
I Pai Pametni je u početku bio takav — korisnici često otpremaju tehničku dokumentaciju koja sadrži dijagrame arhitekture, dijagrame sekvenci, dijagrame toka, koje Tika uopšte ne može da obradi.
// Tok obrade dokumenata: parsing -> deljenje na delove -> vektorizacija -> skladištenje
public void vectorizeFile(MultipartFile file, String userId, String orgTag, boolean isPublic) {
// 1. Parsing i deljenje dokumenata
List<String> chunks = fileParsingService.parseAndChunk(file);
// 2. Masovna vektorizacija
List<float[]> vectors = embeddingClient.batchEmbedding(chunks);
// 3. Konstrukcija objekta dokumenta
List<EsDocument> documents = buildDocuments(chunks, vectors, metadata);
// 4. Masovno skladištenje
elasticsearchService.bulkIndex(documents);
}Suština video i audio RAG-a je da ih se prvo pretvori u tekst ili drugi vektorizujuci prikaz, a zatim prođe kroz tok rada tradicionalnog RAG-a.

Ključni proces je sledeći: audio se kroz ASR (automatsko prepoznavanje govora) pretvara u transkript, transkript se seče na segmente po vremenskoj oznaci, svaki segment se vektorizuje Embedding-om i skladišti u vektorskoj bazi.
Kada korisnik pita, radi se semantičko pretraživanje, pronalaze najrelevantniji tekstualni segmenti, zatim na osnovu tih segmenata generiše odgovor i vraćaju se odgovarajuće vremenske oznake.

Za video scenarije gde informacije o slici nisu potrebne, može se koristiti isti pristup — izvuče se audio zapis iz videa i radi se ASR.
Ako su informacije o slici u videu važne, kao što su pisane beleške na tabli u obrazovnim videima, prikazi proizvoda u produktnim videima ili događaji u videima nadzora, onda čist ASR nije dovoljan i potrebno je iskoristiti i informacije o slici.
Ključni proces je sledeći: video se kadruje po određenoj učestalosti (na primer, jedan kadar u sekundi ili jedan ključni kadar), multimodalni Embedding model pretvara svaki kadar slike u vektor i skladišti u vektorskoj bazi. Pri korisnikovom pitanju, isti multimodalni Embedding model vektorizuje pitanje (multimodalni model može istovremeno da obrađuje tekst i sliku), radi semantičko pretraživanje i pronalazi najrelevantnije video kadrove, a zatim na osnovu vremenskih oznaka tih kadrova locira segment videa.

Za izbor multimodalnog Embedding modela uglavnom se koristi CLIP serija. OpenAI-jev CLIP je pionir, a za kineske scenarije mogu se koristiti Chinese-CLIP ili multimodalna verzija BGE-M3.
09. Objasni razliku izmedju A2A i MCP-a?
Stari Vang pita: „Objasni razliku između A2A i MCP-a?"
MCP rešava kako jedan Agent poziva alate, pozicioniran kao „AI USB priključak".
Agent se preko MCP Client-a povezuje na MCP Server, a Server izlaže tri vrste sposobnosti: tools, resources i prompts.

A2A rešava saradnju između više Agenta. Svaki Agent objavljuje Agent Card (JSON format) koji opisuje sposobnosti, a drugi Agenti pronalaze i pozivaju ga preko Agent Card-a.
Na primer: Agent za zalihe koristi MCP za povezivanje sa svojom bazom podataka radi provere zaliha, a istovremeno koristi A2A za komunikaciju sa Agentom dobavljača za poručivanje — kad zalihe ponestanu, automatski se narucuje. MCP upravlja „kako ja koristim alate", A2A upravlja „kako tražim pomoć od drugih".
10. Kako RAG resava duze i brojnije kontekste?
Stari Vang pita: „RAG povuče desetine chunk-ova, šta ako je kontekst predug?"
„Prvi sloj, filtriranje pre pretrage."
„U fazi pretrage koristi se chunk male granularnosti (256 tokena) za precizan odziv, vraća se 30 kandidata. Zatim Reranker model ocenjuje tih 30 i uzima se samo Top-5 do Top-8 najrelevantnijih za unos modelu."
„Ovde postoji tehnika koja se zove 'slojeviti odziv': prvi krug koristi vektorsku pretragu da brzo suzi opseg, drugi krug koristi podudaranje ključnih reči za precizno lociranje, treći krug koristi Reranker za konačno sortiranje."
„Drugi sloj, upravljanje budžetom context window-a — odrediti kvotu za tokene."
„Moja strategija raspodele je: sistemski prompt 20%, rezultati pretrage 50%, istorija razgovora 30%. Na primer, za context window od 8K — sistemski prompt 1,6K, rezultati pretrage 4K, istorija razgovora 2,4K."
„Za poruke koje prelaze budžet, direktno odsecanje gubi informacije; koristimprogresivno sažimanje. Poslednje tri runde razgovora zadržavaju original, a starije se kompresuju u sažetak od 200 tokena."

„Treći sloj, posebna obrada dugih dokumenata."
„Za cele knjige, duge izveštaje gde jedna stavka već premašuje 8K tokena."
„Rešenje jedan je Map-Reduce: duge dokumente podeliti na više chunk-ova, svaki chunk posebno poslati modelu, a zatim objediniti više odgovora. Nedostatak je gubitak informacija o povezanosti između chunk-ova."
„Rešenje dva je RAG + rekurzivno sažimanje: prvo napraviti hijerarhijski sažetak dugog dokumenta — na svakih 5 chunk-ova generisati jedan intermedijalni sažetak, a zatim od na svakih 5 intermedijalnih sažetaka generisati jedan visok nivo sažetak. Pri pretrazi se prvo podudara sažetak visokog nivoa, locira odgovarajuće poglavlje, a zatim se produbljuje do originalnih chunk-ova."
„Rešenje tri je korišćenje modela koji podržava dugačak kontekst. Najnoviji Claude Code već podržava 1M kontekst."
Kraj
Razvoj Agent-a | PaiAgent/PaiFlow 2026-03 ~ sada
Kratak opis projekta: Enterprise AI platforma za organizaciju tokova rada na bazi LangGraph4j + Spring AI, podržava organizaciju više modela i čvornih alata putem vizuelnog interfejsa za prevlačenje, i koristi engine graf stanja za izvršavanje složenih AI zadataka.
Tehnički stack: Java 21, Spring Boot 3.4, Spring AI 1.0, LangGraph4j 1.8, React 18, ReactFlow
- Na osnovu LangGraph4j StateGraph izgrađen engine za tok rada, implementiran GraphBuilder za registraciju čvorova i povezivanje ivica, NodeAdapter adapter za premošćavanje postojećih executor-a, StateManager za upravljanje prenosom stanja između čvorova.
- Dizajnirana dinamička fabrika ChatClientFactory, koja u toku rada dinamički kreira OpenAI-kompatibilan ChatClient prema konfiguraciji čvora, realizuje neprimetno prebacivanje između više provajdera LLM-a: OpenAI, DeepSeek, Qwen itd.
- Korišćenjem paterna metode šablona refaktorisano 5 executora LLM čvorova, apstraktovan AbstractLLMNodeExecutor osnovna klasa, podklase treba samo da implementiraju getNodeType(), količina koda je sa 800+ linija pojednostavljena na 10 linija po klasi.
- Implementiran mehanizam unapred pripremljenih paketa znanja Skill, podržava SkillBuilder automatsko učitavanje, Reference keširanje i potpuni/progresivni režim ubacivanja.
Pai Pametni RAG baza znanja — razvoj AI aplikacija 2026-01 ~ 2026-02
Opis projekta: Pai Pametni je enterprise pametna platforma za dijalog zasnovana na privatnoj bazi znanja, koja korisnicima omogućava da otpreme dokumente, izgrade sopstveni prostor znanja i kroz interakciju na prirodnom jeziku pretražuju i dobijaju znanje. Kombinuje velike jezičke modele i tehnologiju vektorskog pretraživanja, omogućavajući korisnicima da efikasno interaguju sa svojom bazom znanja u obliku razgovora.
Tehnički stack: SpringBoot, MySQL, Redis, Apache Tika, Ollama, Elasticsearch, MinIO, Kafka, Spring Security, WebSocket, Linux, Shell
Ključne odgovornosti:
- Korišćenjem Elasticsearch + IK analizatora indeksirani su i vektorski pretraženi dokumenti baze znanja, podržani razni tipovi teksta (Word, PDF, TXT itd.); integrisan Ali Embedding model za konverziju teksta u vektore, podržava 2048 dimenzija; u kombinaciji sa ES KNN vektorskim odzivom, filtriranjem po ključnim rečima i BM25 re-rankingom realizovana je dvostuka pretraga „ključne reči + semantika".
- Napisana shell skripta koja jednim klikom pokreće Kafka KRaft režim, automatski rešava probleme sa sukobom cluster ID-a, uključujući čišćenje logova, generisanje ID-a klastera, formatiranje direktorijuma za skladištenje i pokretanje Kafka servera.
- Na osnovu WebSocket-a implementirana duga konekcija (korisnik može aktivno da je zaustavi), u kombinaciji sa Stream API-jem DeepSeek velikog modela realizovan strimovani odgovor — čim LLM generiše nov sadržaj, frontend ga u realnom vremenu prima i prikazuje „kucalicu" efekat generisanja slovo po slovo.
- Uvođenjem MCP protokola, sposobnosti kao što su operacije nad lokalnim datotekama, generisanje PDF-a i upiti u bazu podataka su zapakovane na Server strani, čime je realizovana decoupling Agent-a i ekosistema alata.
