Twórz firmowego asystenta AI do obsługi poczty e-mail za pomocą Gemma

Odpowiadanie na zapytania klientów, w tym na e-maile, jest niezbędne w przypadku wielu firm, ale może szybko stać się przytłaczające. Modele sztucznej inteligencji (AI), takie jak Gemma, mogą ułatwić tę pracę.

Każda firma obsługuje zapytania, takie jak e-maile, w nieco inny sposób, dlatego ważne jest, aby móc dostosowywać technologie, takie jak generatywna AI, do potrzeb swojej firmy. Ten projekt rozwiązuje konkretny problem polegający na wyodrębnianiu informacji o zamówieniach z e-maili do piekarni i przekształcaniu ich w dane strukturalne, aby można je było szybko dodać do systemu obsługi zamówień. Korzystając z 10–20 przykładów zapytań i oczekiwanego wyniku, możesz dostosować model Gemma do przetwarzania e-maili od klientów, szybkiego odpowiadania na nie i integrowania z dotychczasowymi systemami biznesowymi. Ten projekt jest wzorcem aplikacji AI, który możesz rozszerzać i dostosowywać, aby wykorzystywać modele Gemma w swojej firmie.

Aby obejrzeć film z omówieniem projektu i sposobów jego rozszerzenia, w tym z informacjami od osób, które go stworzyły, zobacz film Asystent AI do tworzenia e-maili biznesowych – Tworzenie z Google AI. Kod tego projektu możesz też sprawdzić w repozytorium kodu Gemma Cookbook. W przeciwnym razie możesz rozpocząć rozszerzanie projektu, korzystając z tych instrukcji.

Przegląd

W tym samouczku dowiesz się, jak skonfigurować, uruchomić i rozszerzyć aplikację asystenta poczty e-mail dla firm utworzoną za pomocą Gemmy, Pythona i Flaska. Projekt udostępnia podstawowy interfejs użytkownika, który możesz zmodyfikować zgodnie ze swoimi potrzebami. Aplikacja została stworzona do wyodrębniania danych z e-maili klientów i przekształcania ich w strukturę dla fikcyjnej piekarni. Ten wzorzec aplikacji możesz wykorzystać w przypadku dowolnego zadania biznesowego, które wymaga wprowadzania i wyprowadzania tekstu.

Zrzut ekranu interfejsu aplikacji internetowej

Rysunek 1. Interfejs projektu do przetwarzania zapytań e-mail dotyczących piekarni

Wymagania sprzętowe

Przeprowadź ten proces dostrajania na komputerze z procesorem graficznym (GPU) lub procesorem tensorowym (TPU) oraz wystarczającą ilością pamięci GPU lub TPU, aby pomieścić istniejący model i dane dostrajania. Aby uruchomić konfigurację dostrajania w tym projekcie, potrzebujesz około 16 GB pamięci GPU, mniej więcej tyle samo zwykłej pamięci RAM i co najmniej 50 GB miejsca na dysku.

Część tego samouczka dotyczącą dostrajania modelu Gemma możesz uruchomić w środowisku Colab z GPU T4. Jeśli tworzysz ten projekt na instancji maszyny wirtualnej w Google Cloud, skonfiguruj ją zgodnie z tymi wymaganiami:

  • Sprzęt GPU: do uruchomienia tego projektu wymagany jest procesor NVIDIA T4 (zalecany jest NVIDIA L4 lub nowszy).
  • System operacyjny: wybierz opcję Deep Learning on Linux, a konkretnie Deep Learning VM with CUDA 12.3 M124 z preinstalowanymi sterownikami oprogramowania GPU.
  • Rozmiar dysku rozruchowego: udostępnij co najmniej 50 GB miejsca na dysku na dane, modele i oprogramowanie pomocnicze.

Konfigurowanie projektu

Te instrukcje przeprowadzą Cię przez proces przygotowania projektu do programowania i testowania. Ogólne kroki konfiguracji obejmują instalację wymaganego oprogramowania, sklonowanie projektu z repozytorium kodu, ustawienie kilku zmiennych środowiskowych, zainstalowanie bibliotek Pythona i przetestowanie aplikacji internetowej.

