Написать в Telegram

LiveKit: как собрать голосового ИИ-агента с камерой, поиском и управлением браузером. Пошагово

Содержание
  1. Что получится в итоге
  2. Что понадобится
  3. Шаг 1. Создаём проект в LiveKit Cloud
  4. Шаг 2. Создаём агента из шаблона
  5. Шаг 3. Первый запуск
  6. Шаг 4. Задаём характер
  7. Шаг 5. Подключаем Gemini
  8. Шаг 6. Включаем зрение
  9. Шаг 7. Даём инструмент поиска
  10. Шаг 8. Подключаем кодинг-агента OpenCode
  11. Шаг 9. Учим агента управлять браузером
  12. Шаг 10. Своё веб-приложение
  13. Шаг 11. Запуск на телефоне
  14. Если вы работаете из России
  15. Что важно знать до старта
  16. Что дальше

Большинство ИИ-помощников живут в чате. Но когда руки заняты, печатать неудобно: нужен помощник, с которым можно говорить. А если он ещё и видит, что у вас в кадре, и сам ищет информацию, это уже рабочий инструмент.

LiveKit это фреймворк с открытым кодом для голосовых ИИ-агентов. Он берёт на себя передачу звука и видео в реальном времени, а вам остаётся описать роль агента и его инструменты. Голосовые агенты сейчас быстро выходят за пределы справочных линий, поэтому разберём сборку по шагам.

Что получится в итоге

Голосовой дворецкий Джарвис. Он отвечает голосом, видит через камеру, ищет в интернете, открывает сайты и нажимает на ссылки. Работает в браузере, в собственном веб-приложении и на телефоне. Роль можно взять любую: консультант по товарам, помощник оператора, голосовой справочник для сотрудников.

Что понадобится

  • Python 3.10 или новее и uv. Так требует документация LiveKit. uv это менеджер пакетов для Python.
  • Node.js и VS Code. Node.js нужен для веб-интерфейса. Вместо VS Code подойдёт другой редактор, например Cursor.
  • LiveKit CLI и аккаунт LiveKit Cloud. Облако бесплатно до 1000 минут в месяц, это около 16 часов.
  • Ключ Gemini API. Он нужен для модели, которая говорит и видит.

Команды установки Python, uv, Node.js и CLI для вашей системы есть в документации и на сайтах программ.

Шаг 1. Создаём проект в LiveKit Cloud

Войдите на сайте LiveKit, например, через аккаунт Google. Анкету можно заполнить как угодно. Создайте проект и дайте ему имя. Наблюдение за агентом (observability) на старте отключите. Откроется панель с номером проекта, регионом и счётчиком агентов.

Панель LiveKit Cloud: созданный проект и его обзор
Панель LiveKit Cloud: созданный проект и его обзор

Шаг 2. Создаём агента из шаблона

В терминале VS Code войдите в аккаунт:

lk cloud auth

Программа попросит назвать устройство и откроет браузер: выберите проект и разрешите доступ. Согласитесь сделать его проектом по умолчанию. Теперь команда из документации создаёт агента из готового шаблона:

lk agent init my-agent --template agent-starter-python

Вместо my-agent в примере указано jarvis. Команда скачивает шаблон, создаёт файл .env.local с данными LiveKit и предлагает поставить зависимости. Соглашайтесь.

Документация LiveKit: команда создания агента из шаблона и что она делает
Документация LiveKit: команда создания агента из шаблона и что она делает

Шаг 3. Первый запуск

Перейдите в папку агента и запустите его:

cd jarvis

lk agent dev

Откройте ссылку из терминала, нажмите запуск сессии и скажите что-нибудь. Агент ответит голосом, а реплики появятся в консоли. Справа видны три части агента: языковая модель, распознавание речи и синтез речи. Каждую можно заменить.

Консоль агента в браузере: вопрос и голосовой ответ с текстом реплик
Консоль агента в браузере: вопрос и голосовой ответ с текстом реплик

Шаг 4. Задаём характер

В файле src/agent.py есть блок instructions: системный промт, то есть инструкция, как вести себя агенту. Менять её можно обычными словами. В примере смысл такой:

Ты Джарвис, полезный и саркастичный ИИ-дворецкий. Обращайся к пользователю «сэр». Пример. Пользователь: «Джарвис, сделай для меня такую-то задачу». Джарвис: «Конечно, сэр, как пожелаете. Сейчас сделаю такую-то задачу».

Новые правила и запреты добавляйте в тот же блок. Сохраните файл сочетанием Ctrl+S.

Шаг 5. Подключаем Gemini

