Napisz własne detektory tekstu w Pythonie¶
Dodaj własne frazy literalne i wyrażenia regularne w plikach Pythona rozszerzających detect-secrets. Detektory działają razem z wbudowanymi detektorami tokenów i kluczy FastFence na zagnieżdżonych wartościach wejściowych i wyjściowych, w tym kluczach słowników. Dopasowanie uruchamia działanie prywatności z aktywnej polityki: blokowanie lub redakcję.
Zainstaluj i skonfiguruj¶
Po zainstalowaniu FastFence pobierz archiwum przykładów i rozpakuj pliki do examples/ w katalogu instalacji. Kompletny przykład używa wartości syntetycznych i nie wymaga repozytorium źródłowego:
uv tool run --python 3.12 [email protected] init --anonymization
uv run --python 3.12 --no-project --with fastfence==1.0.1 python examples/custom_detector.py
export FASTFENCE_SECRET_PLUGIN_FILES='["examples/custom_detector.py"]'
uv tool run --python 3.12 [email protected] doctor
uv tool run --python 3.12 [email protected] serve
Zachowaj tę zmienną środowiskową w terminalu lub konfiguracji usługi uruchamiającej FastFence. Ścieżki są rozwiązywane względem FASTFENCE_ROOT (domyślnie katalog roboczy). Po edycji pluginu uruchom proces ponownie: już załadowany kod pozostaje w pamięci. Żądania przechodzące kontrolę wejścia i docierające do modelu nadal wymagają standardowej konfiguracji Laya/Ollama z instrukcji instalacji.
Ustawienie przyjmuje maksymalnie osiem lokalnych plików .py, łącznie do 32 klas detektorów. Domyślnie plik może mieć do 65 536 bajtów; operator może ustawić FASTFENCE_SECRET_PLUGIN_MAX_FILE_BYTES między 1 024 a 1 048 576. Nazwy klas muszą być unikalne wśród wszystkich detektorów własnych i wbudowanych. Niepoprawny lub brakujący plugin zatrzymuje start; nie jest pomijany bez informacji.
Zdefiniuj reguły literalne i regex¶
CompanyCodeDetector dopasowuje ACME-DEMO-1234 i literalną frazę PROJECT ORCHID INTERNAL. Używaj re.escape(...), gdy ciąg ma być traktowany literalnie, łącznie z interpunkcją. InternalPhraseDetector pokazuje bazowy interfejs własnego dopasowywania w Pythonie. Zwracaj przez yield dokładny, niepusty fragment do usunięcia, zachowując oryginalną wielkość liter.
"""Trusted, stateless detect-secrets extension; all examples are synthetic."""
import re
from detect_secrets.plugins.base import BasePlugin, RegexBasedDetector
class CompanyCodeDetector(RegexBasedDetector):
secret_type = "Synthetic company identifier" # pragma: allowlist secret
denylist = (
re.compile(r"\bACME-DEMO-[0-9]{4}\b"),
re.compile(re.escape("PROJECT ORCHID INTERNAL"), re.IGNORECASE),
)
class InternalPhraseDetector(BasePlugin):
secret_type = "Synthetic internal phrase" # pragma: allowlist secret
def analyze_string(self, string):
phrase = "EXAMPLE INTERNAL ONLY"
if phrase in string:
yield phrase
if __name__ == "__main__":
assert list(CompanyCodeDetector().analyze_string("ACME-DEMO-1234"))
assert list(CompanyCodeDetector().analyze_string("project orchid internal"))
assert list(
InternalPhraseDetector().analyze_string("EXAMPLE INTERNAL ONLY")
)
assert not list(CompanyCodeDetector().analyze_string("ordinary report"))
print("Custom detector example checks passed")
Pobierz custom_detector.py · Zobacz źródło
Detektory regex dostarczają od jednego do 32 skompilowanych wzorców Python re, każdy o długości maksymalnie 8 192 znaków. Wzorce dopasowujące pusty ciąg są odrzucane. FastFence maskuje całe dopasowanie regex, również przy użyciu grup przechwytujących. Detektory bazowe zwracają dokładne dopasowane fragmenty. Detektor może zwrócić maksymalnie 4 096 kandydatów dla jednej analizowanej postaci tekstu; niepoprawne wyniki lub wyjątki odrzucają żądanie ze stałym powodem niedostępności detektora.
Rozszerzenie korzysta z interfejsów BasePlugin i RegexBasedDetector projektu źródłowego. FastFence wywołuje analyze_string bezpośrednio i nie wywołuje verify ani globalnego mechanizmu skanowania plików biblioteki.
Wybierz zachowanie wejścia i wyjścia¶
W config/policy.yaml swojej instalacji zachowaj pozostałe pola i ustaw:
Aktualizując działającą bramkę, zwiększ istniejącą wersję version na najwyższym poziomie. Możesz też zmienić politykę przez konsolę. Te ustawienia odrzucają wejście z własnym dopasowaniem przed wywołaniem modelu, a własne dopasowania w wyjściu modelu/narzędzia zastępują [REDACTED:detect_secrets]. Zmień odpowiednią akcję na redact lub block zgodnie z potrzebami. Akcje obejmują wszystkie detektory sekretów; osobne nadpisywanie akcji dla konkretnego detektora nie jest obecnie obsługiwane.
Przy działającej bramce uruchom pobrany klient w drugim terminalu:
uv run --python 3.12 --no-project --with fastfence==1.0.1 python examples/protected_request.py --prompt 'Please summarize ACME-DEMO-1234'
Przy blokowaniu wejścia oczekuj decision: blocked, reason: input_sensitive_data, upstream_executed: false i stałego oznaczenia detect_secrets_CompanyCodeDetector. Redakcja wejścia usuwa dopasowanie przed kolejnymi kontrolami i wykonaniem zadania. Wyłączenie privacy.enabled wyłącza również ten skan prywatności.
Granica zaufania operatora¶
Pliki pluginów to zaufany wykonywalny Python z uprawnieniami procesu serwera. Sprawdzaj je jak kod aplikacji. Funkcje dopasowujące powinny być bezstanowe, szybkie, bez dostępu do plików i sieci, logowania ani efektów ubocznych. Unikaj wyrażeń regularnych z nadmiernym nawrotem. Ograniczenia plików i kandydatów nie izolują kodu Pythona i nie narzucają twardego limitu czasu dowolnego pluginu.
Pliki wybierają wyłącznie zaufane ustawienia startowe. Żądania HTTP, aktualizacje polityk i konfiguracja zdalna nie mogą przesyłać ani wybierać wykonywalnych pluginów. FastFence ładuje kod przy starcie i nie odczytuje plików ponownie podczas żądań; sam nigdy nie loguje dopasowanego tekstu. Autorzy pluginów odpowiadają za operacje wejścia/wyjścia i logowanie wykonywane przez ich kod.