Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tworzenie bezpiecznych agentów sztucznej inteligencji jest wspólną odpowiedzialnością między platformą Agent Framework a deweloperami aplikacji. Struktura agenta udostępnia bloki konstrukcyjne — abstrakcje, dostawcy i aranżację — ale deweloperzy są odpowiedzialni za weryfikowanie danych wejściowych, zabezpieczanie przepływów danych i odpowiednie konfigurowanie narzędzi w ich scenariuszu.
W tym artykule opisano najlepsze rozwiązania dotyczące tworzenia bezpiecznych i bezpiecznych agentów za pomocą struktury Agent Framework.
Informacje o granicach zaufania
Dane przepływają przez kilka komponentów, gdy agent działa: dane wejściowe użytkownika, dostawcy historii czatów, dostawcy kontekstu, usługa LLM i narzędzia funkcji. Każda granica, przez którą dane wchodzą do aplikacji lub ją opuszczają, stanowi potencjalną powierzchnię ataku.
Kluczowe granice zaufania, które należy wziąć pod uwagę:
- Usługa sztucznej inteligencji — odbiera komunikaty czatu (które mogą obejmować dane osobowe i instrukcje systemowe) i zwraca wygenerowane przez llM dane wyjściowe.
- Magazyn historii czatów — dostawcy mogą ładować i utrwalać wiadomości konwersacji za pośrednictwem magazynu zewnętrznego.
- Usługi kontekstowe — dostawcy kontekstu mogą pobierać lub przechowywać dane z usług zewnętrznych (pamięci, profilów użytkowników, wyników RAG).
- Usługi dostępne przez narzędzia — narzędzia funkcji wykonują kod napisany przez deweloperów, który może wywoływać zewnętrzne interfejsy API lub bazy danych.
Cała komunikacja między usługami zewnętrznymi jest obsługiwana przez zestawy SDK klienta wybranego przez dewelopera. Struktura agenta nie zarządza szczegółami uwierzytelniania, szyfrowania ani połączenia dla tych usług.
Najlepsze rozwiązania
Weryfikowanie danych wejściowych funkcji
Sztuczna inteligencja może wywoływać dowolną funkcję udostępnianą jako narzędzie i wybierać argumenty. Traktuj argumenty dostarczane przez usługę LLM jako niezaufane dane wejściowe, podobnie jak dane wejściowe użytkownika w internetowym interfejsie API.
-
Użyj listy dozwolonych — zweryfikuj dane wejściowe względem znanych wartości uznanych za dobre, zamiast filtrowania znanych złych wzorców. Na przykład sprawdź, czy ścieżka pliku znajduje się w dozwolonym katalogu, zamiast sprawdzać sekwencje przechodzenia katalogów
... - Wymuszanie ograniczeń typu i zakresu — sprawdź, czy argumenty mają oczekiwany typ i w dopuszczalnych zakresach (granice liczbowe, limity długości ciągów, zakresy dat).
- Ogranicz długości ciągów — wymuszaj maksymalne długości argumentów ciągów, aby zapobiec wyczerpaniu zasobów lub atakom polegającym na wstrzyknięciu zasobów.
- Zapobiegaj przechodzeniu ścieżki — gdy funkcje akceptują ścieżki plików, rozpoznają je jako ścieżki bezwzględne i sprawdź, czy należą do dozwolonych katalogów.
- Użyj zapytań sparametryzowanych — jeśli argumenty są używane w zapytaniach SQL, poleceniach powłoki lub innych kontekstach interpretowanych, używaj sparametryzowanych zapytań lub korzystaj z ucieczki — nigdy nie łącz ciągów.
Wymaganie zatwierdzenia dla narzędzi wysokiego ryzyka
Domyślnie wszystkie narzędzia udostępniane agentowi są wywoływane bez zatwierdzania przez użytkownika. Użyj mechanizmu zatwierdzania narzędzi, aby wymagać potwierdzenia przez człowieka dla operacji wysokiego ryzyka.
Podczas podejmowania decyzji, które narzędzia wymagają zatwierdzenia, należy wziąć pod uwagę następujące kwestie:
- Skutki uboczne — narzędzia, które modyfikują dane, wysyłają komunikaty, robią zakupy lub mają inne skutki uboczne, powinny zwykle wymagać zatwierdzenia.
- Czułość danych — Narzędzia, które uzyskują dostęp do poufnych danych (PII, dane finansowe, poświadczenia) lub je zwracają, wymagają zatwierdzenia.
- Odwracalność — Operacje nieodwracalne (usuwanie, wysyłanie wiadomości e-mail) wiążą się z wyższym ryzykiem niż zapytania tylko do odczytu.
- Zakres wpływu — narzędzia o szerokim wpływie (operacje zbiorcze) powinny wymagać większej kontroli niż tych o wąskim zakresie.
Zachowaj kontrolę nad komunikatami systemowymi przez deweloperów
Wiadomości czatu mają rolę (system, user, assistant, tool), która określa, jak usługa sztucznej inteligencji je interpretuje. Zrozumienie tych ról ma kluczowe znaczenie:
| roli | Poziom zaufania |
|---|---|
system |
Najwyższe zaufanie — bezpośrednio kształtuje zachowanie LLM. Nigdy nie może zawierać niezaufanych danych wejściowych. |
user |
Niezaufane — może zawierać próby wstrzyknięcia monitu lub złośliwą zawartość. |
assistant |
Niezaufane — generowane przez usługę LLM, która jest systemem zewnętrznym. |
tool |
Niezaufane — może zawierać dane z systemów zewnętrznych lub zawartości mającej wpływ na użytkownika. |
Nie umieszczaj danych wejściowych użytkownika końcowego w systemkomunikatach -role. Domyślnie struktura agenta przypisuje nietypowy tekst do roli user, ale należy być ostrożnym przy programowym konstruowaniu komunikatów.
Dostawcy rozszerzeń weterynaryjnych
Dostawcy kontekstu i dostawcy historii mogą wprowadzać komunikaty z dowolną rolą, w tym system. Dołączanie tylko zaufanych dostawców.
Należy pamiętać o pośrednim wstrzyknięciu monitu: jeśli podstawowy magazyn danych zostanie naruszony, zawartość o charakterze niepożądanym może wpływać na zachowanie LLM. Na przykład dokument zdobyty za pośrednictwem RAG może zawierać ukryte instrukcje, które powodują, że LLM odbiega od zamierzonego działania lub wyciąga dane poprzez wywołania narzędzi.
Weryfikowanie i oczyszczanie danych wyjściowych usługi LLM
Odpowiedzi LLM powinny być traktowane jako niezaufane dane wyjściowe. Usługa sztucznej inteligencji jest zewnętrznym punktem końcowym, którego platforma Agent Framework nie kontroluje. Należy pamiętać o:
- Halucynacja — LLMs mogą generować wiarygodne, ale faktycznie nieprawidłowe informacje. Nie traktuj danych wyjściowych llM jako autorytatywnych bez weryfikacji.
- Pośrednie wstrzyknięcie monitu — Dane pozyskiwane za pomocą narzędzi, dostawców kontekstu lub dostawców historii czatów mogą zawierać wrogie treści zaprojektowane, aby wpływać na LLM.
- Złośliwe ładunki — dane wyjściowe LLM mogą zawierać zawartość, która jest szkodliwa, jeśli jest renderowana lub wykonywana bez oczyszczania (HTML/JavaScript dla XSS, SQL do wstrzykiwania, poleceń powłoki).
Zawsze waliduj i filtruj dane wyjściowe LLM przed renderowaniem ich w kodzie HTML, wykonywaniem jako kod, używaniem w zapytaniach bazy danych lub przekazywaniem do jakiegokolwiek kontekstu wymagającego zabezpieczeń.
Ochrona poufnych danych w dziennikach
Struktura agentów obsługuje rejestrowanie i telemetrię za pośrednictwem biblioteki OpenTelemetry. Poufne dane są rejestrowane tylko w przypadku jawnego włączenia:
-
Rejestrowanie — na poziomie dziennika
Tracerejestrowana jest pełna kolekcjaChatMessages. Może to obejmować dane osobowe (PII).Tracepoziom nigdy nie powinien być włączony w trybie produkcyjnym. -
Telemetria — po
EnableSensitiveDataustawieniu dane telemetryczne zawierają pełny tekst wiadomości czatu, w tym wywołania funkcji i wyniki. Nie włączaj tego w środowisku produkcyjnym.
Zabezpieczanie danych sesji
Sesje (AgentSession) reprezentują kontekst konwersacji i mogą być serializowane w celu trwałości. Traktuj serializowane sesje jako dane poufne:
- Sesje mogą odwoływać się do zawartości konwersacji lub identyfikatorów sesji.
- Przywracanie sesji z niezaufanego źródła jest równoważne akceptowaniu niezaufanych danych wejściowych. Naruszony system magazynowania może zmienić role, aby zwiększyć poziom zaufania.
- Przechowuj sesje w bezpiecznym magazynie z odpowiednimi mechanizmami kontroli dostępu i szyfrowania.
Implementowanie limitów zasobów
Struktura agenta nie nakłada ograniczeń dotyczących długości danych wejściowych/wyjściowych ani żądań, ponieważ nie wie, co jest uzasadnione w danym scenariuszu. Ponosisz odpowiedzialność za:
- Limity długości danych wejściowych — ogranicz długość danych wejściowych, aby zapobiec przepełnieniu kontekstu lub atakom DoS.
-
Limity długości danych wyjściowych — użyj limitów udostępnianych przez usługę (na przykład
MaxOutputTokensw opcjach czatu). - Ograniczanie szybkości — używaj mechanizmów ograniczających szybkość, aby zapobiec przekroczeniom kosztów i nadużyciom wynikającym z równoczesnych żądań.