Podobně jako mnoho dalších mobilních vývojářů jsme i my z Etnetera Flow zavítali na letošní mDevCamp v Praze. A jedno z témat, které nás nejvíce zaujalo, bylo zapojení generativní AI do aplikací. V interním PoC s názvem Floutek jsme si pak během několika dní sami ověřili, že zapojit AI do aplikací může být docela snadné a přínosné. Stačí mít jen správný nápad a trochu zkušeností. Věříme, že našeho Floutka posuneme z PoC fáze do plnohodnotné implementace, která nám pomocí AI bude zjednodušovat každodenní workflow.
Inspirace z mDevCampu
Po dlouhé pauze byl celý mDevCamp opět offline, což mu dodalo skvělou atmosféru a umožnilo osobní setkání s dalšími nadšenci do technologií. Přednášky byly nejen poučné, ale také inspirativní. Náš tým na mDevCampu nejvíc zaujaly přednášky:
- Building a Secure Fintech App od Petra Dvořáka z Wultry, která podrobně rozebírala aspekty bezpečnosti ve fintech aplikacích.
- Skvělou prezentaci Hacking iOS Mobile App měl i Kamil Borzym z Allegra, který ukázal, proč je lepší pro OAuth využívat SFSafariViewController namísto WKWebView.
- Nejvíce nás však inspirovala přednáška o zapojení Gemini AI do mobilních aplikací Hey Google! Help me make my open source app more fun with Gemini and Generative AI od Ahmeda Tikiwa. A právě díky ní jsme se rozhodli vyzkoušet si tuto technologii sami.
Floutek: Naše inovativní hřiště
Technologie nás v Etnetera Flow baví a neustále hledáme způsoby, jak si jejich využitím usnadnit práci. Jedním z takových příkladů je i automatická detekce a zadávání home office, kterou řešíme pomocí nástroje Floutek.
Floutek je naše interní Java Virtual Machine (JVM) aplikace, která pomocí detekce dostupných IP adres určuje, zda je daný kolega v kanceláři nebo mimo ni. Pokud je mimo kancelář, vytvoří se v HR nástroji událost home office. Pro přehlednost Floutek ještě pošle souhrnnou informaci do specifického kanálu ve Slacku.
Floutek je také skvělé místo pro experimentování s novými technologiemi. A proto vznikl nápad na vlastní proof of concept (PoC) pro využití AI pro automatickou detekci dovolené z textu Slack zpráv.
![](https://cdn.prod.website-files.com/6654d6a34cda05f4a5c2f202/66ace970ee5cc8705f0157fb_66572e3faf91c676d313cd8b_Floutek%2520CZ.avif)
Naše PoC řešení: Jak to funguje
Naše řešení v rámci PoC zahrnuje následující kroky:
- Uživatel napíše zprávu o dovolené do specifického Slack kanálu.
- Slack přepošle zprávu na naše API, které pomocí AI vyhodnotí, zda se v textu nachází informace o dovolené.
- Pokud služba detekuje dovolenou, pošle uživateli odpověď v podobě Slack zprávy s možností odeslat událost do HR nástroje.
(Pozn. Samotnému odesílání události do HR nástroje se nyní v rámci PoC nevěnujeme. V odpovědi pouze připravíme požadované tlačítko.)
Po vzoru výše zmíněné přednášky na mDevCampu jsme jako AI zvolili Gemini, ke které přistupujeme přes službu Firebase. Vzhledem k tomu, že naše řešení využívá i Firebase Functions a Firestore, bylo využití Firebase pro přístup k Gemini logickou volbou.
Technická implementace AI do aplikace
Naše řešení využívá následující komponenty:
- Floutek Slack aplikaci jako rozhraní mezi Slackem a naším API.
- Google Apps Script pro logiku Floutka.
- Firebase Functions jako API pro komunikaci s Gemini AI a ukládání historie požadavků do Firebase Firestore.
Klíčovým aspektem generativních AI je správné nastavení promptu, tedy způsobu, jakým se AI dotazujeme. Po několika iteracích jsme zjistili, že nejlépe funguje struktura promptu, která obsahuje:
- Popis aktuálního stavu, tedy definici aktuálního dne a datumu, které jsou dynamicky dosazovány.
- Explicitní popis požadovaného výstupu s příklady, kde vyžadujeme validní JSON obsahující jednotlivé datumy s informací o dovolené.
- Dodatečný "sugar" popis pro úpravu nevalidního výstupu.
- Explicitní příkaz, co má AI vykonat.
Náš prompt aktuálně vypadá takto:
![](https://cdn.prod.website-files.com/6654d6a34cda05f4a5c2f202/66659ec1914785fb3c69209e_66572447396b1c5a5c0cf8dd_Prompt.avif)
Příklad odpovědi:
![](https://cdn.prod.website-files.com/6654d6a34cda05f4a5c2f202/66659ec1914785fb3c692096_665724c504e82c4145bb46f6_odpov%25C4%259B%25C4%258F.avif)
Nová verze Gemini 1.5 Pro Preview podporuje i JSON formát jako výstup, což nám umožňuje prompt výrazně zjednodušit. Schválně jsme však strukturu ponechali pro zpětnou kompatibilitu s Gemini 1.0 Pro.
Výsledky a další kroky
Je fascinující, co vše lze dnes s AI udělat. Pomocí krátkého promptu jsme dokázali vyřešit úkoly, které by jinými metodami byly časově náročné a složité. Velkou výhodou je i podpora českého jazyka, kterou například Google Assistant nikdy nezískal.
Výsledek PoC můžete posoudit sami v krátkém videu.
Pár komentářů k současnému stavu PoC:
- Výstupy nejsou vždy zcela správné.
- I když výstupy nejsou vždy deterministické a občas nejsou zcela pravdivé, vidíme s novějšími modely, jako je Gemini 1.5 Pro Preview, významné kroky kupředu.
- Potvrdilo se nám, že AI má smysl používat nejen během vývoje, ale i v rámci samotných mobilních aplikací.
Generativní umělá inteligence (Generativní AI) je rychle se rozvíjející oblast, která umožňuje vytvářet nové a originální obsahy, jako jsou texty, obrazy, hudba a videa, pomocí pokročilých algoritmů, jako jsou hluboké neuronové sítě. Na rozdíl od tradičních AI systémů, které rozpoznávají vzory a provádějí specifické úkoly, generativní AI generuje odpovědi a obsah na základě vstupních dat. Mezi známé příklady patří GPT od OpenAI, který produkuje plynulý text z jednoduchých promptů, a Gemini od společnosti Google, jež podporují kreativní spolupráci a asistují tvůrcům obsahu.