Instalowanie i konfigurowanie

Ten projekt korzysta z języka Python 3 i wirtualnych środowisk (venv) do zarządzania pakietami i uruchamiania aplikacji. Poniższe instrukcje instalacji są przeznaczone dla komputera hosta z systemem Linux.

Aby zainstalować wymagane oprogramowanie:

  • Zainstaluj Pythona 3 i venv pakiet środowiska wirtualnego dla Pythona:

    sudo apt update
    sudo apt install git pip python3-venv
    

Klonowanie projektu

Pobierz kod projektu na komputer deweloperski. Aby pobrać kod źródłowy projektu, musisz mieć oprogramowanie do kontroli wersji git.

Aby pobrać kod projektu:

  1. Sklonuj repozytorium Git za pomocą tego polecenia:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. Opcjonalnie możesz skonfigurować lokalne repozytorium Git tak, aby korzystało z rzadkiego wyewidencjonowania, dzięki czemu będziesz mieć tylko pliki projektu:

    cd gemma-cookbook/
    git sparse-checkout set Demos/business-email-assistant/
    git sparse-checkout init --cone
    

Instalowanie bibliotek Pythona

Zainstaluj biblioteki Pythona z aktywnym venvwirtualnym środowiskiem Pythonavenv, aby zarządzać pakietami i zależnościami Pythona. Przed zainstalowaniem bibliotek Pythona za pomocą instalatora pip aktywuj wirtualne środowisko Pythona. Więcej informacji o używaniu środowisk wirtualnych Pythona znajdziesz w dokumentacji Python venv.

Aby zainstalować biblioteki Pythona:

  1. W oknie terminala przejdź do katalogu business-email-assistant:

    cd Demos/business-email-assistant/
    
  2. Skonfiguruj i aktywuj środowisko wirtualne Pythona (venv) dla tego projektu:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Zainstaluj wymagane biblioteki Pythona dla tego projektu za pomocą skryptu setup_python:

    ./setup_python.sh
    

Ustawianie zmiennych środowiskowych

Ten projekt wymaga do działania kilku zmiennych środowiskowych, w tym nazwy użytkownika Kaggle i tokena API Kaggle. Aby pobrać modele Gemma, musisz mieć konto Kaggle i poprosić o dostęp do nich. W tym projekcie dodasz nazwę użytkownika Kaggle i token interfejsu API Kaggle do 2 plików.env, które są odczytywane odpowiednio przez aplikację internetową i program dostrajania.

Aby ustawić zmienne środowiskowe:

  1. Uzyskaj nazwę użytkownika Kaggle i klucz tokena, postępując zgodnie z instrukcjami w dokumentacji Kaggle.
  2. Uzyskaj dostęp do modelu Gemma, postępując zgodnie z instrukcjami w sekcji Uzyskiwanie dostępu do Gemma na stronie Konfiguracja Gemma.
  3. Utwórz pliki zmiennych środowiskowych dla projektu, tworząc plik tekstowy.envkażdej z tych lokalizacji w sklonowanej wersji projektu:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. Po utworzeniu plików tekstowych .env dodaj do obu plików te ustawienia:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Uruchamianie i testowanie aplikacji

Po zakończeniu instalacji i konfiguracji projektu uruchom aplikację internetową, aby sprawdzić, czy została ona prawidłowo skonfigurowana. Zanim zaczniesz edytować projekt na własny użytek, przeprowadź ten test podstawowy.

Aby uruchomić i przetestować projekt:

  1. W oknie terminala przejdź do katalogu email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Uruchom aplikację za pomocą skryptu run_app:

    ./run_app.sh
    
  3. Po uruchomieniu aplikacji internetowej kod programu wyświetla adres URL, pod którym możesz przeglądać i testować. Zwykle jest to:

    http://127.0.0.1:5000/
    
  4. W interfejsie internetowym naciśnij przycisk Pobierz dane pod pierwszym polem wejściowym, aby wygenerować odpowiedź modelu.

Pierwsza odpowiedź modelu po uruchomieniu aplikacji zajmuje więcej czasu, ponieważ podczas pierwszego uruchomienia musi on wykonać kroki inicjowania. Kolejne żądania promptów i generowanie w przypadku już działającej aplikacji internetowej trwa krócej.

