Ten post jest napisany wspólnie ze Stanislavem Yeschenko z Q4 Inc.
Przedsiębiorstwa wybierają technologię Augmented Generation (RAG) jako główne podejście do tworzenia chatbotów z pytaniami i odpowiedziami. Nadal dostrzegamy pojawiające się wyzwania wynikające z charakteru asortymentu dostępnych zbiorów danych. Te zbiory danych są często mieszanką danych liczbowych i tekstowych, czasami ustrukturyzowanych, nieustrukturyzowanych lub częściowo ustrukturyzowanych.
IV kwartał Inc. musieli stawić czoła niektórym z tych wyzwań w jednym z wielu przypadków użycia sztucznej inteligencji zbudowanych na platformie AWS. W tym poście omawiamy przypadek użycia bota pytań i odpowiedzi wdrożony przez Q4, wyzwania, jakie stwarzają numeryczne i ustrukturyzowane zbiory danych oraz sposób, w jaki Q4 doszedł do wniosku, że użycie SQL może być realnym rozwiązaniem. Na koniec przyjrzymy się bliżej, jak korzystał zespół z Q4 Amazońska skała macierzysta i SQLDatabaseChain w celu wdrożenia rozwiązania opartego na RAG z generowaniem SQL.
Omówienie przypadków użycia
Q4 Inc. z siedzibą w Toronto i biurami w Nowym Jorku i Londynie to wiodąca platforma dostępu do rynków kapitałowych, która zmienia sposób, w jaki emitenci, inwestorzy i sprzedawcy skutecznie łączą się, komunikują i współdziałają. Platforma Q4 ułatwia interakcje na rynkach kapitałowych poprzez produkty internetowe IR, rozwiązania w zakresie wydarzeń wirtualnych, analitykę zaangażowania, relacje inwestorskie Zarządzanie relacjami z klientami (CRM), analizę akcjonariuszy i rynku, nadzór i narzędzia ESG.
W dzisiejszym dynamicznym i opartym na danych krajobrazie finansowym specjaliści ds. relacji inwestorskich (IRO) odgrywają kluczową rolę we wspieraniu komunikacji między spółką a jej akcjonariuszami, analitykami i inwestorami. W ramach swoich codziennych obowiązków IRO analizują różnorodne zbiory danych, w tym CRM, dokumentację właścicielską i dane giełdowe. Zbiór tych danych służy do generowania raportów finansowych, wyznaczania celów relacji inwestorskich oraz zarządzania komunikacją z obecnymi i potencjalnymi inwestorami.
Aby sprostać rosnącemu zapotrzebowaniu na wydajne i dynamiczne wyszukiwanie danych, celem czwartego kwartału było stworzenie narzędzia pytań i odpowiedzi chatbota, które zapewniłoby IRO intuicyjną i prostą metodę dostępu do niezbędnych informacji w przyjaznym dla użytkownika formacie.
Ostatecznym celem było stworzenie chatbota, który płynnie integrowałby publicznie dostępne dane z zastrzeżonymi danymi klientów z IV kwartału, przy jednoczesnym zachowaniu najwyższego poziomu bezpieczeństwa i prywatności danych. Jeśli chodzi o wydajność, celem było utrzymanie czasu odpowiedzi na zapytanie wynoszącego sekundy, aby zapewnić pozytywne doświadczenia użytkownikom końcowym.
Rynki finansowe to branża podlegająca regulacjom, w której stawka jest wysoka. Podanie nieprawidłowych lub nieaktualnych informacji może mieć wpływ na zaufanie inwestorów i akcjonariuszy, a także powodować inne możliwe zagrożenia dla prywatności danych. Rozumiejąc branżę i wymagania, Q4 wyznacza prywatność danych i dokładność reakcji jako zasady przewodnie podczas oceny dowolnego rozwiązania przed wprowadzeniem go na rynek.
W celu sprawdzenia koncepcji w czwartym kwartale zdecydowano się wykorzystać zbiór danych dotyczących własności finansowej. Zbiór danych składa się z punktów danych szeregów czasowych reprezentujących liczbę posiadanych aktywów; historia transakcji pomiędzy instytucjami inwestycyjnymi, osobami fizycznymi i spółkami publicznymi; i wiele innych elementów.
Ponieważ w czwartym kwartale zależało nam na spełnieniu wszystkich omówionych przez nas wymagań funkcjonalnych i niefunkcjonalnych, projekt musiał także zachować wykonalność komercyjną. Przestrzegano tego podczas całego procesu podejmowania decyzji dotyczących podejścia, architektury, wyboru technologii i elementów specyficznych dla rozwiązania.
Eksperymenty i wyzwania
Od początku było jasne, że aby zrozumieć pytanie w języku ludzkim i wygenerować dokładne odpowiedzi, w Q4 konieczne będzie wykorzystanie dużych modeli językowych (LLM).
Poniżej znajdują się niektóre eksperymenty przeprowadzone przez zespół, wraz ze zidentyfikowanymi wyzwaniami i wyciągniętymi wnioskami:
- Trening wstępny – W czwartym kwartale zrozumiano złożoność i wyzwania związane ze wstępnym szkoleniem LLM przy użyciu własnego zbioru danych. Szybko stało się oczywiste, że to podejście wymaga dużych zasobów i obejmuje wiele nietrywialnych etapów, takich jak wstępne przetwarzanie danych, szkolenie i ocena. Oprócz wymaganego wysiłku byłoby to zbyt kosztowne. Biorąc pod uwagę charakter zbioru danych szeregów czasowych, w Q4 zdano sobie również sprawę, że w miarę napływania nowych danych będzie trzeba stale przeprowadzać przyrostowe uczenie wstępne. Wymagałoby to dedykowanego, interdyscyplinarnego zespołu posiadającego wiedzę specjalistyczną w zakresie analityki danych, uczenia maszynowego i domen. wiedza.
- Strojenie – Dostrajanie wstępnie wytrenowanego modelu podstawowego (FM) przy użyciu kilku oznaczonych przykładów. Podejście to okazało się początkowo skuteczne, jednak w wielu przypadkach modelowa halucynacja stanowiła wyzwanie. Model miał trudności ze zrozumieniem zróżnicowanych wskazówek kontekstowych i zwrócił nieprawidłowe wyniki.
- RAG z wyszukiwaniem semantycznym – Konwencjonalny RAG z wyszukiwaniem semantycznym był ostatnim krokiem przed przejściem na generację SQL. Zespół eksperymentował z wyszukiwaniem, wyszukiwaniem semantycznym i osadzaniem w celu wyodrębnienia kontekstu. Podczas eksperymentu z osadzeniem zbiór danych został przekształcony w osadzenie, zapisany w wektorowej bazie danych, a następnie dopasowany do osadzania pytania w celu wyodrębnienia kontekstu. Kontekst odzyskany w dowolnym z trzech eksperymentów został następnie wykorzystany do rozszerzenia oryginalnego podpowiedzi jako danych wejściowych do LLM. To podejście sprawdziło się w przypadku treści tekstowych, gdzie dane składają się z języka naturalnego zawierającego słowa, zdania i akapity. Biorąc pod uwagę charakter zbioru danych z czwartego kwartału, który obejmuje głównie dane finansowe składające się z liczb, transakcji finansowych, notowań giełdowych i dat, wyniki we wszystkich trzech przypadkach były nieoptymalne. Nawet w przypadku korzystania z osadzania, osadzania generowane na podstawie liczb borykały się z rankingiem podobieństwa, a w wielu przypadkach prowadziły do pobierania nieprawidłowych informacji.
Wniosek z pytania czwartego: generowanie SQL jest rozwiązaniem
Biorąc pod uwagę wyzwania stojące przed konwencjonalną metodologią RAG, zespół zaczął rozważać generowanie kodu SQL. Pomysł polegał na wykorzystaniu LLM do wygenerowania najpierw instrukcji SQL na podstawie pytania użytkownika, przedstawionego LLM w języku naturalnym. Wygenerowane zapytanie jest następnie uruchamiane w bazie danych w celu pobrania odpowiedniego kontekstu. Kontekst jest ostatecznie używany do rozszerzenia monitu o wprowadzenie danych w kroku podsumowania.
Hipoteza Q4 była taka, że aby uzyskać lepszą pamięć na etapie pobierania, szczególnie w przypadku liczbowego zbioru danych, musieli najpierw wygenerować kod SQL na podstawie pytania użytkownika. Uważano, że nie tylko zwiększa to dokładność, ale także utrzymuje kontekst w domenie biznesowej dla danego pytania. Aby wygenerować zapytania i wygenerować dokładny kod SQL, Q4 musiało zapewnić LLM pełną świadomość kontekstową struktury zbioru danych. Oznaczało to konieczność uwzględnienia schematu bazy danych, kilku przykładowych wierszy danych i czytelnych dla człowieka wyjaśnień dotyczących pól, które nie są łatwe do zrozumienia.
Sądząc po wstępnych testach, metoda ta wykazała świetne rezultaty. LLM wyposażony we wszystkie niezbędne informacje był w stanie wygenerować poprawny kod SQL, który następnie został uruchomiony w bazie danych w celu pobrania prawidłowego kontekstu. Po eksperymentach z tym pomysłem zespół Q4 zdecydował, że generowanie kodu SQL będzie rozwiązaniem pozwalającym stawić czoła wyzwaniom związanym z ekstrakcją kontekstu dla własnego, specyficznego zbioru danych.
Zacznijmy od opisania ogólnego podejścia do rozwiązania, podzielmy je na elementy, a następnie połączmy je w całość.
Omówienie rozwiązania
LLM to duże modele z miliardami parametrów, które są wstępnie szkolone przy użyciu bardzo dużych ilości danych z różnych źródeł. Ze względu na rozległość zbiorów danych szkoleniowych oczekuje się, że osoby z wykształceniem LLM będą posiadać ogólną wiedzę z różnych dziedzin. LLM są również znane ze swoich zdolności rozumowania, które różnią się w zależności od modelu. To ogólne zachowanie można zoptymalizować pod kątem konkretnej domeny lub branży poprzez dalszą optymalizację modelu podstawowego przy użyciu dodatkowych danych przedszkoleniowych specyficznych dla domeny lub poprzez dostrojenie przy użyciu danych oznaczonych etykietami. Biorąc pod uwagę odpowiedni kontekst, metadane i instrukcje, dobrze wybrany LLM ogólnego przeznaczenia może wygenerować dobrej jakości SQL, o ile ma dostęp do odpowiedniego kontekstu specyficznego dla domeny.
W przypadku użycia Q4 zaczynamy od przetłumaczenia pytania klienta na język SQL. Robimy to, łącząc pytanie użytkownika, schemat bazy danych, niektóre przykładowe wiersze bazy danych i szczegółowe instrukcje jako monit dla LLM o wygenerowanie SQL. Po uzyskaniu kodu SQL możemy przeprowadzić etap sprawdzania poprawności, jeśli uznamy to za konieczne. Kiedy jesteśmy zadowoleni z jakości SQL, uruchamiamy zapytanie do bazy danych, aby pobrać odpowiedni kontekst, którego potrzebujemy w następnym kroku. Teraz, gdy mamy odpowiedni kontekst, możemy wysłać pierwotne pytanie użytkownika, odzyskany kontekst i zestaw instrukcji z powrotem do LLM w celu uzyskania ostatecznej podsumowanej odpowiedzi. Celem ostatniego kroku jest podsumowanie wyników przez LLM i dostarczenie kontekstowej i dokładnej odpowiedzi, którą można następnie przekazać użytkownikowi.
Wybór LLM stosowanego na każdym etapie procesu ma duży wpływ na dokładność, koszt i wydajność. Wybór platformy lub technologii, która zapewnia elastyczność przełączania między LLM w tym samym przypadku użycia (wiele podróży LLM dla różnych zadań) lub w różnych przypadkach użycia, może być korzystny w optymalizacji jakości wyników, opóźnień i kosztów . Wybór LLM omówimy w dalszej części tego postu.
Elementy konstrukcyjne rozwiązań
Teraz, gdy przedstawiliśmy to podejście na wysokim poziomie, przejdźmy do szczegółów, zaczynając od elementów składowych rozwiązania.
Amazońska skała macierzysta
Amazon Bedrock to w pełni zarządzana usługa oferująca wybór wysokowydajnych FM od wiodących firm, w tym AI21 Labs, Anthropic, Cohere, Meta, Stability AI i Amazon. Amazon Bedrock oferuje także szeroki zestaw narzędzi potrzebnych do budowy generatywnych aplikacji AI, uproszczenia procesu rozwoju oraz zachowania prywatności i bezpieczeństwa. Ponadto dzięki Amazon Bedrock możesz wybierać spośród różnych opcji FM i możesz dalej dostrajać modele prywatnie, korzystając z własnych danych, aby dostosować odpowiedzi modeli do wymagań Twojego przypadku użycia. Amazon Bedrock jest w pełni bezserwerowy i nie ma podstawowej infrastruktury umożliwiającej zarządzanie rozszerzaniem dostępu do dostępnych modeli za pośrednictwem jednego interfejsu API. Wreszcie Amazon Bedrock spełnia kilka wymagań dotyczących bezpieczeństwa i prywatności, w tym kwalifikowalność HIPAA i zgodność z RODO.
W rozwiązaniu Q4 używamy Amazon Bedrock jako bezserwerowego, opartego na API, wielofundamentowego elementu konstrukcyjnego modelu. Ponieważ zamierzamy wielokrotnie korzystać z LLM w ramach tego samego przypadku użycia, w zależności od typu zadania, możemy wybrać model, który jest najbardziej optymalny dla konkretnego zadania, czy to generowania, sprawdzania poprawności czy podsumowania SQL.
LangChain
LangChain to platforma integracji i orkiestracji typu open source z zestawem gotowych modułów (we/wy, pobieranie, łańcuchy i agenci), których można używać do integracji i orkiestracji zadań pomiędzy FM, źródłami danych i narzędziami. Framework ułatwia tworzenie generatywnych aplikacji AI, które wymagają koordynacji wielu kroków w celu uzyskania pożądanych wyników, bez konieczności pisania kodu od zera. LangChain obsługuje Amazon Bedrock jako wielofundamentowy model API.
W przypadku zastosowania Q4 używamy LangChain do koordynowania i orkiestrowania zadań w naszym przepływie pracy, w tym do łączenia się ze źródłami danych i LLM. Takie podejście uprościło nasz kod, ponieważ możemy wykorzystać istniejące moduły LangChain.
Łańcuch bazy danych SQL
Łańcuch bazy danych SQL to łańcuch LangChain, który można zaimportować z langchain_experimental. SLDatabaseChain ułatwia tworzenie, wdrażanie i uruchamianie zapytań SQL, wykorzystując efektywne konwersje i implementacje tekstu na SQL.
W naszym przypadku używamy SQLDatabaseChain do generowania SQL, upraszczając i koordynując interakcje pomiędzy bazą danych a LLM.
Zbiór danych
Nasz ustrukturyzowany zbiór danych może znajdować się w bazie danych SQL, jeziorze danych lub hurtowni danych, o ile obsługujemy SQL. W naszym rozwiązaniu możemy zastosować dowolny typ zbioru danych z obsługą SQL; należy to wyabstrahować z rozwiązania i nie powinno ono w żaden sposób zmieniać rozwiązania.
Szczegóły dotyczące wdrożenia
Teraz, gdy zbadaliśmy podejście do rozwiązania, komponenty rozwiązania, wybór technologii i narzędzi, możemy złożyć elementy w całość. Poniższy diagram przedstawia kompleksowe rozwiązanie.
Przyjrzyjmy się szczegółom wdrożenia i przebiegowi procesu.
Wygeneruj zapytanie SQL
Aby uprościć kodowanie, używamy istniejących frameworków. Używamy LangChain jako platformy orkiestracyjnej. Zaczynamy od etapu wejściowego, gdzie otrzymujemy pytanie użytkownika w języku naturalnym.
Na tym pierwszym etapie pobieramy te dane wejściowe i generujemy równoważny kod SQL, który możemy uruchomić w bazie danych w celu wyodrębnienia kontekstu. Aby wygenerować SQL, używamy SQLDatabaseChain, który opiera się na Amazon Bedrock w celu uzyskania dostępu do pożądanego LLM. Dzięki Amazon Bedrock, korzystając z jednego API, uzyskujemy dostęp do wielu bazowych LLM i możemy wybrać właściwy dla każdej naszej podróży LLM. Najpierw nawiązujemy połączenie z bazą danych i pobieramy wymagany schemat tabeli wraz z kilkoma przykładowymi wierszami z tabel, z których zamierzamy skorzystać.
W naszych testach odkryliśmy, że 2–5 wierszy danych w tabeli wystarczy, aby zapewnić modelowi wystarczającą ilość informacji bez niepotrzebnego dodawania zbytniego narzutu. Trzy wiersze wystarczyły, aby zapewnić kontekst, bez przytłaczania modelu zbyt dużą ilością danych wejściowych. W naszym przypadku użycia zaczęliśmy od Anthropic Klaudiusz V2. Model ten znany jest z zaawansowanego rozumowania i artykułowania odpowiedzi kontekstowych, jeśli zapewniony jest odpowiedni kontekst i instrukcje. W ramach instrukcji możemy dołączyć więcej szczegółów wyjaśniających do LLM. Możemy na przykład opisać tę kolumnę Comp_NAME
oznacza nazwę firmy. Możemy teraz skonstruować zachętę, łącząc pytanie użytkownika w niezmienionej postaci, schemat bazy danych, trzy przykładowe wiersze z tabeli, której zamierzamy użyć, oraz zestaw instrukcji umożliwiających wygenerowanie wymaganego kodu SQL w czystym formacie SQL bez komentarzy i dodatków.
Wszystkie połączone elementy wejściowe są traktowane jako zachęta do wprowadzania danych modelu. Dobrze zaprojektowany monit wejściowy dostosowany do preferowanej składni modelu ma duży wpływ zarówno na jakość, jak i wydajność wyników. Wybór modelu do konkretnego zadania jest również ważny, nie tylko dlatego, że wpływa na jakość wydruku, ale także dlatego, że ma wpływ na koszty i wydajność.
Wybór modelu oraz szybką inżynierię i optymalizację omówimy w dalszej części tego posta, ale warto zauważyć, że na etapie generowania zapytania zauważyliśmy, że Claude Instant był w stanie uzyskać porównywalne wyniki, zwłaszcza gdy pytanie użytkownika było dobrze sformułowane i nie było tak skomplikowane. Jednak Claude V2 zapewniał lepsze wyniki nawet przy bardziej złożonym i pośrednim udziale użytkownika. Dowiedzieliśmy się tego, chociaż w niektórych przypadkach Klaudiusz Natychmiastowy może zapewnić wystarczającą dokładność przy lepszym opóźnieniu i cenie, nasz przypadek generowania zapytań był lepiej dostosowany do Claude V2.
Sprawdź zapytanie SQL
Naszym następnym krokiem jest sprawdzenie, czy LLM pomyślnie wygenerował właściwą składnię zapytania i czy zapytanie ma sens kontekstowy, biorąc pod uwagę schematy bazy danych i dostarczone przykładowe wiersze. Na tym etapie weryfikacji możemy powrócić do natywnej walidacji zapytań w SQLDatabaseChain lub możemy przeprowadzić drugą podróż do LLM, obejmującą wygenerowane zapytanie wraz z instrukcją sprawdzania poprawności.
Jeśli użyjemy LLM na etapie walidacji, możemy użyć tego samego LLM co poprzednio (Claude V2) lub mniejszego, bardziej wydajnego LLM do prostszego zadania, takiego jak Claude Instant. Ponieważ używamy Amazon Bedrock, powinna to być bardzo prosta regulacja. Korzystając z tego samego API, możemy zmienić nazwę modelu w naszym wywołaniu API, które zajmie się zmianą. Należy zauważyć, że w większości przypadków mniejszy LLM może zapewnić lepszą wydajność zarówno pod względem kosztów, jak i opóźnień, i należy go wziąć pod uwagę — pod warunkiem uzyskania pożądanej dokładności. W naszym przypadku testy wykazały, że wygenerowane zapytanie jest niezmiennie dokładne i ma odpowiednią składnię. Wiedząc o tym, mogliśmy pominąć ten etap weryfikacji i zaoszczędzić na opóźnieniach i kosztach.
Uruchom zapytanie SQL
Teraz, gdy mamy zweryfikowane zapytanie SQL, możemy uruchomić zapytanie SQL w bazie danych i pobrać odpowiedni kontekst. To powinien być prosty krok.
Bierzemy wygenerowany kontekst, dostarczamy go wybranemu przez nas LLM wraz z początkowym pytaniem użytkownika i instrukcją, a następnie prosimy model o wygenerowanie kontekstowego i jasnego podsumowania. Następnie przedstawiamy użytkownikowi wygenerowane podsumowanie jako odpowiedź na początkowe pytanie, wszystko dopasowane do kontekstu wyodrębnionego z naszego zbioru danych.
W przypadku LLM biorącego udział w etapie podsumowania możemy użyć Titan Text Express lub Claude Instant. Obydwa stanowią dobre opcje zadania podsumowującego.
Integracja aplikacji
Funkcja chatbota z pytaniami i odpowiedziami jest jedną z usług sztucznej inteligencji Q4. Aby zapewnić modułowość i skalowalność, Q4 buduje usługi AI w postaci mikrousług, które są dostępne dla aplikacji Q4 za pośrednictwem interfejsów API. To podejście oparte na API umożliwia bezproblemową integrację z ekosystemem platformy Q4 i ułatwia eksponowanie możliwości usług AI pełnemu zestawowi aplikacji platformy.
Głównym celem usług sztucznej inteligencji jest zapewnienie prostych możliwości pobierania danych z dowolnego publicznego lub zastrzeżonego źródła danych przy użyciu języka naturalnego jako danych wejściowych. Ponadto usługi sztucznej inteligencji zapewniają dodatkowe warstwy abstrakcji, aby zapewnić spełnienie wymagań funkcjonalnych i niefunkcjonalnych, takich jak prywatność i bezpieczeństwo danych. Poniższy diagram przedstawia koncepcję integracji.
Wyzwania związane z wdrażaniem
Oprócz wyzwań związanych z charakterem ustrukturyzowanego, numerycznego zbioru danych, o których mówiliśmy wcześniej, w czwartym kwartale stanął przed szeregiem innych wyzwań związanych z wdrażaniem, którymi należało się zająć.
Wybór i wydajność LLM
Wybór odpowiedniego LLM do zadania jest kluczowy, ponieważ ma bezpośredni wpływ na jakość wyników, a także wydajność (opóźnienie w obie strony). Oto kilka czynników wpływających na proces selekcji LLM:
- Rodzaj LLM – Sposób, w jaki zaprojektowano FM i początkowe dane, na których model został wstępnie przeszkolony, określa rodzaje zadań, w których LLM będzie dobry i jak dobry będzie. Na przykład tekstowy LLM byłby dobry w generowaniu i podsumowywaniu tekstu, podczas gdy model tekstu na obraz lub obraz na tekst byłby bardziej nastawiony na analizę obrazu i zadania generowania.
- Rozmiar LLM – Rozmiary FM są mierzone liczbą parametrów modelu, jakie ma dany model, zazwyczaj w miliardach w przypadku nowoczesnych LLM. Zazwyczaj im większy model, tym droższe jest początkowe szkolenie lub późniejsze dostrajanie. Z drugiej strony, ogólnie rzecz biorąc, w przypadku tej samej architektury modelu, im większy jest model, tym oczekujemy, że będzie mądrzejszy w wykonywaniu zadań, do których jest nastawiony.
- Wydajność LLM – Zazwyczaj im większy model, tym więcej czasu zajmuje wygenerowanie danych wyjściowych, zakładając, że używasz tych samych parametrów obliczeniowych i we/wy (rozmiar podpowiedzi i rozmiaru wyjściowego). Ponadto w przypadku modelu o tym samym rozmiarze na wydajność duży wpływ ma stopień optymalizacji podpowiedzi, rozmiar tokenów we/wy oraz przejrzystość i składnia podpowiedzi. Dobrze zaprojektowany monit wraz ze zoptymalizowanym rozmiarem tokena we/wy może skrócić czas reakcji modelu.
Dlatego optymalizując swoje zadanie, weź pod uwagę następujące najlepsze praktyki:
- Wybierz model odpowiedni do wykonywanego zadania
- Wybierz najmniejszy rozmiar modelu, który może zapewnić dokładność, której szukasz
- Zoptymalizuj strukturę podpowiedzi i opisz instrukcje tak szczegółowo, jak to możliwe, w sposób łatwy do zrozumienia dla modelu
- Użyj najmniejszego monitu wejściowego, który może zapewnić wystarczającą liczbę instrukcji i kontekstu, aby uzyskać oczekiwany poziom dokładności
- Ogranicz rozmiar wyjściowy do najmniejszego rozmiaru, który może być dla Ciebie znaczący i który spełni Twoje wymagania wyjściowe
Biorąc pod uwagę wybór modelu i czynniki optymalizacji wydajności, przystąpiliśmy do optymalizacji naszego przypadku użycia generowania SQL. Po kilku testach zauważyliśmy, że pod warunkiem, że mamy odpowiedni kontekst i instrukcje, Claude Instant, z tymi samymi danymi, wygeneruje SQL o porównywalnej jakości co Claude V2, przy znacznie lepszej wydajności i cenie. Dzieje się tak, gdy dane wejściowe użytkownika są bardziej bezpośrednie i prostsze. Aby uzyskać bardziej wyrafinowane dane wejściowe, niezbędny był Claude V2, aby uzyskać pożądaną dokładność.
Zastosowanie tej samej logiki w zadaniu podsumowującym doprowadziło nas do wniosku, że użycie Claude Instant lub Titan Text Express zapewni wymaganą dokładność przy znacznie lepszym punkcie wydajności, niż gdybyśmy użyli większego modelu, takiego jak Claude V2. Titan Text Expressed oferował również lepszy stosunek ceny do jakości, jak wspomnieliśmy wcześniej.
Wyzwanie orkiestracyjne
Zdaliśmy sobie sprawę, że jest wiele do zaaranżowania, zanim będziemy mogli uzyskać znaczącą odpowiedź wyjściową na pytanie użytkownika. Jak pokazano w przeglądzie rozwiązania, proces obejmował wiele podróży do bazy danych i wiele podróży LLM, które są ze sobą powiązane. Gdybyśmy mieli budować od zera, musielibyśmy dokonać znacznych inwestycji w niezróżnicowane podnoszenie ciężkich przedmiotów, aby przygotować podstawowy kod. Szybko zaczęliśmy używać LangChain jako platformy do orkiestracji, wykorzystując siłę społeczności open source i ponownie wykorzystując istniejące moduły bez wymyślania koła na nowo.
Wyzwanie SQL
Zdaliśmy sobie również sprawę, że generowanie kodu SQL nie jest tak proste, jak mechanizmy wyodrębniania kontekstu, takie jak wyszukiwanie semantyczne lub korzystanie z osadzania. Musimy najpierw uzyskać schemat bazy danych i kilka przykładowych wierszy, aby uwzględnić je w naszym znaku zachęty do LLM. Istnieje również etap sprawdzania poprawności SQL, podczas którego musieliśmy wejść w interakcję zarówno z bazą danych, jak i LLM. SQLDatabaseChain był oczywistym wyborem narzędzia. Ponieważ jest to część LangChain, adaptacja była prosta, a teraz możemy zarządzać generowaniem i weryfikacją SQL przy pomocy łańcucha, minimalizując ilość pracy, którą musieliśmy wykonać.
Wyzwania związane z wydajnością
Dzięki zastosowaniu Claude V2 i po odpowiedniej szybkiej inżynierii (którą omówimy w następnej sekcji) byliśmy w stanie stworzyć wysokiej jakości SQL. Biorąc pod uwagę jakość wygenerowanego kodu SQL, zaczęliśmy sprawdzać, jaką wartość faktycznie dodaje etap walidacji. Po dalszej analizie wyników stało się jasne, że jakość wygenerowanego kodu SQL była niezmiennie dokładna w sposób, który sprawiał, że stosunek kosztów do korzyści dodania etapu sprawdzania poprawności SQL był niekorzystny. Ostatecznie wyeliminowaliśmy etap sprawdzania poprawności SQL bez negatywnego wpływu na jakość naszych wyników i skróciliśmy czas trwania walidacji SQL w obie strony.
Oprócz optymalizacji pod kątem bardziej ekonomicznego i wydajnego LLM na etapie podsumowania, mogliśmy użyć Titan Text Express, aby uzyskać lepszą wydajność i opłacalność.
Dalsza optymalizacja wydajności obejmowała dostrojenie procesu generowania zapytań przy użyciu wydajnych technik inżynieryjnych. Zamiast zapewniać mnóstwo tokenów, skupiono się na zapewnieniu jak najmniejszej liczby tokenów wejściowych, z odpowiednią składnią, którą model ma rozumieć, oraz z minimalnym, ale optymalnym zestawem instrukcji. Omówimy to szerzej w następnej sekcji — jest to ważny temat, który można zastosować nie tylko tutaj, ale także w innych przypadkach użycia.
Szybka inżynieria i optymalizacja
Możesz dostosować Claude na Amazon Bedrock do różnych zastosowań biznesowych, jeśli zastosuje się odpowiednie techniki szybkiego inżynierii. Claude działa głównie jako asystent konwersacyjny, który wykorzystuje format człowiek/asystent. Claude został przeszkolony w zakresie wypełniania tekstu na potrzeby roli asystenta. Biorąc pod uwagę instrukcje i wymagane szybkie uzupełnienia, możemy zoptymalizować nasze podpowiedzi dla Claude'a, korzystając z kilku technik.
Zaczynamy od odpowiednio sformatowanego szablonu podpowiedzi, który zapewnia prawidłowe uzupełnienie, a następnie możemy dalej optymalizować odpowiedzi, eksperymentując z podpowiedziami z różnymi zestawami danych wejściowych, które są reprezentatywne dla danych ze świata rzeczywistego. Zaleca się uzyskanie wielu danych wejściowych podczas opracowywania szablonu podpowiedzi. Można także użyć oddzielnych zestawów szybkich danych programistycznych i danych testowych.
Innym sposobem optymalizacji reakcji Claude'a jest eksperymentowanie i powtarzanie poprzez dodawanie reguł, instrukcji i przydatne optymalizacje. Dzięki tym optymalizacjom możesz przeglądać różne typy uzupełnień, na przykład mówiąc Claude’owi, aby wspomniał „nie wiem”, aby zapobiec halucynacjom, myśląc krok po kroku, stosując szybkie łączenie w łańcuchy, dając miejsce na „myślenie” podczas generowania odpowiedzi oraz ponowne sprawdzanie zrozumienia i dokładności.
Skorzystajmy z naszego zadania generowania zapytań i omówmy niektóre techniki, których użyliśmy do optymalizacji naszego podpowiedzi. Było kilka kluczowych elementów, które przyniosły korzyści naszym wysiłkom związanym z generowaniem zapytań:
- Używanie właściwej składni człowieka/asystenta
- Używanie tagów XML (Claude szanuje i rozumie tagi XML)
- Dodanie jasnych instrukcji dla modelu, aby zapobiec halucynacji
Poniższy ogólny przykład pokazuje, jak użyliśmy składni człowiek/asystent, zastosowaliśmy znaczniki XML i dodaliśmy instrukcje, aby ograniczyć dane wyjściowe do języka SQL i poinstruować model, aby powiedział „przepraszam, nie mogę pomóc”, jeśli nie może wygenerować odpowiedniego kodu SQL . Tagi XML zostały użyte do uformowania instrukcji, dodatkowych wskazówek, schematu bazy danych, dodatkowych objaśnień tabel i przykładowych wierszy.
Ostateczne działające rozwiązanie
Po rozwiązaniu wszystkich problemów zidentyfikowanych podczas weryfikacji koncepcji spełniliśmy wszystkie wymagania dotyczące rozwiązania. Q4 był zadowolony z jakości kodu SQL generowanego przez LLM. Dotyczy to prostych zadań, które wymagały jedynie klauzuli WHERE do filtrowania danych, a także bardziej złożonych zadań, które wymagały agregacji kontekstowej za pomocą funkcji GROUP BY i funkcji matematycznych. Całościowe opóźnienie całego rozwiązania mieściło się w zakresie zdefiniowanym jako akceptowalny w danym przypadku użycia — jednocyfrowych sekundach. Wszystko to dzięki wyborowi optymalnego LLM na każdym etapie, odpowiedniej szybkiej inżynierii, wyeliminowaniu etapu weryfikacji SQL i zastosowaniu wydajnego LLM na etapie podsumowania (Titan Text Express lub Claude Instant).
Warto zauważyć, że korzystanie z Amazon Bedrock jako w pełni zarządzanej usługi i możliwość dostępu do pakietu LLM za pośrednictwem tego samego API pozwoliło na eksperymentowanie i płynne przełączanie pomiędzy LLM poprzez zmianę nazwy modelu w wywołaniu API. Dzięki takiemu poziomowi elastyczności firma Q4 była w stanie wybrać najskuteczniejszy LLM dla każdego wywołania LLM w oparciu o charakter zadania, niezależnie od tego, czy było to generowanie zapytań, weryfikacja czy podsumowanie.
Wnioski
Nie ma jednego rozwiązania, które pasowałoby do wszystkich przypadków użycia. W podejściu RAG jakość wyników w dużym stopniu zależy od zapewnienia odpowiedniego kontekstu. Wyodrębnienie odpowiedniego kontekstu jest kluczowe, a każdy zbiór danych jest inny i ma swoje unikalne cechy.
W tym poście wykazaliśmy, że w przypadku numerycznych i ustrukturyzowanych zbiorów danych użycie SQL do wyodrębnienia kontekstu używanego do powiększania może prowadzić do korzystniejszych wyników. Pokazaliśmy również, że frameworki takie jak LangChain mogą zminimalizować wysiłek związany z kodowaniem. Dodatkowo omówiliśmy potrzebę możliwości przełączania między LLM w tym samym przypadku użycia, aby osiągnąć najbardziej optymalną dokładność, wydajność i koszt. Na koniec podkreśliliśmy, że Amazon Bedrock, będący bezserwerowy i posiadający pod maską różnorodne LLM, zapewnia elastyczność niezbędną do tworzenia bezpiecznych, wydajnych i zoptymalizowanych kosztowo aplikacji przy jak najmniejszym obciążeniu.
Rozpocznij swoją podróż w kierunku tworzenia generatywnych aplikacji obsługujących sztuczną inteligencję od zidentyfikowania przypadku użycia wartościowego dla Twojej firmy. Generowanie SQL, jak przekonał się zespół z czwartego kwartału, może zmienić zasady gry w tworzeniu inteligentnych aplikacji, które integrują się z magazynami danych, odblokowując potencjał przychodów.
O autorach
Pogromca Solimana jest starszym architektem rozwiązań w AWS. Pomaga klientom niezależnych dostawców oprogramowania (ISV) wprowadzać innowacje, budować i skalować na platformie AWS. Posiada ponad dwudziestoletnie doświadczenie w branży w zakresie doradztwa, szkoleń i usług profesjonalnych. Jest twórcą wielu patentów z trzema przyznanymi patentami, a jego doświadczenie obejmuje wiele dziedzin technologii, w tym telekomunikację, sieci, integrację aplikacji, sztuczną inteligencję i wdrażanie rozwiązań w chmurze. Specjalizuje się w sieciach AWS i ma głęboką pasję do uczenia maszynowego, sztucznej inteligencji i generatywnej sztucznej inteligencji.
Mani Chanuja jest Tech Lead – Generative AI Specialists, autorką książki – Applied Machine Learning and High Performance Computing on AWS oraz członkiem Rady Dyrektorów Fundacji ds. Kobiet w Edukacji Produkcyjnej. Prowadzi projekty uczenia maszynowego (ML) w różnych dziedzinach, takich jak widzenie komputerowe, przetwarzanie języka naturalnego i generatywna sztuczna inteligencja. Pomaga klientom budować, szkolić i wdrażać duże modele uczenia maszynowego na dużą skalę. Występuje na konferencjach wewnętrznych i zewnętrznych takich jak: Invent, Women in Manufacturing West, webinarach na YouTube i GHC 23. W wolnym czasie lubi długie biegi po plaży.
Stanisław Jeszczenko jest architektem oprogramowania w Q4 Inc.. Posiada ponad dziesięcioletnie doświadczenie w branży w zakresie tworzenia oprogramowania i architektury systemów. Jego różnorodne doświadczenie, obejmujące role takie jak kierownik techniczny i starszy programista Full Stack, wzmacnia jego wkład w rozwój innowacyjności platformy Q4. Stanislav jest zaangażowany w wprowadzanie innowacji technicznych i kształtowanie strategicznych rozwiązań w tej dziedzinie.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoData.Network Pionowe generatywne AI. Wzmocnij się. Dostęp tutaj.
- PlatoAiStream. Inteligencja Web3. Wiedza wzmocniona. Dostęp tutaj.
- PlatonESG. Węgiel Czysta technologia, Energia, Środowisko, Słoneczny, Gospodarowanie odpadami. Dostęp tutaj.
- Platon Zdrowie. Inteligencja w zakresie biotechnologii i badań klinicznych. Dostęp tutaj.
- Źródło: https://aws.amazon.com/blogs/machine-learning/how-q4-inc-used-amazon-bedrock-rag-and-sqldatabasechain-to-address-numerical-and-structured-dataset-challenges-building-their-qa-chatbot/
- :ma
- :Jest
- :nie
- :Gdzie
- $W GÓRĘ
- 100
- 118
- 125
- 15%
- 23
- 7
- a
- zdolności
- zdolność
- Zdolny
- abstrakcja
- obfitość
- do przyjęcia
- dostęp
- dostępny
- Konto
- precyzja
- dokładny
- Osiągać
- w poprzek
- Dzieje Apostolskie
- faktycznie
- przystosować
- w dodatku
- dodanie
- dodatek
- Dodatkowy
- do tego
- wzbogacenie
- adres
- zaadresowany
- Regulacja
- zaawansowany
- postęp
- Korzyść
- Po
- przed
- agentów
- agregat
- AI
- Usługi AI
- przypadki użycia ai
- AI / ML
- wymierzony
- wyrównać
- wyrównany
- Wszystkie kategorie
- dopuszczać
- dozwolony
- wzdłuż
- również
- Chociaż
- am
- Amazonka
- Amazon Web Services
- ilość
- kwoty
- an
- analiza
- analitycy
- analityka
- w czasie rzeczywistym sprawiają,
- Analizując
- i
- Inne
- odpowiedź
- odpowiedzi
- Antropiczny
- każdy
- wszystko
- api
- Pszczoła
- odpowiedni
- Zastosowanie
- aplikacje
- stosowany
- podejście
- architektura
- SĄ
- AS
- zapytać
- Aktywa
- Asystent
- wspiera
- asortyment
- At
- zwiększać
- zwiększona
- autor
- dostępny
- świadomy
- AWS
- z powrotem
- tło
- na podstawie
- podstawowy
- BE
- Plaża
- stał
- bo
- być
- zanim
- Początek
- zachowanie
- jest
- Uważa
- korzystny
- BEST
- Najlepsze praktyki
- Ulepsz Swój
- pomiędzy
- miliardy
- Blokować
- Bloki
- deska
- Rada dyrektorów
- książka
- Bot
- obie
- szerokość
- przerwa
- szeroki
- budować
- Budowanie
- Buduje
- wybudowany
- biznes
- ale
- by
- wezwanie
- oprawa ołowiana witrażu
- CAN
- Może uzyskać
- możliwości
- zdolność
- kapitał
- Rynki kapitałowe
- który
- walizka
- Etui
- łańcuch
- więzy
- wyzwanie
- wyzwania
- budowanie wyzwań
- zmiana
- Changer
- wymiana pieniędzy
- Charakterystyka
- chatbot
- nasze chatboty
- wybór
- Dodaj
- Wybierając
- klarowność
- kleń
- jasny
- bliższy
- Chmura
- kod
- Kodowanie
- Kolumna
- połączony
- łączenie
- jak
- komentarze
- komercyjnie
- komunikować
- Komunikacja
- społeczność
- Firmy
- sukcesy firma
- porównywalny
- ukończenia
- kompleks
- kompleksowość
- spełnienie
- składniki
- zrozumieć
- obliczać
- komputer
- Wizja komputerowa
- computing
- pojęcie
- stwierdza,
- zawarta
- konkluzja
- przeprowadzone
- konferencje
- Skontaktuj się
- Podłączanie
- połączenie
- Rozważać
- za
- wobec
- konsekwentnie
- Składający się
- składa się
- skonstruować
- consulting
- zawartość
- kontekst
- kontekstowy
- kontynuować
- bez przerwy
- składki
- Konwencjonalny
- konwersacyjny
- konwersje
- przeliczone
- koordynacja
- rdzeń
- skorygowania
- Koszty:
- mógłby
- Stwórz
- krytyczny
- CRM
- istotny
- klient
- Klientów
- codziennie
- dane
- Jezioro danych
- punkty danych
- prywatność danych
- Prywatność i bezpieczeństwo danych
- nauka danych
- sterowane danymi
- Baza danych
- zbiory danych
- Daty
- dekada
- lat
- postanowiła
- Decydowanie
- dedykowane
- uważane
- zdefiniowane
- Kreowanie
- wykazać
- demonstruje
- zależy
- rozwijać
- wdrożenia
- opisać
- Opisujące
- życzenia
- szczegółowe
- detale
- określa
- Deweloper
- rozwijanie
- oprogramowania
- różne
- kierować
- bezpośrednio
- Dyrektorzy
- dyskutować
- omówione
- nurkować
- inny
- do
- domena
- domeny
- nie
- podwójne sprawdzanie
- na dół
- jazdy
- z powodu
- podczas
- dynamiczny
- każdy
- Wcześniej
- łatwo
- Ekosystem
- Edukacja
- Efektywne
- efektywność
- wydajny
- skutecznie
- wysiłek
- starania
- bądź
- Elementy
- kwalifikowalność
- eliminując
- wschodzących
- zatrudniony
- Umożliwia
- zakończenia
- koniec końców
- zakończony
- zobowiązany
- zaręczynowy
- Inżynieria
- dość
- zapewnić
- wyposażony
- Równoważny
- ESG
- szczególnie
- zapewniają
- oceny
- ewaluację
- Parzyste
- wydarzenia
- Każdy
- przykład
- przykłady
- Przede wszystkim system został opracowany
- oczekiwać
- spodziewany
- drogi
- doświadczenie
- eksperyment
- eksperymenty
- ekspert
- ekspertyza
- zbadane
- ekspresowy
- wyrażone
- rozsuwalny
- zewnętrzny
- wyciąg
- ekstrakcja
- w obliczu
- ułatwia
- Czynniki
- w szybkim tempie
- korzystny
- wykonalny
- kilka
- pole
- Łąka
- wypełniać
- filtrować
- finał
- W końcu
- budżetowy
- dane finansowe
- i terminów, a
- Elastyczność
- pływ
- Skupiać
- obserwuj
- następujący
- W razie zamówieenia projektu
- format
- Naprzód
- wychowanie
- znaleziono
- Fundacja
- FRAME
- Framework
- Ramy
- Darmowy
- od
- pełny
- Pełny stos
- w pełni
- funkcjonalny
- Funkcje
- dalej
- gra
- game-changer
- `RODO
- Zgodność z PKB
- nastawiony
- Ogólne
- Generować
- wygenerowane
- generuje
- generujący
- generacja
- generatywny
- generatywna sztuczna inteligencja
- otrzymać
- miejsce
- Dać
- dany
- daje
- Dający
- Go
- cel
- Gole
- dobry
- udzielony
- wspaniały
- Zarządzanie
- Rozwój
- miał
- ręka
- Zaoszczędzić
- Have
- mający
- he
- z siedzibą
- ciężki
- ciężkie podnoszenie
- pomoc
- pomaga
- jej
- tutaj
- Wysoki
- wydajny
- wysokiej jakości
- wyższy
- Najwyższa
- Podświetlony
- pasemka
- wysoko
- wskazówki
- jego
- historia
- kaptur
- W jaki sposób
- Jednak
- HTTPS
- człowiek
- czytelne dla człowieka
- i
- pomysł
- zidentyfikowane
- identyfikacja
- if
- obraz
- Rezultat
- wpływ
- wpływ
- Oddziaływania
- wdrożenia
- realizacja
- wdrożenia
- realizowane
- implikacje
- ważny
- podnieść
- in
- W innych
- Inc
- zawierać
- Włącznie z
- Zwiększać
- przyrostowe
- niezależny
- osób
- przemysł
- Informacja
- Infrastruktura
- początkowy
- początkowo
- wprowadzać innowacje
- Innowacja
- wkład
- Wejścia
- natychmiastowy
- instytucje
- instrukcje
- integrować
- integracja
- Zamierzam
- interakcji
- Interakcje
- wewnętrzny
- splecione
- najnowszych
- intuicyjny
- inwestycja
- inwestor
- Inwestorzy
- zaangażowany
- emitenci
- isv
- IT
- JEGO
- podróż
- jpg
- właśnie
- Trzymać
- Klawisz
- Wiedząc
- wiedza
- znany
- Labs
- jezioro
- krajobraz
- język
- duży
- większe
- Nazwisko
- w końcu
- Utajenie
- później
- nioski
- prowadzić
- prowadzący
- Wyprowadzenia
- dowiedziałem
- nauka
- najmniej
- Doprowadziło
- Lekcje
- Lessons Learned
- poziom
- Modernizacja
- lubić
- lubi
- LLM
- logika
- Londyn
- długo
- Popatrz
- poszukuje
- Partia
- maszyna
- uczenie maszynowe
- zrobiony
- Główny
- głównie
- Mainstream
- utrzymać
- Utrzymywanie
- robić
- WYKONUJE
- zarządzanie
- zarządzane
- i konserwacjami
- produkcja
- wiele
- rynek
- Analiza rynku
- Dane rynkowe
- rynki
- dopasowane
- matematyczny
- Może..
- wymowny
- Oznaczało
- Mechanizmy
- Poznaj nasz
- członek
- spełnione
- Meta
- Metadane
- metoda
- Metodologia
- mikroserwisy
- minimalny
- minimalizowanie
- mieszać
- ML
- model
- modele
- Nowoczesne technologie
- Moduły
- jeszcze
- większość
- przeważnie
- przeniesienie
- dużo
- wielo
- wielokrotność
- Nazwa
- rodzimy
- Naturalny
- Przetwarzanie języka naturalnego
- Natura
- niezbędny
- Potrzebować
- potrzebne
- ujemnie
- sieci
- Nowości
- I Love New York
- Następny
- Nie
- noty
- Zauważając
- już dziś
- numer
- z naszej
- cel
- oczywista
- of
- poza
- oferowany
- Oferty
- Oficerowie
- biura
- często
- on
- ONE
- tylko
- koncepcja
- open source
- Optymalny
- optymalizacja
- Optymalizacja
- zoptymalizowane
- optymalizacji
- Opcje
- or
- orkiestracja
- orkiestracja
- zamówienie
- oryginalny
- Inne
- ludzkiej,
- wydajność
- koniec
- ogólny
- przegląd
- przytłaczający
- własny
- własność
- własność
- parametry
- część
- szczególny
- minęło
- pasja
- patent
- Patenty
- ścieżka
- wykonać
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- wykonywania
- wybierać
- sztuk
- Platforma
- plato
- Analiza danych Platona
- PlatoDane
- Grać
- punkt
- zwrotnica
- pozytywny
- możliwy
- Post
- potencjał
- power
- uprawnienia
- praktyki
- Korzystny
- teraźniejszość
- przedstawione
- zapobiec
- Cena
- Zasady
- prywatność
- Prywatność i bezpieczeństwo
- wygląda tak
- przetwarzanie
- produkować
- Wytworzony
- Produkty
- profesjonalny
- głęboki
- projekt
- projektowanie
- monity
- dowód
- dowód koncepcji
- właściwy
- własność
- okazały
- zapewniać
- pod warunkiem,
- zapewnia
- że
- publiczny
- spółki publiczne
- publicznie
- cel
- położyć
- Q & A
- jakość
- zapytania
- pytanie
- szybko
- cytaty
- Ranking
- raczej
- RE
- gotowy
- Prawdziwy świat
- realizowany
- otrzymać
- Zalecana
- dokumentacja
- odwoływanie się
- regulowane
- relacje
- związek
- Raporty
- przedstawiciel
- reprezentowanie
- reprezentuje
- wymagać
- wymagany
- wymagania
- Zasób
- szanowany
- wyrazy szacunku
- odpowiedź
- Odpowiedzi
- ograniczać
- Efekt
- dochód
- przywrócić
- recenzowanie
- prawo
- ryzyko
- Rola
- role
- Pokój
- okrągły
- reguły
- run
- działa
- taki sam
- zadowolony
- zadowolony z
- Zapisz
- powiedzieć
- Skalowalność
- Skala
- nauka
- zadraśnięcie
- bezszwowy
- płynnie
- Szukaj
- druga
- sekund
- Sekcja
- bezpieczne
- bezpieczeństwo
- widzieć
- wybór
- Sprzedający
- wysłać
- senior
- rozsądek
- oddzielny
- Serie
- Bezserwerowe
- usługa
- Usługi
- zestaw
- Zestawy
- kilka
- modelacja
- akcjonariusz
- Akcjonariusze
- ona
- powinien
- pokazał
- pokazane
- Targi
- znaczący
- Prosty
- prostsze
- uproszczony
- upraszczać
- upraszczanie
- pojedynczy
- Rozmiar
- rozmiary
- mniejszy
- mądry
- mądrzejszy
- Tworzenie
- rozwoju oprogramowania
- rozwiązanie
- Rozwiązania
- kilka
- wyrafinowany
- Źródło
- Źródła
- napięcie
- rozpiętości
- Mówi
- Specjaliści
- specjalizuje się
- specyficzny
- swoiście
- Stabilność
- stos
- STAGE
- pula
- stoisko
- stojaki
- początek
- rozpoczęty
- Startowy
- Zestawienie sprzedaży
- pobyt
- Ewolucja krok po kroku
- Cel
- stany magazynowe
- Giełda Papierów Wartościowych
- przechowywany
- sklep
- bezpośredni
- Strategiczny
- Struktura
- zbudowany
- Następnie
- sukces
- Z powodzeniem
- taki
- wystarczający
- odpowiedni
- apartament
- streszczać
- PODSUMOWANIE
- wsparcie
- podpory
- inwigilacja
- Przełącznik
- składnia
- system
- stół
- dostosowane
- Brać
- Zadania
- trwa
- biorąc
- Zadanie
- zadania
- zespół
- tech
- Techniczny
- Techniki
- Technologia
- Telecom
- mówi
- szablon
- test
- Testowanie
- Testy
- XNUMX
- niż
- Podziękowania
- że
- Połączenia
- Stolica
- ich
- następnie
- Tam.
- Te
- one
- Myślący
- to
- trzy
- Przez
- poprzez
- czas
- Szereg czasowy
- czasy
- tytan
- do
- dzisiaj
- razem
- żeton
- Żetony
- także
- narzędzie
- narzędzia
- aktualny
- Toronto
- w kierunku
- Pociąg
- przeszkolony
- Trening
- transakcja
- transakcje
- transformatorowy
- wycieczka
- prawdziwy
- Zaufaj
- SKRĘCAĆ
- drugiej
- rodzaj
- typy
- zazwyczaj
- niezdolny
- dla
- zasadniczy
- zrozumieć
- zrozumienie
- rozumie
- zrozumiany
- wyjątkowy
- odblokowywanie
- niepotrzebny
- us
- posługiwać się
- przypadek użycia
- używany
- Użytkownik
- łatwy w obsłudze
- za pomocą
- wykorzystuje
- ważny
- uprawomocnienie
- wartość
- różnorodność
- różnorodny
- sprzedawca
- Weryfikacja
- zweryfikowana
- zweryfikować
- początku.
- wykonalne
- Zobacz i wysłuchaj
- Wirtualny
- wizja
- spacer
- poszukiwany
- była
- Droga..
- we
- sieć
- usługi internetowe
- Seminaria
- Strona internetowa
- DOBRZE
- poszedł
- były
- Zachód
- Co
- Koło
- jeśli chodzi o komunikację i motywację
- natomiast
- który
- Podczas
- będzie
- w
- w ciągu
- bez
- Kobieta
- słowa
- Praca
- pracował
- workflow
- pracujący
- wartość
- by
- napisać
- pisać kod
- XML
- jeszcze
- york
- You
- Twój
- youtube
- zefirnet