Демо: Ассистент умного дома
Demo code: a smart home assistant that uses TypeSafe to evaluate user requests.
Демонстрационный проект: ассистент умного дома, использующий TypeSafe для оценки запросов пользователя.
Посмотрите в действии
Как это работает
Спекулятивный веерный опрос (Speculative fan-out)
Основной паттерн, продемонстрированный здесь, — это спекулятивный веерный опрос. Каждый запрос пользователя оценивается по обширному списку вопросов, включая многие, которые для большинства запросов окажутся нерелевантными.
Рассмотрим следующий запрос пользователя:
«Выключи весь свет в доме»
Это очень простой запрос, и нашему коду потребуется учесть ответы только на следующие вопросы:
- «К какой категории относится этот запрос?» (команда умного дома)
- «На какую область направлен этот запрос?» (весь дом)
- «На какой тип устройств направлен этот запрос?» (освещение)
- «Какое действие необходимо выполнить с освещением?» (выключить)
Обратите внимание, что последний вопрос сформулирован с предположением, что пользователь отдает команду освещению, и мы задаем его до того, как точно узнаем, о чем именно просит пользователь. Это то, что мы называем «спекулятивным вопросом» — мы задаем его заранее, еще не зная, актуален ли он, что позволяет оценивать все вопросы параллельно и полагаться на код для фильтрации нерелевантных результатов post factum. Это ключевой паттерн для построения систем, способных обрабатывать огромное разнообразие запросов пользователей единым набором вопросов.
Неверный путь: последовательные вызовы API
Неверным подходом было бы разделение вопросов на несколько последовательных вызовов API с ожиданием перед каждым вопросом, пока вы не будете уверены, что ответ действительно нужен:
- «К какой категории относится этот запрос?» (команда умного дома)
Затем, только когда вы выяснили, что это команда умного дома:
- «На какую область направлен этот запрос?» (весь дом)
- «На какой тип устройств направлен этот запрос?» (освещение)
Затем, только когда вы узнали, что цель — освещение:
- «Какое действие необходимо выполнить с освещением?» (выключить)
Такой подход оптимизирует минимальное количество вопросов, но на практике оказывается значительно медленнее и дороже, чем пакетная отправка всех вопросов в одном упреждающем вызове API.
Совместное использование TypeSafe и LLM
В этой демонстрации также показано, как TypeSafe можно комбинировать с LLM для обслуживания системы, в которой иногда требуется этап генерации текста:
Разделение составного запроса пользователя: один из вопросов в этом демо — вопрос типа Noul, определяющий, запрашивает ли пользователь более одного отдельного действия. Если ответ положительный, система использует LLM для разбиения запроса на список атомарных команд. Затем полученные команды оцениваются в TypeSafe по отдельности.
Фолбэк на диалоговую LLM: когда TypeSafe определяет, что запрос пользователя является обращением за общей информацией или беседой, система вызывает LLM для генерации ответа в свободной форме. Это позволяет интерактивной системе обрабатывать запросы с известным детерминированным поведением быстро и экономично, сохраняя при этом гибкость генеративной LLM при необходимости. Первоначальный ответ TypeSafe возвращается настолько быстро по сравнению с генерацией LLM, что практически не добавляет задержки ко времени отклика всей системы.
Запустите самостоятельно
Это демонстрационное приложение представляет собой простой одностраничный проект на Vite/React, использующий API TypeSafe для оценки запросов пользователей. Полный исходный код доступен на GitHub. Файл README содержит инструкции по локальному запуску и описание того, какие части исходного кода отвечают за соответствующие функции демо.