TC$mC$ on loistava ja erittC$in kunnianhimoinen projekti! "Agentic AI" eli
tekoC$lyagentit, jotka voivat suorittaa toimintoja pelkC$n tekstin tuottamisen
sijaan, ovat juuri nyt kuuma aihe. Oman puhelimen muuttaminen lokaaliksi,
tekoC$lyn ohjaamaksi yksikC6ksi on tC$ydellinen kokeilu.
Toteutuksessa meidC$n tC$ytyy kuitenkin ottaa huomioon Androidin
tietoturva-arkkitehtuuri (hiekkalaatikointi). TekoC$ly ei voi "taianomaisesti"
liikutella sormea ruudulla ja klikkailla sovelluksia ilman root-oikeuksia.
Siksi tarvitsemme vC$likerroksen.
TC$ssC$ on ehdotus toimivaksi pinoarkkitehtuuriksi (Tech Stack), jolla saat
tC$mC$n rakennettua Huaweihisi:
1. Arkkitehtuurin ydin (The Stack)
* Aivot (AI): Termux-ympC$ristC6C6n kC$C$nnetty Llama.cpp.
* Rajapinta (API): Llama.cpp sisC$ltC$C$ sisC$C$nrakennetun web-palvelimen
(llama-server), joka nostaa automaattisesti pystyyn OpenAI-yhteensopivan REST
API:n (esim. http://localhost:8080/v1/chat/completions).
* Malli: Llama-3.2-3B-Instruct (GGUF-formaatissa). TC$mC$ on tC$rkeC$C$,
koska "Instruct"-mallit osaavat seurata tiukkoja sC$C$ntC6jC$ ja tuottaa
koneellisesti luettavaa koodia tai JSON:ia pelkC$n jutustelun sijaan.
* Lihakset (Execution): Termux:API ja yksinkertainen Python-skripti, joka
toimii "agenttina" tekoC$lyn ja puhelimen vC$lillC$.
2. Miten ohjaus kC$ytC$nnC6ssC$ toimii (Function Calling)
Jotta tekoC$ly voi ohjata puhelinta, emme pyydC$ siltC$ normaalia
tekstivastausta, vaan pakotamme sen toimimaan ns. Function calling -tilassa.
Toimintalogiikka (Python-vC$littC$jC$skripti):
* Sanot puhelimelle: "Ota kuva etukameralla ja kerro akun varaustaso."
* Python-skriptisi nappaa tC$mC$n ja lC$hettC$C$ sen lokaaliin Llama.cpp REST
API:in.
* System prompt on viritetty tiukasti: "Olet puhelimen ohjaus-AI. Palauta
vastauksesi AINA puhtaana JSON-muotona listasta sallittuja komentoja. Esim:
[{"cmd": "take_photo", "camera": "front"}, {"cmd": "get_battery"}]"
* TekoC$ly (Llama 3.2) ymmC$rtC$C$ pyynnC6n ja palauttaa oikean
JSON-rakenteen.
* Python-skriptisi lukee JSON:in ja laukaisee vastaavat Termux:API -komennot.
3. MitC$ puhelimella voi ohjata (Termux:API)
Termux:API on virallinen lisC$osa, joka avaa komentoriviltC$ pC$C$syn
Androidin rautaan ja ominaisuuksiin ilman root-oikeuksia. TekoC$lysi voisi
komentaa skriptiC$ tekemC$C$n esimerkiksi seuraavia asioita:
* Kamera: Ota kuva etu- tai takakameralla (termux-camera-photo).
* Sensorit & Tila: Tarkista akun tilanne, lue GPS-sijainti, tunnista laitteen
asento (termux-battery-status, termux-location).
* ViestintC$: LC$hetC$ tekstiviesti, lue saapuneet viestit (termux-sms-send,
termux-sms-list).
* KC$yttC6liittymC$: NC$ytC$ ilmoituksia (push notifications), laita puhelin
vC$risemC$C$n, puhu tekstiC$ C$C$neen (termux-notification, termux-tts-speak).
* Yhteydet: Laita WiFi tai Bluetooth pC$C$lle/pois.
4. EntC$ muiden sovellusten ohjaaminen (Graafinen UI)?
Jos haluat tekoC$lyn oikeasti avaavan esimerkiksi WhatsAppin ja lC$hettC$vC$n
viestin, Termux:API ei yksin riitC$, koska Android estC$C$ toisia sovelluksia
puuttumasta toistensa kC$yttC6liittymC$C$n.
TC$hC$n on kaksi "assistiivista" ratkaisua:
* Tasker tai MacroDroid: Voit asentaa Androidiin Tasker-automaatiosovelluksen
(joka hyC6dyntC$C$ Androidin Accessibility Services -oikeuksia ruudun
klikkailuun). Termuxin Python-skripti voi lC$hettC$C$ Taskerille paikallisen
HTTP Webhookin (esim. http://localhost:1820/open_spotify), jolloin Tasker
suorittaa varsinaisen ruudun nC$ppC$ilyn.
* Androidin Intentit: Termux voi kC$ynnistC$C$ muiden sovellusten
URL-skeemoja. Esimerkiksi tekoC$ly voi generoida komennon termux-open
"[https://maps.google.com/?q=Helsinki](https://maps.google.com/?q=Helsinki)",
jolloin puhelin avaa Google Mapsin suoraan haluttuun osoitteeseen.
Miten haluat edetC$?
TC$mC$n rakentaminen kannattaa jakaa kolmeen vaiheeseen. MistC$ aloitetaan?
* Vaihe 1: Asennetaan Termux, kC$C$nnetC$C$n Llama.cpp Vulkan-tuella ja
ladataan 3B-malli pyC6rimC$C$n.
* Vaihe 2: Testataan REST API:n toiminta lC$hettC$mC$llC$ sille
cURL-kyselyitC$ lokaalisti.
* Vaihe 3: Asennetaan Termux:API ja koodataan yksinkertainen Python-skripti,
joka muuttaa AI:n JSON-vastaukset fyysisiksi toiminnoiksi (esim. lukee akun
tilan ja sanoo sen C$C$neen).