AI asistent u aplikaciji: OpenAI, Codex i Cursor

AI asistent u poslovnoj web aplikaciji, sa agentima koji rade u Docker kontejneru

Šta je urađeno

Asistent koji stoji uz svaki ekran CacaTajka poslovnog web sistema i odgovara na pitanja o radu u aplikaciji. Ono što ga izdvaja nije to što razgovara sa jezičkim modelom, nego šta može da stoji iza njega: pored uobičajene veze sa OpenAI-jem, isti panel može da pokrene i pravog agenta iz komandne linije — Codex ili Cursor — koji se izvršava u Docker kontejneru na WSL-u ili Linux serveru.

Za korisnika se pritom ništa ne menja. Koji se pogon koristi, bira se u podešavanjima organizacije.

Šta klijent dobija

  • Pomoć na mestu gde se radi – panel stoji uz svaki ekran, bez prelaska na drugu stranicu i bez posebne obuke.
  • Odgovore iz sopstvene dokumentacije, a ne opšte odgovore sa interneta. Kada odgovora u dokumentaciji nema, asistent to kaže umesto da izmišlja.
  • Istoriju razgovora koja se čuva, nastavlja i može da se preuzme kao dokument.
  • Nezavisnost od jednog dobavljača – kada neki agent poskupi, izgubi kvalitet ili se ugasi, menja se pogon, a ne aplikacija.

Podaci ostaju pod kontrolom korisnika

Asistent ne čita ekran sam od sebe. Svaki ekran može da ponudi polja koja bi mu koristila, korisnik ih bira kvačicama, i pre slanja vidi tačan sadržaj koji odlazi. Ništa ne odlazi prećutno.

Na serverskoj strani prosleđeni sadržaj se tretira kao podatak, a nikada kao naredba — što je zaštita od pokušaja da se kroz tekst na ekranu asistentu podmetne nova instrukcija. Istorija se vodi odvojeno po organizaciji i po korisniku.

Zašto je kontejner deo rešenja, a ne sitnica

Agent iz komandne linije ume da čita datoteke i pokreće komande. Da bi radio bez čoveka koji svaku radnju potvrđuje, mora da bude ograničen nečim drugim — i tu ulogu ima kontejner. Agent vidi samo svoje okruženje, dokumentaciju i radni prostor tog razgovora; datoteke aplikacije, baza i ostatak servera nisu mu dostupni.

Uz to svaki razgovor dobija svoj odvojen prostor, a svako pokretanje ostaje zabeleženo, sa trajanjem i ishodom, pa se posle može utvrditi šta se i kada dešavalo.

Koji agenti mogu da stoje iza panela

Pokretač ne zna ništa o pojedinom agentu: postavi mu zadatak, pokrene ga u kontejneru i pročita odgovor. Zato može da opsluži svaki agent koji se pakuje u kontejner i ume da radi neinteraktivno.

U radu su OpenAI Responses API, Codex CLI i Cursor Agent — implementirani, testirani i u upotrebi.

U planu su Claude Code, Gemini CLI, GitHub Copilot CLI, Amazon Q Developer CLI, Goose, Aider, opencode i Crush. Svi rade po istom principu, pa se za svakog dodaje samo njegovo okruženje — ostalo je zajedničko i ne piše se ponovo.

Deo posla koji se ne vidi

Uz samu vezu razvijena su i okruženja u koja se agenti pakuju: prijava se radi jednom i ne završava u kodu, ažuriranje na noviju verziju agenta ide noću i samo od sebe, uz mogućnost povratka na prethodnu, a posle svake izmene okruženja provera odmah pokaže da li agent uopšte odgovara.

Tu je bilo i najviše iznenađenja: pokretanje ovakvih alata u kontejneru na Windows domaćinu nailazi na ograničenja koja u dokumentaciji ne stoje i za koja je rešenje moralo da se nađe u hodu.

Isto rešenje i van ove aplikacije

Panel je jedan JavaScript modul bez zavisnosti od okvira, a serverski deo jedna ulazna tačka koja prima pitanje i vraća odgovor. Zbog te podele isti asistent može da se prikači na drugi sajt, na program koji se instalira ili na posao koji radi u pozadini, bez ponovnog pisanja veze ka agentu.

Korišćene tehnologije

Rešenje je razvijeno u PHP-u (CodeIgniter 4) i JavaScript-u, uz OpenAI Responses API, Codex i Cursor CLI agente, Docker na WSL-u i Linux-u, MySQL za istoriju razgovora i evidenciju, i Bootstrap za izgled panela.

Ako vam ovakva veza treba u sopstvenom softveru, pogledajte uslugu integracija veštačke inteligencije, a za samu vezu sa tuđim servisom API integracije.