Создание чатбота с искусственным интеллектом с помощью FastChat и JavaScript

Создание чатбота с искусственным интеллектом с помощью FastChat и JavaScript

Содержание
  1. Настройка FastChat
  2. Выбор подходящей языковой модели
  3. Вот сравнение некоторых коммерчески доступных LLM:
  4. Запуск контроллера FastChat
  5. Создание пользовательского интерфейса
  6. Создание простого веб-приложения для чат-бота
  7. Заключение

Согласно недавнему исследованию Salesforce, 23 % сервисных компаний в настоящее время используют чат-боты, и ожидается, что в ближайшие восемнадцать месяцев этот процент более чем удвоится. FastChat - это платформа для обучения, обслуживания и оценки больших языковых моделей, которые стоят за многими из этих чат-ботов.

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

Настройка FastChat

FastChat доступен как библиотека Python с открытым исходным кодом и может быть установлен с помощью pip:

pip3 install "fschat[model_worker,webui]"

Приведенная выше команда устанавливает fschat вместе с двумя дополнительными модулями: model_worker для работы с различными моделями, которые может обслуживать FastChat, и webui для размещения веб-интерфейса для взаимодействия с моделью чатбота.

Платформа FastChat предоставляет доступ к нескольким моделям чатботов, и каждая модель назначается работнику (отсюда и название model_worker). Доступ к моделям чатботов осуществляется через полностью совместимый с OpenAI API-сервер и может быть использован непосредственно с библиотекой openai-python.

Это довольно продуманный дизайн; вы можете протестировать различные модели в своем чатботе, просто изменив URL, который вы используете для обращения к различным работникам. Самое главное, что любое существующее приложение, использующее API OpenAI, может легко использовать сервер FastChat без каких-либо изменений в исходном коде.

Выбор подходящей языковой модели

Слово “large” в слове large language model (LLM) - это намек на то, что нам потребуется большой объем памяти и вычислительной мощности для обучения новой модели для генеративного вывода. К счастью, существует довольно обширный список языковых моделей, совместимых с FastChat.

Чтобы выбрать модель, наиболее подходящую под требования вашего проекта, учитывайте наличие аппаратных ресурсов (GPU, память GPU и/или память CPU) и то, сколько денег вы хотите вложить в облачный сервис.

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

Вот сравнение некоторых коммерчески доступных LLM:

GPT-3: Эта универсальная языковая модель от OpenAI отлично справляется с широким спектром задач по обработке естественного языка. Ее сильной стороной является генерация связного и контекстуально релевантного текста, что делает ее подходящей для таких задач, как создание контента, заполнение текста, создание чат-ботов и творческих текстов. Обширная база знаний позволяет ему отвечать на вопросы и давать объяснения в различных областях BERT (Bidirectional Encoder Representations from Transformers): Эта модель, разработанная компанией Google, известна своим пониманием контекста и контекстно-зависимых значений слов. Двунаправленное обучение позволяет ей улавливать нюансы языка, что делает ее отличным выбором для задач, требующих глубокого понимания. Эта модель особенно эффективна для таких задач, как анализ настроения, распознавание именованных сущностей, классификация текстов и генерация ответов T5 (Text-to-Text Transfer Transformer): Эта модель, также разработанная Google, предназначена для решения широкого спектра задач обработки естественного языка с помощью единой схемы преобразования ”текст в текст”. Она рассматривает каждую задачу как проблему генерации текста, включая резюмирование, перевод, классификацию и многое другое. Такой подход упрощает архитектуру модели и делает ее адаптируемой для решения различных задач

Для обучающей части этой статьи мы будем использовать модель google/flan-t5-large. Она комфортно работает на среднем ноутбуке, но достаточно мощная для плодотворного взаимодействия. Она вдохновлена моделью T5 от Google, но я могу запустить ее на среднем ноутбуке (так что она не такая уж и большая 🙂 ).

Для начала установите модель с помощью следующей команды:

python3 -m fastchat.serve.model_worker --model-path google/flan-t5-large

Эта команда устанавливает model_worker, который будет загружать веса модели и развертывать подходящий API для взаимодействия с указанной моделью. Приведенная выше командная строка принимает --device cpu в качестве дополнительного параметра, позволяя модели работать на CPU и полагаться только на оперативную память, а не на VRAM вашего GPU.

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

python3 -m fastchat.serve.cli --model-path google/flan-t5-large --device cpu

Запуск контроллера FastChat