Rozszerzanie aplikacji

Po uruchomieniu aplikacji możesz ją rozbudować, modyfikując interfejs użytkownika i logikę biznesową, aby dostosować ją do zadań, które są istotne dla Ciebie lub Twojej firmy. Możesz też modyfikować działanie modelu Gemma za pomocą kodu aplikacji, zmieniając komponenty promptu, który aplikacja wysyła do modelu generatywnej AI.

Aplikacja przekazuje modelowi instrukcje wraz z danymi wejściowymi od użytkownika, tworząc pełny prompt dla modelu. Możesz zmodyfikować te instrukcje, aby zmienić zachowanie modelu, np. określić nazwy parametrów i strukturę generowanego kodu JSON. Prostszym sposobem na zmianę zachowania modelu jest podanie dodatkowych instrukcji lub wskazówek dotyczących odpowiedzi modelu, np. określenie, że wygenerowane odpowiedzi nie powinny zawierać formatowania Markdown.

Aby zmodyfikować instrukcje prompta:

  1. W projekcie deweloperskim otwórz plik z kodem business-email-assistant/email-processing-webapp/app.py.
  2. W kodzie app.py dodaj dodatkowe instrukcje do funkcjiget_prompt()::

    def get_prompt():
      return """
        Extract the relevant details of this request and return them in
        JSON code, with no additional markdown formatting:\n"""
    

W tym przykładzie do instrukcji dodano frazę „bez dodatkowego formatowania Markdown”.

Dodatkowe instrukcje w prompcie mogą mieć duży wpływ na wygenerowane dane wyjściowe i wymagają znacznie mniej wysiłku. Najpierw wypróbuj tę metodę, aby sprawdzić, czy model zachowuje się zgodnie z Twoimi oczekiwaniami. Jednak używanie instrukcji w prompcie do modyfikowania działania modelu Gemma ma swoje ograniczenia. W szczególności ogólny limit tokenów wejściowych modelu, który w przypadku Gemmy 2 wynosi 8192 tokeny, wymaga zachowania równowagi między szczegółowymi instrukcjami w prompcie a rozmiarem dostarczanych nowych danych, aby nie przekroczyć tego limitu.

Dostrój model

Dostrajanie modelu Gemma to zalecany sposób na zwiększenie jego niezawodności w przypadku konkretnych zadań. Jeśli chcesz, aby model generował kod JSON o określonej strukturze, w tym parametry o określonych nazwach, rozważ dostosowanie modelu do tego zachowania. W zależności od zadania, które ma wykonać model, możesz uzyskać podstawową funkcjonalność, używając od 10 do 20 przykładów. W tej części samouczka dowiesz się, jak skonfigurować i przeprowadzić dostrajanie modelu Gemma pod kątem konkretnego zadania.

Poniższe instrukcje wyjaśniają, jak przeprowadzić dostrajanie w środowisku maszyny wirtualnej. Możesz jednak wykonać tę operację dostrajania, korzystając z powiązanego notatnika Colab w tym projekcie.

Wymagania sprzętowe

Wymagania dotyczące mocy obliczeniowej w przypadku dostrajania są takie same jak wymagania sprzętowe w przypadku pozostałej części projektu. Operację dostrajania możesz przeprowadzić w środowisku Colab z GPU T4, jeśli ograniczysz liczbę tokenów wejściowych do 256, a rozmiar pakietu do 1.

Przygotuj dane

Zanim zaczniesz dostrajać model Gemma, musisz przygotować dane do dostrajania. Podczas dostrajania modelu do konkretnego zadania potrzebujesz zestawu przykładów żądań i odpowiedzi. Przykłady powinny zawierać tekst żądania bez żadnych instrukcji oraz oczekiwany tekst odpowiedzi. Na początek przygotuj zbiór danych zawierający około 10 przykładów. Przykłady powinny obejmować pełen zakres żądań i idealnych odpowiedzi. Upewnij się, że żądania i odpowiedzi nie są powtarzalne, ponieważ może to spowodować, że odpowiedzi modeli będą powtarzalne i nie będą się odpowiednio dostosowywać do zmian w żądaniach. Jeśli dostosowujesz model do generowania danych w formacie uporządkowanym, upewnij się, że wszystkie podane odpowiedzi są zgodne z formatem danych wyjściowych, którego oczekujesz. Poniższa tabela zawiera kilka przykładowych rekordów z zbioru danych użytego w tym przykładzie kodu:

