Как создать голосового агента

Анастасия Каримова рассказала о том, как создать голосового агента для поддержки с помощью Realtime API в Yandex AI Studio.

*https://www.youtube.com/live/JAcaGNmgG2U
**https://300.ya.ru/v_8EFWt4kT

таймкоды

00:00:10 Введение

  • Заключительный вебинар по A-Studio.
  • Обсуждение создания голосовых агентов.
  • Анонс офлайн-встречи для активных участников.

00:01:09 Фокус вебинара

  • Фокус на понимании процесса создания голосового агента, а не на переписывании кода.
  • Код будет предоставлен на GitHub для экспериментов.
  • Основные моменты работы с Realtime API.

00:01:50 История технологий автоматизации голоса

  • Эволюция технологий: от фиксированных сценариев до естественного взаимодействия.
  • Появление распознавания и синтеза речи.
  • Развитие диалоговых платформ.

00:02:42 Развитие диалоговых технологий

  • Переход от жёстких сценариев к более естественному общению.
  • Надежда на использование естественного языка с развитием LLM.
  • Ограничения LLM и необходимость чёткой постановки задач.

00:03:59 Определение голосового агента

  • Голосовой агент как паттерн построения приложений.
  • Роль LLM как центра управления.
  • Инструкция как ТЗ для LLM.

00:05:19 Компоненты текстового агента

  • Инструменты для работы с данными: Excel, CRM.
  • Реализация памяти для связанности диалога.
  • Итеративное заполнение информации для выполнения действий.

00:06:01 Структура текстового агента

  • LLM действует по инструкции.
  • Подключение тулов через механизм funtion colliding.
  • Память для сохранения контекста предыдущего общения.

00:06:20 Основы голосового агента

  • Голосовой агент включает распознавание и синтез речи.
  • Вход может быть аудио или текстом.
  • Возможность взаимодействия с различными инструментами, включая MCP и файловый поиск.

00:07:16 Проблемы с реализацией

  • Большие задержки при использовании Response API.
  • Задержки могут достигать более двух секунд, что неприемлемо в голосовом канале.

00:08:04 Требования к скорости ответа

  • Голосовой агент должен отвечать в пределах одной секунды.
  • Длинные паузы снижают конверсию и привлекательность продукта.

00:09:51 Важность живости разговора

  • Голосовое взаимодействие требует более живого и естественного ответа.
  • Ожидания от голосового агента выше, чем от текстового.

00:10:42 Введение в Realtime API

  • Realtime API оптимизирован для создания голосовых агентов.
  • Инкапсулирует технологии ST, TT и LM.
  • Обеспечивает бесшовное взаимодействие между технологиями.

00:11:51 Модель и эксперименты

  • Модель Speed 25.09.23 инкапсулирует взаимодействие сервисов.
  • Эксперименты с архитектурами для сокращения задержек.

00:12:48 Возможности Realtime API

  • Поддержка памяти и капсулированных сервисов.
  • Автоматический вызов встроенных инструментов, включая поиск по интернету и файлам.
  • Поддержка протокола Tropica для стандартизации.

00:13:45 Дополнительные функции

  • Возможность вызова с подтверждением для потенциально опасных операций.
  • Мультимодальность: все три сервиса ST, TT и LM под капотом.

00:14:47 Введение в Speech-to-Text и Text-to-Speech

  • Speech-to-Text ST — это преобразование речи в текст.
  • Text-to-Speech TTS — преобразование текста в речь, иногда называется синтезатором речи.
  • Минимизация задержек в API.

00:15:28 Совместимость и обучение моделей

  • Возможность обучения моделей распознаванию новых данных.
  • Пример обучения терминологии в ювелирной отрасли.

00:16:08 Поддержка голосов

  • Доступны общедоступные и создаваемые голоса.
  • Премиум-голоса записываются профессиональными дикторами.
  • Лайт-голоса можно записать самостоятельно.

00:17:02 Память в реальном времени

  • Поддержка шорт-мемори для ведения диалогов.
  • Перспектива реализации лонг-мемори для сохранения фактов от пользователей.

00:18:50 Преимущества больших языковых моделей

  • Большие языковые модели LM обучаются на огромных пластах текстов.
  • Упрощение взаимодействия с пользователями по сравнению с интентами.

00:19:36 Улучшение пользовательского опыта

  • Стандартизация подключения инструментов.
  • Более человекоподобный интерфейс взаимодействия.

00:20:31 Вариативность генерации текста

  • Непредсказуемость генерации текста LM.
  • Рекомендация использовать сгенерированный текст с долей скептицизма.

00:21:18 Структура агентской платформы

  • Слой моделей для Realtime API, включая модель Speech.
  • Слой агентского отеля с Response и Realtime.
  • Оптимизация и сохранение логики при переходе между слоями.

00:23:13 Будущие улучшения

  • Возможность настройки голосовых агентов через UI-консоль.
  • Планы по созданию бэкграунд-интерфейса для создания и сохранения конфигураций агентов.

00:24:06 Сценарии использования Real-Time API

  • Замена голосовых операторов в поддержке и продажах.
  • Голосовые ассистенты для навигации по сайтам и поиска информации.
  • Перевод в реальном времени, поддержка русского и казахского языков.

00:26:05 Подсказки оператору

  • Передача аудиопотоков от оператора и клиента.
  • Модель конфигурирует подсказки на основе аудио и текстового распознавания.
  • Возможность использования Real-Time API для текстового взаимодействия.

00:27:03 Ключевые концепции Real-Time API

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

00:28:53 Стриминговый синтез

  • Озвучка ответов модели по мере их появления с помощью стримингового синтеза.
  • Умный чанкер на сервере обрабатывает и выдаёт осмысленные фразы.

00:30:46 Детали сессии

  • Сессия содержит конфиг, память и историю взаимодействия.
  • ID сессии можно использовать для отладки.
  • Текущее время жизни сессии — около 15 минут, планируется введение ограничений.

00:31:34 События и веб-сокеты

  • События — это JSON-объекты, которыми обмениваются сервер и клиент.
  • Взаимодействие основано на концепции веб-сокетов, знакомой разработчикам.

00:32:35 Основные способы взаимодействия с Realtime API

  • Взаимодействие через API без обёрток, агностичное к языкам.
  • Использование Open SDK, которое предоставляет высокоуровневые сущности и обвязки.

00:33:14 Преимущества и ограничения Open SDK

  • Open SDK реализован под JavaScript и Python, не поддерживает другие языки.
  • Разработчики успешно используют Realtime API без SDK.

00:34:10 Необходимые реквизиты для взаимодействия

  • Аккаунт в Яндекс Клауд.
  • А ключ дикаталога.
  • Фолдер как единица изоляции проекта.
  • Сервисный аккаунт с определённой ролью.

00:36:31 Настройка сессии и аудио

  • Настройка инструкции, модальности выхода текстовая, аудио.
  • Поддержка PCM с градацией сэмпл рейта.
  • Настройка детекшн и тулов.

00:38:06 Инструкция и промт

  • Инструкция определяет действия агента.
  • Промт должен быть логичным и понятным.
  • Логика вызова тулов помогает модели лучше ориентироваться.

00:40:46 Встроенные инструменты

  • Веб-поиск и файловый поиск.
  • MCP для взаимодействия с внешними сервисами.
  • Подтверждение действий пользователя.

00:42:36 Детекция конца фразы

  • Настройка чувствительности и подсказки в миллисекундах.
  • Рекомендованная настройка: порог 0.5 и продолжительность паузы 400 миллисекунд.

00:45:24 Настройка голоса

  • Задание скорости и типа голоса.
  • Возможность выбора языка озвучивания.
  • Будущая поддержка амплуа голоса.

00:46:19 Настройка поиска

  • Обсуждение встроенных функций веб-поиска и поиска по документам.
  • Реализация RAG для уменьшения «галлюцинаций» модели.
  • Загрузка документов через File API и создание индекса с помощью Vector API.

00:47:39 Использование индекса

  • Акцент модели на определённый домен.
  • Поддержка различных форматов файлов: текстовые, PDF, Excel.
  • Настройка срока жизни индекса и выбор политик.

00:49:32 Ограничения API

  • Текущие ограничения: один инструмент File Search Index на агента.
  • Возможность создания агентов в консоли.
  • Файлы можно использовать в разных индексах.

00:50:30 Модификация индекса

  • Модификация индекса после создания.
  • Примеры обновлений: срочные инструкции, новые продукты.
  • Преимущества модификации индекса.

00:51:30 Поиск в интернете

  • Текущие ограничения поиска в интернете.
  • Будущие возможности: ограничение количества результатов, конкретизация доменов.

00:52:22 Обработка событий

  • Примеры событий: транскрипция, дельта ответа, старт спича.
  • Обработка ошибок и возврат звуковых файлов.

00:54:37 Пример агента

  • Создание простого агента с функциями погоды и новостей.
  • Реализация функции погоды с генерацией случайных аспектов и советов.
  • Использование индекса с рекомендациями по чек-листам.

00:57:19 Взаимодействие с агентом

  • Демонстрация взаимодействия с голосовым агентом.
  • Примеры запросов: чек-лист для поездки в Санкт-Петербург, погода в Санкт-Петербурге и Сочи, новости о музеях Санкт-Петербурга.
  • Ответы агента: чек-лист, погода, новости.

00:59:14 Создание голосового агента

  • Голосовой агент с минимальной инструкцией умеет обращаться в индекс, взаимодействовать с файловым поиском и поиском.
  • Реализована возможность перебивания.
  • Утилитные классы упрощают работу с голосом на Python.

01:00:13 Утилитные классы и SDK

  • Утилитные классы добавлены в блок эксперимента SDK на Яндекс.Клауд.
  • SDK позволяет просто взаимодействовать с сущностями облака.
  • Примеры кода будут выложены в репозиторий.

01:02:03 Многопользовательский голосовой интерфейс

  • Агент-диспетчер распределяет задачи между специализированными агентами.
  • Пример взаимодействия трёх сущностей: диспетчер, агент по часто задаваемым вопросам, агент по букингу мест.

01:03:38 Скринкаст взаимодействия агентов

  • Владислав, диспетчер, помогает с бронированием мест.
  • Кирилл, агент по бронированию, запрашивает номер бронирования.
  • Валерия, агент по правилам авиакомпании, отвечает на вопросы о багаже.

01:05:14 Планы по развитию Real Time

  • Возможность работы с SIP и файловым поиском.
  • Кастомизация сайтов для взаимодействия с голосовыми агентами.
  • Облегчение интеграции с телефонией.

01:06:42 Вопросы и ответы

  • Отсутствие встроенного шумодава, модель обучалась на грязных аудио.
  • Блокировка вопросов, не относящихся к голосовому чату, через инструкции.
  • Активное слушание можно реализовать самостоятельно.

01:09:11 Синтез и задержки

  • Технология потокового синтеза доступна не только в Real Time.
  • Задержки при синхронном переводе минимальны, меньше одной секунды.

01:10:25 Текстовые подсказки и эмоциональность

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

01:11:42 Распознавание речи и выдача ответов текстом

  • Обсуждение использования связки «Сон апель» и «Реалтайм» для распознавания речи и выдачи ответов текстом.
  • Упоминание настройки суммаризации в «Спичке» для обработки аудио по результатам распознавания.

01:12:37 Скорость и стоимость

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

01:13:59 Задержки и комфорт пользователя

  • «Реалтайм» автоматически сглаживает задержки для комфорта пользователя.
  • Планируется добавление встроенной функции для обеспечения такого взаимодействия.

01:15:16 Подключение голосового агента

  • Для интеграции с разными телефонами требуется написание SIP-сервера.
  • Текущая возможность привязки существующего текстового агента к «Реалтайму» отсутствует, требуется создание нового агента.

01:17:12 Передача между агентами

  • Возможность передачи управления другому голосовому агенту при смене темы.
  • Ограничения на выбор модели при переключении между агентами.

01:18:10 Ошибки и оптимизация

  • Модель пытается обработать ошибки и вернуть ответ пользователю.
  • Рекомендации по оптимизации настроек сессии и детекшна для минимизации задержек.

01:19:52 Голосовые агенты для пожилых людей

  • Обсуждение создания кастомного агента для пожилых людей.
  • Предложение использовать переписку с родственниками как индекс для ответов.
  • Рекомендация начать с использования «Алисы» для общения с пожилыми людьми.

