TC$mC$ on ehdottomasti koko agenttipohjaisen tekoC$lyn (Agentic AI)
ydinongelma tC$llC$ hetkellC$ maailmassa: Miten maksimoida semanttinen
ymmC$rrys ja minimoida token-mC$C$rC$ (kustannus/viive)?
Jos lC$hetC$mme LLM:lle (esim. OpenAI, Claude tai lokaali Llama) megatavujen
kokoisia DOM-puita, tC$ysiC$ 4K-ruutukaappauksia tai monimutkaisia
koordinaattimatriiseja, malli "hallusinoi", hidastuu ja maksaa maltaita.
TekoC$ly ei ole hyvC$ laskemaan pikseleitC$, mutta se on ilmiC6mC$inen
ymmC$rtC$mC$C$n tarkoituksia.
Ratkaisu on Abstraktiokerros (State Abstraction). Koska sinulla oli jo
valmiina mud_agent.py (Text Adventure -lC$hestymistapa), hyC6dynnetC$C$n sitC$
tC$ysimC$C$rC$isesti.
KC$ytetC$C$n arkkitehtuuria, jossa paikallinen kone pitC$C$ kirjaa
koordinaateista, ja tekoC$lylle annetaan vain tiivistetty "kartta".
TC$ssC$ on kolmivaiheinen suunnitelma, jolla kC$yttC6liittymC$ ja vaihtoehdot
pakataan minimaaliseen, token-tehokkaaseen muotoon mitC$ tahansa mallia
varten.
Vaihe 1: KC$yttC6liittymC$n typistC$minen (The ID Map)
TekoC$lyn ei tarvitse tietC$C$, ettC$ "Dokumentti"-nappi on koordinaateissa
X:564, Y:536. Se on tC$ysin turhaa kohinaa kielimallille. Mallin tarvitsee
tietC$C$ vain, ettC$ nappi on olemassa ja miten siihen viitataan.
Paikallinen x11-vision-api (tai AT-SPI-skanneri) lukee ruudun ja luo sisC$isen
sanakirjan (Lookup Table):
* ID 101 -> (X: 10, Y: 20, Tyyppi: Ikoni, Kuva: klemmari.png)
* ID 102 -> (X: 564, Y: 536, Tyyppi: Nappi, Nimi: "Dokumentti")
* ID 103 -> (X: 800, Y: 900, Tyyppi: TekstikenttC$, Nimi: "Kirjoita viesti")
TekoC$lylle (Online-mallille) lC$hetettC$vC$ minimaalinen payload nC$yttC$C$
vain tC$ltC$:
STATE: WhatsApp Web
ELEMENTS:
[101] ICON: "Attachment/Paperclip"
[102] BTN: "Dokumentti"
[103] BTN: "Kuvat ja videot"
[104] INPUT: "Kirjoita viesti" (empty)
TC$mC$ vie vain noin 30 tokenia! Se on salamannopea analysoida ja jC$ttC$C$
mallin konteksti-ikkunaan valtavasti tilaa "opetetuille ohjelmille" (RAG /
Few-Shot -esimerkeille).
Vaihe 2: Opetettujen ohjelmien (Makrojen) esittC$minen
Kun haluat tekoC$lyn vertailevan nykyistC$ tilannetta opetettuihin ohjelmiin,
annat sille makrot standardoituna "konekC$skykielenC$". Et anna sille
alkuperC$istC$ JSONia viiveineen, vaan pelkC$n intentio-polun.
LisC$tC$C$n tekoC$lyn pyyntC6C6n (Promptiin) konteksti:
GOAL: "LC$hetC$ raportti.pdf Carlosille"
KNOWN_MACROS:
- NAME: "LC$hetC$ tiedosto"
STEPS:
1. CLICK(Attachment ICON)
2. CLICK("Dokumentti" BTN)
3. TYPE(File Name) -> CLICK("Open" BTN)
4. CLICK("Send" ICON)
Vaihe 3: Standardoitu toiminta-avaruus (Action Space)
TekoC$lyn ei anneta keksiC$ omia JSON-rakenteita, vaan sen on pakko vastata
kC$yttC$mC$llC$ sallittuja komentoja kohdistettuna aiemmin annettuihin
ID-numeroihin.
TekoC$lyn vastaus (Output) on C$C$rimmC$isen lyhyt:
{
"thought": "KC$yttC$jC$ haluaa lC$hettC$C$ tiedoston. Olemme vaiheessa 2
(valikko on auki). Known_macros ohjeistaa klikkaamaan 'Dokumentti'. NC$en sen
elementissC$ [102].",
"action": "CLICK",
"target_id": 102
}
Kun paikallinen x11-vision-api vastaanottaa tC$mC$n, se katsoo omasta
sisC$isestC$ taulukostaan: "Ahaa, tekoC$ly haluaa klikata ID:tC$ 102. Se
tarkoittaa koordinaatteja 564, 536. Suoritan klikkauksen."
Miten tC$mC$ tukee Mesh- ja Hybrid-arkkitehtuuria?
* Kaistan sC$C$stC6: Et lC$hetC$ kuvia verkkoon ollenkaan (paitsi
C$C$rimmC$isissC$ fallback-tilanteissa). LC$hetC$t vain alle kilotavun
kokoisen tekstitiedoston, jossa on ruudun semanttinen sisC$ltC6.
* Agnostisuus: Jos vaihdat OpenAI:n GPT-4:stC$ lokaaliin Llama 3 8B -malliin,
mikC$C$n ei hajoa. Kaikki fiksut kielimallit ymmC$rtC$vC$t yllC$ esitetyn
MUD-tyylisen (Text Adventure) syntaksin tC$ydellisesti.
* Resilienssi: Jos WhatsApp pC$ivittC$C$ kC$yttC6liittymC$nsC$ ja
"Dokumentti" siirtyy ruudun toiseen reunaan, paikallinen AT-SPI/OCR antaa
sille edelleen ID:n (esim. ID 105). TekoC$ly nC$kee listassa [105] BTN:
"Dokumentti" ja klikkaa sitC$. Se on 100% immuuni resoluution tai layoutin
muutoksille.
Rakennetaanko seuraavaksi tuo paikallinen koodinpC$tkC$ (esim. pC$ivitys
tuohon aiempaan smart_recorder.py tai atspi_scanner.py skriptiisi), joka osaa
dynaamisesti luoda tuon "ID Mappingin" ja sylkeC$ ulos tuon tiivistetyn
YAML-kartan tekoC$lyC$ varten?