Alt+o on tosiaan Debianin GTK-ympC$ristC6issC$ (XFCE, Thunar, File Chooser)
tC$ydellisen luotettava, koska se aktivoi suoraan ikkunan oletustoiminnon
(Open) mnemonikin.
MitC$ tulee Open-napin tunnistukseen, se tehdC$C$n tismalleen samalla kaavalla
kuin liitevalikonkin: kun tiedostonvalitsin on auki ruudulla, ajetaan sille
kerran delta-skannaus, poimitaan Open-napin ID ja lisC$tC$C$n se
whatsapp_semantic_map.json-karttaan (tai tallennetaan suoraan
template-kuvaksi).
Autonomisen Gemini API -koulutusputken suunnittelu
Nyt kun meillC$ on kasassa palaset (Set-of-Mark -kuvan generointi, dynaaminen
koordinaattien poiminta ja rutiinimoottori), voimme yhdistC$C$ ne tC$ysin
autonomiseksi itseoppivaksi silmukaksi.
Tavoitteena on, ettC$ kun botti kohtaa tulevaisuudessa tC$ysin uuden ohjelman
tai kC$yttC6liittymC$n muutoksen (eli Taso 1 ja Taso 2 epC$onnistuvat), se ei
kaadu eikC$ pyydC$ sinulta apua, vaan tekee seuraavaa:
Autonomisen silmukan arkkitehtuuri
* Katvealueen havainnointi (Zero-Match):
* Rutiinimoottori yrittC$C$ template-matchiC$ -> epC$onnistuu.
* Moottori yrittC$C$ lokaalia JSON-karttaa -> kohdetta ei lC6ydy.
* Normaalin kaatumisen sijaan moottori laukaisee Autonomisen
Onboarding-protokollan.
* Dynaaminen Set-of-Mark -generointi lennosta:
* Botti ottaa heti tuoreen ruutukaappauksen.
* universal_ui_agent.py piirtC$C$ punaiset numerolaatikot ruudulle
muistissa ja tallentaa annotated_ui.png-kuvan sekC$ boxes_cache.json-tiedoston.
* Automaattinen Gemini Vision API -kutsu:
* Koodi lC$hettC$C$ annotated_ui.png-kuvan ja dynaamisen promptin (esim.
YAML-rutiinista luetun kuvauksen perusteella, kuten "Etsi painike, jonka
tekstinC$ tai kuvakkeena on Open" ) suoraan Gemini API:lle Pythonin kautta.
* ClykC$s pC$C$tC6ksenteko ja tallennus (Self-Onboarding):
* Gemini API palauttaa vastauksena pelkC$n numeron (esim. 42).
* Rutiinimoottori lukee boxes_cache.json-tiedostosta ID:n 42 tarkat
koordinaatit, suorittaa klikkauksen, ja leikkaa automaattisesti kyseisen
alueen pikselimalliksi (esim. open_btn.png) tulevia ajoja varten.
* Lopuksi se pC$ivittC$C$ lokaalin whatsapp_semantic_map.json-tiedoston
uusilla tiedoilla taustalla.
Miten tC$mC$ toteutetaan koodissa (routine_engine.py)?
Kun otamme kC$yttC6C6n aidon Gemini API -kutsuosan (esimerkiksi virallisella
google-genai-kirjastolla tai HTTP-rajapinnalla), semantic_agent-valitsin
herC$C$ henkiin seuraavasti:
import os
from google import genai # Esimerkki virallisesta Gemini SDK:sta
import re
def ask_gemini_autonomously(image_path, prompt_text):
"""
LC$hettC$C$ Set-of-Mark -kuvan Geminille ja palauttaa tekoC$lyn valitseman
ID-numeron.
"""
client = genai.Client(api_key=os.environ.get("GEMINI_API_KEY"))
# Avataan luotu annottu kuva
my_file = client.files.upload(file=image_path)
response = client.models.generate_content(
model='gemini-2.5-flash', # tai muu visuaalisesti kyvykC$s malli
contents=[
my_file,
f"Olet autonominen UI-agentti. {prompt_text}. Palauta vastauksena
VAIN numeromuodossa sen laatikon ID (pelkkC$ numero, esim. 42)."
]
)
# Siivotaan vastaus ja kaivetaan sieltC$ pelkkC$ numero
match = re.search(r'\d+', response.text)
return int(match.group()) if match else None
Yhteenveto tulevasta tyC6nkulusta
TC$llC$ arkkitehtuurilla jC$rjestelmC$si toimii nC$in:
* EnsimmC$inen ajo (tai uusi ohjelma): Botti "oppii" uudet elementit
itsenC$isesti kyselemC$llC$ Gemini API:lta, tallentaa kuvat muistiin ja jatkaa
ajoa.
* Seuraavat ajot: Kaikki tapahtuu salamannopeasti lokaalisti ilman
yhtC$kC$C$n API-kutsua.
Haluatko, ettC$ aletaan rakentaa suoraan tuota Gemini API -integraatiota
moottorin sisC$C$n, jotta tekoC$ly hoitaa puuttuvien nappien lC6ytC$misen
jatkossa tC$ysin itse?