Sztuczna inteligencja (AI) stała się codziennością w świecie IT, a programiści coraz częściej tworzą produkty, które ją wykorzystują. Dziś nie zastanawiamy się już, czy używać AI, ale jak zrobić to najlepiej. Jednak tworzenie aplikacji opartych na AI niesie ze sobą szereg praktycznych wyzwań. Jak sobie z nimi poradzić?
Budowanie aplikacji z wykorzystaniem sztucznej inteligencji to fascynujące, ale i wymagające zadanie. Często stajemy przed wyzwaniami takimi jak ograniczona wiedza modeli językowych, wysokie koszty trenowania własnych modeli czy kontrolowanie kreatywności AI. Każdy projekt, nad którym pracowaliśmy, nauczył nas czegoś nowego o tych wyzwaniach i najlepszych praktykach, które pomagają je przezwyciężyć.
LLM nie wszystko ci powie
Jednym z największych wyzwań jest ograniczona wiedza dużych modeli językowych (LLM). Modele te są trenowane na ogromnych zbiorach danych, ale ich wiedza może być niewystarczająca, gdy chcemy, aby aplikacja odpowiadała na specyficzne pytania biznesowe. Integracja wiedzy specyficznej właściwej dla danej firmy oraz zapewnienie aktualności tych danych to kluczowe wyzwania. Niestety trenowanie własnych modeli od podstaw lub „dotrenowywanie” bazowych, wiąże się z ogromnymi kosztami. Bardziej efektywnym podejściem jest wykorzystanie istniejących modeli i uzupełnianie ich o specyficzne dane biznesowe za pomocą metod takich jak uczenie kontekstowe. Dzięki temu możemy znacząco obniżyć koszty, jednocześnie dostosowując model do naszych potrzeb.
Metoda ta polega na dołączaniu odpowiednich dokumentów do zapytania, co pozwala modelowi wykorzystać dodatkową wiedzę podczas generowania odpowiedzi. Jednak rozmiar promptu jest ograniczony, co oznacza, że możemy przekazać tylko ograniczoną ilość informacji na raz. Aby poradzić sobie z tym ograniczeniem, możemy zastosować technikę Retrieval Augmented Generation (RAG), która polega na umieszczaniu w prompcie tylko tych fragmentów dokumentów, które są istotne z punktu widzenia zadawanego pytania. Alternatywnie, można użyć modeli z rozszerzonym oknem kontekstowym, które pozwalają na obsługę większych promptów. Jednak nawet te rozwiązania mają swoje ograniczenia i wymagają odpowiedniego zarządzania informacjami, aby zapewnić wysoką jakość generowanych odpowiedzi.
Kreatywność kontrolowana
Kolejnym wyzwaniem jest kontrolowanie kreatywności modeli językowych oraz ograniczenie tzw. halucynacji, czyli generowania zmyślonych informacji. Modele LLM są niezwykle kreatywne, co bywa przydatne w wielu kontekstach. Jednak w zastosowaniach biznesowych, gdzie precyzja i rzetelność są kluczowe, taka kreatywność może być problematyczna. Na przykład, wirtualny asystent odpowiadający na pytania dotyczące procedur firmowych powinien bazować na rzeczywistych dokumentach, a nie generować fikcyjne odpowiedzi. Aby temu zapobiec, można regulować parametry modelu, takie jak temperatura i top_k, które kontrolują poziom kreatywności odpowiedzi. Dodatkowo, można dodać linki do źródłowych dokumentów lub cytaty, aby zwiększyć wiarygodność generowanych odpowiedzi. Ważne jest również, aby model potrafił odpowiedzieć „nie wiem” zamiast wymyślać odpowiedź w sytuacjach, gdy nie może znaleźć odpowiedniej informacji.
Wykorzystanie wektorowych reprezentacji i baz danych
Wektorowe reprezentacje (embeddings) to kolejne wyzwanie i jednocześnie potężne narzędzie w budowaniu aplikacji opartych na AI. Embeddings są wektorową reprezentacją znaczenia słów, fragmentów tekstu, a nawet obrazów czy dźwięków, co pozwala na bardziej zaawansowane przetwarzanie i analizę danych. Na przykład dzięki reprezentacjom wektorowym można wyszukiwać kontekstowo zamiast tradycyjnie, w oparciu o słowa kluczowe, a także tworzyć bardziej trafne systemy rekomendacji produktów w oparciu o aktualny koszyk zamówień.
Wektorowe bazy danych, takie jak Pinecone, Amazon Kendra czy Azure AI Search, pozwalają na przechowywanie i efektywne przeszukiwanie wielowymiarowych przestrzeni wektorowych w celu znalezienia podobnych znaczeniowo tekstów. Jednakże, na początkowym etapie budowania aplikacji, kiedy wymagania wydajnościowe nie są jeszcze dokładnie określone, warto rozważyć hybrydowe rozwiązania, takie jak tradycyjne relacyjne bazy danych z rozszerzeniem wektorowym, np. PostgreSQL z pgvector. Takie podejście pozwala na znaczące ograniczenie kosztów chmury przy jednoczesnym zachowaniu elastyczności i wydajności.
Prompt idealny i testowanie
Inżynieria promptów, czyli tworzenie skutecznych zapytań do modeli językowych, to kolejne wyzwanie dla programistów. Treść promptu może zawierać pytanie, instrukcje oraz dodatkowe informacje, które pomagają modelowi lepiej zrozumieć kontekst. To swoiste programowanie w języku naturalnym wymaga znajomości pewnych wzorców, które zapewniają przewidywalne i dokładne odpowiedzi. Podstawowe techniki inżynierii promptów powinien znać każdy, nie tylko programista, a zaawansowane metody, takie jak Chain-of-Thought czy ReAct, umożliwiają złożone wnioskowanie. Jakość danych wejściowych jest kluczowa — ustrukturyzowane dane, w formatach takich jak Markdown, JSON czy HTML, pomagają modelom lepiej zrozumieć kontekst, poprawiając jakość odpowiedzi.
Testowanie aplikacji opartych na AI jest wyzwaniem ze względu na niedeterministyczny charakter modeli językowych (LLM). Powtarzając test dla tego samego wejścia, można otrzymać różne odpowiedzi, co utrudnia ocenę ich jakości. Aby porównać oczekiwane odpowiedzi z generowanymi przez modele, można używać wektorowych reprezentacji i porównywać odległości między nimi. Dzięki temu nawet jeśli odpowiedź jest wyrażona inaczej, ale nadal poprawna, test można uznać za pozytywny. Prompty muszą być dokładnie sprawdzane, aby uniknąć błędów i nieprzewidywalnych rezultatów, które mogą negatywnie wpłynąć na działanie aplikacji.
Bezpieczeństwo
Bezpieczeństwo aplikacji AI to kluczowy aspekt, który nie może być pominięty. Wysyłając treści do modeli językowych, musimy zadbać o to, aby nie zawierały one niepożądanych instrukcji, które mogłyby ujawnić poufne informacje lub skierować rozmowę na nieodpowiednie tematy (tzw. prompt injection). Podobnie, generowane przez modele odpowiedzi muszą być sprawdzane pod kątem treści, aby zapobiec przypadkowemu ujawnieniu poufnych danych lub generowaniu odpowiedzi, które mogłyby zaszkodzić reputacji firmy. Na szczęście istnieją narzędzia, zarówno komercyjne, jak i open source, które pomagają skutecznie wdrażać środki bezpieczeństwa w aplikacjach AI.
Tworzenie aplikacji opartych na sztucznej inteligencji to proces pełen wyzwań, ale także ogromnych możliwości. Kluczowe jest zrozumienie i odpowiednie zarządzanie tymi wyzwaniami, aby maksymalnie wykorzystać potencjał AI. Dzięki doświadczeniom i najlepszym praktykom, programiści mogą skutecznie budować inteligentne rozwiązania, które przynoszą realne korzyści biznesowe.
Źródło: Capgemini
LLM nie wszystko ci powie
Jednym z największych wyzwań jest ograniczona wiedza dużych modeli językowych (LLM). Modele te są trenowane na ogromnych zbiorach danych, ale ich wiedza może być niewystarczająca, gdy chcemy, aby aplikacja odpowiadała na specyficzne pytania biznesowe. Integracja wiedzy specyficznej właściwej dla danej firmy oraz zapewnienie aktualności tych danych to kluczowe wyzwania. Niestety trenowanie własnych modeli od podstaw lub „dotrenowywanie” bazowych, wiąże się z ogromnymi kosztami. Bardziej efektywnym podejściem jest wykorzystanie istniejących modeli i uzupełnianie ich o specyficzne dane biznesowe za pomocą metod takich jak uczenie kontekstowe. Dzięki temu możemy znacząco obniżyć koszty, jednocześnie dostosowując model do naszych potrzeb.
Metoda ta polega na dołączaniu odpowiednich dokumentów do zapytania, co pozwala modelowi wykorzystać dodatkową wiedzę podczas generowania odpowiedzi. Jednak rozmiar promptu jest ograniczony, co oznacza, że możemy przekazać tylko ograniczoną ilość informacji na raz. Aby poradzić sobie z tym ograniczeniem, możemy zastosować technikę Retrieval Augmented Generation (RAG), która polega na umieszczaniu w prompcie tylko tych fragmentów dokumentów, które są istotne z punktu widzenia zadawanego pytania. Alternatywnie, można użyć modeli z rozszerzonym oknem kontekstowym, które pozwalają na obsługę większych promptów. Jednak nawet te rozwiązania mają swoje ograniczenia i wymagają odpowiedniego zarządzania informacjami, aby zapewnić wysoką jakość generowanych odpowiedzi.
Kreatywność kontrolowana
Kolejnym wyzwaniem jest kontrolowanie kreatywności modeli językowych oraz ograniczenie tzw. halucynacji, czyli generowania zmyślonych informacji. Modele LLM są niezwykle kreatywne, co bywa przydatne w wielu kontekstach. Jednak w zastosowaniach biznesowych, gdzie precyzja i rzetelność są kluczowe, taka kreatywność może być problematyczna. Na przykład, wirtualny asystent odpowiadający na pytania dotyczące procedur firmowych powinien bazować na rzeczywistych dokumentach, a nie generować fikcyjne odpowiedzi. Aby temu zapobiec, można regulować parametry modelu, takie jak temperatura i top_k, które kontrolują poziom kreatywności odpowiedzi. Dodatkowo, można dodać linki do źródłowych dokumentów lub cytaty, aby zwiększyć wiarygodność generowanych odpowiedzi. Ważne jest również, aby model potrafił odpowiedzieć „nie wiem” zamiast wymyślać odpowiedź w sytuacjach, gdy nie może znaleźć odpowiedniej informacji.
Wykorzystanie wektorowych reprezentacji i baz danych
Wektorowe reprezentacje (embeddings) to kolejne wyzwanie i jednocześnie potężne narzędzie w budowaniu aplikacji opartych na AI. Embeddings są wektorową reprezentacją znaczenia słów, fragmentów tekstu, a nawet obrazów czy dźwięków, co pozwala na bardziej zaawansowane przetwarzanie i analizę danych. Na przykład dzięki reprezentacjom wektorowym można wyszukiwać kontekstowo zamiast tradycyjnie, w oparciu o słowa kluczowe, a także tworzyć bardziej trafne systemy rekomendacji produktów w oparciu o aktualny koszyk zamówień.
Wektorowe bazy danych, takie jak Pinecone, Amazon Kendra czy Azure AI Search, pozwalają na przechowywanie i efektywne przeszukiwanie wielowymiarowych przestrzeni wektorowych w celu znalezienia podobnych znaczeniowo tekstów. Jednakże, na początkowym etapie budowania aplikacji, kiedy wymagania wydajnościowe nie są jeszcze dokładnie określone, warto rozważyć hybrydowe rozwiązania, takie jak tradycyjne relacyjne bazy danych z rozszerzeniem wektorowym, np. PostgreSQL z pgvector. Takie podejście pozwala na znaczące ograniczenie kosztów chmury przy jednoczesnym zachowaniu elastyczności i wydajności.
Prompt idealny i testowanie
Inżynieria promptów, czyli tworzenie skutecznych zapytań do modeli językowych, to kolejne wyzwanie dla programistów. Treść promptu może zawierać pytanie, instrukcje oraz dodatkowe informacje, które pomagają modelowi lepiej zrozumieć kontekst. To swoiste programowanie w języku naturalnym wymaga znajomości pewnych wzorców, które zapewniają przewidywalne i dokładne odpowiedzi. Podstawowe techniki inżynierii promptów powinien znać każdy, nie tylko programista, a zaawansowane metody, takie jak Chain-of-Thought czy ReAct, umożliwiają złożone wnioskowanie. Jakość danych wejściowych jest kluczowa — ustrukturyzowane dane, w formatach takich jak Markdown, JSON czy HTML, pomagają modelom lepiej zrozumieć kontekst, poprawiając jakość odpowiedzi.
Testowanie aplikacji opartych na AI jest wyzwaniem ze względu na niedeterministyczny charakter modeli językowych (LLM). Powtarzając test dla tego samego wejścia, można otrzymać różne odpowiedzi, co utrudnia ocenę ich jakości. Aby porównać oczekiwane odpowiedzi z generowanymi przez modele, można używać wektorowych reprezentacji i porównywać odległości między nimi. Dzięki temu nawet jeśli odpowiedź jest wyrażona inaczej, ale nadal poprawna, test można uznać za pozytywny. Prompty muszą być dokładnie sprawdzane, aby uniknąć błędów i nieprzewidywalnych rezultatów, które mogą negatywnie wpłynąć na działanie aplikacji.
Bezpieczeństwo
Bezpieczeństwo aplikacji AI to kluczowy aspekt, który nie może być pominięty. Wysyłając treści do modeli językowych, musimy zadbać o to, aby nie zawierały one niepożądanych instrukcji, które mogłyby ujawnić poufne informacje lub skierować rozmowę na nieodpowiednie tematy (tzw. prompt injection). Podobnie, generowane przez modele odpowiedzi muszą być sprawdzane pod kątem treści, aby zapobiec przypadkowemu ujawnieniu poufnych danych lub generowaniu odpowiedzi, które mogłyby zaszkodzić reputacji firmy. Na szczęście istnieją narzędzia, zarówno komercyjne, jak i open source, które pomagają skutecznie wdrażać środki bezpieczeństwa w aplikacjach AI.
Tworzenie aplikacji opartych na sztucznej inteligencji to proces pełen wyzwań, ale także ogromnych możliwości. Kluczowe jest zrozumienie i odpowiednie zarządzanie tymi wyzwaniami, aby maksymalnie wykorzystać potencjał AI. Dzięki doświadczeniom i najlepszym praktykom, programiści mogą skutecznie budować inteligentne rozwiązania, które przynoszą realne korzyści biznesowe.
Źródło: Capgemini