Transformers.js можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Transformers.js загружает модель и выполняет pipeline анализа тональности в браузере без собственного Python-сервера. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.
Кнопка «анализировать» кажется простой, но первый запуск загружает веса, результат зависит от модели, а label нельзя показывать как абсолютную истину. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте страницу с текстовым полем, индикатором загрузки и локальной классификацией positive/negative со score. Проверка: после первой загрузки две тестовые фразы получают разные метки, кнопка не запускает параллельные запросы, а пустой ввод отклоняется.
создать textarea, кнопку, статус и результат. Не расширяйте проект до первого успешного запуска.
первая загрузка показывает ожидание. Проверяйте значение, а не отсутствие ошибки.
После успеха добавьте выбор из двух тестовых фраз и время первого и повторного inference. Так копирование станет практикой.
Как устроен учебный проект Transformers.js
UI собирает текст, singleton-функция один раз создаёт pipeline, модель токенизирует строку и возвращает список категорий со score. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.
| Этап | Действие | Проверяемый результат |
|---|---|---|
| Интерфейс | создать textarea, кнопку, статус и результат | пустой ввод не запускает модель |
| Модель | лениво создать pipeline sentiment-analysis | первая загрузка показывает ожидание |
| Inference | передать очищенный текст и дождаться Promise | результат содержит label и score |
| Проверка | сравнить две контрастные фразы | метки различаются, а UI разблокируется после ошибки |
Контрольные точки: интерфейс, модель, inference и проверка. Следующий шаг начинается после совпадения с ожидаемым результатом.

От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.
Собираем рабочий пример шаг за шагом
Пример сверялся с актуальной документацией официальной документации Transformers.js на 19 октября 2026 года. Создайте Vite-проект и установите @huggingface/transformers. Запускайте через локальный сервер, чтобы модули и файлы модели загружались корректно. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.
import { pipeline } from '@huggingface/transformers'
const input = document.querySelector('#text')
const button = document.querySelector('#analyze')
const output = document.querySelector('#result')
let classifierPromise
function getClassifier() {
classifierPromise ??= pipeline('sentiment-analysis')
return classifierPromise
}
button.addEventListener('click', async () => {
const text = input.value.trim()
if (!text) {
output.textContent = 'Введите текст'
return
}
button.disabled = true
output.textContent = 'Модель загружается или считает…'
try {
const classifier = await getClassifier()
const [result] = await classifier(text)
output.textContent = result.label + ': ' + (result.score * 100).toFixed(1) + '%'
} catch (error) {
console.error(error)
output.textContent = 'Не удалось загрузить модель'
} finally {
button.disabled = false
}
})- Первый клик дольше из-за загрузки модели, следующие используют уже созданный pipeline.
- Результат содержит метку и score, отформатированный как процент, но не выдаётся за психологический диагноз.
- Повторный запуск даёт тот же предсказуемый результат.
- Пустой ввод получает понятное сообщение вместо падения.
Кешируется Promise создания pipeline, поэтому параллельные вызовы не создают несколько тяжёлых экземпляров модели. Найдите в примере вход, проверку и место формирования результата.

Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.
Что происходит внутри и почему это работает
Pipeline объединяет токенизатор, модель и постобработку для выбранной задачи. В браузере вычисления обычно идут через ONNX Runtime; доступный backend и производительность зависят от устройства. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. После первой загрузки файлы могут попасть в браузерный кеш, но это не гарантирует полный офлайн на любом хостинге. Если нужен офлайн, контролируйте размещение модели, кеш и политику приложения.
| Часть | За что отвечает | Что проверить |
|---|---|---|
| Tokenizer | превращает строку в последовательность токенов | длинный текст обрезается по правилам модели |
| Model | вычисляет вероятности категорий на устройстве | первый запуск учитывает время загрузки |
| UI | показывает статус, результат и ошибку | кнопка блокируется на время inference |
Score показывает уверенность модели внутри её набора категорий, а не истинность утверждения. Модель может быть обучена на английском и плохо понимать русский. Перед продуктовым использованием читайте model card, язык, датасет, лицензию и ограничения. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.
Проверяем проект и добавляем свою функцию
Добавьте историю последних пяти анализов и кнопку очистки. Не храните текст автоматически, пока пользователь явно не выбрал сохранение. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.
- Сохраните ожидаемый результат: после первой загрузки две тестовые фразы получают разные метки, кнопка не запускает параллельные запросы, а пустой ввод отклоняется.
- Измените правило: добавьте выбор из двух тестовых фраз и время первого и повторного inference. Сначала предскажите итог.
- Передайте граничное значение и убедитесь, что приложение не падает.
- Верните корректные данные и объясните роли трёх основных частей.
- пустой ввод не запускает модель
- первая загрузка показывает ожидание
- результат содержит label и score
- метки различаются, а UI разблокируется после ошибки
В локальном AI-проекте важно показывать не только label, но и стоимость загрузки, язык модели и ограничение результата. Полезная правка проходит от нового ввода до видимого результата.

Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.
Что запомнить и куда двигаться дальше
Следующий шаг - выбрать модель под русский язык, изучить model card и вынести inference в Worker, если интерфейс заметно блокируется. Для закрепления откройте в локальном чат-боте WebLLM, в AI-расширении Chrome и в управлении жестами MediaPipe.
Как изучить тему в Кодике
Повторите Promise, async/await и модули, затем изучите токены, pipeline и model card. Сначала восстановите главную функцию и проверьте её на трёх значениях.
| Шаг | Что разобрать | Мини-проверка |
|---|---|---|
| 1. Основа | События, async/await и состояния кнопки | Объясните вход и выход функции. |
| 2. Инструмент | pipeline, задача sentiment-analysis и кеширование модели | Повторите команду по памяти. |
| 3. Проект | Две контрольные фразы и обработку ошибки | Проверьте два сценария. |
| 4. Рефакторинг | Выбор модели, Worker и приватность текста | Разделите ввод, логику и вывод. |
Сравните результат с простым словарным правилом и объясните, где модель даёт ценность, а где добавляет вес и неопределённость. Базовый синтаксис закрепите через курс по генеративному ИИ.
Модель загружается повторно и расходует память. Кешируйте Promise или экземпляр.
Пользователь нажимает кнопку несколько раз. Блокируйте действие и показывайте прогресс.
Высокий score не спасает неподходящие данные. Читайте model card.
Это уверенность конкретного предсказания, а не измеренная accuracy продукта.
Что получится в итоге

Так выглядит законченный учебный проект: есть понятный вход, видимый результат, защита от неверных данных и место для следующего улучшения.
Что делает pipeline?
Собирает токенизацию, выполнение модели и преобразование сырых выходов для выбранной задачи.
Почему первый запуск медленнее?
Браузеру нужно загрузить файлы модели и подготовить runtime перед inference.
Что проверять первым, если Transformers.js не запускается?
Версию среды, текущую папку, команду запуска и первую строку ошибки.
Как понять, что проект Transformers.js работает?
Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.
Можно ли начать с готового кода?
Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.
Выберите одно улучшение и проведите его от ввода до результата.
Если не хватает основы, перейдите курс по генеративному ИИ, затем восстановите ключевую функцию без подсказки.