Контроллер является центральным элементом архитектуры FastChat. Он организует обращения к экземплярам любой запущенной вами model_worker и проверяет состояние этих экземпляров с помощью периодического сердцебиения.

Этот механизм хорошо показан на следующей диаграмме из репозитория FastChat GitHub:

Веб-интерфейс для рабочих FastChat представляет собой определенный сервер Gradio, на котором размещены все компоненты пользовательского интерфейса, необходимые для взаимодействия с моделями. Контроллерr - это компонент, который отображает интерфейс OpenAI API и взаимодействует с различными рабочими, как показано на схеме выше.

Механизм контроллера не зависит от типа используемого вами рабочего: допустимы как локальные, так и облачные рабочие. Используйте следующую команду для запуска контроллера, который будет слушать подключение model_worker:

python3 -m fastchat.serve.controller

Контроллер будет использовать виртуальный сервер http://localhost:21001/ для обработки соединения до тех пор, пока будет доступен новый модель_работника.

Создание пользовательского интерфейса

Самый быстрый способ создать пользовательский интерфейс чатбота - использовать модуль webui. Этот модуль использует Gradio, библиотеку веб-компонентов, разработанную для упрощения развертывания пользовательского интерфейса для взаимодействия с конвейерами искусственного интеллекта и общения с чатботами.

Модуль webui, доступный в файле gradio_web_server.py в репозитории FastChat, предоставляет простой пользовательский интерфейс, который будет обращаться к правильной model_worker:

Веб-приложение будет доступно на http://localhost:7860/ и будет обрабатывать взаимодействие с моделью.

Создание простого веб-приложения для чат-бота

Давайте создадим простое веб-приложение, написанное на JavaScript, которое использует OpenAI API, размещенный на FastChat.

Как и следовало ожидать, нам понадобится model_worker, а также контроллер для работы с ним. На этот раз мы будем использовать openai_api_server для размещения OpenAI API. Это будет полноценный OpenAI API, но, поскольку мы разместим его на нашем оборудовании с предварительно обученной моделью, он не потребует ключа API.

Код для этого примера доступен на GitHub. Три Python-скрипта должны быть запущены каждый в своем окне оболочки.

Сначала запустите контроллер:

python3 -m fastchat.serve.controller

Затем запустите рабочий(ые) модуль(ы):

python3 -m fastchat.serve.model_worker --model-path google/flan-t5-large

Наконец, запустите сервер RESTful API:

python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

Теперь давайте протестируем сервер API. После запуска сервера API OpenAI вы сможете взаимодействовать с ним по адресу http://localhost:8000.

Для проверки достаточно выполнить быстрый curl:

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "google/flan-t5-large", "messages": [{ "role": "user", "content": "Hello! What is your name?"}] }''

В директории /node-webui вы найдете единственный файл index.html, содержащий минимальное количество кода, необходимого для взаимодействия с OpenAI API через пользовательский интерфейс с помощью простого JavaScript:

Вот соответствующий код:

const apiKey = "YOUR_OPENAI_API_KEY"; ... try { const response = await fetch('http://localhost:8000/v1/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': Bearer ${apiKey} }, body: JSON.stringify({ model: "flan-t5-large", prompt: input, max_tokens: 50 }) });

Интерфейс может быть не очень интересным, но главное здесь - взаимодействие с API OpenAI. Как вы можете видеть, здесь есть простой вызов API с передачей стандартных параметров API.

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

В заголовке есть еще один параметр, поле Authorization, которое в стандартном OpenAI содержит ключ API, который нам придется купить. В случае с этим демо этот API-ключ - просто строка, которая никак не будет использоваться, поскольку модель работает только на нашей инфраструктуре (в моем случае это мой ноутбук).

Заключение

FastChat - это замечательный пакет, предназначенный для бенчмаркинга, взаимодействия и экспериментов с множеством LLM. Он предлагает быстрый способ создания веб-интерфейса чата с помощью Gradio, стандартного фреймворка для создания веб-приложений машинного обучения.

FastChat полезен для тестирования модели, но в самом общем случае, когда вы размещаете собственное приложение, вы также можете получить соответствующий OpenAI API, который будет поддерживать любой уже существующий код, совместимый с ним.

Архитектура FastChat также особенно эффективна с точки зрения расширения: можно разместить больше LLM, чтобы тестировать их бок о бок на одних и тех же входных данных, или, например, иметь специализированные LLM, которые можно оркестровать для выполнения определенной задачи.