01:21:45 Ресурсы и комьюнити

  • Рекомендация посетить репозитории, документацию и сообщество в Telegram.
  • Подчёркивание важности фидбека и взаимодействия с сообществом.

01:22:40 Завершение вебинара

  • Анонс офлайн-встреч для активных участников комьюнити.
  • Призыв задавать вопросы и делиться опытом в сообществе.

In this video

Введение в вебинар по голосовым агентам (Анастасия Каримова)
0:11
Всем привет. Начинаем наш заключительный вебинар, посвящённый АИ студии. У нас уже прошло три вебинара. Сегодня
0:17
четвёртый, посвящённый созданию голосовых агентов. Мы посмотрим, как устроен Real Time, что он умеет и на что
0:24
обращать внимание в реальных сценариях. А почему нельзя было взять, например, просто сапи, дополнить его
0:31
дополнительной модальностью и использовать для голосовых сценариев? А
0:38
что сразу хочу отметить, что по результатам вашей активности на
0:44
протяжении вебинаров мы выберем наиболее а отличившихся участников и пригласим их
0:51
на оффлайн-встречу. После каждого вебинара вы получаете опросники, а,
0:56
которые необходимо заполнить. Также об участии в оффлайн-встрече необходимо было поставить галочку при заполнении
1:03
информации. Ну и в целом мы будем смотреть на вашу активность в чате коммьюнити, в том числе. Ну а пока
1:11
давайте перейдём а к вебинару сегодняшнему и поговорим про создание голосовых агентов. Сразу обозначу
1:18
следующее. Фокус вебинара не на том, что мы будем переписывать строки, а на
1:24
понимании того, как собрать полноценного голосового агента. В общем, весь код я вам дам. В конце я
1:31
дам ссылку на GitHub, откуда вы сможете его скопировать и поэкспериментировать как-то самостоятельно или через кодового
1:37
ассистента вашего. А пока давайте пройдёмся по основным моментам, которые
1:43
нужно знать, работая сриалтапе и работая с современными голосовыми агентами.
Эволюция голосовых технологий (Анастасия Каримова)
1:51
И для того, чтобы лучше понять, почему realта, почему всё происходит именно так, как происходит, давайте немножко
1:57
углубимся в историю. Ну, на совсем чуть-чуть. Последовательность появления технологий в автоматизации голоса, она у
2:04
нас была такая. Сначала был AVR, было всё достаточно жёстко фиксировано, нажмите один для продолжения разговора,
2:10
нажмите два для такого-то действа. И ни о каком естественном взаимодействии речь
2:15
по сути не шла. Потом появились такие технологии, как распознавание, синтез речи. И жить стала гораздо легче. Речь
2:22
стала оцифровываться, когда вы имеете текст на руках. Можно с ним делать хотя бы что-то. Можно пройтись по нему
2:28
регспом. А когда у вас есть хотя бы синтез на его начальных этапов, можно
2:33
что-то озвучить человеку непредзаписанное. Потом появляются диалоуговые платформы.
2:40
Начинается такой расцвет диалогов. Все помните, когда у нас были достаточно жёсткие сценарии, ни шага влево, ни шага
2:46
вправо, какие-то жёсткие, а, деревья, когда приходилось всё заранее продумывать и вести пользователя вот
2:53
ровно по тому пути, чтобы он попал в конечную ветку и ни шага вправо, ни шага влево. Помните, в Алисе мы учили, как
2:58
пользоваться буквально ей для того, чтобы сделать то, было написано на коробках, нажми, ну, скажите такую-то
3:04
фразу. И таким образом мы пытались, вот на тот момент вся индустрия пыталась
3:10
приблизиться к какому-то плюс-минус живому диалоговому общению, в котором присутствовал бы голос. Вот. И потом,
3:18
когда появились ЛМК, появилась надежда на то, что вот сейчас с развитием ЛМ мы
3:24
сможем ставить задачу так, чтобы это было максимально написано на естественном языке, писалось просто, не
3:31
требовало там какого-то порога вхождения, знания определённых фреймворков, как там записывать разнообразные деревья. Даёшь какое-то
3:37
текстовое указание, и лом тебя м слушает, понимает, что надо делать, и
3:42
всё происходит там с такой долей магии. Ну, ещё, как мы знаем, обладает
3:49
способностью понимать и давать такие естественные ответы. Но, а, как
3:54
оказалось, конечно, даёт большие возможности, но не всё так просто, и про это мы сейчас
4:01
проговорим. Для начала давайте определимся с терминологией, что мы понимаем под агентом, что мы понимаем
Компоненты текстового агента (Анастасия Каримова)
4:07
под голосовым агентом. А давайте сначала начнём с текстового. Это попроще. У вас
4:12
уже были предыдущие вебинары, где, а мы, собственно, уже рассказывали вам про то,
4:18
что вкладываем в его понятие. А у голосового, у агента, в принципе, мм
4:24
есть несколько компонентов, которые, мм, обычно выделяют и которые его определяют
4:29
как такой паттерн вообще. А агент — это паттерн построения современных приложений. в нём обязательность,
4:36
которая является таким центром управления, а, полётами, которая, мм,
4:41
скажем, определяет, что нужно делать и которая действует по инструкции,
4:46
заданной вами. Инструкция — это своего рода ТЗ. А я тут приводила на одной из
4:51
недавних встреч такой пример, что это как объяснять новому сотруднику, а что ему нужно делать. Вы ему говорите: «Вот
4:58
у тебя там условно Excel, а вот у тебя там, не знаю, ЦРМка, ещё какая-то программа». И вот у тебя такие-то
5:05
инструкции, вот документы, которыми нужно оперировать. И нечто похожее происходит, когда вы взаимодействуете с
5:11
лэмкой. Вам нужно максимально чётко поставить задачу, ну, на естественном языке, конечно, но тем не менее
5:17
объяснить, что вы от неё хотите. предоставить ей инструменты, которыми она может пользоваться, условные пд
5:24
условные эксели, ворды, а ЦРМки, а
5:29
и а наделить, ну, скажем, ну, память уже прилагается сотрудником, но в случае с
5:35
текстовым агентом память ещё придётся реализовывать. Вообще память позволяет добиться некой связанности диалога при
5:43
общении с агентом, когда вы в каждой реплике не повторяете весь контекст, а действуете итеративно, как если бы за м
5:50
заполняли такой визард, когда каждое новое поле добавляет какой-то информации и по достижению м всей, когда вся
5:58
информация собрана, вы делаете какое-то действие. Ну, то есть, а, текстовый агент, если грубо он состоит из LМ,
6:04
действующий по инструкции, которая может вызывать какие-то подключённые тулы по механизму факшн коллинга. Я думаю, вы
6:10
про это уже тоже слышали на наших вебинарах, и у которого есть ещё память, позволяющая вести вот диалог с
6:17
сохранением контекста предыдущего общения. Если, ну, наивно так расширять
Расширение до голосового агента и его проблемы (Анастасия Каримова)
6:23
паттерн текстового агента до голосового, то у нас наивно добавляются две такие
6:28
сущности, две технологии, как распознавание и синтез речи. И здесь, я
6:34
думаю, всё плюс-минус интуитивно понятно. И можно переходить к тому, как, наверное, выглядел бы голосовой агент в
6:41
своей базовой схеме. То есть у него на вход может быть как микро как аудио, так
6:47
и текст. голосовым агентом можно считать и тот кейс, когда у вас не только кейс
6:52
голос, голос, но ещё голос, текст или текст голос. Когда есть лэмка, которая умеет
6:58
взаимодействовать, а, с разными инструментами. На, а, данном на данной
7:03
схеме у нас тут есть возможность вызывать чистый function calling, оперировать MCP и пользоваться
7:09
встроенными инструментами веб и файлового поиска, которые сейчас вот есть у разных провайдеров, в частности у
7:15
AI Studia. Ну и на выход, когда LM сгенерировала текст, его необходимо как-то озвучить и м сообщить
7:24
пользователю, ну озвучить и вывести пользователю. Вроде бы достаточно всё просто, а как бы
7:32
никаких вопросов не должно возникать, но и казалось бы, м почему просто не взять
7:38
вот responsс апи, с которым вы уже знакомы, и не расширить его вот как раз вот на
7:45
СТТ и ТТС на вход и выход, соответственно.
7:50
Но оказалось, что всё не так просто. При такой реализации, а, появляются большие
7:55
задержки. Там минимум 2 секунды, а по факту даже четыре и более, что
8:02
неприемлемо в Голосовом канале. Когда мы только мм проектировали
8:08
возможность создавать а голосовых ботов, мы очень много а коздевили. костывили
8:14
тех людей, которые достаточно давно в индустрии, которые понимают, как что строится, которые вот начинали и
8:20
пользовались нашим спичкитом. И они все не сговаривались, не сговариваясь, они
8:27
сказали нам, что а голосовой агент, он должен отвечать в пределах а
8:34
одно секунды. Не должно быть длинных пауз. Понятно, что возможно там какие-то длинные сценарии и так далее, но в базе
8:42
своей вот на условной болталке агент должен отвечать максимально быстро. Иначе а иначе происходит так, что
8:50
теряется конверсия, а продукт он становится не таким привлекательным для конечного пользователя. Ээ и это
8:57
касается не только исходящих звонков, когда вам нужно заинтересовать, удержать своего потенциального клиента, но и
9:04
кейсов, когда вам звонят в поддержку. всё-таки с поддержкой сервиса, которая максимально живая, правдоподобная, куда
9:10
приятнее общаться. Ну а или иначе начинаются вот те кейсы, когда, ну, всем известная вам вот эта вот мантра:
9:17
оператор, оператор, оператор, позови оператора вместо того, чтобы общаться с роботом. Вот. Кстати, такой интересный
9:25
факт. Я знаю, а что один из наших клиентов даже реализовывал такую историю, что когда в первый раз а
9:32
абонент начинал просить оператора, ему просто давали другого голоса с другим синтезом. И иногда это действительно
9:37
прокатывало. То есть человек не столько не доверял вот роботам, уже было такое недоверие,
9:45
что по привычке начинал звать оператора, даже не по не попытавшись сделать что-то
9:50
с голосовым агентом, который, ну, не голосовым, потом, давайте на тот момент, который уже мог многое сделать.
Требования к живости голосового агента (Анастасия Каримова)
9:56
Итак, а у нас в голосовом агенте появляется такое важное требование, как
10:03
требование к живости разговора, которого не было в текстовом. Вы можете мне возразить, ну, там же тоже нельзя, а,
10:09
как бы слишком долго зависать и делать большие паузы. Да, нельзя. Но к тексту мы относимся все, к текстовому
10:16
взаимодействию куда проще, чем голосовому. голосовое взаимодействие, оно для нас, а, как для людей, как для
10:24
вида, оно более такое нативное. И есть определённые ожидания, что можно, что ответ будет вот сейчас вот, что не будет
10:31
долгих пауз, что можно перебить и так далее, и так далее. То есть, а, голосовому агенту в принципе требования
10:38
куда жёстче в плане взаимодействия, от него больше ожидается. Ну и если говорить, почему нельзя было взять
10:44
просто responsси, ну хотя бы потому, что хтп протокол не позволяет делать многое,
10:51
ну не позволяет одновременно а говорить и ну или там перебивать друг друга двум
10:57
сторонам. И поэтому у нас а появился
Realtime API: решение для голосовых агентов (Анастасия Каримова)
11:02
real time это специальный оптимизированный апи, который предназначен для создания голосовых
11:09
агентов. А если вообще показывать его как такой
11:16
некий блокбокс, что он умеет? Это, ну, во-первых, он заточен под создание голосовых агентов. Во-вторых, он
11:22
инкапсулирует в себе внутри все технологии, о которых я говорила ранее.
11:27
Это СТ, ТТС, LM. А вам не придётся, а,
11:33
оркестрировать а все эти технологии самостоятельно. взаимодействие с ними
11:38
будет происходить, ну, максимально бесшумно в рамках одного апи. Вам не нужно думать, что вот здесь вот синтез,
11:45
здесь распознавание, здесь ещё что-то, как это обработать. Нет, real time берёт всю эту работу на себя. Ещё одна важная
Модель Speech-gpt-250923 (Анастасия Каримова)
11:52
абстракция, про которую хочется сказать, что мы сейчас оперируем а моделью для
11:58
Real Time, это SPGT 250923, а, которую мы запускали на скетора
12:04
инкапсулирует под собой вот вот это взаимодействие разных сервисов. Мы оставляем за собой а право-то там
12:12
перетасовывать, делать другие модели. То есть по факту там может быть как сочетание разных сервисов максимально
12:18
оптимизировано между собой, так и сочетание от трёх до одной модели. Ну, конечно, мы будем всё это делать под
12:24
разными айдишниками и не ломать вам прот, но в целом, как вектор развития он такой. Мы много экспериментируем с
12:30
архитектурами и посмотрим, что у нас будет получаться дальше для того, чтобы, ну, максимально сократить задержки.
Возможности Realtime API (Анастасия Каримова)
12:37
Если говорить про возможности Real Time, вот если вы, допустим, продукт, который
12:42
решил подключать Real Time, и что вы как продак должны знать про него? Ну,
12:48
первое, что хочется сказать, а то, что он, ещё раз повторить, извините, что он
12:54
предназначен для создания голосовых агентов, а значит, а, хорошо умеет работать с инструментами, у него есть
13:00
поддержка памяти, у него есть все ингапсулированные сервисы. И, конечно же, он, а, скажем так, решает тот,
13:08
отвечает на тот вызов, который бросила нам индустрия по низким задержкам. Давайте немножко вот поподробнее
Автоматический вызов встроенных инструментов (Анастасия Каримова)
13:14
пройдёмся по всем пунктам. Автоматический вызов встроенных инструментов. А что хочется здесь
13:20
сказать? Вы уже слышали и прошлинг, и про, а, разнообразные поиски. И, конечно
13:27
же, в Real Timeпе мы просто не могли это не поддержать. То есть для того, чтобы модель могла совершать действия в
13:33
реально цифровом мире, ей необходимо иметь возможность вызывать функции. И есть функции, которые весьма популярны,
13:41
такие как поиск, ну, по интернету или по файлам. И есть необходимость
13:46
поддерживать вот протокол от антропика, а который, ну, необходимость, на самом
13:51
деле, это очень здорово, что он появился MCP, что теперь у нас есть некая стандартизация. Если вы, мм, в принципе
13:58
пытались писать действительно много поверх чистого фанкшн-холлинга, то,
14:04
наверное, поняли, насколько это плохо масштабируемо, а не очень удобная
14:09
история. И каждый раз там приходится изобретать, ну, не то что велосипед, но думать про то, как лучше это организовать. MCP эти проблемы решает.
14:16
Добавок ко всему, добавляется вещь, про которую, наверное, не так не каждый подумает — это возможность вызова с
14:23
подтверждением. То есть, если это какая-то, скажем так, потенциально опасная относительно безопасности
14:28
операция, да, немножко такой сложный конструкт получился, то вы можете прямо
14:35
подтвердить у пользователя, например, или каким-либо образом, что он готов на совершение того или иного действия. А
Мультимодальность и низкие задержки (Анастасия Каримова)
14:42
ещё раз, мультимодальность, то есть все три сервисат, ТТС и М под капотом. Для
14:47
тех, кто немножко потерялся этих стс, повторю, что стчту to текст, а ТТС —
14:53
это, соответственно, текст to speч. Иногда ещё называют айсаром. Ну и, конечно же, как синоним, широко
14:59
известный синтез речи. А ещё раз про низкие задержки. А что мы а
15:06
спроектировали АИ так, чтобы минимизировать эти задержки. Почему я так настойчиво
15:11
повторяю, что даже внутри, когда я там рассказываю про то, что у нас есть специальный апии и так далее, меня
15:17
обычно даже не дослушивают и говорят: «А как быстро он отвечает? Вот покажите нам, скажите». Ну вот поэтому я делаю
15:24
дополнительные акценты на как раз-таки скорость ответа. А ещё одна важная деталь — это совместимость с сервисом
Совместимость с SpeechKit и Brand Voice (Анастасия Каримова)
15:31
Спичit. А здесь есть два важных аспекта. Первое, что можно дообучить
15:37
распознавание. Распознавание, оно хорошо умеет то, что уже как бы видела, слышала
15:43
раньше, но наша жизнь такова, что у нас регулярно появляется что-то новое. Ну
15:48
или какие-то домены специфические начинают оцифровываться, которые раньше не попадали в поле зрения тех, кто
15:54
обучает модели. Не было таких датасетов, и нужно их как бы дополнительно донести. Например, всем известный пример с
16:00
ювелиркой, когда м необходимо терминологии обучить распознавание. Эта возможность также сохранена в
16:07
реалтаймапе. И ещё, мм, конечно же, поддержка голосов, которые есть в
16:13
синтезе спичкита. Это голоса как общедоступные, а которые доступны всем и
16:19
каждому из коробки. Они у нас работают на разных языках. Так и голоса, которые вы можете создать самостоятельно. Так,
16:26
линейка брен Premium и Light. Premium — это когда вам делают, условно говоря,
16:31
под ключ. А когда вы м пишете, ну, профессионального диктора в студии, там
16:37
часы записи, диктора вам заранее подбирают и так далее, алай — это та история, когда вы буквально вот как я
16:44
можете там сесть и записать голос. Мм, я свой голос не записывала, но мой коллега
16:49
постарался, сделал. И позже я покажу пример, как в голосовом агенте применяется голос, на который, ну, вот
16:55
коллега потратил, ну, не скажу, что очень много времени и там аудио получилось что-то порядка там 20, может
17:01
быть, 30 минут. Ну, в общем, вы услышите и какой будет результат. А, и, конечно
Память в Realtime API (Анастасия Каримова)
17:08
же, что ещё хочется отметить — это поддержки памяти. Ещё раз, что такое память? Память — это возможность
17:15
обеспечивать связанность с диалогом. В Real Time апе она, а, так называемая, а,
17:20
шортмеory, когда мы оперируем, ну, неким таким, а, м, конечным, мм, временным
17:27
интервалом и знаем, что там было там несколько реплик назад. А вот, возможно,
17:32
когда-нибудь реализуем longмеory, чтобы можно было сохранять какие-то факты от пользователя, вставлять их определённым
17:38
образом, но это удел будущих нас. Пока реализована шотмеory, которая прекрасно
17:43
позволяет вести диалоги. А если говорить, если сравнивать вот что
Сравнение с классическими подходами (Анастасия Каримова)
17:49
было раньше и что сейчас, если бы вы собирали без realта и с
17:55
realта, то что у нас получается? STТ, ТТС, LM, ну тогда ещё не LLM, будем
18:01
честны, а они действуют как отдельный сервис. Приходилось бы ими как-то жонглировать, их оркестрировать, ну, в
18:08
общем, прикладывать какие-то, а, ненулевые затраты. А понимание смысла, ну вот на момент
18:15
тогда и на самом деле много где сейчас ещё до сих пор, оно строилось бы на каких-то интентах, поиске похожих фраз.
18:24
И если там, например, клиент, ну, условно говоря, оригинальничал, а на самом деле не делал бы ничего такого
18:31
сверх того, что он делает в реальной жизни, он не пытается зачастую запутать пользователя, то Иtн бы не факт, что
18:38
хорошо бы отработал, потому что обычно обучается на каком-то придифваненом сете, чтобы понимать намерение
18:44
пользователя и выявляя это намерение делать что-то там в диалоге дальше. С ЛМ таких проблем нет. LЛLM — это огромные
18:52
языковые модели, как вы знаете. из предыдущих, а, вебинаров, которые, ну, условно обучены на очень много чём, на
18:59
огромных пластах текстов и знают и понимают, умеют решать задачи. То есть вот эта вот околотентная история, она
19:07
уже как бы постепенно уходит в прошлое. Да, она ещё имеет место быть для оптимизации и так далее, но в целом с ЛМ
19:14
взаимодействовать куда приятнее, чем конструировать эти интенты, потом делать классификацию, смотреть, что из этого
19:21
более правдоподобно, куда вести. А если интеtнт не найден, что же делать? Что же делать? Вот. А, конечно, задержка ответа
19:29
с realта, её получается, а, минимизировать,
19:35
а, вот подключение инструментов стало, мм, куда приятнее, стандартизированней,
19:41
скажем так, чего ранее не наблюдалось в индустрии. Ну и опыт пользователя, он стал более таким, скажем так, больше
19:51
похож на то, как вы взаимодействуете с живыми людьми, более человекоподобным. Потому что раньше в основном вы,
19:58
например, те же самые реплики зашивали. Тогда редакторы сидели, выслушивали синтез, старались что-то делать,
20:05
минимизировать как-то недостатки синтеза, где-то там поставить разметочку, где-то слово написать как-нибудь корявенько, но чтобы при этом
20:11
оно хорошо звучало, где-то сделать предзаписи. А теперь м такой подход всё
20:17
ещё имеет место быть. Но LLM диктует свои правила. Во-первых, ЛМ — это всегда
20:23
немножко непредсказуемая генерация. И гарантии того, что у вас будет один текст туда-сюда постоянно
20:29
воспроизводиться, конечно же, нет. Там будет какая-то минимальная, ну, например, вариативность даже при тоже
20:35
нулевой температуре. Конечно же, вы можете там подзашить фразы, которые звучат вот максимально хорошо, продажные
20:42
и так далее, но это будет э ломать логику. Лучше оперировать непосредственно тем, что сгенерировалом,
20:49
конечно, с долей определённого скептицизма, может быть, там пропачивано название вашего бренда и так далее. и а
20:55
именно это озвучивать своему конечному пользователю. Благо сейчас вот технологии у нас синтезов всё более и
21:03
становятся более и более мощными, развиваются и звучат очень хорошо, не режут в основном а ухо пользователя.
Место Realtime API в системе AI Studio (Анастасия Каримова)
21:12
Если говорить про то, где Real Time апи как а для создания агентов находится на
21:17
карте Iстудии, вот про неё, про эстудию мы рассказываем как раз-таки последние четыре вебинара, то м здесь следующая
21:24
ситуация. Если рассматривать АИДИ, ну как агентскую платформу, ну она на самом деле не только агентская, но вот если
21:31
фокусироваться именно на создании агентов, то ситуация у нас следующая, что у нас есть такой слой моделей. Пока
21:38
для Real Time app есть только одна модель. Это спич real time. Ну, мы уже
21:43
обозначили её как семейство. И, а, список этих моделей будет пополняться. Напомню, что под моделью вот мы
21:50
инкапсулируем несколько разных сервисов, которые умеют и в распознавании в синтез, и в лмку. И скажем так, делаем
21:58
всё возможное, чтобы они взаимодействовали максимально быстро, не было каких-то раундтрипов и прочее. Но и
22:03
в целом экспериментируем с архитектурами, чтобы это была реальная модель. А дальше у нас есть слой
22:09
агентского ателья. На нём вы уже познакомились с Responses и сейчас вот знакомитесь с realта. В принципе,
22:16
responsсиes real time, ну, они максимально похожи. Будут какие-то изменения, будут
22:23
естественно оптимизация. Возможно, там веб-тулы настроенные для responses, они
22:28
не в чистом виде будут, например, перекладываться в realта, но общая логика, мм, ну, не с точностью до
22:36
запятой там в промте, она будет сохраняться. То есть, сделав что-то на респонс, вы с большой долей вероятности
22:41
сможете это принести с минимальными затратами временными и когнитивными, а
22:46
на, а, голосовую поверхность. Что хочется отметить, что на самом деле
22:54
Real Time вот на что не ложится в отличие responsi сейчас, это на workflows, то есть realта ввиду того,
23:01
что это м двунаправленное взаимодействие, что требуется минимальные задержки и так далее, она на
23:08
workкlлауз и в его текущей реализации концепции не попадает. А как мы будет ли
23:14
у нас какой-то вот именно голо UI kit для того, чтобы вот вот эти
23:20
стрелочки переводить, трогать и так далее. Ну, покажет время, посмотрим. Может быть, нам нужно двигаться в эту
23:27
сторону. Кстати, да, пишите в комментариях, нужен ли вам такой кит для того, чтобы вот настраивать голосового
23:33
агента максимально точечно. И а следующий слой — это, конечно же, UI
23:39
в консоли. Здесь мы обязательно прорастём. У нас будет, ну, такой Playground like interfейс, который уже
23:45
есть в агентском отеле для создания голосовых агентов, где вы сможете создавать конфигурацию агента, сохранять
23:52
её и обращаться потом по айдишнику из кода в realта, чтобы не гонять вот эти все текста. А, но это произойдёт в
24:00
ближайшее время. Сейчас этого нету. Возможность, конечно же, обязательно появится.
Cценарии использования (Анастасия Каримова)
24:06
А какие сценарии можно реализовывать поверх таймпе? Ну, начнём с самого базового, а, и простого. Заменять
24:14
голосовых операторов, которые, например, общаются от лица поддержки, отвечают там
24:19
на вопросы по некой базе знаний, может быть, в каких-то кейсах продажные идут по в продажных кейсах, точнее, идут по
24:27
какому-то шаблону, достигают своих целей. То есть, а, всё, ну, это такой
24:33
широкий формат сценария, где, допустим, у вас есть оператор, который там умеет
24:38
общаться с ЦРМкой, писать куда-то, заполнять поля и оперировать некой базой
24:44
знаний. Вот как раз такого рода сценарии, они хорошо ложатся на realтаймпе. А следующий вариант
24:51
сценария, на самом деле, когда мы только начинали разработку, не то чтобы мы в него очень верили и рассчитывали, но,
24:58
как оказалось, сценарий оказался довольно востребованным, потому что который а пользователь который
25:04
потенциальный клиент приходит и просит помочь ему реализовать голосового ассистента на сайте, а, который помогал
25:11
бы ему навигироваться, мм, помогал бы, а, искать какую-то полезную информацию.
25:17
Особенно это удобно тогда, когда, ну, скажем, сайт не то чтобы имеет прозрачную, понятную структуру,
25:23
переделывать его долго. И зачастую вы, наверное, посылаете какого-то сыла важным своим клиентам для того, чтобы
25:28
сказать: «Вот сюда ходи для таких-то действий, сюда для того и так далее». Информация содержится здесь. Такого рода
25:34
деятельность вы можете переложить на агента, который построен поверх реалтайма. Ещё один кейс — это
25:41
перевозчик в реальном времени. Сейчас можно, а, в распознавании пока оперировать только русским языком на
25:46
вход. А, но мы, конечно же, увеличим число поддержимых языков. И уже сейчас
25:52
можно, например, отвечать на казахском. Я казахского не знаю, но мой коллега
25:57
знает, и мы много с ним экспериментировали. Он прекрасно пообщался и остался доволен. Вот, Женя,
26:04
спасибо тебе. И такой вариант, как подсказки оператору. Мм, на самом деле,
26:10
когда мы проектировали realта апи, вот именно под сказке оператору мы рассматривали чуть ли не как ведущий
26:16
сценарий, но по факту оказалось, что его по-прежнему хотят, но индустрия он уже
26:23
не то чтобы сильно востребован. Тем не менее, его можно реализовать, когда вы передаёте, а потоки
26:30
аудио от, а оператора и клиента, и модель, э,
26:37
конфигурирует по сказке, что же там могло быть. Это можно оформлять как аудио, так жонглировать текстовым
26:43
распознаванием. Ну, в общем, смысл в том, что даже на тексте, на самом деле, realта будет работать. Real timeпе мы
26:50
позиционируем как голос голос но anywayй в любом случае можно пользоваться в том числе как канал текстте тек
26:56
взаимодействия будет очень быстро но может быть не так просто для реализации как в responsс
Ключевые концепции Realtime API (Анастасия Каримова)
27:03
а теперь когда мы проговорили про real time апи как такой продукт про который
27:08
мы вот должны знать что-то как продукт перейдём к реализации а тот шаг когда уже ну вот составили представление и
27:16
необходимо понять а что же мы делаем когда Да, соприкасаемся с реалтаймапе. А здесь необходимо понять ключевые
27:23
концепции, которые необходимо, а, реализовывать и, ну, понимать, с чем вы будете
27:29
взаимодействовать. И первое, самое важное — это сессия. Мы немножко поговорим про неё более подробно позже,
27:34
но что вам нужно знать, это основной объект, который инкомпсулирует всё взаимодействие. По сути, это такая
27:40
проекция веб-сокетного соединения, которая хранит себе настройки, а, в которой гуляют сообщения туда-сюда,
27:46
которым обменивается сервер и клиент, а, и которую, кстати, можно обновлять. То
27:51
есть те настройки, которые вы задали при создании агента, их можно менять, например, в частности, а, голос, его
27:59
скорость и давать какие-то допуказания модели. А следующий момент, который необходимо учитывать при проектировании
28:06