Шаблон собирает голос из трёх частей. Заменим их одной моделью реального времени: у неё малая задержка, она понимает несколько языков и принимает видео. В примере взята gemini-3.1-flash-live-preview.

  • Плагин. Поставьте пакет Gemini для LiveKit командой из документации и добавьте google в импорт livekit.plugins.
  • Код. Замените блок языковой модели на google.beta.realtime.RealtimeModel с моделью, голосом и языком. В примере голос Enceladus, британский акцент, язык en-GB.
  • Ключ. Создайте ключ в документации Gemini API кнопкой создания ключа и запишите его в .env.local.
  • Лишнее. Строки распознавания и синтеза речи (STT и TTS) удалите.
Код agent.py: модель Gemini реального времени с голосом и языком
Код agent.py: модель Gemini реального времени с голосом и языком

В примере модель бесплатна. Запросов в минуту и в сутки можно слать без ограничений, а токенов в минуту 65 000. Агент тратит около 15 000, так что лимит помешает, только если работают четыре агента и больше. Условия могут измениться, проверьте их у себя.

Шаг 6. Включаем зрение

В блоке room_options файла agent.py добавьте строку:

video_input=True

Добавьте зависимость livekit-agents-images командой uv add и перезапустите агента. Включите камеру и спросите, что он видит: в примере агент описал рубашку и микрофон. Просьба заговорить по-немецки тоже сработала сразу. Есть ограничение: текстовый чат с этой моделью не работает.

Параметр video_input=True в настройках комнаты агента
Параметр video_input=True в настройках комнаты агента

Шаг 7. Даём инструмент поиска

Инструмент это функция, которую агент вызывает сам. Добавьте зависимости langchain-community и ddgs командой uv add и создайте файл src/tools.py. В нём асинхронная функция search_web: принимает запрос, пишет его в журнал, ищет через бесплатный DuckDuckGo и возвращает результат. Короткое описание внутри функции подсказывает агенту, когда её вызывать. Над ней ставится декоратор @function_tool.

Файл tools.py: функция search_web с описанием и поиском через DuckDuckGo
Файл tools.py: функция search_web с описанием и поиском через DuckDuckGo

Передайте функцию агенту в параметре tools и добавьте в промт правило:

Используй инструмент search_web, если пользователь просит найти информацию.

Проверить можно прямо в терминале:

uv run src/agent.py console

На вопрос о погоде в примере агент ответил, а в журнале виден вызов поиска. Остановить разговор можно сочетанием Ctrl+C. Так добавляется любая способность: имя параметра говорит, что передавать, описание говорит, когда вызывать, а внутри можно написать любую логику.

Шаг 8. Подключаем кодинг-агента OpenCode

Писать код руками необязательно. В примере дальше работает OpenCode: кодинг-агент с открытым кодом и бесплатными моделями, похожий на Claude Code. Подойдут и Claude Code, и Codex. Установите его по документации (есть вариант через npm), запустите opencode и командой /models проверьте модель. В примере выбрана бесплатная Big Pickle.

Чтобы агент знал LiveKit, подключите MCP-сервер документации. Это удалённый сервер, через который агент получает внешние инструменты. Поручите настройку самому агенту:

Вот руководство по настройке MCP-сервера. Создай файл opencode.json и добавь в него MCP-сервер LiveKit.

Агент создал opencode.json с записью об удалённом сервере. Конфигурация подхватывается после перезапуска: закройте терминал, снова запустите opencode, вернитесь в сессию командой /session и проверьте /mcp. Сервер должен быть в списке подключённых.

Файл opencode.json: MCP-сервер документации LiveKit добавлен кодинг-агентом
Файл opencode.json: MCP-сервер документации LiveKit добавлен кодинг-агентом

Шаг 9. Учим агента управлять браузером

Для этого есть Playwright, набор инструментов для управления Chrome. Не просите писать код сразу. Командой /agents переключитесь в режим Plan: он ничего не меняет, а только составляет план. Режим Build, наоборот, делает всё немедленно.

Составь план: добавить весь функционал Playwright в голосового агента через дополнительные инструменты, чтобы он полностью управлял браузером.

В примере план оказался разумным: поставить зависимости, создать browser.py со всеми инструментами, подключить их в agent.py и дописать в промт, как ими пользоваться. Среди инструментов открытие и закрытие браузера, переход по адресу, возврат назад, клик, ввод текста, снимок экрана, чтение страницы и вкладки. Агент спросил, делать открытие и переключение вкладок одним инструментом или двумя, и рекомендовал два.

План кодинг-агента: список инструментов для управления браузером и вопрос о вкладках
План кодинг-агента: список инструментов для управления браузером и вопрос о вкладках

Вернитесь в режим Build и подтвердите: два отдельных инструмента. Перезапустите агента и проверьте голосом. В примере он по камере увидел белую футболку, по просьбе открыл DuckDuckGo, нашёл такие футболки и перешёл по первой ссылке с Amazon. Потом вернулся назад, открыл Google и показал на карте маршрут пешком и на транспорте.

