Создайте ИИ-помощника для деловой электронной почты вместе с Gemma

Обработка запросов клиентов, в том числе электронных писем, является необходимой частью ведения многих предприятий, но она может быстро стать утомительной. Приложив немного усилий, модели искусственного интеллекта (ИИ), такие как Gemma, могут помочь облегчить эту работу.

Каждый бизнес обрабатывает запросы, такие как электронные письма, немного по-своему, поэтому важно иметь возможность адаптировать такие технологии, как генеративный искусственный интеллект, к потребностям вашего бизнеса. Этот проект решает конкретную проблему извлечения информации о заказе из электронных писем в пекарню в структурированные данные, чтобы ее можно было быстро добавить в систему обработки заказов. Используя от 10 до 20 примеров запросов и желаемых результатов, вы можете настроить модель Gemma для обработки электронных писем от ваших клиентов, быстрого реагирования и интеграции с существующими бизнес-системами. Этот проект построен как шаблон приложения ИИ, который вы можете расширять и адаптировать, чтобы получить пользу от моделей Gemma для вашего бизнеса.

Видеообзор проекта и способы его расширения, включая идеи людей, которые его создали, можно посмотреть в видеоролике «Сборка AI Assistant для деловой электронной почты с помощью Google AI». Вы также можете просмотреть код этого проекта в репозитории кода Gemma Cookbook . В противном случае вы можете начать расширять проект, используя следующие инструкции.

Обзор

В этом руководстве вы узнаете, как настроить, запустить и расширить приложение-помощник по деловой электронной почте, созданное с помощью Gemma, Python и Flask. Проект предоставляет базовый веб-интерфейс пользователя, который вы можете изменить в соответствии со своими потребностями. Приложение создано для извлечения данных из электронных писем клиентов в структуру вымышленной пекарни. Вы можете использовать этот шаблон приложения для любой бизнес-задачи, использующей ввод и вывод текста.

Снимок экрана пользовательского интерфейса веб-приложения

Рисунок 1. Пользовательский интерфейс проекта для обработки электронных запросов пекарни

Требования к оборудованию

Запустите этот процесс настройки на компьютере с графическим процессором (GPU) или тензорным процессором (TPU) и достаточной памятью GPU или TPU для хранения существующей модели, а также данных настройки. Для запуска конфигурации настройки в этом проекте вам потребуется около 16 ГБ памяти графического процессора, примерно такой же объем обычной оперативной памяти и минимум 50 ГБ дискового пространства.

Вы можете запустить часть этого руководства по настройке модели Gemma, используя среду Colab со средой выполнения T4 GPU . Если вы создаете этот проект на экземпляре виртуальной машины Google Cloud, настройте экземпляр в соответствии со следующими требованиями:

  • Аппаратное обеспечение графического процессора : для запуска этого проекта требуется NVIDIA T4 (рекомендуется NVIDIA L4 или выше)
  • Операционная система : выберите вариант глубокого обучения в Linux , в частности виртуальную машину глубокого обучения с CUDA 12.3 M124 с предустановленными программными драйверами графического процессора.
  • Размер загрузочного диска : предоставьте не менее 50 ГБ дискового пространства для ваших данных, моделей и вспомогательного программного обеспечения.

Настройка проекта

Эти инструкции помогут вам подготовить проект к разработке и тестированию. Общие этапы установки включают установку необходимого программного обеспечения, клонирование проекта из репозитория кода, настройку нескольких переменных среды, установку библиотек Python и тестирование веб-приложения.

Установить и настроить

В этом проекте используются Python 3 и виртуальные среды ( venv ) для управления пакетами и запуска приложения. Следующие инструкции по установке предназначены для хост-компьютера Linux.

Чтобы установить необходимое программное обеспечение:

  • Установите Python 3 и пакет виртуальной среды venv для Python:

    sudo apt update
    sudo apt install git pip python3-venv
    

Клонировать проект

Загрузите код проекта на свой компьютер разработчика. Вам понадобится программное обеспечение для управления версиями git , чтобы получить исходный код проекта.

Чтобы скачать код проекта:

  1. Клонируйте репозиторий git, используя следующую команду:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. При желании настройте свой локальный репозиторий git на использование разреженной проверки, чтобы у вас были только файлы для проекта:

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