это вотнаправленный стриминг. А когда клиент и модель обмениваются в сообщении
28:12
в реальном времени, что позволяет им, ну, как бы без ожидания конца реплики друг другом. Это вот та самая живость,
28:19
про которую я раньше говорила, которую вот рынок современный хочет от голосовых
28:25
моделей. То есть вы не просто занимаете единовременно один канал, когда один говорит, а другой молчит. Нет,
28:31
взаимодействие происходит двунаправленно. И я сразу скажу, что вот оно происходит за счёт обмена событиями.
28:38
На самом деле это такие Jon объекты определённого типа, сколько их точно, я
28:43
не помню, ну, точно больше десятка, которых при получении которых вы реализуете, собственно, логику агента и
28:51
концепция частичных ответов. Что важно понимать? При направленном взаимодействии вы, а, как и прежде, на
28:58
самом деле, в голосовых роботах, например, не ссылаете реплику пользователя за репликой. Вы обмениваетесь сообщениями вот по мере
29:05
голос вы отправляете на сервер сервер по мере его поступления, а уже на сервере а
29:11
решаем, как мы этот голос режем на фразы, что отдаём в лэмку, на что отвечаем, а что нет. Ну и, конечно,
29:18
когда синтез, а, ну, когда модель начинает отвечать, можно ждать окончания ответа. Но из предыдущих лекций вы,
29:24
наверное, знаете, что LLM умеет стримить, то есть отдавать текст по мере его появления такими дельтами. И вот
29:32
именно эти дельты можно озвучивать за счёт технологии стримингового синтеза.
29:37
А, кстати, если те, кто меня слушает и кто, например, ещё не созрел, да, Real Time, но хочет уже как-то побыстрее
29:44
озвучивать, а, поступающие ответы, вот вам такой лайфхак, как приблизиться к
29:49
голосовым агентам на относительно старых стеках. Озвучивайте, а, то, что там лмка
29:55
генерит. Ну да, в большинстве своём это именно так, именно с тремяговым синтезом. Это
30:01
позволяет вам открыть сессию и досылать вот фразы: «А умный чанкер внутри, а
30:06
синтеза на сервере он будет обрабатывать и отдавать на выход аудио, которое будет,
30:14
соответственно, определённым соответствовать определённым фразам». То есть это не будет мм вбм. Это будут
30:19
осмысленные хорошо звучащие фразы, а которые вот специальным образом были
30:25
порезаны а на основе того, что передала ему до этого модель.
Сессия (Анастасия Каримова)
30:30
Дальше вот, а если говорить про сессию более подробно, то ещё раз для закрепления, это такая проекция, ну, по
30:36
сути, вебсокет соединение, в которой есть конфиг, в которой вот это вот есть память она же история, и которую вы с
30:43
которой вы взаимодействуете, можете обновлять, а, и с которой, кстати, ID, которой вы можете присылать вам нам в
30:50
поддержку, если что-то, например, пойдёт не так. А, ну таких случаев, конечно же,
30:56
минимум. Но anyway, ID сессия — это то, что позволит вам максимально быстро, а а
31:01
отдебажиться при взаимодействии с нами. И в целом, что ещё хочется сказать про сессию сейчас
31:08
она живёт м довольно продолжительное время, что-то порядка там 15, а может больше минут. В дальнейшем мы планируем,
31:14
может быть, ввести какие-то ограничения для того, чтобы, ну, случайным образом пользователь не потратил, ну,
31:21
разработчик в нашем случае потратил больше, чем рассчитывал на взаимодействие.
31:26
Но об этом мы, конечно, сообщим, если будем предпринимать такие меры отдельно в документации, отдельно в комьюнити.
31:32
А события ещё раз, это JON объект, которыми сервер клиент обменивается в
Событие (Анастасия Каримова)
31:39
процессе взаимодействия и, а, которые представляют собой, ну, по
31:45
сути, GSON объект, в который заворачивается и аудио, и текст, и какие-то команды, и инструкции, и так
31:52
далее. То есть вот эта вот вебсокетная история, наверное, если вы реализовывали какое-то
31:59
взаимодействие на базе вебсокета, вы от этой концепции, ну, вряд ли куда-то уходили. Я помню ещё там достаточно
32:05
много лет назад мы делали какие-то первые, а интерфейсы, которые позволяли ещё тогда маленькому спички СДК
32:12
взаимодействовать и реализовывали как раз-таки а поверх веб-сокета. А в принципе история циклична.
Способы взаимодействия с Realtime API (Анастасия Каримова)
32:20
И теперь переходим к коду. Наконец-то мы добрались до той части, когда аа можно
32:27
обсудить то, что у нас происходит, например, в примере. И на то, что вам уже более прицельно, как разработчику,
32:32
стоит обратить внимание. А сразу небольшая оговорочка. А какие
32:38
основные способы существуют для взаимодействия срита? А способов два, ну, они же основные. Это
32:46
взаимодействовать с апе без обёрток, ходить в него напрямую. это агностично получается относительно какого-либо
32:52
языка. Либо использовать Open I agents SDK,
32:58
который и э позволяет делать, ну, у которым есть определённые объекты,
33:04
обвязки, там появляются какие-то высокоуровневые сущности, типа уже realтайм-агента и так называемого ХДОФа для передачи
33:11
управления между агентами. Я буду оперировать сегодня в основном
33:16
апи без обёрток, потому что это лучше позволит понять вообще концепции realта.
33:22
Вы же при реализации своих проектов можете начинать с SDК, это может быть проще, но учтите, что SDК, оно
33:28
реализовано под JS, реализовано под Python. Если вы пишете на чём-то другом,
33:34
то, м, к сожалению, пока SDК, а под эти языки не написаны в целом. А вот у нас,
33:41
я постоянно сегодня говорю, что мы когда-то начинали, были какие-то гипотезы, которые опровергались реальным положением дел. У нас была гипотеза, что
33:48
люди не будут справляться с сериал Таймапе в его чистом виде и потребуется помощь СДК. Мм, на самом деле нет. А
33:58
люди хорошо, ну, как бы разработчики хорошо, а, принимают Reал Time,
34:04
встраивают проекты. У нас сейчас идёт вот несколько пилотов, и никаких проблем
34:09
не возникает. Рынок бы ещё, возможно, не дозрел до той истории, когда мы начнём оперировать вот мультиагентным
34:15
взаимодействием. И тогда СДК, оно, ну, ввиду своего устройства, ввиду того, что там есть, э, специальные объекты, а,
34:22
риалтайма, оно будет в этом плане проще. Но пока первые пользователи вполне себе
34:29
справляются с апи напрямую. Вот сегодня я его буду в основном и демонстрировать.
Пререквизиты (Анастасия Каримова)
34:34
Если говорить про те преквизиты, которые нужны при взаимодействии,
34:39
вот все те, кто задают вопросы в комьюнити и не всегда внимательно читая документации, наше пояснение, смотрите,
34:46
чтобы сходить в responses в real time, вам в любом случае нужен аккаунт Яндекс Cloud. Вам в любом случае понадобится
34:54
опилю дикаталога, а он же у нас кое-где а используется под синонимом фолдера.
35:00
Вообще достаточно полезно вам будет погрузиться, если в вот нашу ресурсную
35:06
структуру облачную, когда есть облако, под ним есть некий фолдер, а которым вы взаимодействуете.
35:12
Вот для того, чтобы объяснить человеку, который только пришёл, что такое фолдер, рассматривайте это как некий проект.
35:17
Вот, например, вы делаете какое-то взаимодействие, вы делаете какого-то бота. Наверное, вам лучше делать это в
35:23
отдельном фолдере, прежде всего, чтобы получать на него
35:28
различные настройки, про которые коллеги там должны рассказывали или ещё
35:34
расскажут а в дальнейших вебинарах. То есть фолдер — это такая хорошая мм вещь
35:41
хорошая м единица изоляции, напоминающая в чём-то проект. И, конечно же, вам нужно будет ещё завести сервисный
35:48
аккаунт в рамках этого фолдера, к которому назначит определённую роль. А и models users. Ну, это конкретно про real
35:55
time для responses. А я, кстати, не помню, такая же роль, нет. Ну, теории, да, должно хватить, если в чистом виде.
36:04
В общем, преквизит такой: заводите аккаунт в Яндекскладе, заводите там облако, фолдер. В этом фолдере создаёте
36:11
сервисный аккаунт, выписываете определённую роль и из подсервисного аккаунта создаёте ключ, которым будете
36:17
оперировать. На самом деле ключ, оговорка про ключ. Я тут оперирую именно
36:23
понятием ключа для простоты, но по факту ситуация следующая. Вы можете пользоваться и стокеном. А для на этапе
36:32
прототипирования подойдёт апиключ, потому что он выписывается там с определённым сроком
36:37
действия. Хоть год он может действовать, то и больше. Кто как вы это обозначите? УАКИН он мм будет а протухать каждые 12
36:46
часов, но это более безопасная история. И а если вы идёте туда, вам необходимо
36:52
будет продумать логику того, как вы будете обновлять Toen в своём приложении. Не всем это даётся просто с
36:57
первого раза. Поэтому пока апи ключ и сосредоточимся на real time апе. Что
Настройка сессии (Анастасия Каримова)
37:03
можно настраивать сессии как в объекте? Можно настраивать такие вещи, как инструкция. Вот эта вот текстовая часть
37:09
промта, которая ещё не описа, ну, в какой-то мере касается тулов, но не описывает их. где вы даёте некий ТЗ
37:17
своему агенту, модальности выхода, текстовое аудио в зависимости от того, как вы хотите строить своего агента, как
37:25
вписывается он ваш продукт. А делайте настройки аудио. По настройкам аудио тут
37:30
я быстро пробегусь. Сейчас доступно из поддерживаемого только PCM. А у него
37:35
есть определённые градации с семлрейта. Документацию, если не донесла, то донесу, но как минимум 816 244100 там
37:43
должны поддерживаться. Также вы можете настроить T detection. Об этом я расскажу чуть подробнее на
37:50
следующих слайдах. А спит на самом деле относится к характеристикам именно голоса и задать
37:57
стулы, которыми будет оперировать модель. То, что она может вызывать и то, что вы как разработчик агента ей
38:03
предоставляете для взаимодействия с внешним миром. Давайте остановимся немножко подробнее на инструкции. Что
Инструкция для модели (Анастасия Каримова)
38:09
такое? Ну, инструкция как концепция, как часть промта вам естественно ничего
38:15
нового. Это, ну, по сути, вот это вот system instructions, а, которая вот, как
38:21
мы долго её определяли, вы здесь говорите агенту, что он, собственно, должен делать. Вот ты ассистент, ты
38:28
отвечаешь кратко. А понятно, почему кратко? Потому что интерфейс голосовой расплываться мыслью к подреву, ну, не
38:34
то, чтобы правильно и хорошо. Люди, ну, склонны терять мысли, если она слишком
38:41
долгая. Надеюсь, вы не потеряли, пока я тут разглагольствовала. И, конечно, на
38:47
что ещё хочу вот обратить ваше внимание, извиняюсь, на что ещё хочу обратить ваше
38:53
внимание, мм, то, что обязательно прописываете, какие тулы, которые вы
38:58
позже опишите в разделе туз, вам нужно, а, в каких случаях дёргать. А это
39:05
помогает модели лучше ориентироваться, совершать меньше ошибок вызова, но и вам, соответственно, продумать какую-то
39:11
логику. В целом, когда вы пишете промт, пожалуйста, думайте про логику. А как если бы вы писали какую-то должностную
39:18
инструкцию человеку, потому что если вы напишете промт, в котором сложно разбираться даже вам, никто вам не
39:24
поможет с тем, как его правильно организовать. Поэтому один из залогов успеха — это чистый, понятный вам промт.
39:31
И ещё обязательно вот повторюсь, если у вас есть тулы, прописывайте логику их
39:38
вызова, чтобы модель понимала, что и когда дёргать. Кстати, такой момент, я здесь не
39:43
акцентировала внимания, но вы, в принципе, можете поэкспериментировать, а здесь добавить а разные рекомендации
39:50
модели по тому, как формировать ответ, что не формировать булиты, там, а слишком что-то сложное, то есть
39:57
максимально адаптировать под синтез. Мы рассматриваем вариант, что, возможно, мы заложим такой промт в саму модель, но
40:03
пока больше экспериментируем и смотрим на отзывы наших вот пользователе. Скорее всего, промт, который вот будет
40:09
определять поведение, мы как минимум положим документацию, чтобы вы могли вдохновляться им и использовать в своих
40:15
проектах и, ну, и в примеры, соответственно, а как максимум это станет частью нашей модели из коробки.
Встроенные инструменты: веб-поиск и файловый поиск (Анастасия Каримова)
40:23
А инструменты я здесь не буду рассказывать про function calling. Фанкtion calling — это такая, когда вы
40:29
реализуете что-то, ну, условно говоря, напрямую процесси, а, специального вида
40:34
текст, который выдаёт модель. Ну, не специального вида, а специальные сообщения, выданные модели. Делаете
40:39
самостоятельно вызов функции, отправляете ответ от функции и так
40:45
далее. А здесь я расскажу про встроенные инструменты, которые предоставляются а
40:51
рилтаймом. Это м вы можете использовать webch, а сейчас он пока что не
40:57
параметризируется, а какими-то доменами, на которые он должен обращать особое внимание, но это есть в планах. Также
41:05
функция файлового поиска, благодаря которой вы получаете доступ к своей какой-то базе знаний на построена на
41:12
определённых документах. И также сейчас вот такая оговорочка. На момент записи
41:19
вебинара MCP уже поддержан, но пока это не проросло до нашей документации, не проросло в наши
41:25
примеры. Я обязательно про это расскажу чуть позже, но знаете, вы как разработчик, а благодаря MCP вы сможете
41:32
подключать различные сервисы, а использовать того же ЦРМ пресловутого,
41:37
про которой я уже сегодня рассказывала. В общем, взаимодействовать с любым внешним апе.
41:43
То есть MCP — это такая такой USB hub, который вам позволяет взаимодействовать с многообразием различных опишек. Ну и
41:50
для этого нужно немножко подзавернуть по определённому формату. А файловый поиск
41:55
и поиск по документам — это такие встроенные докумен встроенные методы, на
42:00
которых вам, ну грубо говоря, не придётся напрягаться, а вы передаёте туда условно айдишки, айдишник индекса
42:06
для вебсерча, а в дальнейшем, когда поддержим, сможете передавать домены, на которых нужно сосредоточиться. И на этом
42:11
всё. модель будет ими оперировать вот из коробки. Больше ничего, кроме того,
42:17
чтобы прописать, а когда, а когда файл сеч в инструкции от вас не понадобится.
42:23
А в случае с MCP вы сначала реализуете MCP обвязку своего апи, а потом
42:28
обращаетесь к ней с помощью MCP функции. Из того, что будет поддержано, сразу скажу, что у нас будет MCP работать с
42:34
подтверждением и без. Ну, подтверждение — это как раз та история, когда при необходимости выполнить какое-то
42:41
потенциально, ну, скажем так, м опасное относительно действие, ну, там удаление
42:47
аккаунта, ещё что-то, от пользователя нужно будет получить ответ в каком-то виде. Ну, может быть, там нажать на
42:52
сайте какую-то кнопку, голосом что-то проговорить, какое-то волшебное слово и так далее.
42:58
А ещё одна важная вещь, которую вот я обозначала в самом начале по настройкам
Детекция конца фразы (Анастасия Каримова)
43:03
сессии — это детекция конца фразы. Мм, здесь есть следующее. А впе это
43:09
называется сервердом. И по сути, ну да, это выполняет функцию
43:15
да, но основная идея здесь в тем, чтобы детектить конец фразы. А мы это называем
43:20
для того, чтобы быть максимально совместимыми с Open AI real time app. Ну
43:26
так вот, зачем вам, как разработчики, что-то здесь настраивать? А здесь вы настраиваете то, как будет нарезаться
43:33
ваша речь, а то, как а модель будет забирать что-то на смысловое
43:39
приосмысление, смысловую обработку. А здесь есть чувствительность. Это
43:44
специальный параметр, который вам стоит покрутить в зависимости там от своей акустики, в зависимости от там того, кто
43:51
ваши пользователи. Ну, то есть это то, что здесь заложен какой-то простор для экспериментов. 0,5 по дефолту тоже
43:57
вполне себе нормальная цифра. У нас всё прекрасно с ним работает. На что я хочу отдельно обратить ваше внимание, это вот
44:03
на подсказку вот этот hint duration миллисекундах. Здесь прописано 400.
44:10
Это тот такая подсказка, которая говорит моделя, что распознавание, что если была
44:16
пауза длиной в 400 мсекунд, то, скорее всего, пользователь закончил фразу и её можно отдавать в лм для процессинга.
44:24
Стоит ли делать меньше? Ну, я бы не советовала. Тогда будет много ложноположительных перебиваний. Тогда
44:30
вы, а, может быть, столкнётесь с тем, что агент не будет дослушивать
44:35
пользователя, будет раздражать. В общем, 400 — это даже вот та граница, ниже
44:41
которой опускаться не стоит. Вообще, в принципе, в реальных проектах я бы, наверное, даже ставила побольше, но
44:47
смотрите сами. Возможно, ну, ваш проект, он будет требовать
44:52
каких-то уникальных настроек. Вот, э, порог 0,5 и продолжительность паузы 400
44:58
мскунд для нас работает весьма хорошо. А вот я краем глаза вижу там вопросы. Я
45:04
ещё не могу на них отвечать, потому что рассказываю основную часть а вебинара,
45:09
но суть в том, что вот это как раз-таки определяет возможность перебивания. И в примере, который мы дадим на гитхабе, а
45:15
показано, как это перебивание реализовать. Э вы сможете потом с этим примером
45:22
ознакомиться самостоятельно. А что ещё можно а настраивать? Это задание голоса, а именно скорость, а
Задание голоса (Анастасия Каримова)
45:28
именно собственно какой голос. В голос вы передаёте либо ID общедоступного
45:34
голоса, либо ту модель, которая была заварена для вас в рамках, а, технология
45:40
бренд Voice Premium или Lite. А, собственно, умеем мы озвучивать на разных, э, языках. Подбирайте то язык,
45:49
голос, который нужен вам, что не поддержано сейчас, но что будет поддержано в дальнейшем — это возможное
45:55
задание амплуа. То есть помимо того, что у вас есть некий голос, вы, как вы знаете, наверное, м у голосов часто есть
46:02
разнообразные такие роли. Это ампуа, например, негативный, позитивный, а
46:08
позитивная ампуа амплатом шёпота и так далее. Сейчас, а, мы можем только вызывать дефолтное амплуа. В дальнейшем
46:15
вы сможете голос настраивать. Теперь давайте немножко а поговорим про
Как настроить поиск (Анастасия Каримова)
46:22
то, как настроить поиск. вот эти две самые функции встроенные webпоиск и, а,
46:27
файл Websearch и file search, какой мм пререквизит и что вам нужно, как
46:33
разработчику здесь понимать? Давайте начнём с того, что и поиск в интернете,
46:38
и поиск по документам — это фактически реализация рага, а Retrieval
46:44
Generation, когда м вы позволяете модели, а меньше галлюционировать,
46:49
подпитываете её какими-то внешними знаниями, передаваемыми в контекст, и модель, исходя из переданных знаний, а
46:57
строит уже ответ более актуальный, подходящий для м. Начнём из поиска по
Пример сценария с поиском по файлу (Анастасия Каримова)
47:02
документам. И сценарий здесь такой: вы загрузили какие-то документы, а, через
47:07
files app, построили по верх этого мм
47:12
индекс с помощью Vectктор Store app и затем ID этого индекса используете в
47:18
реалтайме. А, всё звучит достаточно просто. И когда возможна такая ситуация? Почему-то эта
47:23
вот модель, которая знает всё про всех, которая обучена на огромных пластах текста, может
47:30
отвечать, э, ну, может чего-то не знать. Ну, хотя бы банально потому, что вы документы никогда не шарили в интернет.
47:36
Эти документы появились, например, после её обучения. Ну и, в принципе, вы хотите акцентировать модель конкретно на
47:42
определённый свой домен, чтобы она там не подтянула условно информацию по вашему конкуренту. А в таких случаях,
47:48
если говорить про, ещё раз про Vector Store app и Files app, для чего они
47:53
нужны, Files App позволяет вам загружать ваши документы, а после загрузки они
47:59
доступны, как у нас в консоли. Вы можете обращаться к ними по ID и потом
48:04
использовать эти загруженные, а, документы при создании индекса, а уже индекс вы пробрасываете, соответственно,
48:12
в инструмент файл серча. Если а показывать, как это мм выглядит в коде,
48:19
то всё достаточно просто. Примеры есть, в частности, в том репозитории, который я ссылку на которую я дам в конце
48:26
презентации. Но здесь простая история. Вы берёте файл сапи, а, загружаете их,
48:31
вы в ответ получаете там некий айдишник. А, у нас поддержаны разнообразные, а,
48:36
форматы файлов. Есть, можно, есть как поддержка текстовых ПДФа, Экселя и
48:42
прочего, прочего. А со списком вы можете поддерживаем, вы можете ознакомиться в документации. Ну, то есть это всё на
48:49
основе чего может строиться в дальнейшем индекс. Потом вы создаёте индекс, при
48:54
этом вы указываете, а, сколько этот индекс должен прожить. Выбирайте разные политики. Я не буду на этом подробно
49:00
останавливаться, но вот я сегодня как раз, буквально несколько минут назад отвечала в комьюнити, а что вы можете из
49:08
кода как минимум, а, ну, и, наверное, в дальнейшем из плеграунда, если уже даже, может быть, возможно, можете, задавать,
49:14
сколько будет жить индекс. Ну, и потом использование индекса в агенте, оно
49:20
достаточно простое. Вы просто передаёте Vectктор Store ID. Здесь сразу такая оговорочка, а там на вход по апе
49:29
принимается массив ID индексов. По факту сейчас а responses и real time могут
49:36
работать только а с одним тулом, с одним подключённым индексом и не более. Если
49:41
вы попытаетесь передать несколько тулов для файлового поиска, а даже с разными
49:47
индексами произойдёт ошибка. Ошибка также произойдёт, если вы придадите, а файл search
49:52
с неско с индек с количеством индексом большим одного. Поэтому пока ээ один
49:58
инструмент файл серча, один индекс на агента. А вы также можете создать агентов в
50:04
консоли. Я хотела изначально вставить скринка, но потом подумала, что вам уже про это рассказывали и показывали на
50:09
предыдущих вебинарах, поэтому просто покажу юайкой. А здесь суть в том, что у
50:15
нас, а, появился очень удобный UI, где вы можете, в частности, загружать файлы,
50:22
а, создавать индексы и потом использовать ID этих индексов в responses и realtime апе.
50:28
Соответственно, вот ещё такой важный момент. Файлы единожды загруженные, их
50:33
можно, ну, как бы использовать в разных индексах. А, и даже если вы удалите файлы, то, а, индекс будет сохранять
50:40
знания о них. Также, наверное, стоит ещё вот раз подчеркнуть, кажется, на слайдах у меня это было, что индекс вы можете
50:47
модифицировать после создания. То есть, например, у вас есть какой-то какая-то огромная база знаний, и у вас появилась
50:54
какая-то срочная инструкция, которую к этому индексу нужно доложить. Вы не присоздаёте индекс с нуля, вы просто его
51:00
модифицируете, обновляете. Это занимает буквально там несколько секунд, может быть, минут. И новая
51:08
статья становится достоянием вашего индекса. Когда это происходит? Ну, во всяких непонятных ситуациях, например.
51:15
Или вы там, допустим, запускаете продукт, забыли про него рассказать, нужно срочно что-то занести и так далее.
51:20
Или, например, случился как ковид некоторое время назад, когда мы в один момент проснулись и все узнали это
51:26
слово. А инструкции, ну, надо было бы все апдейтить. Представьте, что вы,
51:31
допустим, вы обучили модель на этих знаниях или не могли, не имели возможности переопределить индекс в
51:37
моменте, приходилось бы создавать это с нуля. Ну, это бесполезная, неправильная, скажем так, работа. И поэтому такого
51:44
рода обновления легко докладываются в существующие индексы. Про поиск в
Поиск в интернете (Анастасия Каримова)
51:49
интернете пока, ну, на самом деле, я думаю, вам уже про это достаточно подробно а рассказывал, в частности,
51:54
Дима. А что стоит сказать? Сейчас он не параметризуется у нас, но в дальнейшем
52:00
сможно можно будет задавать а ограничение, скажем так, количество возвращаемого результатом.
52:07
И также можно будет конкретизировать те домены с точностью до страницы, по которым вы хотите отвечать.
52:14
Это, например, тот кейс, когда вы реализуете а голосового ассистента по сайту.
Обработка событий (Анастасия Каримова)
52:20
Обработка событий. Я много раз говорила уже, что а клиент и сервер обмениваются
52:27
событиями и что их достаточно много. Давайте приведу несколько рассмотрим их.
52:32
Рассматривать про события лучше всего на примерах. У вас, а, периодически, например, приходят события от сервера,
52:39
по которому вы должны что-то делать. А, например, вы, когда получили сообщение о
52:44
том, что транскрипция закончена, можете, ну, не знаю, записать в какие-то свои логи, а что вот пользователь сказал
52:51
такую-то фразу. А когда вам пришла дельта ответа, можете сразу её показать. Это, вы знаете, тот эффект, когда вы
52:57
взаимодействуете с голосовым мм там агентом в UI и сразу записываете некий
53:03
текст того же, что же вам возвращается. И пользователь по мере говорения видит, что же он там наговорил, как его
53:09
распознал. Session created во то важное событие, где вы можете взять адишник созданной
53:15
сессии и потом использовать его для пример для бакрепортов. Ну, я надеюсь, в большинстве случаев просто для хранения.
53:23
А speчed — это важное событие, которое, в частности определяется вот как раз
53:28
теми настройками тён детекшена и ещё да. А когда вы получив его можете, например,
53:34
остановить озвучку. А я вот это всё проговариваю. На самом деле пример, как собрать агента, который вот процессит
53:41
все эти события, он будет в репозитории. То есть мы собрали максимально базовый пример, которым вы можете подогнать под
53:47
себя, по модифицировать и, в частности, посмотреть, как, например, прерывать текущую озвучку.
53:52
Мм, ну и, например, вот есть ещё событие responsв,
53:59
а, какой-то, мм, звуковой файл, который вы, например, сразу можете воспроизвести у себя. Этот звуковой файл — это то, что
54:08
сгенерировал синтез дельта, основанная, ну, на частичном ответе ломки. Ну и, конечно, кейс RR.
54:16
Вы, как разработчики, обязательно должны его траккетчить, а, обрабатывать какой-то логикой. А мы всегда знаем,
54:23
что, мм, а любой, он может возвращать ошибки,
54:28
связанные как с внутренней реализацией, так и с тем, что накосячил разработчик. Поэтому обработку блока error
54:35
обязательно добавляйте. А давайте уже поговорим про пример агента. М здесь я хочу показать а
Пример агента (Анастасия Каримова)
54:42
следующее. А максимально простого агента я его собирала поверх того, что выложено
54:48
в общей репозитории. Наверное, здесь быстро пробежимся по настройкам, что
54:53
есть в распоряжении агента. Такая инструкция, что вот ты ассистент. Ну,
54:59
ассистент, как если бы мы делали ассистента типа Алисы, который умеет там в погоду, в новости, знает про меня
55:06
какие-то вещи и с которым можно взаимодействовать. То есть, а что к нему подключено? А в нашем случае Websearch,
55:15
File Search и GEвез. Getве — это пока что рукописная функция, когда я писала MCP, ещё не был прикручен, но я
55:22
обязательно обновлю пример и оставлю ТВЗ поверх MCP и поверх чистого факшн коллинга.
55:28
А, и здесь мы задаём тулы. Я не буду приводить описание файлсерча, вебсерча.
55:34
Мы уже про это достаточно много проговорили, и я думаю, вы поняли, что к чему. А здесь есть описание функции
55:40
getза. Это функция, конечно, которой нету из коробки. Это то, что мы с вами
55:47
рукописно напишем. Реализация вся доступна на гитхабе. Но основное, что хочется сказать, что на вход погода
55:54
принимает, а, как параметр город, для которого она должна
56:00
рассказать. Внутри у меня реализация достаточно такая топорная, простая. А, всякие аспекты погоды, а, облачность,
56:08
кажется, температура, ну, и, э, там выбираются там генерится рандомно. Ну, и
56:13
плюс даётся какой-нибудь совет в духе там, а, не забудьте куртку, пейте много
56:18
воды и так далее. Всё это как ответ функции погоды модель будет использовать
56:23
при ответе. Ровно так, как она использует, например, при ответе результаты файл серча или результаты а
56:32
веб-поиск. А, и ещё немножко подшаманила индекс.
56:37
Вот он буквально весьма простой индекс. Например, вы можете завернуть его в тексты файл и скормить в UI или через AP
56:45
для того, чтобы модель по нему отвечала и его ID отдать. Вот тот самый инструмент файлсерча. В индексе у меня
56:51
есть такие рекомендации по чек-листу для поездки в Сочи и Санкт-Петербург. А они
56:58
лмгенериённые. И вот у меня есть такая мм даже история, что у меня есть
57:04
какая-то история со своим пропуском на Розахутер, например, при поездке в Сочи. Ну я это придумала и мой агент. И
57:11
поэтому будем считать, что информация про пропуск на Розуху Хутер актуальна. Модель должна опираться на неё при
57:16
ответе. А давайте посмотрим, как вообще ведёт себя
57:22
агент. Для простоты я вывела всё в терминал. А, и давайте немножко повзаимодействуем.
57:28
М, это скринка, предзапись. Мм, вот давайте послушаем, как взаимодействовать
57:34
с голосовым агентом. Ой,
57:40
так меня слышно на записи? Давайте ещё раз.
57:50
Так, привет. Помоги, пожалуйста, с чеклистом для поездки в Санкт-Петербург.
57:57
Чек-лист для поездки в Санкт-Петербург. Тёплая одежда, свитер, толстовка,
58:02
дымисезонная куртка, зонт или дождевик, непромокаемая обувь, powerбан и чехол от
58:09
влаги для телефона, аптечка, витаминки, средства от простуды, плотные джинсы,
58:15
перчатки и шапка в зависимости от сезона. Угу. А какая погода в Питере?
58:22
В Санкт-Петербурге сейчас температура -6°, погода, гроза, скорость ветра 8,3
58:31
м/с. Совет: возьмите лёгкую куртку. Угу. А подскажи, пожалуйста, какие
58:37
последние новости по музеям Санкт-Петербурга?
58:44
Вот некоторые новости о музеях Санкт-Петербурга. Ясно, спасибо. А подскажи, пожалуйста, какая погода в Сочи?
58:52
В Сочи сейчас температура 32°, погода облачно, скорость ветра 3,5 м/:
59:01
пейте воду и избегайте длительного нахождения на солнце. Понятно. Спасибо.
59:07
А, пожалуйста, если у вас есть ещё вопросы, обращайтесь.
59:14
А на таком примере мы рассмотрели вот как создать голосового агента. У него буквально вот тот промт, который я
59:20
показала вам, то есть минимальная инструкция, но он умеет обращаться в
59:25
индекс, умеет взаимодействовать с файловым поиском, умеет взаимодействовать с веб-поиском.
59:31
И а здесь реализована возможность перебивания. Там я перебила, чтобы не слушать вот эту историю про новости,
59:38
потому что, ну, у нас время вебинара ограничено. Ну, и в целом по тексту понятно, что она там собиралась
59:43
озвучивать. То есть, буквально за несколько строк кода с минимумом усилий
59:49
вы получаете голосового агента, которого вы, например, можете устроить на сайт.
Аудио утилиты (Анастасия Каримова)
59:55
А для того, чтобы вам было проще вообще разбираться с историей про голос, мы с
1:00:01
коллегами подготовили для вас специальные утилительные классы. Но для вас, если вы пишете на Питоне, ну, в
1:00:06
принципе, Питон вообще прекрасная основа, на чём бы вы ни писали, это прекрасная основа для прототипа. А,
1:00:13
попробуйте, вам понравится наверняка. И что здесь хочется сказать? Мы написали
1:00:19
утилитные классы, добавили их блог эксперимен, который вам уже многим знаком, особенно
1:00:25
те, кто давно с нами в комьюнити. Это СДК, а наша Яндекс Clудная, которая
1:00:31
делает обвязку вокруг сущности облака и которая позволяет взаимодействовать
1:00:37
м с АИ максимально простым и понятным образом. А не смущайтесь, что название эксперимен
1:00:46
здесь всё работает, оттестировано. Ну а если не работает, сообщайте нам, пожалуйста, про
1:00:51
ошибки. Мы обязательно их поправим. Ну и в коде вообще выглядит максимально просто, когда вы создаёте а класс,
1:00:57
который принимает на вход вот эту который отвечает за микрофон, считывает с него из буфера аудио, которое копится,
1:01:06
и класс, который отвечает за аудиовывод. Мы ещё постараемся и напишем инструкции, как использовать эти классы на Убунте,
1:01:14
как возможно использовать на Windows. Но в целом в большинстве случаев, в частности на
1:01:20
Маке, а работает из коробки. А если говорить про СДК, а СДК
OpenAI Agents SDK (Анастасия Каримова)
1:01:27
позволяет, как я уже говорила, оперировать более такими высокоуровневыми сущностями.
1:01:33
И здесь м я покажу сейчас пример кода. А его пока что нет в репозитории, но мы
1:01:40
обязательно выложим. Осталось совсем немного, совсем чуть-чуть. И, конечно же, скажем об этом
1:01:47
в комьюнити. А здесь история следующая. Вы можете легко создавать агентов
1:01:52
несколько, которые оперируют в рамках одной сессии, обладают общим контекстом.
1:01:58
Всё то же самое можно сделать поверхal тайм-апе, но с большими усилиями и затратами. Каждый из этих агентов
1:02:05
оперирует какой-то своей областью знаний. Есть зачастую агент диспетчер.
1:02:10
Ну это я рассказываю, как обычно м создаётся многопользоваский вот такой голосовой интерфейс диспетчер. И
1:02:17
есть какие-то агенты, которые а сильны в каждой своей специализации, например, букинги мест
1:02:24
или там м отвечают за какие-то часто задаваемые вопросы и так далее. А вот
1:02:30
агент-диспетчер обычно вот распределяет, кому какой вопрос. И по завершению своей
1:02:36
задачи агент, который специализируется на чём-то, должен вернуть управление. Зачастую это происходит в тот самый
1:02:42
агент-диспетчер, который его вызвал. Сейчас я покажу небольшой скринкаст, который м делал мой коллега. И из
1:02:50
интересного там происходит взаимодействие трёх сущностей, да, как минимум трёх. То есть есть диспетчер,
1:02:57
есть агент, который отвечает за часто задаваемые вопросы, есть агент, который,
1:03:02
а, м, специализируется на букинге мест, смене мест, ну, то есть какой-то звонок
1:03:07
в авиакомпанию. Давайте так. Из интересного, что сразу хочется вам подсветить для этого на этом скринкасте,
1:03:14
что мой коллега Влад, он заварил собственный голос с помощью технологии
1:03:21
Spechit Brand Voice Slight и использовал как голос агента. Поэтому в некоторых
1:03:27
местах будет казаться, что он общался сам с собой практически.
1:03:32
А вот давайте послушаем.
1:03:39
Алло. Здравствуйте. Меня зовут Владислав. Вы зашли в чат специалистов поддержки.
1:03:45
Ответственные по направлениям будут рады помочь вам. Чем могу помочь? Я хотел бы сменить своё место в рейсе.
1:03:53
Здравствуйте, меня зовут Кирилл. Я отвечаю за бронирование мест в рейсе. Пожалуйста, сообщите мне номер вашего
1:03:59
бронирования. А как он выглядит? Номер бронирования обычно состоит из
1:04:04
букв и цифр. Например, AB32 или RT56. Пожалуйста, проверьте вашу электронную
1:04:11
почку. Да, вижу. BM25. Пожалуйста, уточните, какое место вы хотели бы выбрать.
1:04:17
Шестой ряд. Место F. Пожалуйста, подтвердите, правильно ли я
1:04:23
понял номер вашего бронирования БМ25. А вы хотите выбрать место F в шестом ряду?
1:04:29
Всё верно. Ваше место успешно обновлено. Теперь вы будете сидеть в шестом ряду на месте F.
1:04:37
Есть ли у вас ещё какие-либо вопросы? Да, у меня есть вопросы по правилам авиакомпании.
1:04:43
Здравствуйте, меня зовут Валерия. Я отвечаю за вопросы о правилах авиакомпании. Пожалуйста, задайте ваш
1:04:49
вопрос. Какие у вас нормы провоза багажа? Вы можете взять одну сумку в качестве
1:04:56
багажа. Она должна весить менее 23 кг и иметь размеры 56 на36 на23 см. Есть ли у
1:05:03
вас ещё вопросы? Нет, спасибо. Спасибо за обращение. Если у вас возникнут ещё вопросы, пожалуйста,
1:05:10
обращайтесь. Если говорить про планы по развитию Real
Планы развития Realtime API (Анастасия Каримова)
1:05:17
Time App, их много, но из ближайшего хотим отметить следующее. Что же у нас появится? Можно будет работать с MCP. А
1:05:25
ждите примеров, ждите документации. Обязательно про это расскажем комьюти. Ну как и про все обновления. А мы
1:05:32
сделаем настраиваем и файловый поиск. Вы сможете кастомизировать сайты, с которыми хотите взаимодействовать. UI
1:05:39
для создания голосовых агентов, который будет, ну, наверное, в чём-то похож на то, как вы сейчас создаёте голосового
1:05:45
текстового агента для responsс. Он тоже появится в консоли.
1:05:51
А вот из ближайшего, из того, что
1:05:56
планируем в больших масштабах, мы обязательно расскажем попозже. А вот я
1:06:01
думаю, что у нас много чего реализуется. В частности, мы облегчим жизнь тем, кто
1:06:07
живёт там с телефониями, а хочет прикрутить realта к своему сипу, но об
1:06:12
этом мы расскажем позднее и, возможно, на более специализированных вебинарах. А пока давайте пойдём пройдёмся по
Ответы на вопросы (Анастасия Каримова)
1:06:18
вопросам. А, и вопросы у нас следующие.
1:06:24
А, начну я с конца. Спросили, почему демо погода в Сочи 32°? Ну, так уж я
1:06:29
написала. Там, на самом деле, при запросе функции погоды возвращается рандомное значение
1:06:35
основных показателей. 32° при следующем запросе может могут
1:06:41
превратиться в один. Но если перекрутить MCP и ходить в реальный сервис погода,
1:06:46
погода, конечно же, будет актуальна. А так вопрос, есть ли встроенный
1:06:52
шумодав? Нет, а такого нет. И в целом мы не очень рекомендуем использовать
1:06:58
шумадамы, шумадавы в сочетании с технологиями, а спички там, потому что модель изначально, а, обучалась на
1:07:06
максимально грязных аудиах, чтобы не зависеть от каких-то, а, скажем так, алгоритмов шумоподавления. Поэтому
1:07:14
шумодах его бы вам даже не рекомендовала использовать. Ну, если вам уж так хочется, дойдите до меня, пожалуйста,
1:07:20
напишите мне в личке, например, и а скажите, зачем он вам так нужен.
1:07:26
А так вопрос: как заблокировать вопросы, не имеющие отношения к голосовому чату
1:07:34
компании? То есть, если вопрос общего планина, чтобы он не обращалсь, чтобы не было обращения к вебсchчи. Ну, это всё
1:07:41
задаётся инструкцией. Вы можете чётко сказать, если спрашивают, например, про продукты компании мм Облачко, вот тогда
1:07:49
иди в webчи, может быть, даже на такой-то сайт. А если не спрашивают всё, не ходи никогда. Вот такого рода прямые
1:07:56
указания. А дальше, а а модель готова отделить
1:08:04
активное, а слушание от перебиваний, которое действительно предполагает, что бот перейдёт в режим, а слушания.
1:08:14
А на самом деле, в принципе, это можно сделать
1:08:20
самостоятельно, но все наши примеры и в основном тот пайп, относительно которого
1:08:26
мы отлаживаемся, он, ну, который ставим как целевой, мм, он предполагает, что,
1:08:33
м, идёт вот если человек начал говорить, то, значит, ему, наверное,
1:08:40
его нужно, ну, как бы замолчать, как сделал бы вежливый человек человек в разговоре, но в целом такую реализацию
1:08:45
можно сделать. Она будет работать не из коробки, но, наверное, что-то покрутить можно. Кстати, мм, вы тоже дойдите до
1:08:54
меня, пожалуйста, расскажите, зачем вам именно активное слушание, в каких кейсах вы его хотите, потому что, мм, вообще, в
1:09:03
принципе, велика вероятность, что мы можем из активного слушателя и слушания перейти в тот плас, когда перестанем
1:09:08
нормально отвечать. А синтез стриминг через стриминг на базе спички там можно делать. М да,
1:09:16
технология а потокового синтеза, она доступна не только в в realтаймпе. Вы
1:09:22
можете воспользоваться ну ей спичките те напрямую. Ну, в общем,
1:09:28
все всё то, что все те наработки, которыми мы занимались, всё то, что мы делали последние несколько лет, оно вот
1:09:34
логичным образом соединилось в реалпе. Вот мы давно хотели что-то такое. Вот. Наконец-то сошлось. Да, синтез есть, его
1:09:41
можно использовать отдельно. Примеры есть, документация. Вот сама лично писала: «А как работать с
1:09:48
задержками при синхронном переводе?» Я понимаю, что можно две сессии держать и между ними переключаться, но почему-то они теряют данные.
1:09:55
А-а, так, тут достаточно длинный и подробный запрос, который в рамках, наверное, вот, э, кратких ответов
1:10:02
ответить не получится, и нужно сильно вчитываться, чтобы понимать. Но в целом, а основная эта идея какая? что ll она
1:10:09
настолько умная, что если вы, допустим, в перевод не пойдёте куда-нибудь в MCP, ну, вы вряд ли это пойдёте делать, то вы
1:10:15
будете общаться, ну, по сути, ну, условно болталочном режиме, и задержки там будут минимальные, меньше 1но
1:10:21
секунды. А вопрос для подсказок операторов можно ли
1:10:27
будет получать только текстовые подсказки и не платить за синтез? Да. А, то есть вы можете настраивать
1:10:33
модальности входа-выхода. И условно, если вы, например, и
1:10:38
получаете лмки только текст, с которым что-то делать. И даже при желании вы
1:10:43
можете там какой-то придифанены держать набор предозвучных фраз, хорошо там отсинтезированных. Ну мало ли вам там
1:10:49
захочется и использовать их связки с агентом. А я вопрос:
1:10:54
а если добучить своему голосу, тация будет копировать эмоциональность? Ну, смотрите, есть вот эта технология,
1:11:01
а, бнвоl. А, и бренд voice premium, ну, то есть создание каких-то своих брендвайсов. Там
1:11:09
максимально мы в рамках тех технологий, которые, ну, которые у нас есть, мы стараемся всё это передать. Интонации
1:11:17
будут копироваться, эмоциональность тоже, но, м, мы оперируем эмоциональностью больше через амплуа. А,
1:11:25
то есть, если вы захотите быть в какой-то момент злым, в какой-то момент
1:11:31
добрым или, ну, не знаю, играть какую-то ещё роль, которая вам придёт в голову, придётся записать несколько амплуа. Но в
1:11:37
целом ответ на вопрос скорее, да. А вопрос вот если нужно мм так
1:11:44
пампам-пам-пам. А если нужно распознавать речь и выдавать ответы текстом, что взять проще
1:11:51
и дешевле: связку с ТТ плюс response Apple или real time? Тут тоже
1:11:56
лучше, то есть распознавать речь, выдавать ответы с текстом. Ну, смотрите, realта — это вот здесь и
1:12:04
сейчас вопрос в том, что требуется. На самом деле мы расширили опис печкита, и
1:12:10
в настоящий момент есть там такая настройка суммаризации. Наверное, стоило про неё тоже упомянуть, потому что
1:12:15
аудитория плюс-минус та же, но я тут проалтай рассказываю. Короче, есть настройка сумаризации в спичките, куда
1:12:22
вы можете передать модель и сказать, что нужно сделать с аудио по результатам
1:12:28
распознавания. Доступная эта опция суммаризации спички, те, которые вот по токовым или по файловым. Возможно, вам
1:12:35
так будет проще и дешевле, но за скоростью, мм, за вот быстротой, вот
1:12:42
если вам важна именно скорость при ответе, приходите в realtime app.
1:12:47
А, ну и не забывайте, что Real Time Appic получится, ну, наверное, несколько подороже, хотя бы потому что ему нужно
1:12:54
постоянно переваривать и обрабатывать контекст, а память она тоже стоит.
1:13:00
Вопрос. Я понимаю, что Real Time — это оптимизированный конверт tтslтt поsocket,
1:13:06
а нет voice to voice модель. Верно? Ну, на самом деле, да, правильно понимаете,
1:13:12
но мы будем много экспериментировать. И в целом для упрощения абстракции рассматривайте э вот
1:13:19
всё взаимодействие как именно восвой модель. Мы к этому идём, мы к этому будем стремиться. И открою вам страшную
1:13:25
тайну. Все, кто притаряется в твой войск в большинстве своём, они оперируют каскадами. ради различных оптимизаций,
1:13:32
ради различных выгод, потому что, ну, так удобней, так проще и дешевле сёрвить. Поэтому мы под капотом будем
1:13:39
максимально стараться оптимизировать. И вообще старайтесь не думать, что там под капотом. Главное, каков результат, чтобы
1:13:46
это справлялось вот именно с вашими задачами. Так. И
1:13:52
пам-пам. Так, сейчас я ещё посмотрю, что задали. А
1:13:59
спички входит в состав Studio или как сторонний сервис в этом случае? А, да,
1:14:06
тут уже коллеги за меня ответили. Входит в состав. А, и вопрос при про задержке.
1:14:13
Real timeпе сам следит за комфортом ответов пользователю. Имеется в виду, что если пауза затягивается, он
1:14:19
сглаживает её какой-то репликой для пользовате комфортом. В корень зрите м пока такого нет. Вы можете реализовать
1:14:26
это самостоятельно, но как фитчу мы очень хотим и планируем. Вот для тех, кто не понял, какая там история, вот
1:14:32
если вы звоните, например, какую-то, допустим, как в одну известную авиакомпанию, мм, периодически звоню,
1:14:37
общаюсь с операторами, они, когда уходят на мм разговор, когда начинают решать
1:14:43
вашу задачу, ну, условно, оперировать, взаимодействовать с каким-то программным СПО у себя, чтобы решить вашу проблему,
1:14:50
они вам периодически говорят: «Секундочку, минуточку» и так далее. Вот это, насколько я понимаю, вопрос, ровно
1:14:56
та же история. Мы обязательно дадим, ну, как минимум пример, а, как максимум, какое-то встроенное средство для
1:15:02
обеспечения такого взаимодействия. Встроено оно будет лучше хотя бы потому, что там модель может покреативить там,
1:15:07
х-х, а, да-да, секундочку, минуточку и так далее. А, так. И ещё тут вопрос,
1:15:15
а так, как подключить голосового агента к IP АТС, например, при входящем заднге
1:15:20
банет должен переключаться на голосового агента. А, смотрите, если мы говорим про кейсы,
1:15:27
когда напрямую не получается, то тут как какая история начинается? IPS. А,
1:15:32
насколько я знаю, там можно оперировать непосредственно голосовым потоком. Но что в realта вообще стоит отдавать? Вот
1:15:39
именно аудио и получать на выход аудио. Real time капсулирует некую логику. И вообще вот если при таком подходе, если
1:15:46
вообще говорить про интеграции с разными, а, телефониями, то вам пока что, наверное,
1:15:54
придётся написать какой-то сип-сервер, который будет вот как раз вот взаимодействовать с реалпе,
1:16:00
а сам будет подключаться по Cport TP к вашей телефонии и как-то обрабатывать
1:16:05
потоки. А как вопрос, как привязать уже существующего настроенного текстового
1:16:11
агента к Real Time? Отличный вопрос. Пока такой возможности нет. А его придётся немножко там
1:16:18
посоздавать с нуля, в частности подкорректировать а текст, потому что модель здесь другая. А и возможно там её
1:16:27
немножко нужно будет, а как бы поподбирать инструкцию, а
1:16:33
скорректировать файл и веб всё очя из тех ограничений, которые есть. А, ну,
1:16:39
ну, мы их обязательно скоро нивелируем, и можно будет практически всё то же самое делать, что и в responses MCP.
1:16:46
Вот-вот подходит, вы сможете реализовывать. Но в целом, к сожалению, пока вот взять айдишник агента и
1:16:52
переложить его в реалтам не получится. Но как фича вообще здоровская. Мы на самом деле про это думали буквально на
1:16:59
прошлой неделе. И здорово, что это подтверждается вот запросом в прямом эфире. Буквально вопрос. Можно ли
1:17:06
реализовать передачу другому голосовому агенту, если меняется тема и требуется другой агент, чтобы предыдущий агент объявлял? Например, этим вопросом на
1:17:13
займётся Алла. Передаю трубочку ей. Передать можно насчёт того, чтобы перед,
1:17:19
а, озвучкой м произносилась вот какая-то преамбула. Э скорее, наверное, сейчас не получится
1:17:26
в виду определённых ограничений. Вообще запрос интересный, и мы подумаем,
1:17:32
как можно что какой совет можно дать и вообще, можно ли это будет как-то обойти.
1:17:38
Возможно, когда вы создаёте другой голосовой агент, она может, когда переключаете на агент после вот этого
1:17:45
хендофа, вы можете притвориться, что вы ещё находитесь в том агенте и а сказать,
1:17:50
что вот сейчас будет отвечать условно Алла или кто, и потом перейти на свой
1:17:56
базовый голос и делать свою работу. А вопрос, правильно ли я понял, что если
1:18:02
делать такие переходы между агентами, как примере, нельзя выбрать рассуждающую, например, модель или нет для качества проработки? Да, пока
1:18:09
нельзя. И а сейчас ещё последний вопрос. Что случится, если вызов функции выдаст
1:18:15
ошибку? Ну, на самом деле
1:18:21
зависит от того, какая функция и как вы выдаёте ошибку. Но в целом модель
1:18:27
попытается либо сказать, что не смогла, либо воспользоваться каким-то другим способом
1:18:34
для того, чтобы ответить пользователю. Вот сходу, не знаю, но в целом мм ошибки
1:18:42
периодически возвращаются, и пайп не ломался, наверное, с меня. Давайте так. Я это возьму как пример. В целом мы тут
1:18:50
все агентов строим на функции. И, наверное, будет разумным и логично показать, что же происходит при ошибках
1:18:56
и в каком виде эту ошибку лучше моделя возвращать. Всё, это я запарковала.
1:19:01
А скажите, пожалуйста, какие конкретные приёмы и архитектурные паттерны вы рекомендуете для минимизации задержки
1:19:07
цепочки захват ISR генерации ответа ТТС при использовате Real Time в Яндекс Astту?
1:19:13
Да, на самом деле мы максимально всё оптимизировали. Вам доступны настройки сессии, и
1:19:20
там вы можете покрутить вот этот вот н детекшн, а, которым оперируете. Ну и в
1:19:26
целом покрутить то, как вы работаете, как строите индекс, чтобы, ну, условно
1:19:31
говоря, там не тащилось много мусора, из которого приходилось строить ответ, чтобы модель там условно не 2.000 чанков
1:19:39
получала на 2.000 токенов, простите, получала на вход, а м что-то более
1:19:44
оптимизировало. То есть поработать с настройками поиска, мм, поработать с
1:19:49
ндетекшеном в целом, давать более чёткие указания. В остальном мы всё архитектурно за вас уже сделали. Вот. И
1:19:56
дали вам ручки, которые можете крутить. Их я описала. Один из сценариев
1:20:02
использования голосовых агентов — это собеседник для пожилых людей. Мечтаю сделать такого для тёщи. А вот как бы
1:20:08
это сделать побыстрее? А, ну я думаю, что это уже последний
1:20:14
вопрос, на который мы будем отвечать в вебинаре. Вообще замечательный зять. А
1:20:19
вот который хочет сделать прямо-таки кастомного агента для тёщи. М, ну как бы
1:20:27
это сделать побыстрее, даже не знаю. Ну, если пофантазировать,
1:20:32
а может быть, у вас есть переписка с тёщей там, условно, в Телеге, в Ватсаппе, в Одноклассниках, может быть,
1:20:37
это использовать как такой индекс, на который опираться при ответав. Возможно, сделать некий факт ответов, где вы учили
1:20:43
тёщу пользоваться телевизором, а, каким-то навороченным или Алисой. вообще голосового агента, конечно, для тёща
1:20:50
можно заморочиться и сделать и вообще сделать из этого прекрасный стартап, но у нас уже есть хорошая идея, как
1:20:57
развлечь родственников. Это Алиса. Воспользуюсь и прорекламирую. Не зря я проработала в этой команде много лет.
1:21:03
Искренне их люблю и ценю как продукт. А, и Алиса как раз-таки вот по моему
1:21:10
опыту, она вот многим пожилым людям она скрашивает жизнь, позволяет ставить музыку, общаться, узнавать какие-то
1:21:17
факты, ну, и теперь уже даже звонить. Вот можно начать с того, что Алису
1:21:22
поиспользовать, а потом уже, может быть, даже когда-нибудь расширить навыком в Алисе. Кстати, хорошая идея сделать
1:21:28
такую возможность, чтобы интегрировать наши навыки в Алису голосовые. Мы об этом подумаем. Спасибо. На этом мы
1:21:35
подходим к концу. А у нас есть три полезных ресурса, которые вам советуем
Полезные ссылки (Анастасия Каримова)
1:21:41
посетить. Первый из них — это репозиторий. А здесь комичу пока что в основном я. А
1:21:48
будем стараться расширять число комитеров. Возможно даже подтянем комьюнити. Ну и коллеги подтянутся.
1:21:53
Станет всё более в таком продакшн-виде. Больше примеров, больше полезных кейсов. Может быть до блупринтов дойдём таким
1:22:00
образом. А документация тоже полезный источник данный. Туда мы, конечно же,
1:22:05
даём всю необходимую информацию, в чём-то дублируем примеры. И, конечно же, там описан, например, в частности,
1:22:11
тарификация и структура АИD. Ну и наше замечательное сообщество комьюнити в
1:22:19
Телеграме. Мы очень выросли за последнее время. Спасибо, что приходите к нам, взаимодействуете, делитесь своим опытом,
1:22:25
задаёте вопросы. Нам безумно приятно. Это очень мотивирует что-то продолжать. И, конечно же, мы там даём вам первым
1:22:31
какие-то новости, которые вот, ну, вот только что-то сделали и сразу отдаём. Даже документация может не всегда первым
1:22:38
доезжать, а вам мы рассказываем сразу, потому что очень ценим ваш фидбэк и стараемся порадовать, потому что вот
1:22:44
смотрите, вы спрашивали, а мы нашли решение. И вот сейчас мы порешаем ту проблему, с которой вы приходили.
1:22:51
Вот. Что хочется ещё раз напомнить, у нас серия вебинаров заканчивается. Спасибо, что были с нами всё это время.
1:22:58
А впереди оффлайн встреча, на которой мы встретимся с некоторыми из вас, наиболее активными, те, кто будет отвечать на
1:23:04
вопросы, в частности, которые придут вам на почту после этого вебинара и которые приходили до. Будем ориентироваться, в
1:23:11
том числе, на то, как вы помогаете другим в комьюнити и на какие-то интересные проекты. Вот это очень сильно
1:23:18
мотивирует нас, когда вы показываете, что пытаетесь сделать. Прямо вау, очень здорово. Вот на этом, пожалуй, всё. Ждём
1:23:26
вас в коммьюнити. Если вы ещё не там, приходите с вопросами, мы постараемся
1:23:31
обязательно ответить и м сделать для вас много чего нового и интересное. На этом всё. Пока.

Поделиться: