- Přehledy IS
- APS (20)
- BPM - procesní řízení (22)
- Cloud computing (IaaS) (10)
- Cloud computing (SaaS) (33)
- CRM (51)
- DMS/ECM - správa dokumentů (20)
- EAM (17)
- Ekonomické systémy (68)
- ERP (77)
- HRM (27)
- ITSM (6)
- MES (32)
- Řízení výroby (36)
- WMS (29)
- Dodavatelé IT slueb a řeení
- Datová centra (25)
- Dodavatelé CAD/CAM/PLM/BIM... (39)
- Dodavatelé CRM (33)
- Dodavatelé DW-BI (50)
- Dodavatelé ERP (71)
- Informační bezpečnost (50)
- IT řeení pro logistiku (45)
- IT řeení pro stavebnictví (26)
- Řeení pro veřejný a státní sektor (27)
ERP systémy
CRM systémy
Plánování a řízení výroby
AI a Business Intelligence
DMS/ECM - Správa dokumentů
HRM/HCM - Řízení lidských zdrojů
EAM/CMMS - Správa majetku a údrby
Účetní a ekonomické systémy
ITSM (ITIL) - Řízení IT
Cloud a virtualizace IT
IT Security
Logistika, řízení skladů, WMS
IT právo
GIS - geografické informační systémy
Projektové řízení
Trendy ICT
E-commerce B2B/B2C
CAD/CAM/CAE/PLM/3D tisk![]() | |
| Přihlaste se k odběru newsletteru SystemNEWS, který kadý týden přináí výběr článků z oblasti podnikové informatiky | |
![]() | |
Monosti vyuití generativní AI v podnikovém softwaru
O generativních AI a jejich dopadu na (nejen) softwarový vývoj se vedou vánivé diskuze. Nástroje jako ChatGPT, GitHub Copilot, Midjourney a mnoho dalích, u v tuto chvíli značně ovlivňují způsob, jakým se dá vyvíjet software. Od inteligentního napovídání, přes automatizované psaní unit testů, a po strukturované vysvětlování různých konceptů a konstruktů. AI u je tady dnes a rapidně mění způsob naí práce. Nabízí se ale otázka, jak můe AI změnit nejen způsob jakým software píeme, ale i software, který píeme. Jak jsme v kontextu aktuálních technologií schopni vyuít AI uvnitř softwaru, který píeme, tak abychom ho posunuli zase o krůček dále?