Żądanie Odpowiedź
Hi Indian Bakery Central,\nDo you happen to have 10 pendas, and thirty bundi ladoos on hand? Czy sprzedajecie też lukier waniliowy i ciasta o smaku czekoladowym? Szukam rozmiaru 6 cali. { "type": "inquiry", "items": [ { "name": "pendas", "quantity": 10 }, { "name": "bundi ladoos", "quantity": 30 }, { "name": "cake", "filling": null, "frosting": "vanilla", "flavor": "chocolate", "size": "6 in" } ] }
Widzę Twoją firmę w Mapach Google. Czy sprzedajecie jellabi i gulab jamun? { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] }

Tabela 1. Częściowa lista zbioru danych dostrajania dla ekstraktora danych z e-maili piekarni.

Format danych i wczytywanie

Dane dostrajania możesz przechowywać w dowolnym wygodnym formacie, np. w rekordach bazy danych, plikach JSON, CSV lub zwykłych plikach tekstowych, o ile masz możliwość pobierania rekordów za pomocą kodu w Pythonie. Ten projekt odczytuje pliki JSON z katalogu data do tablicy obiektów słownikowych. W tym przykładowym programie dostrajania zbiór danych do dostrajania jest wczytywany w module model-tuning/main.py za pomocą funkcji prepare_tuning_dataset():

def prepare_tuning_dataset():
    # collect data from JSON files
    prompt_data = read_json_files_to_dicts("./data")
    ...

Jak wspomnieliśmy wcześniej, możesz przechowywać zbiór danych w wygodnym formacie, o ile możesz pobrać żądania z powiązanymi odpowiedziami i złożyć je w ciąg tekstowy, który jest używany jako rekord dostrajania.

Tworzenie rekordów dostrajania

W procesie dostrajania program łączy każde żądanie i odpowiedź w jeden ciąg znaków z instrukcjami prompta i treścią odpowiedzi. Program dostrajania tokenizuje ciąg znaków, aby model mógł go przetworzyć. Kod do tworzenia rekordu dostrajania możesz zobaczyć w funkcji prepare_tuning_dataset() modułu model-tuning/main.py:

def prepare_tuning_dataset():
    ...
    # prepare data for tuning
    tuning_dataset = []
    template = "{instruction}\n{response}"

    for prompt in prompt_data:
        tuning_dataset.append(template.format(instruction=prompt["prompt"],
                                              response=prompt["response"]))

    return tuning_dataset

Ta funkcja przyjmuje dane jako dane wejściowe i formatuje je, dodając znak podziału wiersza między instrukcją a odpowiedzią.

Generowanie wag modelu

Gdy dane dostrajania będą dostępne i wczytane, możesz uruchomić program dostrajania. Proces dostrajania tej przykładowej aplikacji wykorzystuje bibliotekę Keras NLP do dostrajania modelu za pomocą techniki adaptacji niskiego rzędu (LoRA) w celu wygenerowania nowych wag modelu. W porównaniu z pełnym dostrajaniem precyzyjnym LoRA jest znacznie bardziej oszczędna pod względem pamięci, ponieważ przybliża zmiany w wagach modelu. Możesz następnie nałożyć te przybliżone wagi na istniejące wagi modelu, aby zmienić jego działanie.

Aby przeprowadzić testowanie i obliczyć nowe wagi:

  1. W oknie terminala przejdź do katalogu model-tuning/.

    cd business-email-assistant/model-tuning/
    
  2. Uruchom proces dostrajania za pomocą skryptu tune_model:

    ./tune_model.sh
    

Proces dostrajania trwa kilka minut w zależności od dostępnych zasobów obliczeniowych. Po zakończeniu procesu dostrajania program zapisuje nowe pliki wagi w katalogu model-tuning/weights w tym formacie:*.h5

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

