Документация

Демо умного домашнего помощника

Код демо: умный домашний помощник, который использует TypeSafe для оценки запросов пользователя.

Посмотрите в действии

Как это работает

Спекулятивный fan-out

Главный паттерн, демонстрируемый здесь, — спекулятивный fan-out. Каждый запрос пользователя оценивается по длинному списку вопросов, включая многие, которые окажутся нерелевантными для большинства запросов.

Рассмотрим следующий запрос пользователя:

«Выключи весь свет в доме»

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

  • «К какой категории относится этот запрос?» (команда умного дома)
  • «На какой домен нацелен этот запрос?» (весь дом)
  • «На какой тип устройства нацелен этот запрос?» (свет)
  • «Какое действие нужно выполнить со светом?» (выключить)

Заметьте, что последний вопрос написан в предположении, что пользователь отдаёт команду свету, и мы задаём его до того, как узнаём, что пользователь на самом деле запрашивает. Это то, что мы называем «спекулятивным вопросом»: мы задаём его ещё до того, как узнаём, релевантен ли он, — это позволяет оценивать все вопросы параллельно и полагаться на код, который отфильтрует нерелевантные результаты постфактум. Это ключевой паттерн для построения систем, способных обрабатывать самые разные запросы пользователей одним набором вопросов.

Неправильный путь: последовательные вызовы API

Неправильный путь — разделить вопросы на несколько вызовов API, откладывая вопросы до тех пор, пока не убедитесь, что ответ нужен:

  • «К какой категории относится этот запрос?» (команда умного дома)

Затем, только когда вы знаете, что это команда умного дома:

  • «На какой домен нацелен этот запрос?» (весь дом)
  • «На какой тип устройства нацелен этот запрос?» (свет)

Затем, только когда вы знаете, что он нацелен на свет:

  • «Какое действие нужно выполнить со светом?» (выключить)

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

Сочетание TypeSafe и LLM

Это демо также показывает, как TypeSafe можно сочетать с LLM, чтобы обслуживать систему, которой иногда нужен шаг генерации строки:

Разделение составного запроса пользователя: Один из вопросов в этом демо — вопрос Noul, определяющий, просит ли запрос пользователя больше одного отдельного действия. Если это так, система использует LLM, чтобы разделить запрос на список атомарных команд. Затем разделённые запросы оцениваются TypeSafe по отдельности.

Откат к разговорной LLM: Когда TypeSafe определяет, что запрос пользователя — это просьба об общей информации или беседе, система вызывает LLM, чтобы сгенерировать свободный ответ. Это позволяет интерактивной системе обрабатывать запросы с известным детерминированным поведением быстро и экономично, по-прежнему допуская гибкость генеративной LLM, когда она нужна. Первоначальный ответ TypeSafe настолько быстр по сравнению с ответом LLM, что добавляет к системе в целом пренебрежимо малую задержку.

Запустите сами

Это демо — простое одностраничное приложение Vite/React, которое использует API TypeSafe для оценки запросов пользователя. Полный исходный код будет доступен на GitHub к релизу. Его README содержит инструкции по локальному запуску демо и обзор того, какие части исходного кода отвечают за какие части демо.