Установите библиотеки Python

Установите библиотеки Python с активированной виртуальной средой Python venv для управления пакетами и зависимостями Python. Обязательно активируйте виртуальную среду Python перед установкой библиотек Python с помощью установщика pip . Дополнительные сведения об использовании виртуальных сред Python см. в документации Python venv .

Чтобы установить библиотеки Python:

  1. В окне терминала перейдите в каталог business-email-assistant :

    cd Gemma/business-email-assistant/
    
  2. Настройте и активируйте виртуальную среду Python (venv) для этого проекта:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Установите необходимые библиотеки Python для этого проекта с помощью сценария setup_python :

    ./setup_python.sh
    

Установить переменные среды

Для запуска этого проекта требуется несколько переменных среды среды, включая имя пользователя Kaggle и токен API Kaggle. У вас должна быть учетная запись Kaggle и запросить доступ к моделям Gemma, чтобы иметь возможность их загрузить. В этом проекте вы добавляете свое имя пользователя Kaggle и токен API Kaggle в два файла .env , которые считываются веб-приложением и программой настройки соответственно.

Чтобы установить переменные среды:

  1. Получите свое имя пользователя Kaggle и ключ токена, следуя инструкциям в документации Kaggle .
  2. Получите доступ к модели Gemma, следуя инструкциям «Получить доступ к Gemma» на странице настройки Gemma .
  3. Создайте файлы переменных среды для проекта, создав текстовый файл .env в каждом из этих мест клона проекта:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. После создания текстовых файлов .env добавьте в оба файла следующие настройки:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Запустите и протестируйте приложение

После завершения установки и настройки проекта запустите веб-приложение, чтобы убедиться, что вы настроили его правильно. Вам следует сделать это в качестве базовой проверки перед редактированием проекта для собственного использования.

Чтобы запустить и протестировать проект:

  1. В окне терминала перейдите в каталог email-processing-webapp :

    cd business-email-assistant/email-processing-webapp/
    
  2. Запустите приложение с помощью скрипта run_app :

    ./run_app.sh
    
  3. После запуска веб-приложения в программном коде указан URL-адрес, по которому вы можете просмотреть и протестировать. Обычно это адрес:

    http://127.0.0.1:5000/
    
  4. В веб-интерфейсе нажмите кнопку «Получить данные» под первым полем ввода, чтобы сгенерировать ответ модели.

Первый ответ модели после запуска приложения занимает больше времени, поскольку он должен выполнить шаги инициализации при первом запуске поколения. Последующие запросы и генерация в уже работающем веб-приложении выполняются за меньшее время.

Расширить приложение

После запуска приложения вы можете расширить его, изменив пользовательский интерфейс и бизнес-логику, чтобы оно работало для задач, которые актуальны для вас или вашего бизнеса. Вы также можете изменить поведение модели Gemma с помощью кода приложения, изменив компоненты приглашения, которое приложение отправляет генеративной модели ИИ.

Приложение предоставляет инструкции модели вместе с входными данными от пользователя и полную подсказку модели. Вы можете изменить эти инструкции, чтобы изменить поведение модели, например указать имена параметров и структуру генерируемого JSON. Более простой способ изменить поведение модели — предоставить дополнительные инструкции или рекомендации для ответа модели, например указать, что сгенерированные ответы не должны включать форматирование Markdown.

Чтобы изменить подсказки:

  1. В проекте разработки откройте файл кода business-email-assistant/email-processing-webapp/app.py .
  2. В коде app.py добавьте дополнительные инструкции в функцию get_prompt(): ::

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

В этом примере к инструкциям добавляется фраза «без дополнительного форматирования уценки».

Предоставление дополнительных подсказок может сильно повлиять на генерируемый результат и требует значительно меньше усилий для реализации. Сначала вам следует попробовать этот метод, чтобы увидеть, сможете ли вы получить от модели желаемое поведение. Однако использование подсказок для изменения поведения модели Gemma имеет свои ограничения. В частности, общий лимит входных токенов модели, который составляет 8 192 токена для Gemma 2, требует, чтобы вы сбалансировали подробные инструкции подсказки с размером новых данных, которые вы предоставляете, чтобы вы оставались в пределах этого ограничения.

Настройте модель

Выполнение точной настройки модели Gemma — рекомендуемый способ заставить ее более надежно реагировать на конкретные задачи. В частности, если вы хотите, чтобы модель генерировала JSON с определенной структурой, включая параметры с конкретными именами, вам следует рассмотреть возможность настройки модели для такого поведения. В зависимости от задачи, которую вы хотите выполнить с помощью модели, вы можете достичь базовой функциональности с помощью 10–20 примеров. В этом разделе руководства объясняется, как настроить и выполнить тонкую настройку модели Gemma для конкретной задачи.

Следующие инструкции объясняют, как выполнить операцию тонкой настройки в среде виртуальной машины, однако вы также можете выполнить эту операцию настройки с помощью связанного блокнота Colab для этого проекта.

Требования к оборудованию

Требования к вычислительным ресурсам для тонкой настройки такие же, как и к аппаратному обеспечению для остальной части проекта. Вы можете запустить операцию настройки в среде Colab со средой выполнения T4 GPU , если ограничите количество входных токенов до 256, а размер пакета — до 1.

Подготовьте данные

Прежде чем приступить к настройке модели Gemma, необходимо подготовить данные для настройки. Когда вы настраиваете модель для конкретной задачи, вам нужен набор примеров запросов и ответов. В этих примерах должен быть показан текст запроса без каких-либо инструкций и текст ожидаемого ответа. Для начала вам следует подготовить набор данных примерно из 10 примеров. Эти примеры должны отражать все разнообразие запросов и идеальные ответы. Убедитесь, что запросы и ответы не повторяются, так как это может привести к повторению ответов моделей и невозможности соответствующей адаптации к изменениям в запросах. Если вы настраиваете модель для создания формата структурированных данных, убедитесь, что все предоставленные ответы строго соответствуют желаемому формату вывода данных. В следующей таблице показаны несколько примеров записей из набора данных этого примера кода:

Запрос Ответ
Привет, Indian Bakery Central!\nУ вас случайно нет под рукой 10 пенд и тридцать бунди ладу? Также вы продаете торты с ванильной глазурью и шоколадным вкусом. Я ищу размер 6 дюймов. { "type": "запрос", "items": [ { "name": "pendas", "quantity": 10 }, { "name": "bundi ladoos", "quantity": 30 }, { "name ": "торт", "начинка": ноль, "глазурь": "ваниль", "вкус": "шоколад", "размер": "6 дюймов" } ] }
Я видел ваш бизнес на картах Google. Вы продаете джелаби и гулаб джамун? { "тип": "запрос", "предметы": [ { "имя": "джелаби", "количество": ноль }, { "имя": "гулаб джамун", "количество": ноль } ] }

Таблица 1. Частичный список набора данных настройки для экстрактора данных электронной почты пекарни.

Формат данных и загрузка

Вы можете хранить данные настройки в любом удобном формате, включая записи базы данных, файлы JSON, CSV или обычные текстовые файлы, если у вас есть средства для извлечения записей с помощью кода Python. Этот проект считывает файлы JSON из каталога data в массив объектов словаря. В этом примере программы токарной обработки набор данных настройки загружается в модуль model-tuning/main.py с помощью prepare_tuning_dataset() :

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

Как упоминалось ранее, вы можете хранить набор данных в удобном формате, если вы можете извлекать запросы с соответствующими ответами и собирать их в текстовую строку, которая используется в качестве записи настройки.

Собрать тюнинговые записи

Для фактического процесса настройки программа объединяет каждый запрос и ответ в одну строку с подсказками и содержанием ответа. Затем программа настройки маркирует строку для использования моделью. Посмотреть код сборки записи настройки можно в функции prepare_tuning_dataset() модуля 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

Эта функция принимает данные в качестве входных данных и форматирует их, добавляя разрыв строки между инструкцией и ответом.

Генерация весов модели

После того как данные настройки собраны и загружены, вы можете запустить программу настройки. Процесс настройки для этого примерного приложения использует библиотеку Keras NLP для настройки модели с помощью метода адаптации низкого ранга или метода LoRA для создания новых весов модели. По сравнению с полной точной настройкой использование LoRA значительно более эффективно использует память, поскольку аппроксимирует изменения весов модели. Затем вы можете наложить эти приблизительные веса на существующие веса модели, чтобы изменить поведение модели.