Rozwiązywanie problemów

Jeśli dostrajanie nie zostanie ukończone, prawdopodobne są 2 przyczyny:

  • Brak pamięci lub wyczerpanie zasobów: te błędy występują, gdy proces dostrajania żąda pamięci przekraczającej dostępną pamięć GPU lub pamięć CPU. Upewnij się, że aplikacja internetowa nie jest uruchomiona podczas procesu dostrajania. Jeśli dostrajasz model na urządzeniu z 16 GB pamięci GPU, upewnij się, że parametr token_limit ma wartość 256, a parametr batch_size ma wartość 1.
  • Sterowniki GPU nie są zainstalowane lub są niezgodne z JAX: proces dostrajania wymaga, aby na urządzeniu obliczeniowym były zainstalowane sterowniki sprzętowe zgodne z wersją bibliotek JAX. Więcej informacji znajdziesz w dokumentacji dotyczącej instalacji JAX.

Wdrażanie dostrojonego modelu

Proces dostrajania generuje wiele wag na podstawie danych dostrajania i całkowitej liczby epok ustawionej w aplikacji do dostrajania. Domyślnie program dostrajania generuje 3 pliki wag modelu, po jednym na każdą epokę dostrajania. Każda kolejna epoka dostrajania generuje wagi, które dokładniej odtwarzają wyniki danych dostrajania. W danych wyjściowych terminala procesu dostrajania możesz sprawdzić współczynniki dokładności dla każdej epoki:

...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848

Chociaż chcesz, aby wskaźnik dokładności był stosunkowo wysoki, około 0,80, nie chcesz, aby był zbyt wysoki lub bardzo bliski 1,00, ponieważ oznacza to, że wagi są bliskie nadmiernemu dopasowaniu do danych dostrajania. W takim przypadku model nie będzie działać dobrze w przypadku żądań, które znacznie różnią się od przykładów dostrajania. Domyślnie skrypt wdrażania wybiera wagi epoki 3, które zwykle mają dokładność około 0, 80.

Aby wdrożyć wygenerowane wagi w aplikacji internetowej:

  1. W oknie terminala przejdź do katalogu model-tuning:

    cd business-email-assistant/model-tuning/
    
  2. Uruchom proces dostrajania za pomocą skryptu deploy_weights:

    ./deploy_weights.sh
    

Po uruchomieniu tego skryptu w katalogu email-processing-webapp/weights/ powinien pojawić się nowy plik *.h5.

Testowanie nowego modelu

Po wdrożeniu nowych wag w aplikacji możesz wypróbować nowo dostrojony model. Aby to zrobić, ponownie uruchom aplikację internetową i wygeneruj odpowiedź.

Aby uruchomić i przetestować projekt:

  1. W oknie terminala przejdź do katalogu email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Uruchom aplikację za pomocą skryptu run_app:

    ./run_app.sh
    
  3. Po uruchomieniu aplikacji internetowej kod programu wyświetla adres URL, pod którym możesz przeglądać i testować aplikację. Zazwyczaj jest to adres:

    http://127.0.0.1:5000/
    
  4. W interfejsie internetowym naciśnij przycisk Pobierz dane pod pierwszym polem wejściowym, aby wygenerować odpowiedź modelu.

Model Gemma został dostrojony i wdrożony w aplikacji. Eksperymentuj z aplikacją i spróbuj określić granice możliwości generowania dostosowanego modelu w przypadku Twojego zadania. Jeśli znajdziesz scenariusze, w których model nie działa dobrze, rozważ dodanie niektórych z tych próśb do listy przykładowych danych dostrajania. Wystarczy, że dodasz prośbę i podasz idealną odpowiedź. Następnie ponownie uruchom proces dostrajania, wdróż nowe wagi i przetestuj dane wyjściowe.

Dodatkowe materiały

Więcej informacji o tym projekcie znajdziesz w repozytorium kodu Gemma Cookbook. Jeśli potrzebujesz pomocy przy tworzeniu aplikacji lub chcesz współpracować z innymi deweloperami, odwiedź serwer Google Developers Community Discord. Więcej projektów z serii Build with Google AI znajdziesz na tej playliście.