Co to vlastně generativní AI je a jak funguje? Generativní umělá inteligence se odkazuje na typ algoritmu, který má schopnost tvořit nový, originální obsah. Tento obsah můe zahrnovat různé formáty, jako je text (ChatGPT, Bard, Bing), obrázky (Midjourney, DALL-E, Stable Diffusion), hudbu (Soundraw, AIVA, Soundful), nebo i video (Pictory, Synthesia).
Generativní AI funguje na základě tzv. generativních modelů, které se učí strukturu a vzorce v datech, na nich byly trénovány, a poté vytvářejí nové vzorce dat, které jsou podobné těm trénovacím. Tento proces je zaloen na učení s dohledem a vyuívá sofistikované techniky strojového učení, jako jsou generativní sítě proti soupeřům (GAN) nebo transformační jazykové modely, jako je GPT. Jako takové tudí pracují s pravděpodobností a jsou jen tak dobré, jak kvalitními vstupními daty disponují.
Svět AI je rozmanitý a aplikace jednotlivých typů modelů (jazykové nebo audio/vizuální) se bude velice liit produkt od produktu. Nejirího vyuití můeme dosáhnout s LLM (Large Language Model) a na ty se i budeme výhradně zaměřovat v dnením článku (konkrétně na GPT modely od OpenAI).
Kontextuální nápověda
Kdy bychom se bavili o podnikových informačních systémech, jako jsou například správa tisku, docházky, skladové hospodářství, ERP a dalí, v drtivé větině případů se jedná o velké a komplexní systémy, jejich user experience zpravidla dost pokulhává (a u jde o dost často starí UI technologie, nebo o celkovou komplexnost úkonů, které v nich člověk musí vykonávat). Jeliko větina podobných řeení jede iterativně u řadu let a jakékoliv změny user experience (obzvlátě třeba pro adminy) jsou nákladné a málo kdy podloené reálnou vidinou zisku, jejich pouívání zpravidla vyaduje delí dobu na zaučení (ERP systémy jsou perfektní příklad) a velice často k nim jsou extenzivní manuály, jak s nimi vlastně pracovat. AI můe být jednou cestou, jak relativně snadno a levně výrazně lépe propojit UI, s kterým interaguje uivatel, a dokumentaci
In-context learning
Na jedné straně máme sloitý software, na straně druhé extenzivní dokumentaci, a z keře vykukuje GPT model. Jak je spojit dohromady? Jednou moností je natrénovat si vlastní model, ale to je časově a finančně náročné, proto se této variantě dnes věnovat nebudeme. Alternativou je takzvaný in-context learning, někdy také označovaný jako fine tuning. Zjednodueně to znamená, e existujícímu natrénovanému GPT modelu předáme jako součást dotazu kontext, z kterého má vycházet při generovaní.
Kontext je způsob, kterým modelu říkáme, jak se má chovat, co od něj očekáváme a v jakých mezích má fungovat. Velice jednodue si to můete vyzkouet na jakémkoliv veřejně dostupném modelu:
Vidíme, e AI velice rychle přijme svou roli a začne se podle ní chovat. Čím více specifičtí budeme, tím více můeme chování modelu změnit. Model sám o sobě ale nic neví o naem softwarovém řeení, a tudí by uivateli nebyl schopen poskytnout relevantní pomoc. Nad rámec popisu chování můeme jako součást kontextu předat modelu i irokou kálu dat, z kterých poté bude vycházet při generovaní odpovědi, od dokumentace, a po export support ticketů a jejich řeení.
Zásadním problémem ale je, e GPT modely omezují maximální mnoství tokenů, s kterými jsou schopny pracovat. Pro zjednoduení si pod tokenem můete představit 4 znaky vstupního textu. Ti zvídavějí se mohou podívat na https://platform.openai.com/tokenizer pro hlubí vhled do funkce OpenAI tokenizéru. Omezení je na úrovni od 4096 pro GPT-3.5 a po 32768 pro GPT-4-32k, a limit se stále posouvá. Dalím úskalím je cenový model, který se odvíjí od počtu zpracovaných tokenů. Z toho nám vyplývá, e jen tak jednodue nemůeme vzít celou nai dokumentaci a poslat ji GPT modelu jako kontext pro dotaz. To nás přivádí k vektorizovaným indexům.
LlamaIndex (https://github.com/jerryjliu/llama_index)
Jedním ze způsobů, jak efektivně vyuívat existující dokumentaci (nebo obecně jakékoliv data) s GPT modelem, je převést ji na vektorizovaný index (např. právě pomocí LlamaIndex). Query operace nad takovýmto indexem jsou poté velice efektivní a jsme tak rychle schopni dohledat vekeré relevantní úseky dokumentace ke konkrétnímu vstupu. Souhrn relevantních úryvků dokumentace je poté poskytnut GPT modelu jako kontext pro konkrétní dotaz (čím snííme vstupní počet tokenů dotazu). Výstupem GPT modelu je u strukturovaný text, který bude pro uivatele srozumitelný v jeho rodném jazyce a můeme ho také zobrazit v UI.
Zde přikládáme velice jednoduchý příklad toho, jak jsme schopni pomoci LlamaIndex knihovny pro Python vzít nai dokumentaci, indexovat ji a pouít ji jako kontext pro dotaz vůči OpenAI GPT modelu:
from llama_index import VectorStoreIndex, SimpleDirectoryReader import os os.environ['OPENAI_API_KEY'] = 'OpenAPI api klíč' # Načtení dokumentace ze souborů documents = SimpleDirectoryReader('sloka_s_dokumentací').load_data() # Vytvoření indexu z načtených dokumentů index = VectorStoreIndex.from_documents(documents) # Uloení indexu pro budoucí pouití index.storage_context.persist() # Processing dotazu skrze vygenerovaný index na GPT model query_engine = index.as_query_engine() response = query_engine.query('Co je smyslem ivota?') print(response)
Jde sice o velice primitivní příklad s velice omezenou pouitelností, ale jde vidět, e se v jádru nejedná o ádnou raketovou vědu. Takto vyprodukovaný text u poté můeme zobrazit kdekoliv v aplikaci, bude vdy reflektovat aktuální stav dokumentace a jeho integrace do řeení nebude a tak náročná (v rámci firemního hackatonu jsme byli schopni mít prototyp za 2 dny).
Kdy u teď máme způsob, jak komunikovat s GPT modelem, který rozumí naemu řeení, co to tak celé posunout o krůček dál a zbavit se prostředníka.
Chatbot v1
Různé formy více či méně inteligentních chatbotů jsou vude kolem nás, ale často s nimi bohuel nelze mít vyloeně pouitelnou interakci. Na druhou stranu, kdy se podíváme na průměrnou interakci například s ChatGPT, je to trochu jiná úroveň. Pojďme si spolu projít příklad jádra naprosto jednoduchého chatbota. Tentokrát psaného v .NETu s pomocí knihovny OpenAI-API-dotnet (https://github.com/OkGoDoIt/OpenAI-API-dotnet).
// Vytvoření OpenAI API connectoru OpenAIAPI api = new OpenAIAPI("api-key"); Conversation chat; // Pokud uivatel teprve zahajuje konverzaci if (string.IsNullOrEmpty(chatRequest.SessionId) || !Conversations.ContainsKey(chatRequest.SessionId)) { // Vytvoříme novou konverzaci chat = api.Chat.CreateConversation(); // Předáme kontext pro daný systém chat.AppendSystemMessage(context); // Nastavíme temperature (o té více později) chat.RequestParameters.Temperature = 0.5; // Uloíme si chat session pro zpracování kontinuálního dialogu chatRequest.SessionId = Guid.NewGuid(); Conversations.Add(chatRequest.SessionId, chat); } else { chat = Conversations[chatRequest.SessionId]; } // Předáme GPT modelu vstup uivatele. Zde bychom například mohli přidat relevantní úseky dokumentace k dotazu uivatele (výstup LlamaIndexu z prvního příkladu) chat.AppendUserInput(chatRequest.RequestMessage); // Získáme výstup, který následně zobrazíme uivateli var response = await chat.GetResponseFromChatbotAsync();
Jak lze vidět, opět se jedná o ve skrze jednoduchý kód bez zbytečných sloitostí. Stačí vyřeit stavovost chatu pro uivatele, při vytvoření chatu předat GPT modelu kontext v rámci kterého má fungovat a u jen posílat zprávy uivatele a číst odpovědi. Fungování chatbota nejvíce ovlivníme skrze context a temperature.
Context
Jak se říká: kontext je vechno. V případě LLM to platí dvojnásob. Co to kontext je, jsme si vysvětlili ji dříve. Jako takový bychom ho mohli rozdělit na dva typy. Ten první je vstupní kontext, který jsme v příkladu předali GPT modelu skrze AppendSystemMessage. Takový kontext by mohl vypadat například následovně:
- Jsi profesionálně vystupující chatbot uvnitř aplikace pro firemní print management. Uivatelé se tě budou ptát na dotazy související s aplikací, ke kterým vdy dostane relevantní úryvky z dokumentace, které pouije pro pomoc uivateli. V případě, e nebude schopen uivateli odpovědět, doptá se na doplňující dotazy.
Je to opravdu tak jednoduché Prostou textovou formulací toho, co chceme, aby ná chatbot dělal, jsme schopni dramaticky ovlivnit, jakým způsobem bude fungovat (v dalím příkladu si ukáeme daleko komplexnějí pouití kontextu). Čím přesněji (a pro GPT model srozumitelněji) kontext definujeme, tím lepích výsledků docílíme. Chtěli bychom například přidat mení easter egg? Můeme přidat do kontextu následující větu:
- Kdy by tě uivatel oslovil frází Hello there, odpoví mu General Kenobi? a bude s ním jednat jako s rytířem Jedi.
Jak se říká, sky is the limit. Druhou formou kontextu je celá konverzace sama o sobě. To v podstatě znamená, e interně se celá uběhlá konverzace vdy poskytuje modelu jako celkový kontext pro kadý dalí dotaz. Díky tomu se uivatel můe odkazovat na kterékoliv předchozí místo v konverzaci a vést s chatbotem kontinuální diskuzi. Takté jsme schopni v průběhu pokládání dotazů stále vkládat dalí a dalí relevantní kontext (například data získaná z dokumentace pomocí ji zmíněného LlamaIndexu).
Temperature
Druhým klíčovým parametrem, který ovlivní, jak se ná chatbot bude chovat, je atribut Temperature (v příkladu nastavený na 0.5). Jde o parameter softmaxové funkce, který určuje, jak jistý nebo nejistý bude model při generování výstupu.
Při niích hodnotách (pod 0.5) se model bude chovat více deterministicky, to znamená, e bude vybírat slova a fráze, které jsou statisticky nejpravděpodobnějí. Výsledek poté bude více konzistentní, ale méně kreativní. Zároveň se bude velice striktně dret kontextu, který jsme mu předali, tedy kadý jeho nedostatek bude velice zřetelný. Například, pokud v kontextu zadáme chatbotu za úkol, aby od uivatele zjistil konkrétní sadu informací, mezi nimi bude například: PC client IP address (jeliko budeme mít kontext definici v angličtině), ale komunikace s uivatelem bude například v četině, je velká ance, e při dotazovaní pouije právě originální anglickou formulaci a nepokusí se o překlad (i kdy vechen okolní generovaný text bude česky).
Při vyích hodnotách (nad 0.7) bude model daleko více kreativní, věty budou znít více jako od reálného člověka a bude si schopen domyslet mezery v kontextu, který mu byl dán. Na druhou stranu ale bude mít větí tendenci se ne a tak striktně dret daného kontextu, nebo reality. Příkladem by mohlo být, e z dokumentace dostane úryvek o podpoře dvou výrobců: Ricoh a Fujifilm. Uivateli nicméně řekne informaci o podpoře Fujitsu (i kdy tato značka není nikde v celém kontextu, který dostal k dispozici). Vybalancování dobrého chování chatbota poté spočívá v poměru detailu kontextu a nastaveném temperature.
Chatbot v2
Nyní u máme základ chatbota, víme, jak mu předat kontext a jak z něj pro uivatele získat relevantní odpověď na dotaz. Co to ale posunout jetě dále, co umonit chatbotovi vykonávat akce na základě uivatelského vstupu. Jeden by řekl, e s jazykovým modelem, který přijímá text a na základě něj generuje textovou odpověď, něco podobného nepůjde Ale ono to jde. Klíčem je opět kontext. Pojďme vzít originální kontext chatbota v1 a rozířit ho o následující:
- Uivatelé tě mohou poádat, aby si za ně vykonal akce uvnitř systému. Docílí toho tak, e v uivatelských vstupech bude hledat informace k naplnění modelu, který a bude schopen naplnit celý, vypíe do výstupu v JSON formátu. Kdy ti budou chybět informace pro kterýkoliv atribut modelu, poloí uivateli doplňující otázku pro jeho získání. JSON nikdy přímo nebude zmiňovat ve svých odpovědích. Ve chvíli, kdy budou vechny parametry vyplněny, nebude se u doptávat na potvrzení, verifikaci anebo správnost. Atributy modelu jsou následující:
Název atributu je IP adresa zařízení a ve výstupním JSONu bude reprezentována atributem ipAddress. Tento atribut obsahuje informace o
Název atributu je Název zařízení a ve výstupním JSONu bude reprezentována atributem deviceName. Tento atribut obsahuje informace o
Jak lze vidět, komplexnost kontextu u se zvýila a v některých ohledech u je přesnějí. Kadá věta tohoto kontextu plní svůj účel a větina z nich byla přidána během jeho ladění (jako například věta:
- Ve chvíli, kdy budou vechny parametry vyplněny, nebude se u doptávat na potvrzení, verifikaci anebo správnost).
Kontext nám tak postupně bobtná ve velikosti, ale ačkoliv se jedná o text, není zde nutnost dret jej v celku. Velice jednodue se dá skládat dynamicky podle potřeby z atributů a operací, které jsou v tu chvíli relevantní (například přes custom atributy, které budou obsahovat sémantický význam daného atributu pro předání v rámci kontextu).
Cílem je, aby uivatel vedl s chatbotem standardní komunikaci a jakéhokoliv JSON modelu na pozadí si nikdy nebyl vědom:
// Pokud odpověď obsahuje JSON, pokusíme se ji vyparsovat ven if (ContainsJson(response)) { var json = ExtractJsonFromText(response); var actionModel = JsonSerializer.Deserialize<ActionModel>(json); // Ačkoliv jsme modelu řekli, e nemá JSON vypisovat dokud není naplněn, stejně se to můe stat (obvzlátě v závislosti na pouité Temperature) if (actionModel.hasEmptyFields()) { // Explicitně tak řekneme modelu, aby se doptal chat.AppendSystemMessage("Doptej se uivatele na informace o prázdných atributech."); response = await ProcessOpenAIResponse(chat); } else { // Pokud se nám model podařilo úspěně získat, můeme na jeho základě provést akci uvnitř systému await doAction(actionModel); // Model donutíme k tomu, aby uivateli řeknul, to co chceme my (bude respektovat jazyk uivatele) chat.AppendSystemMessage( "Řekni uivateli, e jsi úspěně provedl jeho poadavek a zeptej se, jestli potřebuje dalí asistenci"); response = await ProcessOpenAIResponse(chat); }
Největím problémem takového řeení je, jak moc deterministické budou odpovědi, které nám GPT model bude vracet (obzvlátě pak výstupní model, pouitý pro vykonání akce). Tento konkrétní příklad jsem zkouel primárně na modelu GPT-3.5 a v 90 % případů dělal ve, jak měl, ale ve zbytku U GPT-4 a dalích generací u to ale je, a jetě bude, výrazně lepí, jeliko technologie se v tomto směru posouvá kadým dnem.
Dalí monosti vyuití generativní AI
Ukázali jsme si, jak můeme LLM naučit ná produkt, aby byl schopen uivateli poradit na základě existující dokumentace. Jak jej vyuít k získání akce, kterou chce uivatel udělat, abychom ji mohli udělat za něj. Stejným způsobem bychom jej mohli napojit na existující systémy typu Jira, tak aby z reported issues byl schopen dát adminovi troubleshooting help anebo ho odkázat na existující limitaci. V případě, e bychom nepouívali model od OpenAI, ale například Bing (který má aktivní přístup k internetu), mohli bychom dále obohatit kontext chatbota tak, aby znal nejen informace o produktu, ale takté o zákazníkovi, který ho pouívá (zákazník je firma, která má tři pobočky, dvě v Evropě, jednu v Asii, zabývá se tím a tím, apod.), tak aby byl schopen radit adminovi více specificky, například ohledně rozloení skupin zařízení apod.
Pro mě osobně je celá tato oblast velice fascinující a imponuje mi, e bariéra pro vstup, aby si člověk mohl začít hrát, je relativně nízká. Tyto technologie se neustále posouvají kupředu a představují obrovský potenciál pro ty, kteří je budou schopni dobře vyuít.
![]() |
Filip Koňařík Autor článku je Principal Software Engineer společnosti Y Soft. |
Formulář pro přidání akce













