Zaawansowane akcje reguł: Wykonywanie skryptów Pythona¶
W tym dokumencie opisano, jak rozszerzyć funkcjonalność prostych reguł zamiany tekstu, wykonując niestandardowe skrypty w języku Python. Ta zaawansowana funkcja umożliwia tworzenie dynamicznych odpowiedzi, interakcję z plikami, wywoływanie zewnętrznych interfejsów API i wdrażanie złożonej logiki bezpośrednio w przepływie pracy rozpoznawania mowy.
Podstawowa koncepcja: on_match_exec¶
Zamiast po prostu zastępować tekst, możesz teraz nakazać regule wykonanie jednego lub większej liczby skryptów Pythona, gdy pasuje do wzorca. Odbywa się to poprzez dodanie klucza on_match_exec do słownika opcji reguły.
Podstawowym zadaniem skryptu jest otrzymanie informacji o dopasowaniu, wykonanie akcji i zwrócenie końcowego ciągu znaków, który zostanie użyty jako nowy tekst.
Struktura reguł¶
Reguła z akcją skryptową wygląda następująco:
KOD_BLOKU_0 Kluczowe punkty:
Wartość
on_match_execmusi być listą.Skrypty znajdują się w tym samym katalogu, co plik mapy, dlatego też `CONFIG_DIR / ‘nazwa_skryptu.py’’ jest zalecanym sposobem zdefiniowania ścieżki.
Tworzenie skryptu wykonywalnego¶
Aby system mógł skorzystać z Twojego skryptu, musi przestrzegać dwóch prostych zasad:
Musi to być prawidłowy plik Pythona (np.
my_script.py).Musi zawierać funkcję o nazwie
execute(match_data).
Funkcja execute(match_data)¶
Jest to standardowy punkt wejścia dla wszystkich wykonywalnych skryptów. System automatycznie wywoła tę funkcję, gdy reguła będzie pasować.
match_data(dict): Słownik zawierający cały kontekst dotyczący meczu.Wartość zwracana (str): Funkcja musi zwracać ciąg znaków. Ten ciąg stanie się nowym przetworzonym tekstem.
Słownik „match_data”.¶
Słownik ten stanowi pomost pomiędzy aplikacją główną a skryptem. Zawiera następujące klucze:
'oryginalny_tekst'(str): Pełny ciąg tekstowy przed zastosowaniem jakiejkolwiek zamiany z bieżącej reguły.'text_after_replacement'(str): Tekst po zastosowaniu podstawowego ciągu zastępującego reguły, ale przed wywołaniem skryptu. (Jeśli zamianą jest „Brak”, będzie ona taka sama jak „oryginalny_tekst”).'regex_match_obj'(re.Match): Oficjalny obiekt dopasowania wyrażenia regularnego w języku Python. Jest to niezwykle przydatne przy uzyskiwaniu dostępu do grup przechwytywania. Możesz użyćmatch_obj.group(1),match_obj.group(2)itp.'rule_options'(dykt): Kompletny słownik opcji dla reguły, która uruchomiła skrypt.
Przykłady¶
Przykład 1: pobieranie aktualnego czasu (reakcja dynamiczna)¶
Ten skrypt zwraca spersonalizowane powitanie na podstawie pory dnia.
1. Zasada (w pliku mapy): KOD_BLOKU_1
2. Skrypt (get_current_time.py):
KOD_BLOKU_2
Stosowanie:
Wejście: „która jest godzina” Wyjście: „Dzień dobry! Obecnie jest 14:30”.
Przykład 2: Prosty kalkulator (przy użyciu grup przechwytywania)¶
Ten skrypt używa grup przechwytywania z wyrażenia regularnego do wykonania obliczeń.
1. Zasada (w pliku mapy): KOD_BLOKU_3
2. Skrypt (calculator.py):
KOD_BLOKU_4
Stosowanie:
Wejście: „oblicz 55 plus 10” Wyjście: „Wynik to 65.”
Przykład 3: Stała lista zakupów (we/wy pliku)¶
Ten przykład pokazuje, jak jeden skrypt może obsłużyć wiele poleceń (dodawanie, wyświetlanie) poprzez sprawdzanie oryginalnego tekstu użytkownika i jak może utrwalać dane poprzez zapisywanie do pliku.
1. Zasady (w pliku mapy): KOD_BLOKU_5
2. Skrypt (shopping_list.py):
KOD_BLOKU_6
Stosowanie:
Wejście 1: „dodaj mleko do listy zakupów” Wyjście 1: „OK, dodałem „mleko” do listy zakupów.”
Wejście 2: „pokaż listę zakupów” Wyjście 2: „Na liście masz: mleko”.
Najlepsze praktyki¶
Jedno zadanie na skrypt: Koncentruj skrypty na jednym zadaniu (np.
calculator.pytylko oblicza).Obsługa błędów: Zawsze otaczaj logikę skryptu blokiem „try…except”, aby zapobiec awarii całej aplikacji. Zwróć przyjazny dla użytkownika komunikat o błędzie z bloku „z wyjątkiem”.
Biblioteki zewnętrzne: Możesz używać bibliotek zewnętrznych (takich jak
requestslubwikipedia-api), ale musisz upewnić się, że są one zainstalowane w Twoim środowisku Pythona (pip install <nazwa-biblioteki>).Bezpieczeństwo: Należy pamiętać, że ta funkcja może wykonać dowolny kod Pythona. Używaj wyłącznie skryptów z zaufanych źródeł.