Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano typowe obszary projektowania i czynniki, które należy wziąć pod uwagę podczas podejmowania decyzji dotyczących technologii i podejścia podczas tworzenia aplikacji, która ma funkcje sztucznej inteligencji. Wskazówki dotyczą zarówno tradycyjnych obciążeń uczenia maszynowego, jak i generacyjnych sztucznej inteligencji. Obejmuje ona struktury, takie jak TensorFlow, Keras i PyTorch, wraz z różnymi opcjami obsługi i hostingu, które obejmują przetwarzanie wsadowe, strumieniowe i online.
Istnieje wiele opcji do rozważenia podczas projektowania inteligentnych funkcji w obciążeniu. Unikatowe wymagania funkcjonalne i niefunkcjonalne pomagają określić, czy potrzebujesz podstawowych możliwości wnioskowania, czy bardziej dynamicznych możliwości rozwiązywania problemów. Te wymagania prowadzą do podejmowania decyzji projektowych wysokiego poziomu. Rozważ te opcje podczas przechodzenia z obszarów projektowych wysokiego poziomu do obszarów projektowych niższego poziomu.
Jak opisano w artykule Wprowadzenie, jednym z pierwszych ważnych decyzji, które należy podjąć, jest to, czy utworzyć własny model, czy użyć modelu wstępnie przygotowanego. W przypadku korzystania ze wstępnie utworzonego modelu należy wziąć pod uwagę następujące kwestie:
Źródła wykazu: Zapoznaj się z repozytoriami, takimi jak Hugging Face Model Hub, TensorFlow Hub i wykaz modeli portalu Azure AI Foundry , aby znaleźć wstępnie wytrenowane modele. Te platformy udostępniają obszerny wykaz modeli dla różnych zadań.
Licencjonowania: Upewnij się, że postanowienia licencyjne modelu pasują do celów dotyczących zabezpieczeń, zgodności i aplikacji, zwłaszcza jeśli planujesz dystrybuować aplikację lub integrować ją z innymi usługami.
Kluczowe składniki: Zapoznaj się z architekturą modelu, danymi treningowym i wydajnością, aby określić, czy jest on dostosowany do danego zadania, czy domeny.
Aby uzyskać wskazówki dotyczące sposobu wybierania platformy hostingu, zobacz Zagadnienia dotyczące platformy hostingu i wnioskowania modelu.
Architektura warstwy aplikacji
Podczas projektowania inteligentnych funkcji należy określić jasne granice w projekcie w następujących pięciu kluczowych warstwach.
Warstwa klienta: Interfejs użytkownika i aplikacje klienckie, w których użytkownicy lub procesy korzystają z inteligentnych możliwości obciążenia. Zachowaj tę warstwę cienką i deleguj większość możliwości do innych warstw.
Warstwa inteligencji: Routing, orkiestracja i możliwości agenta, które koordynują operacje sztucznej inteligencji. Ta warstwa obejmuje trasowanie modelu, zarządzanie konwersacjami i inteligentne podejmowanie decyzji.
Warstwa wnioskowania: Uruchamianie wytrenowanych modeli w celu generowania przewidywań lub decyzji na podstawie danych. Ta warstwa obsługuje ładowanie modelu i wywołanie środowiska uruchomieniowego, wstępne przetwarzanie danych wejściowych i przetwarzanie danych wyjściowych oraz obsługę przewidywań za pośrednictwem interfejsów API lub systemów osadzonych.
Warstwa wiedzy: Dane bazowe, grafy wiedzy i usługi wyszukiwania, które zapewniają odpowiedni kontekst i informacje do warstwy inteligencji. Ta warstwa wymusza zasady dostępu do danych i autoryzację.
Warstwa narzędzi: Biznesowe API, usługi zewnętrzne i możliwości działania, które może wywoływać warstwa inteligencji. Ta warstwa powinna używać standardowych interfejsów i wymuszać własne zasady zabezpieczeń.
Każda warstwa wymusza własne zasady, tożsamości i strategie buforowania w celu osiągnięcia własnych zlokalizowanych wymagań dotyczących niezawodności, zabezpieczeń i wydajności. Warstwy umożliwiają również skoncentrowane programowanie, testowanie i rozwiązywanie problemów.
Zalecenia
Poniższa tabela zawiera podsumowanie zaleceń przedstawionych w tym artykule.
| Zalecenie | opis |
|---|---|
| Określanie priorytetów zabezpieczeń i mechanizmów kontroli odpowiedzialnej sztucznej inteligencji. | Implementowanie tradycyjnych zabezpieczeń aplikacji oraz środków bezpieczeństwa specyficznych dla sztucznej inteligencji jako podstawowego czynnika projektowego. Egzekwowanie systemów bezpieczeństwa dostawcy, filtrowania danych wejściowych/wyjściowych, ograniczania szybkości tożsamości, limitów kwotowych oraz limitów tokenów i monitów. Mechanizmy kontroli zabezpieczeń i bezpieczeństwa muszą być weryfikowane i nie można ich przyjąć z usług zarządzanych. |
| Trzymaj sztuczną inteligencję z dala od klienta. | Zaprojektuj usługi zaplecza, aby obsługiwać zagadnienia przekrojowe, takie jak ograniczanie szybkości, operacje typu failover i logika przetwarzania sztucznej inteligencji. Zabstrakcyj zachowanie i inteligencję z dala od klienta, aby zabezpieczyć projekt na przyszłość i poprawić łatwość utrzymania. |
| Blokuj bezpośredni dostęp do magazynów danych. | Kod w systemach sztucznej inteligencji nie powinien uzyskiwać bezpośredniego dostępu do magazynów danych. Przekierowanie wszystkich żądań danych za pośrednictwem interfejsu API lub podobnej abstrakcji dostępu do danych, która zapewnia autoryzację i propaguje kontekst użytkownika lub dzierżawcy przy pobieraniu i filtrowaniu. Przekaż tożsamość użytkownika, aby można było zastosować zabezpieczenia na poziomie danych. |
| Abstrakcja modeli i narzędzi. | Użyj warstw abstrakcji, aby oddzielić swoją aplikację od konkretnych modeli, narzędzi i technologii. Zaimplementuj ustandaryzowane interfejsy i protokoły, aby zapewnić elastyczność w miarę rozwoju technologii, co sprawia, że projekt jest bardziej czytelny i odporny na przyszłość. |
| Izolowanie zachowań i akcji. | Projektuj jasne granice między klientami, analizą (routingiem/orkiestracją/agentami), wiedzą (danymi uziemienia) i narzędziami (interfejsami API biznesowymi). Każda warstwa powinna wymuszać własne zasady, tożsamości i strategie buforowania, aby zmniejszyć zakres oddziaływania i skoncentrować wysiłki programistyczne. |
| Określanie priorytetów wstępnie utworzonych rozwiązań. | Użyj oprogramowania jako usługi (SaaS) lub platformy jako usługi (PaaS) do obsługi zadań obciążeniowych, gdy spełniają wymagania dotyczące zabezpieczeń, bezpieczeństwa, zgodności i limity przydziałów. Zaimplementuj mechanizmy kontroli wyrównywczych za pośrednictwem bram, które wymuszają uwierzytelnianie, limity przydziału, bezpieczeństwo i rejestrowanie. Używaj wstępnie utworzonych i wstępnie wytrenowanych modeli, jeśli to możliwe, aby zminimalizować obciążenie operacyjne i programistyczne dla zespołów roboczych i operacyjnych. |
Rozróżnianie między wnioskowaniem a inteligentnymi aplikacjami
Podczas projektowania architektury aplikacji należy najpierw określić, czy tworzysz aplikację skoncentrowaną na wnioskowaniu, czy aplikację skoncentrowaną na inteligencji, ponieważ to rozróżnienie wpływa na decyzje projektowe.
Wnioskowanie aplikacji
Aplikacje wykorzystujące wnioskowanie wykonują operacje jednoetapowe, takie jak klasyfikacja, tłumaczenie lub podsumowywanie. Te aplikacje mają prostsze architektury.
Typowa architektura: Klient komunikuje się z bramą sztucznej inteligencji, która zapewnia uwierzytelnianie, limity przydziału, bezpieczeństwo i routing. Ta brama wywołuje warstwę obsługi modelu, taką jak Azure AI Foundry, Azure Kubernetes Service (AKS) lub zarządzane punkty końcowe online. Tam, gdzie to możliwe, wyniki mogą być cache'owane dla przyszłych wywołań inferencji, zanim zostaną zwrócone klientowi.
Aplikacje stosowane do wnioskowania charakteryzują się bezpośrednimi wywołaniami modeli, wymagają minimalnej orkiestracji, koncentrują się na wydajności i przepustowości oraz nie wymagają złożonego zarządzania stanem.
Inteligentne aplikacje
Inteligentne aplikacje wykonują planowanie, koordynację i rozumowanie wieloetapowe i są zwykle obsługiwane za pośrednictwem agentów i orkiestracji agentów. Wymagają one zastosowania większej liczby pojęć w swoich architekturach.
Typowa architektura: Klient wywołuje agenta lub koordynatora agenta. Na podstawie możliwości projektowych lub autonomicznych ta warstwa wywołuje warstwę narzędzi, taką jak serwery protokołu MCP (Model Context Protocol) lub niestandardowe interfejsy API. Agent może potrzebować skorzystać z usług bazowych wiedzy, takich jak indeks wyszukiwania, baza danych lub graf. Modele mogą być wywoływane w wielu punktach w tym procesie. Buforowanie może również wystąpić na wielu poziomach, aby zoptymalizować proces.
Inteligentne aplikacje zazwyczaj zawierają wzorce agentowe i modelowanie tras ze złożoną koordynacją przepływu pracy, integrują się z wieloma źródłami danych i narzędziami oraz wymagają zarządzania konwersacjami i kontekstem.
Podstawowe wytyczne dotyczące projektowania aplikacji sztucznej inteligencji
Podczas projektowania aplikacji sztucznej inteligencji zastosuj następujące podstawowe wytyczne, aby tworzyć odporne i konserwowalne systemy.
Zacznij od wyników biznesowych
Przed wybraniem technologii jasno zdefiniuj rozwiązywany problem biznesowy. Ta definicja prowadzi do wyboru technologii i projektowania architektury. Rozważmy następujący czynniki:
Metryki sukcesu: Zdefiniuj mierzalne wyniki, które pokazują wartość, takie jak ulepszenia dokładności, obniżenie kosztów lub wyniki zadowolenia użytkowników.
Wymagania dotyczące środowiska użytkownika: Dowiedz się, jak użytkownicy i procesy będą współdziałać z funkcjami sztucznej inteligencji oraz czasami odpowiedzi, których oczekują.
Ograniczenia regulacyjne: Zidentyfikuj wymagania dotyczące zgodności, które mogą mieć wpływ na wybór projektu, takie jak miejsce przechowywania danych lub wymagania dotyczące możliwości wyjaśnienia.
Projektowanie pod kątem zabezpieczeń od pierwszego dnia
Obciążenia sztucznej inteligencji wymagają od samego początku podejścia opartego na zabezpieczeniach. Zaimplementuj zabezpieczenia warstwowe we wszystkich składnikach przy użyciu propagacji tożsamości i kontrolek z możliwością inspekcji. Aby uzyskać więcej informacji, zobacz Strategie projektowania zabezpieczeń.
Projektowanie pod kątem obserwacji od pierwszego dnia
Aplikacje sztucznej inteligencji wymagają monitorowania poza tradycyjnymi metrykami aplikacji. Uwzględnij obserwowalność w projekcie od samego początku.
Śledzenie wydajności modelu: Monitoruj dryf dokładności, opóźnienie wnioskowania i współczynniki ufności przewidywania.
Monitorowanie jakości danych: Śledzenie zmian dystrybucji danych wejściowych, które mogą mieć wpływ na wydajność modelu.
Analiza interakcji użytkownika: Dowiedz się, jak użytkownicy wchodzą w interakcje z funkcjami sztucznej inteligencji, aby zidentyfikować możliwości poprawy.
Zaplanuj abstrakcję i przyszłą elastyczność
Zaprojektuj system za pomocą warstw abstrakcji, które pozwalają dostosować się do rozwoju technologii sztucznej inteligencji:
Abstrakcja modelu: Abstrakcyjne modele za spójnymi interfejsami umożliwiające zamianę lub uaktualnianie bez zmian aplikacji.
Standardowe protokoły: Preferuj otwarte, udokumentowane interfejsy i formaty, takie jak OpenAPI dla narzędzi, ONNX dla przenośności modelu i OpenTelemetry dla telemetrii.
Projekt oparty na możliwościach: Projektowanie wokół możliwości, a nie konkretnych technologii w celu zachowania elastyczności.
Zewnętrzanie promptów i konfiguracji
Traktuj ustawienia startowe jako konfigurację, która powinna być wyexternalizowana zgodnie z zasadami projektowania aplikacji Twelve-Factor.
Kontrola wersji: Zachowaj monity w kontroli wersji z przejrzystym śledzeniem wdrożenia, aby skorelować dane telemetryczne i wyniki bezpieczeństwa z określonymi wersjami monitów.
Separacja ról: Umożliwiaj analitykom biznesowym i ekspertom z dziedziny dostosowywanie monitów bez zmian w kodzie.
Bezpieczne wdrażanie: Zaimplementuj kontrolowane procesy wdrażania w celu wyświetlania monitów o zmiany i traktuj je jako istotne aktualizacje konfiguracji.
Planowanie wycofania modelu
Modele podstawowe ostatecznie osiągają kres swojego cyklu życia i zostają wycofane przez platformę hostingową modeli. Modele są zastępowane przez modele, które działają lepiej, są bardziej ekonomiczne, mają zaktualizowaną wiedzę szkoleniową i obsługują nowe możliwości. Zaprojektuj abstrakcje, które minimalizują wpływ przyszłych przejść modelu obciążenia.
Abstrakcja dostawcy: Używaj warstw abstrakcji, które umożliwiają przełączanie się między dostawcami modeli bez zmian aplikacji.
Zarządzanie wersjami: Zaimplementuj strategie przechowywania wersji, które obsługują stopniową migrację między wersjami modelu.
Strategie rezerwowe: Projektowanie mechanizmów rezerwowych, jeśli preferowane modele staną się niedostępne.
Aby zapoznać się z technikami projektowania architektury, które dotyczą problemów związanych z cyklem życia modelu, zobacz Projektowanie pod kątem obsługi cykli życia modelu podstawowego.
Konteneryzowanie składników
Aby upewnić się, że niezależnie wdrażane składniki są samodzielne i poprawić spójność wdrażania, należy rozważyć konteneryzację w ramach strategii projektowania. Następujące składniki powinny być konteneryzowane:
Mikrousługi: Konteneryzowanie poszczególnych mikrousług obsługujących określone funkcje aplikacji, takich jak przetwarzanie danych, wnioskowanie modelu i uwierzytelnianie użytkowników. Takie podejście umożliwia niezależne wdrażanie i skalowanie oraz ułatwia wydajniejsze aktualizacje i konserwację.
Modele sztucznej inteligencji: Konteneryzowanie modeli sztucznej inteligencji w celu zapewnienia, że wszystkie zależności, biblioteki i konfiguracje są połączone razem. Takie podejście izoluje środowisko modelu od systemu hosta, aby zapobiec konfliktom wersji i zapewnić spójne zachowanie w różnych środowiskach wdrażania.
Potoki przetwarzania danych: Konteneryzowanie zadań przetwarzania danych, które poprzedzają lub są zgodne z wnioskowaniem modelu, takimi jak czyszczenie danych, przekształcanie i wyodrębnianie funkcji. Takie podejście zwiększa powtarzalność i upraszcza zarządzanie zależnościami.
Usługi infrastruktury: Konteneryzowanie usług zapewniających obsługę infrastruktury, takich jak bazy danych i warstwy buforowania. Takie podejście pomaga zachować spójność wersji i ułatwia skalowanie tych składników i zarządzanie nimi.
Implementowanie strategii buforowania wielowarstwowego
Podejście do buforowania wielowarstwowego może pomóc zwiększyć wydajność i zmniejszyć koszty w aplikacjach sztucznej inteligencji. Rozważ zaimplementowanie buforowania na wielu poziomach stosu aplikacji:
Buforowanie wyników i odpowiedzi: Użyj tego podejścia, aby ponownie użyć odpowiedzi dla identycznych lub semantycznie podobnych zapytań, jeśli jest to odpowiednie dla sytuacji. W obciążeniach, w których można buforować odpowiedzi, takie podejście może znacznie zmniejszyć wywołania modelu, co zwiększa wydajność i zmniejsza koszty wywołania modelu.
Pobieranie i buforowanie fragmentów uziemienia: Buforowanie często pobieranych fragmentów wiedzy i uziemienia danych w celu uniknięcia powtarzających się zapytań bazy danych i zapytań wyszukiwania lub operacji interfejsu API danych.
Buforowanie danych wyjściowych modelu: Buforuj pośrednie dane wyjściowe modelu, które mogą być ponownie używane w żądaniach.
Podczas projektowania podejścia do buforowania w każdej warstwie należy zrozumieć, do jakich danych często uzyskuje się dostęp, oraz jak role i uprawnienia użytkowników aplikacji mogą mieć wpływ na dane, do których mogą uzyskiwać dostęp. Aby buforowanie było skuteczne, należy oczekiwać wysokiego współczynnika trafień pamięci podręcznej. Skoncentruj się na buforowaniu tras o dużym natężeniu ruchu, takich jak wyszukiwanie w katalogu produktów, podczas monitorowania zrzutów pamięci podręcznej.
Kluczowe składniki pamięci podręcznej: Wartości buforowane muszą być powiązane z określonymi czynnikami środowiska uruchomieniowego w ramach obciążenia. Uwzględnij wartości, takie jak tożsamość dzierżawcy lub użytkownika, kontekst zasad, wersja modelu i wersja wywołania w kluczach pamięci podręcznej, aby upewnić się, że buforowana wartość jest zwracana tylko wtedy, gdy jest to odpowiednie dla żądania.
Zasady czasu wygaśnięcia (TTL): Ustaw odpowiednie czasy wygaśnięcia na podstawie wymagań dotyczących aktualności danych i poufności zawartości.
Haki unieważniania: Zaimplementuj wyzwalacze unieważniania pamięci podręcznej na potrzeby aktualizacji danych, zmian modelu i monitowania modyfikacji.
Ochrona prywatności użytkowników: Nigdy nie buforuj zawartości prywatnej użytkownika, chyba że jej zakres jest poprawnie określony według klucza oraz zgodnie z polityką. Ogólnie rzecz biorąc, buforowanie działa najlepiej w przypadku danych, które dotyczą wielu użytkowników. Nie buforuj pojedynczego użytkownika w większości sytuacji. Unikaj buforowania odpowiedzi specyficznych dla użytkownika jako prawidłowej odpowiedzi dla wszystkich użytkowników. Na przykład buforowana odpowiedź "Ile godzin płatnego czasu wolnego pozostało?" jest odpowiednia tylko dla użytkownika, który żąda danych, nawet jeśli inni użytkownicy przedstawiają to samo zapytanie.
Ryzyko: Buforowanie zwiększa wydajność i zmniejsza koszty, ale wprowadza zagrożenia związane z bezpieczeństwem i świeżością danych. Te zagrożenia obejmują wyciek danych, nieaktualne dane i naruszenia prywatności.
Ocena użycia orkiestracji i agentów w rozwiązaniach generowania sztucznej inteligencji
Wybierz odpowiednie podejście koordynacji oparte na wymaganiach aplikacji dotyczących determinizmu i możliwości eksploracyjnych.
Kiedy należy używać orkiestracji
Orkiestrator zarządza przepływem pracy, koordynując komunikację między różnymi składnikami rozwiązania sztucznej inteligencji, które w przeciwnym razie byłyby trudne do zarządzania w złożonych obciążeniach. Zalecamy utworzenie orkiestratora w projekcie, jeśli obciążenie wymaga dowolnej z następujących cech:
Przewidywalne przepływy pracy: Procesy wieloetapowe z dobrze zdefiniowanymi sekwencjami i punktami decyzyjnymi.
Wymagania dotyczące zgodności: Scenariusze, w których należy upewnić się, że określone kroki są wykonywane na potrzeby zgodności z przepisami.
Ścieżki krytyczne dla wydajności: Przepływy pracy, w których opóźnienie i użycie zasobów muszą być ściśle kontrolowane.
Prosta koordynacja: Proste delegowanie zadań, które nie wymaga dynamicznego rozumowania.
Kiedy używać współpracy agenta
Agent to sposób na zawijanie, wyodrębnianie i definiowanie inteligentnego zachowania w aplikacji. Agenci zapewniają funkcje związane z kontekstem i mogą pracować z platformami orkiestracji, takimi jak Semantic Kernel, Autogen lub Microsoft Agent Framework.
Użyj metod współpracy kierowanej przez agenta do eksploracyjnych lub złożonych zadań:
Rozumowanie wieloetapowe: Zadania wymagające planowania i podejmowania decyzji w wielu krokach
Koordynacja narzędzi: Złożone przepływy pracy obejmujące koordynowanie wielu wyspecjalizowanych narzędzi i usług
Zachowanie adaptacyjne: Scenariusze, w których system musi dostosować swoje podejście na podstawie wyników pośrednich lub zmieniających się warunków
Zarządzanie kontekstem: Aplikacje, które muszą zachować stan konwersacji i kontekst użytkownika między interakcjami
Zagadnienia dotyczące projektowania agenta
Podczas projektowania systemów opartych na agentach należy wziąć pod uwagę izolację i granice, wzorce komunikacji i strategie abstrakcji narzędzi. Zaprojektuj jasne granice między różnymi możliwościami agenta, aby zmniejszyć promień wybuchu i zwiększyć możliwość testowania. Używaj ustalonych wzorców, takich jak systemy kolejki tematów na potrzeby komunikacji agenta. Abstrahuj możliwości narzędzi poprzez użycie standardowych interfejsów, aby zapewnić elastyczność agenta.
Ważne
Nie dodawaj automatycznie agentów między zadaniem do ukończenia i wywołaniami modelu. Oceń, czy dostarczana wiedza wymaga złożoności wzorców agentowych, czy też bezpośrednie wywołania modelu są wystarczające dla twojego przypadku zastosowania. Warstwy agentów dodają opóźnienie, zwiększają powierzchnię i komplikują testowanie.
Utrzymywanie stanu agenta
W przypadku konwersacji wieloturnowych i długotrwałych zadań projektuj agentów, którzy obejmują trwałą pamięć stanu, dzięki czemu mogą zachować kontekst między żądaniami, sesjami lub cyklami implementacji. Użyj bezpiecznego magazynu udostępnionego, takiego jak Azure Cosmos DB, Azure Managed Redis lub Azure Table Storage, do przechowywania odpowiednich metadanych, historii konwersacji i postępu zadań. Ogranicz stan trwały do minimalnie potrzebnych informacji, aby zmniejszyć ryzyko naruszenia prywatności i zwiększenia objętości tokenu oraz wdrażaj zasady TTL, aby usuwać przestarzałe dane. Upewnij się, że agenci mogą przywrócić stan po wznowieniu, aby kontynuować przepływy pracy bez powtarzania już wykonanych kroków.
Podejścia hybrydowe
Rozważ projekty hybrydowe, w których koordynatorzy delegują określone podzadania do agentów.
Ustrukturyzowane przepływy pracy z elastycznymi krokami: Orkiestracja całego przepływu pracy umożliwia agentom obsługę złożonych poszczególnych kroków.
Wzorce eskalacji: Zacznij od orkiestracji deterministycznej i eskaluj do rozumowania opartego na agencie, gdy wstępnie określona logika jest niewystarczająca.
Rozumowanie specyficzne dla domeny: Orkiestracja umożliwia koordynację między domenami podczas korzystania z wyspecjalizowanych agentów w przypadku zadań specyficznych dla domeny.
Kompromis: Orkiestracja zapewnia przewidywalność i kontrolę, ale ogranicza możliwość dostosowywania. Współpraca agentów umożliwia dynamiczne rozwiązywanie problemów, ale wprowadza zmienność i złożoność.
Implementowanie bram sztucznej inteligencji na potrzeby wymuszania zasad
Użyj bram sztucznej inteligencji w swoim projekcie, aby zapewnić funkcje odciążania bram, routingu bram oraz agregacji bram dla swoich obciążeń. Bramy są zwykle implementowane przy użyciu platform, takich jak usługa Azure API Management lub za pośrednictwem rozwiązań niestandardowych, takich jak implementacja usługi Envoy lub NGINX. Bramy mogą służyć do pośredniczenia w żądaniach do dostawców modeli, punktów końcowych agenta, narzędzi i magazynów wiedzy.
Podstawowe możliwości bramy sztucznej inteligencji
Brama sztucznej inteligencji może rozwiązać problemy przekrojowe i służyć jako warstwa abstrakcji od systemu docelowego. Podczas projektowania strategii bramy sztucznej inteligencji należy wziąć pod uwagę następujące możliwości:
Normalizacja protokołu: W przypadku współużytkowanych funkcji sztucznej inteligencji u wszystkich dostawców, normalizuj interfejsy do wspólnego protokołu za pośrednictwem bramy w celu poprawy łatwości konserwacji. W przypadku funkcji specyficznych dla dostawcy użyj bramy jako zwrotnego serwera proxy bez normalizacji.
Uwierzytelnianie i autoryzacja: Wymuszanie kontroli dostępu opartej na tożsamościach i propagowanie kontekstu użytkownika do usług podrzędnych.
Ograniczanie szybkości i przydziały tokenów: Zaimplementuj limity szybkości dla użytkowników, aplikacji lub dzierżaw oraz przydziały tokenów, aby zapobiec nadużyciom i zarządzać kosztami.
Filtrowanie żądań i odpowiedzi: Zastosuj sprawdzanie poprawności danych wejściowych, filtrowanie monitów i sprawdzanie bezpieczeństwa danych wyjściowych na poziomie bramy.
Tokeny i limity monitów: Wymuś maksymalne limity tokenów i ograniczenia rozmiaru monitu, aby zapobiec wyczerpaniu zasobów przez wstępne odrzucanie żądań reprezentujących większe zapotrzebowanie na system niż wymagane lub możliwe.
Zasady routingu modelu: Kierowanie żądań do odpowiednich modeli na podstawie uprawnień użytkownika, właściwości żądań lub celów optymalizacji kosztów. Bramy są często używane do implementowania przełączenia między wieloma modelami, gdy pojemność lub ceny są wykorzystywane w jednym modelu, ale są dostępne w innym wdrożeniu modelu.
Wstrzykiwanie i przekształcanie nagłówków: Dodaj wymagane nagłówki, kontekst użytkownika i tokeny zabezpieczające dla serwisów podrzędnych.
Zarządzanie obciążeniami zwrotnymi: Przydzielanie opłat między działami, które współdzielą składniki obciążenia sztucznej inteligencji, takie jak pojedyncze wystąpienie usługi Azure OpenAI.
Wskazówka
Aby uzyskać szczegółowe informacje na temat wykorzystania bramy AI do obsługi zagadnień przekrojowych oraz w jaki sposób brama może wprowadzać dodatkową złożoność do architektury, zobacz Uzyskiwanie dostępu do usługi Azure OpenAI i innych modeli językowych za pośrednictwem bramy.
Scenariusze obejmujące wiele dostawców
Bramy sztucznej inteligencji są szczególnie przydatne w przypadku korzystania z wielu dostawców modeli lub wspólnych platform do hostingu modeli. Te bramy są często scentralizowanymi zasobami w waszej organizacji, od których zachęca się do zależności lub od których wymaga się zależności. Wystarczająco złożone obciążenie może również odnieść korzyść z wdrożenia tej warstwy abstrakcji w ramach własnego projektu.
Ujednolicony interfejs: Udostępniaj pojedynczą warstwę interfejsu API, która abstrahuje z wielu dostawców zaplecza.
Failover i redundancja: Kierowanie żądań do alternatywnych dostawców, gdy usługi podstawowe są niedostępne.
Optymalizacja kosztów: Kierowanie żądań do najbardziej ekonomicznego dostawcy na podstawie właściwości żądań.
Ważne
Nie należy polegać wyłącznie na ponownych próbach SDK i przekroczeniu czasu oczekiwania. Wymuszanie limitów, uwierzytelniania, przydziałów i limitów czasu w warstwie bramy i zasad dla pełnej kontroli.
Korzystanie ze wzorców projektowych aplikacji sztucznej inteligencji
Branża definiuje kilka typowych wzorców projektowych dla aplikacji sztucznej inteligencji. Można ich użyć, aby uprościć projektowanie i implementację. Te wzorce projektowe obejmują następujące typy:
Obraz modelu: Ten wzorzec projektu łączy przewidywania z wielu modeli w celu zwiększenia dokładności i niezawodności dzięki ograniczeniu ograniczeń poszczególnych modeli.
Architektura mikrousług: Ten wzorzec projektowy oddziela składniki w niezależnie wdrażane usługi, aby zwiększyć skalowalność i łatwość konserwacji. Umożliwia zespołom pracę nad różnymi częściami aplikacji jednocześnie.
Architektura sterowana zdarzeniami: Ten wzorzec projektu używa zdarzeń do wyzwalania akcji, co umożliwia oddzielenie składników i przetwarzania w czasie rzeczywistym, aby system był bardziej dynamiczny i dostosowywany do zmieniających się danych.
Wzorce ugruntywania i integracji wiedzy
Wiele aplikacji sztucznej inteligencji uzyskuje dostęp do zewnętrznych źródeł wiedzy w celu zapewnienia dokładnych, up-to-date informacji. Traktuj pobieranie danych jako narzędzie agenta lub wywołanie związane z wiedzą w ramach usługi, która wymusza autoryzację.
Routing wiedzy: Bezpośrednie zapytania do odpowiednich źródeł wiedzy na podstawie typu zapytania, domeny lub kontekstu użytkownika.
Warstwy kontekstu: Twórz systemy, które mogą łączyć wiele źródeł wiedzy i typów kontekstów w celu zapewnienia kompleksowych odpowiedzi.
Dynamiczne uziemienia: Zaimplementuj systemy, które mogą dostosowywać swoje źródła wiedzy i strategie uziemienia na podstawie zmieniających się wymagań lub dostępności danych.
Pobieranie z rozpoznawaniem autoryzacji: Upewnij się, że usługi bazujące wymuszają uprawnienia użytkownika i kontekst najemcy podczas pobierania informacji.
Aby lepiej zrozumieć projektowanie specjalnie utworzonego indeksu wektorowego, który wspiera dane podstawowe specyficzne dla zadań związanych z semantycznym wyszukiwaniem, zobacz Projektowanie i opracowywanie rozwiązania do generacji uzupełnionej wyszukiwaniem (RAG).
Wzorce routingu wielomodelowego
Użycie modelowego routera może zwiększyć dostępność obciążenia, kierując żądania do modelu działającego prawidłowo, gdy inny model działa nieprawidłowo. Może także poprawić jakość odpowiedzi, wybierając w czasie rzeczywistym najlepszy model dla określonego zadania. Routery modelowe zwiększają elastyczność, ale wprowadzają dodatkową zmienność. Użyj ich selektywnie:
Kiedy należy używać routerów modelowych: Użyj routera modelowego, gdy obciążenie może tolerować dodatkową zmienność i opóźnienia, środowisko użytkownika oczekuje szerokiego zakresu typów modeli lub musisz równoważyć koszty i możliwości pomiędzy różnymi modelami.
Kiedy należy unikać routerów modelu: Nie używaj routera modelu w scenariuszach, w których obciążenie wymaga dokładnych odpowiedzi zoptymalizowanych pod kątem określonych zadań, gdy używasz dostosowanych modeli z wąskimi celami poziomu usług (SLO) lub gdy zachowanie deterministyczne, w tym spójne działanie, ma kluczowe znaczenie dla danego przypadku użycia.
Po dodaniu modelowego routera do aplikacji preferuj routing natywny dostawcy, jeśli jest dostępny, i monitoruj wpływ na wydajność oraz na zadowolenie użytkowników.
Kompromis: Modułowe routery zapewniają elastyczność i optymalizację kosztów, ale dodają niedeterministyczne zachowanie i złożoność do testowania i rozwiązywania problemów.
Jeśli twoje obciążenie to aplikacja multitenant, zobacz Przewodnik po projektowaniu bezpiecznego wielodostępnego rozwiązania wnioskowania RAG aby uzyskać zalecenia dotyczące dostępu do danych dotyczących uziemienia dla poszczególnych dzierżawców.
Kiedy należy używać wzorców projektowych
Rozważ użycie tych wzorców projektowych w następujących scenariuszach:
Złożone przepływy pracy: Jeśli masz złożone przepływy pracy lub interakcje między wieloma modelami sztucznej inteligencji, wzorce, takie jak RAG lub mikrousługi, mogą pomóc w zarządzaniu złożonością i zapewnić wyraźną komunikację między składnikami.
Wymagania dotyczące skalowalności: Jeśli zapotrzebowanie na aplikację ulega zmianie, wzorzec, taki jak mikrousługi, umożliwia niezależne skalowanie poszczególnych składników w celu uwzględnienia różnych obciążeń bez wpływu na ogólną wydajność systemu.
Aplikacje oparte na danych: Jeśli aplikacja wymaga rozbudowanej obsługi danych, architektura sterowana zdarzeniami może zapewnić czas odpowiedzi w czasie rzeczywistym i wydajne przetwarzanie danych.
Uwaga
Mniejsze aplikacje lub weryfikacje koncepcji zwykle nie korzystają z tych wzorców projektowych. Te aplikacje powinny być zaprojektowane dla uproszczenia. Podobnie, jeśli masz ograniczenia zasobów, takie jak budżet, czas lub liczba pracowników, przy użyciu prostego projektu, który można refaktoryzować później, jest lepszym podejściem niż przyjęcie złożonego wzorca projektowego.
Wybieranie odpowiednich struktur, bibliotek i protokołów
Wybór struktur i bibliotek jest ściśle powiązany z projektowaniem aplikacji. Wpływają one na wydajność, skalowalność i łatwość konserwacji. Jednak wymagania projektowe mogą ograniczać możliwości wyboru platformy. Na przykład użycie zestawu SDK jądra semantycznego często zachęca do projektowania opartego na mikrousługach, w którym każdy agent lub funkcja jest hermetyzowana w ramach własnej usługi. Podczas wybierania struktur i bibliotek należy wziąć pod uwagę następujące czynniki:
Wymagania aplikacji: Wymagania aplikacji, takie jak przetwarzanie w czasie rzeczywistym lub przetwarzanie wsadowe, mogą ograniczać wybór platformy. Jeśli na przykład aplikacja wymaga małych opóźnień, może być konieczne użycie struktury, która ma możliwości asynchroniczne.
Potrzeby integracji: Projekt może wymagać określonych integracji z innymi systemami lub usługami. Jeśli platforma nie obsługuje niezbędnych protokołów lub formatów danych, może być konieczne ponowne rozważenie projektu lub wybranie innej platformy.
Wiedza zespołowa: Zestaw umiejętności zespołu deweloperów może ograniczyć wybór struktury. Projekt, który opiera się na mniej znanej strukturze, może prowadzić do zwiększenia czasu programowania i złożoności, dlatego rozważ użycie bardziej znanego narzędzia.
Społeczność i pomoc techniczna: Rozważ dojrzałość i wsparcie ekosystemu frameworka. Aktywne społeczności i kompleksowa dokumentacja zmniejszają ryzyko związane z implementacją.
Charakterystyka wydajności: Oceń wydajność platformy dla konkretnego przypadku użycia, w tym użycie pamięci, czas uruchamiania i szybkość wnioskowania.
Wdrażanie standardowych protokołów narzędzi w celu poprawy ładu i zapewnienia elastyczności:
Użyj serwerów w stylu MCP: Użyj MCP lub innego odpowiedniego standardu, aby opakować możliwości biznesowe jako możliwy do odnalezienia serwer narzędzi.
Użyj specyfikacji, które mają szeroką obsługę zestawu SDK. Na przykład zdefiniuj narzędzia przy użyciu specyfikacji interfejsu OpenAPI, aby uzyskać spójną dokumentację interfejsu i walidację.
Anonsuj możliwości: Zaprojektuj narzędzia do anonsowania swoich możliwości, które umożliwiają orkiestratorom właściwe odnajdywanie i kierowanie żądań. Na przykład obejmuj operacje odczytu i zapisu w systemach planowania zasobów przedsiębiorstwa (ERP) jako serwer narzędziowy, który reklamuje możliwości. Takie podejście umożliwia dostosowanie interakcji ERP bez zmiany logiki agenta.
Preferencje protokołu
Po wybraniu protokołów i standardów preferuj otwarte, udokumentowane interfejsy w przypadku zastrzeżonych formatów. W branży istnieje wiele nowych protokołów. Podczas rozważania przypadków użycia komunikacji agenta z agentem i kontroli, należy wziąć pod uwagę dług techniczny wynikający z protokołów, które szybko się rozwijają lub są wycofywane. Warstwy abstrakcji mogą ułatwić współdziałanie projektu między różnymi strukturami i dostawcami sztucznej inteligencji.
Projektowanie strategii bezpieczeństwa dla komponentów sztucznej inteligencji twojego obciążenia
Składniki sztucznej inteligencji wymagają zagadnień dotyczących zabezpieczeń poza tradycyjnymi zabezpieczeniami aplikacji. Zaimplementuj środki zabezpieczeń we wszystkich warstwach aplikacji przy użyciu standardowych dostawców tożsamości, takich jak Microsoft Entra ID na potrzeby podstawowego uwierzytelniania i autoryzacji.
Podstawowe zasady zabezpieczeń
Zaimplementuj następujące podstawowe rozwiązania w zakresie zabezpieczeń:
Uwierzytelnianie standardowe i autoryzacja: Użyj ustanowionych dostawców tożsamości i systemów kontroli dostępu opartej na rolach (RBAC).
Bezpieczeństwo struktury danych z propagacją kontekstu użytkownika: Upewnij się, że mechanizmy kontroli dostępu są utrzymywane w całym procesie przetwarzania danych. Przekazywanie tożsamości użytkownika przy użyciu przepływów w imieniu użytkownika, tak aby użytkownicy mogli uzyskiwać dostęp tylko do wyników na podstawie danych, do których są upoważnieni.
Dzienniki inspekcji: Zaimplementuj szczegółowe rejestrowanie interakcji ze sztuczną inteligencją na potrzeby monitorowania zgodności i zabezpieczeń.
Środki zabezpieczeń specyficzne dla sztucznej inteligencji
Rozwiązywanie problemów z zabezpieczeniami, które są unikatowe dla aplikacji sztucznej inteligencji:
Filtrowanie monitów i zapobieganie wstrzykiwaniu poleceń: Zaimplementuj zabezpieczenia przed atakami polegającymi na wstrzykiwaniu poleceń, które mogą manipulować zachowaniem sztucznej inteligencji lub wyodrębniać poufne informacje.
Bezpieczne kontrolki użycia narzędzi: W przypadku korzystania z agentów z dostępem do narzędzi zaimplementuj kontrolki, aby zapobiec szkodliwemu akcji i zweryfikować użycie narzędzia przed wywołaniem.
Monitorowanie zachowania agenta: Monitorowanie akcji i decyzji agenta w celu wykrycia nietypowych lub potencjalnie szkodliwych wzorców zachowań.
Kontrola dostępu do modelu: Zaimplementuj szczegółowe uprawnienia dla różnych modeli i możliwości w systemie sztucznej inteligencji.
Filtrowanie odpowiedzi i kontrole bezpieczeństwa: Filtruj dane wyjściowe sztucznej inteligencji, aby zapobiec generowaniu szkodliwej, nieodpowiedniej lub poufnej zawartości.
Uziemienie z ograniczeniami bezpieczeństwa
Wykraczaj poza zapobieganie bezpośredniemu dostępowi do bazy danych i zaimplementuj odzyskiwanie danych z uwzględnieniem bezpieczeństwa:
Propagacja tożsamości: Przekaż oświadczenia grupy Microsoft Entra lub równoważne informacje o tożsamości do wywołań narzędzi analitycznych, aby usługi kontroli dostępu nigdy nie pobierały nieautoryzowanych danych ani mediów.
Przycinanie oparte na listach kontroli dostępu (ACL) i grupach: Zaimplementuj filtrowanie na podstawie grup zabezpieczeń i list kontroli dostępu (ACL) w warstwie wiedzy.
Odmowy z możliwością audytu: Rejestrowanie i audytowanie odmów żądań spowodowanych niewystarczającymi uprawnieniami.
Wymuszanie autoryzacji: Wymagaj, aby kod znajduje się między agentami a źródłami wiedzy w celu wymuszania zasad autoryzacji.
Możesz na przykład przekazać żądania grupy Entra firmy Microsoft do wywołania narzędzia zarządzania wiedzą, aby upewnić się, że proces nigdy nie pobiera nieautoryzowanych dokumentów. Ta konfiguracja gwarantuje buforowane wyniki i gwarantuje, że odpowiedzi sztucznej inteligencji przestrzegają uprawnień użytkownika.
Weź pod uwagę wymagania niefunkcjonalne
Obciążenie może mieć niefunkcjonalne wymagania, które stanowią wyzwania ze względu na czynniki związane z technologiami sztucznej inteligencji.
Opóźnienie wnioskowania modelu lub przekroczenia limitu czasu: Aplikacje sztucznej inteligencji często wymagają odpowiedzi w czasie rzeczywistym lub niemal w czasie rzeczywistym. Projektowanie pod kątem małych opóźnień ma kluczowe znaczenie. Obejmuje ona optymalizację architektury modelu, potoków przetwarzania danych i zasobów sprzętowych. Zaimplementowanie strategii buforowania i zapewnienie wydajnego ładowania modelu jest również niezbędne, aby uniknąć przekroczenia limitu czasu i zapewnić terminowe odpowiedzi.
Ograniczenia przepływności tokenu lub żądania: Wiele usług sztucznej inteligencji nakłada limity na liczbę tokenów lub przepływność żądań, szczególnie w przypadku modeli opartych na chmurze. Projektowanie pod kątem tych ograniczeń wymaga starannego zarządzania rozmiarami danych wejściowych, przetwarzania wsadowego żądań w razie potrzeby oraz potencjalnie implementowania mechanizmów ograniczania szybkości lub kolejkowania w celu zarządzania oczekiwaniami użytkowników i zapobiegania przerwom w działaniu usług.
Scenariusze kosztów i obciążeń zwrotnych: Projektowanie pod kątem przejrzystości kosztów obejmuje implementowanie funkcji śledzenia użycia i raportowania, które ułatwiają modele obciążeń zwrotnych. Te funkcje umożliwiają organizacji dokładne przydzielanie kosztów między działami. Zarządzanie chargebackami jest zwykle obsługiwane przez bramkę API, na przykład API Management.
Dokładność modelu i dryf: Modele sztucznej inteligencji mogą ulegać pogorszeniu wraz ze zmianą wzorców danych. Projektuj systemy monitorowania w celu wykrywania odchylenia od dokładności i wdrażaj potoki automatycznego ponownego trenowania, gdy jest to konieczne.
Zgodność i wyjaśnienie: Niektóre branże wymagają wyjaśnialnych decyzji dotyczących sztucznej inteligencji. Zaprojektuj system, aby przechwycić dane wyjściowe wygenerowane przez sztuczną inteligencję i podać ich przyczyny, jeśli jest to wymagane.
Prywatność i rezydencja danych: Upewnij się, że projekt spełnia wymagania dotyczące ochrony danych, w tym możliwość usuwania danych użytkownika i zgodności z regułami przechowywania danych geograficznych.