Ūkio valdymo sistema su AI asistentu ir palydovine laukų stebėsena.
Rašau ją nuo 2024 m. rugsėjo, vienas. Repo aplankas vadinasi LandAgro-Demo iš senų laikų.
Ūkininkas, dirbantis 200 iki 600 hektarų, sužino, kad laukas bėdoje, kai tai jau matosi nuo kelio. Tada derlius jau prarastas. Fungicidas, panaudotas teisingu augimo tarpsniu, kainuoja vieną purškimą. Panaudotas dviem savaitėm vėliau kainuoja derlių.
Kartu su tuo įrašai apie tai, kas ir kada buvo purkšta, guli sąsiuvinyje, telefono galerijoje arba ūkininko galvoje. O reglamentai tų įrašų reikalauja, ir nitratams jautrių zonų ribos reikalauja, kad aritmetika būtų teisinga.
1. Stebi laukus iš palydovo, kad nereikėtų vaikščioti. Sentinel-2 nuotraukos virsta NDVI eilute kiekvienam laukui. Lyginu ne su bendru vidurkiu, o su tos konkrečios kultūros sezoniniu etalonu. Laukas, kritęs žemiau savo etalono, iškyla su priežastimi.
2. Atpažįsta ligą iš nuotraukos, bet ne tik iš nuotraukos. Lapo nuotrauka sujungiama su keturiais signalais: pačiu vaizdu, orų istorija, augimo tarpsniu ir regionine ligų rizika. Vien nuotrauka septoriozę painioja su azoto trūkumu. Orai plius augimo tarpsnis juos dažniausiai išskiria.
3. Laiko įrašus ir skaičiuoja. Purškimai, tręšimai ir darbai kiekvienam laukui. Trąšų skaičiuoklė su 27 produktais, Lietuvos NVZ ribomis ir draudžiamų produktų patikra. Išvestis yra tas dokumentas, kurio prašo patikrinimas.
4. Atsako į klausimus apie šitą ūkį. Claude Sonnet 5 orkestruoja 45 mano parašytus įrankius. Klausi „kiek hektarų žieminių kviečių" arba „kuriam laukui trūksta T1 fungicido", ir atsakymas ateina iš duomenų bazės, ne iš modelio atminties.
Modelis nesugalvoja skaičių. Kiekvieną skaičių, kurį pasako asistentas, paima įrankis iš duomenų bazės. Tą patį skaičių galima atsidaryti sąsajoje ir pasitikrinti. Jei modelis nežino, jis sako, kad nežino, o ne spėja.
Etalonas pagal kultūrą, ne bendras. NDVI 0,65 bulvėms liepą yra prastai, o vasariniams miežiams gerai. Vienas bendras slenkstis būtų davęs melagingų signalų kas savaitę, ir ūkininkas būtų nustojęs žiūrėti.
Prompt caching, nes kitaip per brangu. Šią savaitę radau, kad kešas buvo perrašomas kas užklausą: įrankių sąrašas keitėsi kas žinutę, o įrankiai renderinami prieš sistemos promptą, todėl griuvo viskas. Pataisiau siųsdamas fiksuotą sąrašą. Vienos užklausos kaina nukrito nuo 0,12 iki 0,02 dolerio.
Tai ne derliaus orakulas. Ankstyva stebėsena iš palydovo yra tikras dalykas, bet ji susiaurina, kur žiūrėti, o ne pakeičia agronomo sprendimą. Sistema pasako, kad laukas krito žemiau savo etalono. Kodėl jis krito, vis tiek reikia nueiti pažiūrėti.
Nėra realaus ūkio, kuris ja naudotųsi kasdien. Ruošiu diegimui 400 hektarų ūkyje.
| Sluoksnis | Kas |
|---|---|
| Front end | Next.js 14 App Router, React 18, Tailwind, Leaflet, Zustand, TanStack Query |
| Backend | FastAPI, SQLAlchemy 2.0, Pydantic v2, JWT su httpOnly slapukais |
| Duomenys | PostgreSQL, migracijos su Alembic |
| AI | Claude Sonnet 5, 45 įrankiai, prompt caching dviem taškais |
| Palydovas | Sentinel-2 per Copernicus, NDVI, K-means VRA zonos, ISOXML eksportas |
| Fone | Palydovinių duomenų parsisiuntimas, ligų rizikos perskaičiavimas, Stripe webhook |
# Backend
cd backend
python -m venv venv && venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
uvicorn src.main:app --reload
# Front end
cd frontend
npm install
npm run devSąsaja: http://localhost:3000 API dokumentacija: http://localhost:8000/docs
Be API raktų sistema veikia demo režimu. Pilnam veikimui reikia ANTHROPIC_API_KEY ir
Copernicus prieigos, žr. backend/.env.example.
Kodas viešas, kad būtų galima perskaityti. Naudoti negalima, žr. LICENSE.
Klausimai: domantas.kazl@gmail.com