Чтобы выполнить настройку и рассчитать новые веса:

  1. В окне терминала перейдите в каталог model-tuning/ .

    cd business-email-assistant/model-tuning/
    
  2. Запустите процесс настройки с помощью скрипта tune_model :

    ./tune_model.sh
    

Процесс настройки занимает несколько минут в зависимости от доступных вычислительных ресурсов. После успешного завершения программа настройки записывает новые файлы весов *.h5 в каталог model-tuning/weights следующего формата:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

Поиск неисправностей

Если настройка не завершилась успешно, возможны две причины:

  • Недостаточно памяти или ресурсы исчерпаны . Эти ошибки возникают, когда процесс настройки запрашивает память, превышающую доступную память графического процессора или памяти процессора. Убедитесь, что вы не запускаете веб-приложение во время процесса настройки. Если вы настраиваете устройство с 16 ГБ памяти графического процессора, убедитесь, что для token_limit установлено значение 256 , а batch_size установлено значение 1 .
  • Драйверы графического процессора не установлены или несовместимы с JAX . Для процесса преобразования требуется, чтобы на вычислительном устройстве были установлены аппаратные драйверы, совместимые с версией библиотек JAX . Более подробную информацию см. в документации по установке JAX .

Развертывание настроенной модели

Процесс настройки генерирует несколько весов на основе данных настройки и общего количества эпох, установленных в приложении настройки. По умолчанию программа настройки генерирует 3 файла весов модели, по одному для каждой эпохи настройки. Каждая последующая эпоха настройки создает веса, которые более точно воспроизводят результаты данных настройки. Вы можете увидеть показатели точности для каждой эпохи в выходных данных терминала процесса настройки следующим образом:

...
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

Хотя вы хотите, чтобы коэффициент точности был относительно высоким, около 0,80, вы не хотите, чтобы этот показатель был слишком высоким или очень близким к 1,00, поскольку это означает, что веса приблизились к переобучению данных настройки. Когда это происходит, модель не работает должным образом с запросами, которые существенно отличаются от примеров настройки. По умолчанию сценарий развертывания выбирает веса эпохи 3, которые обычно имеют точность около 0,80.

Чтобы развернуть сгенерированные веса в веб-приложении:

  1. В окне терминала перейдите в каталог model-tuning :

    cd business-email-assistant/model-tuning/
    
  2. Запустите процесс настройки с помощью скрипта deploy_weights :

    ./deploy_weights.sh
    

После запуска этого сценария вы должны увидеть новый файл *.h5 в каталоге email-processing-webapp/weights/ .

Протестируйте новую модель

После того как вы внедрили новые веса в приложение, пришло время опробовать недавно настроенную модель. Это можно сделать, перезапустив веб-приложение и сгенерировав ответ.

Чтобы запустить и протестировать проект:

  1. В окне терминала перейдите в каталог email-processing-webapp :

    cd business-email-assistant/email-processing-webapp/
    
  2. Запустите приложение с помощью скрипта run_app :

    ./run_app.sh
    
  3. После запуска веб-приложения в программном коде указан URL-адрес, по которому вы можете просмотреть и протестировать, обычно это следующий адрес:

    http://127.0.0.1:5000/
    
  4. В веб-интерфейсе нажмите кнопку «Получить данные» под первым полем ввода, чтобы сгенерировать ответ модели.

Теперь вы настроили и развернули модель Gemma в приложении! Поэкспериментируйте с приложением и попытайтесь определить пределы возможностей генерации настроенной модели для вашей задачи. Если вы обнаружите сценарии, в которых модель работает не очень хорошо, рассмотрите возможность добавления некоторых из этих запросов в список данных примера настройки, добавив запрос и предоставив идеальный ответ. Затем повторно запустите процесс настройки, повторно примените новые веса и протестируйте выходные данные.

Дополнительные ресурсы

Дополнительную информацию об этом проекте можно найти в репозитории кода Gemma Cookbook . Если вам нужна помощь в создании приложения или вы хотите сотрудничать с другими разработчиками, посетите сервер Discord сообщества разработчиков Google . Дополнительные сведения о проектах Build with Google AI можно найти в плейлисте видео .