Браузер, которым управляет голосовой агент: открыта выдача DuckDuckGo по запросу
Браузер, которым управляет голосовой агент: открыта выдача DuckDuckGo по запросу

Почему не поручить кодинг-агенту всё с самого начала? Аккаунты и пароли всё равно настраиваются руками, а понимание устройства помогает направлять агента и проверять его план.

Шаг 10. Своё веб-приложение

Консоль годится для проб, а для работы лучше свой интерфейс. У LiveKit есть стартовые приложения, среди них шаблон Next.js для голосового агента. Дайте ссылку на его репозиторий кодинг-агенту:

Скачай этот интерфейс в наш проект в папку frontend и установи всё необходимое.

Агент спросит разрешение прочитать .env.local с ключами: разрешайте один раз. Затем запустите агента, а в папке frontend интерфейс командой pnpm dev или npm run dev. Ошибку при запуске просто вставьте кодинг-агенту: в примере он исправил её сам.

Интерфейс локальный, поэтому его можно менять. Анимацию агента задают через Agents UI: пять стилей (aura, wave, radial, grid, bar) и цвет, который выбирается ползунком. В примере выбраны сетка и оранжевый цвет, а изменение сделал кодинг-агент. В интерфейсе есть и кнопка показа экрана: агент описал содержимое окна VS Code.

Выбор стиля визуализатора и цвета для агента: сетка из точек и ползунок оттенка
Выбор стиля визуализатора и цвета для агента: сетка из точек и ползунок оттенка

Шаг 11. Запуск на телефоне

У LiveKit есть шаблон на Flutter для Android и iOS. Кодинг-агенту достаточно сказать скачать проект в вашу папку. Дальше:

  • Файл с адресом. В папке assets переименуйте файл с окончанием .example в .env.
  • Идентификатор. В настройках LiveKit Cloud включите сервер токенов для разработки (development token server), сохраните изменения и скопируйте его идентификатор в поле sandbox ID файла .env.
  • Flutter. Поставьте расширение Flutter в VS Code, а сам Flutter поручите установить кодинг-агенту. Проверка: flutter --version. В примере это версия 3.47.
  • Телефон. На Android включите режим разработчика, нажав на номер сборки несколько раз, затем отладку по USB. Подключите телефон кабелем.
  • Запуск. Выполните flutter devices, затем flutter pub get, затем flutter run -d с именем устройства. Агент при этом тоже должен быть запущен.

На iPhone порядок тот же, только режим разработчика включается иначе. В примере на телефоне агент увидел монитор и по просьбе нашёл информацию в интернете. Управление браузером работает только на компьютере.

Если вы работаете из России

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

Больше вопросов к Gemini: сервисы Google из России могут не открываться. Но модель реального времени в шаблоне это замена, а исходная схема собрана из трёх частей, и каждую можно взять другой:

  • Языковая модель. Открытая модель на своём сервере или российская модель, если она подходит по смыслу.
  • Распознавание и синтез речи. Открытые модели у вас на сервере. Качество для русского языка проверьте заранее.
  • Кодинг-агент. OpenCode открытый и работает с разными моделями.
  • Поиск. DuckDuckGo заменит любой доступный поисковик: инструмент это обычная функция.

Платой за замену станет задержка: у модели реального времени она малая, у связки из трёх моделей обычно больше.

Что важно знать до старта

  • Модель с пометкой preview. Это предварительная версия, лимиты и условия могут измениться.
  • Нет текстового чата. С этой моделью работает только голос.
  • Ключи в .env.local. Не передавайте файл посторонним и не выкладывайте. Кодинг-агент просит разрешение его прочитать: давайте его по одному разу.
  • Камера и экран уходят во внешний сервис. Не включайте их там, где на виду конфиденциальные данные.
  • Агент действует в браузере сам. Он кликает и вводит текст. Не давайте ему доступ к платежам и рабочим аккаунтам: страница может содержать текст, похожий на команду, и агент способен принять его за указание.
  • Кодинг-агенту нужен надзор. Сначала план, потом сборка: так видно, что он собирается менять.
  • Сложное лучше делать платными инструментами. Например, управление браузером с телефона на бесплатных получается хуже.

Что дальше

Главное в этой сборке не Джарвис, а порядок: роль в промте, одна функция на одну способность и описание, по которому агент понимает, когда её вызвать. Так добавляется что угодно: запрос в CRM, проверка остатков, создание заявки.

Мы в Агентехе учим сотрудников собирать голосовых и текстовых ИИ-агентов под задачи своего отдела: от формулировки роли и инструментов до безопасной работы с ключами и данными. Как устроено обучение.

Написать в Telegram