1
00:00:00,000 --> 00:00:28,240
 Всем привет! Мы Настя и Миша из команды AI Studio. Привет! И сегодня мы расскажем, как с помощью

2
00:00:28,240 --> 00:00:34,400
 в реал-таймапе создавать голосовые приложения от простых до сложных мультиагентских. Наш

3
00:00:34,400 --> 00:00:39,360
 вебинар в первую очередь направлен на техническую аудиторию, на разработчиков и архитекторов,

4
00:00:39,480 --> 00:00:45,220
 которые хотят разобраться с реал-таймапе. Но также мы постарались делать вебинар интересным,

5
00:00:45,280 --> 00:00:50,100
 в том числе и бизнес-аудитории, и поэтому в каждом блоке, в котором будем рассказывать,

6
00:00:50,220 --> 00:00:55,480
 мы обязательно показываем не только техническую имплементацию, но и рассказываем применимость

7
00:00:55,480 --> 00:00:58,420
 той или иной фичи реалтайма для бизнес-кейсов.

8
00:00:59,120 --> 00:01:03,260
 Пару слов о том, что мы сегодня будем вам рассказывать.

9
00:01:04,120 --> 00:01:10,700
 Мы сегодня поговорим про возможности нашей платформы, поговорим про промптинг,

10
00:01:10,820 --> 00:01:22,180
 вообще про создание агента, расскажем, как дать агенту побольше знаний и возможностей,

11
00:01:22,180 --> 00:01:32,780
 используя файл-серч, веб-серч, научим агента выполнять сторонние действия с помощью функцион-коллинга и MCP,

12
00:01:33,540 --> 00:01:45,080
 также немножко поработаем над тем, как агент работает с контекстом с помощью прерываний и функции truncate.

13
00:01:45,080 --> 00:01:54,540
 После этого мы перейдем к более масштабным решениям с помощью мультиагентности,

14
00:01:55,680 --> 00:02:01,060
 обсудим про то, какие вообще возможны поверхности для Real-Time API,

15
00:02:01,540 --> 00:02:10,640
 ну и подведем итог, что мы сегодня научились, и также немножко заглянем в будущее, какие у нас планы.

16
00:02:10,640 --> 00:02:18,540
 Что же такое Real-Time API? Real-Time API — это API для построения систем взаимодействия в реальном времени.

17
00:02:18,840 --> 00:02:23,500
 Пользователи слушают, понимают и дают ответ практически без задержек.

18
00:02:24,460 --> 00:02:33,040
 Real-Time API — это часть платформы iStudio. iStudio — это платформа для построения агентов, построения приложений на базе.

19
00:02:33,040 --> 00:02:38,260
 В координатах iStudio и Real-Time API следует искать в агентском ателье.

20
00:02:38,440 --> 00:02:45,840
 Агентское ателье — это раздел студии, в котором удобно создавать агентов как голосовых, так и текстовых.

21
00:02:46,080 --> 00:02:50,480
 Так вот, в агентском ателье Real-Time API отвечает за создание именно голосовых агентов.

22
00:02:51,280 --> 00:02:55,360
 Real-Time API интегрирован с большинством кубиков, представленных в этом разделе.

23
00:02:55,360 --> 00:03:01,080
 Так, с помощью MCP он может обращаться к API разных внешних систем.

24
00:03:01,620 --> 00:03:06,780
 Также он может использовать голоса, представленные в спичке, те как общедоступные, так и голоса,

25
00:03:06,800 --> 00:03:11,760
 которые пользователи создавали приватно для себя, ну, конечно, теми же самими пользователями.

26
00:03:12,260 --> 00:03:16,700
 И real-time API умеет работать со всеми представленными видами поиска,

27
00:03:17,140 --> 00:03:19,900
 можно искать по документам, можно искать по вебу.

28
00:03:20,900 --> 00:03:24,420
 Real-time API, если говорить об этом достаточно высокоуровнево,

29
00:03:24,420 --> 00:03:29,880
 это API к каскаду моделей и инструментальной обвязки вокруг них.

30
00:03:31,180 --> 00:03:35,720
 За логику в real-time, за вообще принятие каких-то решений,

31
00:03:35,900 --> 00:03:38,620
 отвечает LLM, Large Language Model.

32
00:03:39,100 --> 00:03:43,040
 Это логика и того, что и как говорить,

33
00:03:43,600 --> 00:03:46,660
 какими знаниями когда пользоваться, какие инструменты вызывать.

34
00:03:47,400 --> 00:03:51,120
 За голосовой вывод отвечает модель распознавания речи,

35
00:03:51,120 --> 00:03:54,700
 speech-to-text, она же ISR, Automatic Speech Recognition.

36
00:03:55,280 --> 00:03:58,580
 И за голосовой вывод, соответственно, модель синтеза речи,

37
00:03:59,180 --> 00:03:59,780
 текст-to-спич.

38
00:04:00,740 --> 00:04:05,000
 Real-time API может работать не только во флоу голос-голос,

39
00:04:05,000 --> 00:04:07,720
 но и голос-текст в различных его сочетаниях.

40
00:04:07,840 --> 00:04:10,380
 Но на сегодняшнем бинаре преимущественно мы будем

41
00:04:10,380 --> 00:04:13,200
 сосредотачиваться на сценарии голос-голос

42
00:04:13,200 --> 00:04:16,560
 и лишь изредка уходить в сценарий голос-текст.

43
00:04:17,760 --> 00:04:21,200
 Ну и немножко спустимся на более технический уровень.

44
00:04:22,460 --> 00:04:25,360
 Посмотрим, какая часть за что отвечает.

45
00:04:25,820 --> 00:04:31,600
 Если рассматривать нашу схему, то у нас есть входной канал.

46
00:04:31,600 --> 00:04:34,780
 Это может быть микрофон вашего телефона,

47
00:04:35,160 --> 00:04:37,040
 микрофон на ваших наушниках.

48
00:04:38,220 --> 00:04:44,160
 Соответственно, в нашу систему входной сигнал в виде аудиофайла.

49
00:04:44,680 --> 00:04:49,200
 Дальше, соответственно, происходит распознавание речи.

50
00:04:50,040 --> 00:04:53,980
 Тут идет обработка перебиваний.

51
00:04:53,980 --> 00:05:02,620
 Также важная компонента – правильная работа с речью.

52
00:05:03,260 --> 00:05:06,300
 Дальше уже распознанный текст передается в модель,

53
00:05:06,600 --> 00:05:11,040
 и там актуальны уже, по сути, настройки мозгов,

54
00:05:11,380 --> 00:05:13,900
 использование сторонних тулов,

55
00:05:14,940 --> 00:05:17,380
 конечно же, инструментация в виде промптинга,

56
00:05:18,680 --> 00:05:19,760
 применение переменных.

57
00:05:19,760 --> 00:05:26,220
 И с этими данными модель уже строит ответ.

58
00:05:26,660 --> 00:05:30,260
 Она, соответственно, передает свой ответ в синтез.

59
00:05:30,560 --> 00:05:33,300
 В синтезе применяются настройки амплуа,

60
00:05:33,740 --> 00:05:35,900
 настройки параметров голоса,

61
00:05:36,560 --> 00:05:40,160
 и дальше уже синтезированный аудиофайл

62
00:05:40,160 --> 00:05:42,880
 отправляется обратно и воспроизводится

63
00:05:42,880 --> 00:05:44,740
 на динамике вашего устройства.

64
00:05:46,100 --> 00:05:48,160
 Я перескажу практически то же самое,

65
00:05:48,160 --> 00:05:49,580
 но для бизнес-аудитория.

66
00:05:49,800 --> 00:05:52,380
 То есть реал-тайм — это на самом деле хорошая основа

67
00:05:52,380 --> 00:05:54,040
 для создания голосовых агентов,

68
00:05:54,160 --> 00:05:55,460
 для создания роботов.

69
00:05:56,040 --> 00:05:58,260
 За всю бизнес-логику здесь отвечает LLM.

70
00:05:58,360 --> 00:06:01,820
 Именно она решает, в какой момент обращаться к базам знаний.

71
00:06:02,220 --> 00:06:04,820
 Именно она решает, когда вызывать инструменты.

72
00:06:05,280 --> 00:06:07,360
 То есть что мы подразумеваем под базами знаний?

73
00:06:07,480 --> 00:06:10,220
 Это, например, какая-то ваша внутренняя документация,

74
00:06:10,380 --> 00:06:12,400
 которая может храниться на вики, в файлах,

75
00:06:12,800 --> 00:06:14,620
 может быть, даже в формате аудио,

76
00:06:15,120 --> 00:06:17,300
 если это результаты каких-то встреч.

77
00:06:17,920 --> 00:06:20,720
 Если мы говорим про инструменты, что они умеют?

78
00:06:20,780 --> 00:06:25,200
 Они умеют в поиск, в обращение к внешним каким-то системам.

79
00:06:25,200 --> 00:06:30,960
 То есть агент легко подключается к различного рода CRM, трекерам и так далее.

80
00:06:32,120 --> 00:06:35,360
 Если говорить про голосовую составляющую в этих бизнес-сценариях,

81
00:06:36,020 --> 00:06:41,140
 то здесь важно отметить, что распознавание может работать не только с русским языком,

82
00:06:41,240 --> 00:06:47,520
 но в том числе и казахским, и узбекским, и еще другими языками, которые у нас поддержаны.

83
00:06:47,520 --> 00:06:57,340
 Если говорить про озвучку синтез речи, то здесь поддерживаются все голоса, которые у нас представлены в синтезе,

84
00:06:57,460 --> 00:06:59,700
 и они тоже есть на разных языках.

85
00:07:01,840 --> 00:07:08,340
 Мой любимый подход к изучению любой платформы технологии — попробовать все саму, потыкаться.

86
00:07:08,940 --> 00:07:13,440
 И давайте посмотрим, где, собственно, нас можно попробовать потыкаться.

87
00:07:14,960 --> 00:07:18,780
 Первая платформа, первая поверхность — это Playground.

88
00:07:18,940 --> 00:07:23,780
 У нас появилась песочница, она доступна в веб-интерфейсе и студии.

89
00:07:24,700 --> 00:07:30,240
 Там можно быстро попробовать идею, можно поуправлять настройками синтеза,

90
00:07:30,340 --> 00:07:35,140
 можно потрогать некоторые из тулов, не все тулы поддержаны.

91
00:07:36,680 --> 00:07:44,220
 И, соответственно, без какого-либо кодинга можно сразу посмотреть, что это вообще за продукт.

92
00:07:44,220 --> 00:07:53,920
 Но для полноценной интеграции, для production-ready решений, конечно же, нужна уже интеграция на уровне каком-то более техническом.

93
00:07:54,560 --> 00:08:02,080
 Для нас это API, мы в этом смысле поддерживаем стандарт OpenAI real-time протокола.

94
00:08:03,220 --> 00:08:12,600
 И если чуть-чуть вдаться в подробности технические, то у нас открывается канал по WebSocket,

95
00:08:13,480 --> 00:08:20,260
 это поток событий двунаправленный от клиента к серверу и от сервера к клиенту.

96
00:08:20,260 --> 00:08:24,860
 Ну и, конечно же, такой уровень интеграции дает максимальную гибкость.

97
00:08:25,580 --> 00:08:30,200
 Поскольку мы поддерживаем популярный и открытый протокол,

98
00:08:31,100 --> 00:08:34,480
 то для него уже существует большая база готовых решений.

99
00:08:35,200 --> 00:08:41,280
 Соответственно, не нужно писать руками сырой код, а можно использовать готовый SDK.

100
00:08:42,740 --> 00:08:52,780
 Например, та же агентская библиотека Agents SDK от OpenAI для Python или для TypeScript,

101
00:08:53,120 --> 00:08:57,860
 для любой практически платформы, на которой вы будете строить свое решение.

102
00:08:58,240 --> 00:09:05,580
 Ну и мы рекомендуем использовать вот эти вот две последние поверхности уже для продакшн-решений.

103
00:09:06,160 --> 00:09:11,320
 Мы сегодня покажем и Playground, и, соответственно, решение в коде.

104
00:09:12,000 --> 00:09:17,240
 Давайте посмотрим вообще, как работать с Playground, как там представим RealTime.

105
00:09:22,240 --> 00:09:26,540
 Как работать с голосовыми агентами в интерфейсе iStudium.

106
00:09:26,900 --> 00:09:34,680
 Заходим на сайт, нажимаем кнопку «Войти» и оказываемся на главной разводящей странице iStudium.

107
00:09:35,000 --> 00:09:38,000
 Здесь есть шаркат «Создай голосового агента».

108
00:09:38,000 --> 00:09:42,500
 Кликнув на него, вы попадете на визерд его построения.

109
00:09:43,520 --> 00:09:53,040
 Можно название задать, можно добавить описание, выбрать модель «Системный промпт», написать с нуля, либо воспользоваться каким-то пресетом.

110
00:09:54,340 --> 00:10:00,940
 Добавить переменные, выбрать инструменты, задать параметры обработки речи, создать и тут же протестировать.

111
00:10:01,600 --> 00:10:09,060
 Если говорить про другие точки входа, то в агентском ателле есть специальный раздел «Голосовые агенты»,

112
00:10:09,060 --> 00:10:17,800
 где есть ссылка на документацию по агентам, кнопка «Создание с нуля» и также список агентов, которые вы создавали ранее.

113
00:10:18,720 --> 00:10:22,780
 Для демонстрации возможностей давайте посмотрим на агента-переводчика.

114
00:10:23,700 --> 00:10:29,720
 Это довольно простой интерфейс, в котором мы определяем все поведение буквально промптом.

115
00:10:29,720 --> 00:10:37,760
 Ты голосовой агент-переводчик, отвечаешь за такое-то взаимодействие, переводишь с русского на английский, у тебя какие-то ограничения.

116
00:10:39,480 --> 00:10:47,960
 Например, мы там, в частности, говорим, если фраза неполная или оборвалась, переведи только ту часть, которую удалось распознать.

117
00:10:48,120 --> 00:10:51,340
 Или обсценную грубую лексику переводим в смягченной форме.

118
00:10:52,000 --> 00:10:54,500
 Как-никак у нас агент для конференции.

119
00:10:54,900 --> 00:10:55,960
 Таким мы его написали.

120
00:10:56,400 --> 00:11:01,680
 Если говорить про другие параметры, то здесь мы не используем ни переменные, ни инструменты.

121
00:11:01,980 --> 00:11:06,140
 К ним мы вернемся в рамках нашего основного сценария вебинара.

122
00:11:07,100 --> 00:11:09,860
 Здесь же зададим параметры обработки речи.

123
00:11:10,340 --> 00:11:10,820
 Синтез.

124
00:11:12,080 --> 00:11:13,380
 Голос убираем John.

125
00:11:14,220 --> 00:11:19,000
 Для вашего удобства голоса сгруппированы по языкам, которые они поддерживают.

126
00:11:19,120 --> 00:11:23,300
 Если голос поддерживает амплуа, его также можно задать.

127
00:11:25,300 --> 00:11:29,140
 В синтезе вы можете конфигурировать скорость речи.

128
00:11:29,300 --> 00:11:32,700
 По умолчанию это единица, но если надо, побыстрее увеличиваете,

129
00:11:32,820 --> 00:11:34,180
 если поменьше, уменьшаете.

130
00:11:35,340 --> 00:11:38,760
 Параметры распознавания речи – это язык.

131
00:11:38,880 --> 00:11:41,200
 Вы можете выбрать список, у нас это русский.

132
00:11:42,080 --> 00:11:44,220
 И также есть определение конца фразы.

133
00:11:44,380 --> 00:11:49,180
 Фраза – это буквально то, на что отвечает агент в разговоре.

134
00:11:50,120 --> 00:11:52,440
 Давайте установим длительность тишины 850.

135
00:11:52,440 --> 00:11:56,120
 Это длительность, после которой фраза считается законченной.

136
00:11:57,020 --> 00:11:59,400
 И пускай чувствительность останется такой же.

137
00:12:00,360 --> 00:12:06,020
 Чувствительность – это тот параметр, который отвечает за баланс между скоростью реакции

138
00:12:06,020 --> 00:12:08,820
 и устойчивостью к коротким паузам внутри фразы.

139
00:12:09,680 --> 00:12:12,580
 Советую настраивать в зависимости от поверхности.

140
00:12:12,720 --> 00:12:15,820
 Телефон – это канал или, например, мобильное приложение.

141
00:12:17,800 --> 00:12:20,720
 Таким образом, настроив нашего агента, мы его сохраняем.

142
00:12:21,140 --> 00:12:23,540
 И можно приступать к тестированию.

143
00:12:25,040 --> 00:12:30,360
 По настройкам тестирования можно выбрать микрофон.

144
00:12:30,640 --> 00:12:34,060
 Я оставлю дефолтный и выставить галочку «Агент говорит первым».

145
00:12:34,060 --> 00:12:39,420
 В нашем сценарии это не нужно, но если ваш сценарий подразумевает какой-то исходящий звонок,

146
00:12:40,020 --> 00:12:41,220
 обязательно его проставьте.

147
00:12:42,080 --> 00:12:43,340
 Запускаем сессию.

148
00:12:44,340 --> 00:12:44,720
 Привет!

149
00:12:46,400 --> 00:12:47,460
 Как дела?

150
00:12:49,840 --> 00:12:51,340
 Останавливаем.

151
00:12:51,480 --> 00:12:54,220
 Длительность сессии получилась 7 секунд.

152
00:12:54,320 --> 00:12:56,020
 Какие еще артефакты у нас остались?

153
00:12:56,200 --> 00:12:58,320
 Ну, собственно, наш диалог.

154
00:12:59,360 --> 00:13:03,700
 Идентификатор сессии пригодится при обращении в поддержку, если что-то пошло не так.

155
00:13:04,740 --> 00:13:07,140
 Также можно показать события сессии.

156
00:13:08,220 --> 00:13:12,120
 Разумеется, агента нужно тестировать, прогнать несколько итераций.

157
00:13:12,120 --> 00:13:32,360
 И когда у вас получилось, что агент стал устойчивым и пригодным для перехода к следующей фазе, например, перевода в продакшен, вы можете воспроизвести настройки, которые тестировали в плагграунде, в коде, либо обратиться к ним по ID.

158
00:13:32,920 --> 00:13:39,440
 Например, когда у вас один человек собирает агента, а другой его интегрирует, это очень удобный подход.

159
00:13:40,680 --> 00:13:45,940
 Пример того, как интегрировать, есть внизу страница, вы можете посмотреть код на питоне.

160
00:13:47,260 --> 00:13:50,760
 И здесь есть пример с уже поставленным ID агента.

161
00:13:51,500 --> 00:13:55,680
 Обращу ваше внимание, что API-ключ здесь не поставлен, его нужно вводить самостоятельно.

162
00:13:57,560 --> 00:14:06,620
 Создать его можно непосредственно из открытого окошка, либо всегда у нас в правом верхнем углу есть кнопка создать API-ключ.

163
00:14:07,620 --> 00:14:23,240
 Таким образом, как видите, протестировать агента можно без каких-то специальных технических знаний, достаточно настроить промпт, можно настроить какие-то настройки обработки речи, можно не настраивать, и вот у вас уже агент, которого можно проверить в деле.

164
00:14:25,980 --> 00:14:30,240
 Какие бизнес-сценарии можно реализовать в голосе с помощью реал-таймапи?

165
00:14:30,560 --> 00:14:34,240
 Формально в рамках этого вебинара я бы разделила их на две такие категории.

166
00:14:34,560 --> 00:14:50,340
 Простые, функциональные и сложные агентские, которые решают одну задачу, а агентские, где есть рассуждения, многоходовочный диалог, обращение к базам знаний и вызов инструментов.

167
00:14:50,340 --> 00:15:01,500
 Если говорить про примеры простых сценариев, они практически объединяются одной общей идеей: вы что-то распознаете и потом с распознанным что-то делаете, что-то однозадачное.

168
00:15:01,500 --> 00:15:09,500
 Например, переводите, заполняете форму или просто у вас, может быть, голосовой ввод на телевизоре.

169
00:15:09,500 --> 00:15:12,540
 Что дает RealTime такого рода сценария?

170
00:15:12,540 --> 00:15:21,500
 Сразу отмечу, что их можно реализовать на базовом распознавании речи из того же Яндекс.Пич.Кита, но что привнесет сюда RealTime?

171
00:15:21,500 --> 00:15:26,500
 RealTime может привнести сюда обработку результатов распознавания с учетом контекста.

172
00:15:26,500 --> 00:15:29,440
 Каждый раз, в каждом сценарии у вас есть некий контекст.

173
00:15:29,440 --> 00:15:34,440
 Например, вы вызываете устройство умного дома, и у вас есть определенный список этих устройств.

174
00:15:34,440 --> 00:15:40,440
 Вы находитесь на сценарии, на экране выбора фильма, и у вас представлены какие-то фильмы,

175
00:15:40,440 --> 00:15:44,440
 по которым вы, допустим, навигируете и что-то с ними делаете.

176
00:15:44,440 --> 00:15:52,440
 Или вам звонят в клинику, и вы хотите там записаться к какому-то врачу по его фамилии, может быть.

177
00:15:52,440 --> 00:15:54,440
 Что дает в этом случае RealTime?

178
00:15:54,440 --> 00:16:05,440
 Он позволяет исправлять некие погрешности распознавания, вытягивать какие-то элементы, с которыми пошло что-то не так.

179
00:16:05,440 --> 00:16:08,440
 Например, у нас есть меню, и там есть двойной эспрессо.

180
00:16:08,440 --> 00:16:15,440
 Но акустика такова, и условия, допустим, звука ужасные, и вот распознавание вернула война экспрессо.

181
00:16:15,440 --> 00:16:22,440
 И зная, что война экспрессо у нас есть, но есть двойной эспрессо, который максимально похож на него,

182
00:16:22,440 --> 00:16:28,440
 таким образом постобработка результатов распознавания может максимально вытянуть качество.

183
00:16:28,440 --> 00:16:32,440
 Злоупотреблять этим не стоит, но и пренебрегать тоже.

184
00:16:32,440 --> 00:16:38,440
 Я знаю много сценариев, когда пусть такие простые ухищрения спасали буквально интеграции,

185
00:16:38,440 --> 00:16:41,440
 которые не могли с этим справиться самостоятельно.

186
00:16:41,440 --> 00:16:43,440
 Что еще может привнести real-time?

187
00:16:43,440 --> 00:16:47,440
 Допустим, какую-то постобработку в части выделения сущностей,

188
00:16:47,440 --> 00:16:52,440
 допустим, вам диктуют какой-то email, и он диктуется по буквам,

189
00:16:52,440 --> 00:16:55,440
 его еще нужно потом суметь собрать, как-то поджонить

190
00:16:55,440 --> 00:16:58,440
 и превратить к нормальному виду, или номер телефона,

191
00:16:58,440 --> 00:17:01,440
 или какой-нибудь другой ID-шник и так далее.

192
00:17:01,440 --> 00:17:03,440
 Еще можно делать красивые нормализации,

193
00:17:03,440 --> 00:17:06,440
 которые заточены непосредственно под вашей кейсом.

194
00:17:06,440 --> 00:17:10,440
 Буквально вот на этой неделе я разбирала фичи-реквесты в спичкит,

195
00:17:10,440 --> 00:17:13,440
 и пришел клиент, который просит следующую фичу в нормализации,

196
00:17:13,440 --> 00:17:14,440
 буквально настройку.

197
00:17:14,440 --> 00:17:21,440
 Говорит: «Хочу, чтобы числа от 1 до 10 писались словами,

198
00:17:21,440 --> 00:17:24,440
 а все, что больше 10, записывалось цифрами».

199
00:17:24,440 --> 00:17:30,440
 Вполне себе общепринятая практика, но то, что у нас

200
00:17:30,440 --> 00:17:33,440
 существует достаточно давно спичкит, и то, что пользователи

201
00:17:33,440 --> 00:17:35,440
 привыкли обрабатывать, как обрабатывается, и надо

202
00:17:35,440 --> 00:17:38,440
 вносить настройку — это буквально вмешательство в API.

203
00:17:38,440 --> 00:17:43,440
 Если бы этот пользователь пришел в реал-тайм, то правило

204
00:17:43,440 --> 00:17:45,440
 нормализации.

205
00:17:45,440 --> 00:17:48,440
 Разная постобработка, были ему доступны буквально

206
00:17:48,440 --> 00:17:50,440
 по промпту «Олмабук» задавать все, что хочет.

207
00:17:50,440 --> 00:17:53,440
 То есть получил текст распознанного и как-то его

208
00:17:53,440 --> 00:17:56,440
 запроцессил согласно его сценариям.

209
00:17:56,440 --> 00:18:00,440
 Если говорить про сложные агентские сценарии, это

210
00:18:00,440 --> 00:18:03,440
 там, где уже у нас присутствует понятие «агент», что это

211
00:18:03,440 --> 00:18:05,440
 такое, мы уходить в теорию не будем.

212
00:18:05,440 --> 00:18:09,440
 Я думаю, каждый из присутствующих так или иначе в этом уже

213
00:18:09,440 --> 00:18:12,440
 разбирается, и агенты оперируют

214
00:18:12,440 --> 00:18:15,440
 контекстом диалога, умеют оперировать базами

215
00:18:15,440 --> 00:18:18,440
 знаний, умеют вызывать инструменты, спрашивать

216
00:18:18,440 --> 00:18:21,440
 недостающие детали и, в принципе, как-то модерировать

217
00:18:21,440 --> 00:18:22,440
 даже диалоги.

218
00:18:22,440 --> 00:18:25,440
 Что можно сделать на агентах, основанных

219
00:18:25,440 --> 00:18:26,440
 на Realtime?

220
00:18:26,440 --> 00:18:28,440
 Например, поддержка клиентов.

221
00:18:28,440 --> 00:18:32,440
 Клиентов можно консультировать по вопросам в документации,

222
00:18:32,440 --> 00:18:35,440
 можно обращаться непосредственно в профиль клиента и менять

223
00:18:35,440 --> 00:18:37,440
 какие-то настройки, если был такой запрос.

224
00:18:37,440 --> 00:18:41,440
 Можно смотреть, на что были потрачены

225
00:18:41,440 --> 00:18:44,440
 Наталья иная сумма, например, клиент, было большое

226
00:18:44,440 --> 00:18:46,440
 списание, он звонит и спрашивает, что там такое

227
00:18:46,440 --> 00:18:49,440
 произошло, что с меня списали столько-то денег.

228
00:18:49,440 --> 00:18:51,440
 Или, например, почему у меня перестала быть

229
00:18:51,440 --> 00:18:54,440
 доступна опция в моем личном кабинете

230
00:18:54,440 --> 00:18:56,440
 в интернет-магазине и так далее.

231
00:18:56,440 --> 00:18:58,440
 Поддержка может быть разнообразной.

232
00:18:58,440 --> 00:19:01,440
 Еще из таких неочевидных сценариев, которые

233
00:19:01,440 --> 00:19:03,440
 мы, откровенно говоря, не ожидали, но с которыми

234
00:19:03,440 --> 00:19:07,440
 приходят все чаще, это оформление заказа.

235
00:19:07,440 --> 00:19:10,440
 Людей привлекает и вдохновляет, что можно

236
00:19:10,440 --> 00:19:14,440
 не просто говорить «мне одну пиццу и одну колу

237
00:19:14,440 --> 00:19:18,440
 безо льда», но еще взаимодействие с агентом,

238
00:19:18,440 --> 00:19:20,440
 который может понять, исходя из контекста,

239
00:19:20,440 --> 00:19:23,440
 что предложить. Например, на запрос «мне

240
00:19:23,440 --> 00:19:25,440
 что-нибудь попить и поесть на 300 рублей»

241
00:19:25,440 --> 00:19:28,440
 вполне себе можно в меню фастфуда что-то

242
00:19:28,440 --> 00:19:31,440
 собрать. Но в базовом виде система

243
00:19:31,440 --> 00:19:33,440
 с этим не справляется. Основанная на

244
00:19:33,440 --> 00:19:37,440
 реал-тайм апе, она знает, какие позиции

245
00:19:37,440 --> 00:19:40,440
 по какой цене и понимает, что из этого

246
00:19:40,440 --> 00:19:42,440
 относится к категории «попить», а что

247
00:19:42,440 --> 00:19:44,440
 поесть, и поможет клиенту подобрать

248
00:19:44,440 --> 00:19:48,440
 решение в ответ на его запрос.

249
00:19:48,440 --> 00:19:51,440
 Ну и чтобы нам проиллюстрировать

250
00:19:51,440 --> 00:19:53,440
 возможности нашей платформы, мы

251
00:19:53,440 --> 00:19:56,440
 долго думали, какой бы сценарий

252
00:19:56,440 --> 00:19:59,440
 такой вот иллюстративный подобрать.

253
00:19:59,440 --> 00:20:02,440
 У нас были, честно скажем, такие

254
00:20:02,440 --> 00:20:05,440
 скучненькие, бизнесовые решения.

255
00:20:05,440 --> 00:20:07,440
 Нам немножко захотелось

256
00:20:07,440 --> 00:20:11,440
 серые будни раскрасить и мы

257
00:20:11,440 --> 00:20:14,440
 обратились к такому сценарию,

258
00:20:14,440 --> 00:20:18,440
 который всем нам знаком и

259
00:20:18,440 --> 00:20:21,440
 с другой стороны отвлекается.

260
00:20:21,440 --> 00:20:24,440
 Мы решили построить голосового агента,

261
00:20:24,440 --> 00:20:27,440
 который поможет нам собрать

262
00:20:27,440 --> 00:20:29,440
 компанию для игры в настольные игры,

263
00:20:29,440 --> 00:20:33,440
 запланировать это все и

264
00:20:33,440 --> 00:20:36,440
 и дальше, соответственно, поработать уже

265
00:20:36,440 --> 00:20:39,440
 с какими-то конкретными правилами игры.

266
00:20:39,440 --> 00:20:41,440
 Что мы будем сегодня строить

267
00:20:41,440 --> 00:20:43,440
 и что мы будем сегодня делать?

268
00:20:43,440 --> 00:20:47,440
 Мы, значит, познакомимся с агентом,

269
00:20:47,440 --> 00:20:51,440
 научим его запоминать наши предпочтения.

270
00:20:51,440 --> 00:20:55,440
 Естественно, в настольных играх

271
00:20:55,440 --> 00:20:57,440
 очень важный ответственный момент

272
00:20:57,440 --> 00:20:59,440
 выбрать подходящую игру.

273
00:20:59,440 --> 00:21:01,440
 Настя, какая тебе, кстати,

274
00:21:01,440 --> 00:21:03,440
 больше всего настолка нравится.

275
00:21:03,440 --> 00:21:05,440
 Ну ладно, иммагинарием.

276
00:21:05,440 --> 00:21:07,440
 Замечательно.

277
00:21:07,440 --> 00:21:09,440
 А я очень люблю Dixit.

278
00:21:11,440 --> 00:21:13,440
 Нередкая ситуация,

279
00:21:13,440 --> 00:21:15,440
 когда у вас есть

280
00:21:15,440 --> 00:21:17,440
 большая портянка,

281
00:21:17,440 --> 00:21:19,440
 талмуд, как правильно играть в конкретную настолку.

282
00:21:19,440 --> 00:21:21,440
 Вы забыли

283
00:21:21,440 --> 00:21:23,440
 правила и

284
00:21:23,440 --> 00:21:25,440
 нужно освежить в голове

285
00:21:25,440 --> 00:21:27,440
 какой-то

286
00:21:27,440 --> 00:21:29,440
 пункт из правил. Будет очень классно,

287
00:21:29,440 --> 00:21:31,440
 если наш голосовой агент

288
00:21:31,440 --> 00:21:33,440
 поможет

289
00:21:33,440 --> 00:21:35,440
 с правилами выбранной игры.

290
00:21:35,440 --> 00:21:37,440
 Естественно,

291
00:21:37,440 --> 00:21:39,440
 настольные игры

292
00:21:39,440 --> 00:21:41,440
 предполагают, что мы где-то

293
00:21:41,440 --> 00:21:43,440
 собираемся за столом и играем.

294
00:21:43,440 --> 00:21:45,440
 Нужно найти время и место.

295
00:21:45,440 --> 00:21:47,440
 Нужно

296
00:21:47,440 --> 00:21:49,440
 собрать всех

297
00:21:49,440 --> 00:21:51,440
 в одно и то же время.

298
00:21:51,440 --> 00:21:53,440
 Ну и

299
00:21:53,440 --> 00:21:55,440
 как развитие нашего

300
00:21:55,440 --> 00:21:57,440
 сценария, мы также еще рассмотрим

301
00:21:57,440 --> 00:21:59,440
 вариант мультиагентности,

302
00:21:59,440 --> 00:22:01,440
 когда разные

303
00:22:01,440 --> 00:22:03,440
 агенты отвечают за

304
00:22:03,440 --> 00:22:05,440
 разный спектр

305
00:22:05,440 --> 00:22:07,440
 возможностей.

306
00:22:07,440 --> 00:22:09,440
 Наш сегодняшний рассказ мы

307
00:22:09,440 --> 00:22:11,440
 соберем

308
00:22:11,440 --> 00:22:13,440
 уже даже собрали

309
00:22:13,440 --> 00:22:15,440
 в виде исходного

310
00:22:15,440 --> 00:22:17,440
 кода, выложили это все на гитхаб,

311
00:22:17,440 --> 00:22:19,440
 поэтому у нас на слайдах сегодня

312
00:22:19,440 --> 00:22:21,440
 будет много

313
00:22:21,440 --> 00:22:23,440
 сниппетов, много листингов,

314
00:22:23,440 --> 00:22:25,440
 примеров кода.

315
00:22:25,440 --> 00:22:27,440
 Все

316
00:22:27,440 --> 00:22:29,440
 это потом

317
00:22:29,440 --> 00:22:31,440
 мы вам отправим в виде

318
00:22:31,440 --> 00:22:33,440
 QR-кодика и можно будет посмотреть

319
00:22:33,440 --> 00:22:35,440
 воочию, позапускать самостоятельно.

320
00:22:35,440 --> 00:22:37,440
 Но с другой стороны

321
00:22:37,440 --> 00:22:39,440
 также у нас записаны скринкасты

322
00:22:39,440 --> 00:22:41,440
 с демонстрацией работы

323
00:22:41,440 --> 00:22:43,440
 нашего кода.

324
00:22:43,440 --> 00:22:45,440
 Любой сценарий

325
00:22:45,440 --> 00:22:47,440
 начинается с промта, но промт

326
00:22:47,440 --> 00:22:49,440
 при всей своей простоте сейчас

327
00:22:49,440 --> 00:22:51,440
 понятие, ну и в принципе всегда было

328
00:22:51,440 --> 00:22:53,440
 понятием не многозначным.

329
00:22:53,440 --> 00:22:55,440
 И под промтом понимают

330
00:22:55,440 --> 00:22:57,440
 разные вещи. На самом деле

331
00:22:57,440 --> 00:22:59,440
 промт — это не только инструкция,

332
00:22:59,440 --> 00:23:01,440
 которая описывает агенту, как себя

333
00:23:01,440 --> 00:23:03,440
 вести, каким инструментом обращаться,

334
00:23:03,440 --> 00:23:05,440
 но и это описание самих

335
00:23:05,440 --> 00:23:07,440
 инструментов, это задание

336
00:23:07,440 --> 00:23:09,440
 контекста

337
00:23:09,440 --> 00:23:11,440
 и вводных, то есть весь диалог,

338
00:23:11,440 --> 00:23:13,440
 который был до момента

339
00:23:13,440 --> 00:23:15,440
 очередного действия, пользовательский

340
00:23:15,440 --> 00:23:17,440
 ввод текущий

341
00:23:17,440 --> 00:23:19,440
 и временами еще формат

342
00:23:19,440 --> 00:23:21,440
 вывода. Но есть еще

343
00:23:21,440 --> 00:23:23,440
 такое бытовое значение промта

344
00:23:23,440 --> 00:23:25,440
 это, соответственно, та инструкция,

345
00:23:25,440 --> 00:23:27,440
 которой вы работаете с агентом,

346
00:23:27,440 --> 00:23:29,440
 то есть описание

347
00:23:29,440 --> 00:23:31,440
 задачи агенту, что

348
00:23:31,440 --> 00:23:33,440
 он должен выполнять. На самом

349
00:23:33,440 --> 00:23:35,440
 деле существуют разнообразные практики,

350
00:23:35,440 --> 00:23:37,440
 как писать хорошие промты, разные

351
00:23:37,440 --> 00:23:39,440
 подходы, про это написаны целые

352
00:23:39,440 --> 00:23:41,440
 книжки, и если вы

353
00:23:41,440 --> 00:23:43,440
 есть в нашем комьюнити АИ-студия,

354
00:23:43,440 --> 00:23:45,440
 пользуясь случаем, я рекламирую его

355
00:23:45,440 --> 00:23:47,440
 в Телеграме, то там периодически

356
00:23:47,440 --> 00:23:49,440
 обсуждается вопрос по промтам.

357
00:23:49,440 --> 00:23:53,440
 Как их лучше писать?

358
00:23:53,440 --> 00:23:55,440
 Сегодня методик давать не буду,

359
00:23:55,440 --> 00:23:57,440
 дам несколько советов по промтам.

360
00:23:57,440 --> 00:23:59,440
 Он должен, в первую очередь,

361
00:23:59,440 --> 00:24:01,440
 быть логически согласован.

362
00:24:01,440 --> 00:24:03,440
 Это самое главное, потому что потом

363
00:24:03,440 --> 00:24:05,440
 вам, спустя несколько дней после того,

364
00:24:05,440 --> 00:24:07,440
 как вы его написали, возможно, придется

365
00:24:07,440 --> 00:24:09,440
 вносить какие-то правки, отлаживаться,

366
00:24:09,440 --> 00:24:11,440
 и вам самим будет проще

367
00:24:11,440 --> 00:24:13,440
 работать с текстом,

368
00:24:13,440 --> 00:24:15,440
 который написан логически.

369
00:24:15,440 --> 00:24:17,440
 Из этого следует и вторая история:

370
00:24:17,440 --> 00:24:19,440
 промт должен быть структурирован.

371
00:24:19,440 --> 00:24:21,440
 Структурированность,

372
00:24:21,440 --> 00:24:23,440
 разбитие его на разные разделы

373
00:24:23,440 --> 00:24:25,440
 в целом будут меняться от сценария

374
00:24:25,440 --> 00:24:27,440
 к сценарию, но всегда есть такие

375
00:24:27,440 --> 00:24:29,440
 вещи, как роль, что ты можешь,

376
00:24:29,440 --> 00:24:31,440
 что ты не можешь, какие у тебя

377
00:24:31,440 --> 00:24:33,440
 ограничения. Очень часто вижу

378
00:24:33,440 --> 00:24:35,440
 в последнее время, что пользователи

379
00:24:35,440 --> 00:24:37,440
 стараются еще делать мини-фак

380
00:24:37,440 --> 00:24:39,440
 на самые часто задаваемые вопросы

381
00:24:39,440 --> 00:24:41,440
 и не уходить, например, в историю

382
00:24:41,440 --> 00:24:43,440
 с рагом. И еще важная

383
00:24:43,440 --> 00:24:45,440
 вещь, про которую часто забывают

384
00:24:45,440 --> 00:24:47,440
 и которую бы хотелось отметить, это

385
00:24:47,440 --> 00:24:49,440
 необходимо в промте описывать, когда вызывать

386
00:24:49,440 --> 00:24:51,440
 все или иные функции. Про функции мы

387
00:24:51,440 --> 00:24:53,440
 расскажем позднее, но просто

388
00:24:53,440 --> 00:24:55,440
 как факт. Пром должен быть

389
00:24:55,440 --> 00:24:57,440
 структурированным, логически

390
00:24:57,440 --> 00:24:59,440
 согласованным, и в нем обязательно должно быть

391
00:24:59,440 --> 00:25:01,440
 указано, когда и какие функции

392
00:25:01,440 --> 00:25:03,440
 вызывать, если они у вас подключены

393
00:25:03,440 --> 00:25:05,440
 к агенту. Знаете, а я еще услышал

394
00:25:05,440 --> 00:25:07,440
 у тебя две аббревиатуры

395
00:25:07,440 --> 00:25:09,440
 FAC и RAC.

396
00:25:09,440 --> 00:25:11,440
 Кто за что отвечает?

397
00:25:11,440 --> 00:25:13,440
 FAC - это, соответственно,

398
00:25:13,440 --> 00:25:15,440
 часто задаваемые вопросы,

399
00:25:15,440 --> 00:25:18,440
 которые соотносятся с вашим доменом,

400
00:25:18,440 --> 00:25:20,440
 может быть, это по продукту и так далее.

401
00:25:20,440 --> 00:25:23,440
 Пятерка вопросов переданных в промпт, возможно,

402
00:25:23,440 --> 00:25:26,440
 избавит вас от кучи головной боли.

403
00:25:26,440 --> 00:25:31,440
 Например, RAC - это когда модель отвечает

404
00:25:31,440 --> 00:25:34,440
 на основе результатов поиска.

405
00:25:34,440 --> 00:25:36,440
 Это справедливо как по поиску в интернете,

406
00:25:36,440 --> 00:25:39,440
 так и по поиску по файловому.

407
00:25:39,440 --> 00:25:42,440
 То есть сначала осуществляется поиск,

408
00:25:42,440 --> 00:25:46,440
 и модели отдаются максимально релевантные

409
00:25:46,440 --> 00:25:48,440
 куски текста для ответа на вопрос,

410
00:25:48,440 --> 00:25:50,440
 и на основании их из одного вопроса

411
00:25:50,440 --> 00:25:53,440
 она строит ответ.

412
00:25:53,440 --> 00:25:55,440
 Надеюсь, ответила.

413
00:25:55,440 --> 00:25:56,440
 Спасибо.

414
00:25:56,440 --> 00:25:59,440
 Ну и давайте уже перейдем к коду.

415
00:25:59,440 --> 00:26:04,440
 Собственно, мы хотим пока сделать просто агента,

416
00:26:04,440 --> 00:26:08,440
 который нам поможет с выбором на столке.

417
00:26:08,440 --> 00:26:14,440
 Как видно на экране, у нас есть довольно простой и лаконичный промт.

418
00:26:14,440 --> 00:26:19,440
 Мы рассказываем агенту, кто он такой и какая у него задача.

419
00:26:19,440 --> 00:26:24,440
 Тут промт небольшой, но достаточно иллюстративный

420
00:26:24,440 --> 00:26:27,440
 в контексте того, что Настя только что проговорила.

421
00:26:27,440 --> 00:26:29,440
 У него видна структура.

422
00:26:29,440 --> 00:26:31,440
 Также видно, что он размечен.

423
00:26:31,440 --> 00:26:35,440
 В целом, язык разметки не обязательно должен быть markdown,

424
00:26:35,440 --> 00:26:40,440
 но, во-первых, он хорошо читается и человеком,

425
00:26:40,440 --> 00:26:44,440
 а с другой стороны, модели обучены просто на каком-то гигантском

426
00:26:44,440 --> 00:26:47,440
 количестве markdown файлов.

427
00:26:47,440 --> 00:26:49,440
 Это очень популярный формат.

428
00:26:49,440 --> 00:26:51,440
 Поэтому смело используйте его.

429
00:26:51,440 --> 00:26:58,440
 Он как раз помогает и людям, и машинам не сбиваться и ориентироваться.

430
00:26:58,440 --> 00:27:01,440
 Если что, все промпты, которые мы сегодня тоже покажем,

431
00:27:01,440 --> 00:27:06,440
 они также будут в материалах после вебинара.

432
00:27:06,440 --> 00:27:11,440
 Ну и промпт есть. Давайте немножко посмотрим на код.

433
00:27:11,440 --> 00:27:16,440
 Тут совершенно какой-то такой boilerplate-ный базовый код.

434
00:27:16,440 --> 00:27:22,440
 Соответственно, по сути, мы указываем, куда подключаться,

435
00:27:22,440 --> 00:27:31,440
 какие у нас endpoints, и дальше передаем модельке наш промпт.

436
00:27:31,440 --> 00:27:35,440
 Соответственно, все это воедино, будучи запущенным,

437
00:27:35,440 --> 00:27:39,440
 уже появляется какая-то новая сущность,

438
00:27:39,440 --> 00:27:43,440
 и мы можем уже поговорить с нашим агентом.

439
00:27:43,440 --> 00:27:48,440
 Давайте посмотрим, как это работает.

440
00:27:48,440 --> 00:27:51,440
 Здравствуй.

441
00:27:51,440 --> 00:27:54,440
 Здравствуйте. Чем могу помочь?

442
00:27:54,440 --> 00:27:56,440
 Что ты умеешь?

443
00:27:56,440 --> 00:28:02,440
 Я могу помочь выбрать настольную игру, разобраться в правилах и собрать компанию.

444
00:28:02,440 --> 00:28:06,440
 Расскажите, какая игра вас интересует, подскажу.

445
00:28:06,440 --> 00:28:09,440
 Мафия.

446
00:28:09,440 --> 00:28:12,440
 В мафии есть мирные жители и мафия.

447
00:28:12,440 --> 00:28:17,440
 Задача мирных - вычислить мафию, а мафии - избавиться от мирных.

448
00:28:17,440 --> 00:28:27,440
 Хотите, расскажу подробнее правила или помогу собрать компанию?

449
00:28:27,440 --> 00:28:33,440
 Примеры того, что должно содержаться в промтакт для различных сценариев.

450
00:28:33,440 --> 00:28:39,440
 Ну, например, если мы говорим про поддержку клиентов, там могут быть часто задаваемые вопросы,

451
00:28:39,440 --> 00:28:46,440
 правила поведения и вообще логика, как обращаться, что делать при различных вопросах клиента.

452
00:28:46,440 --> 00:28:54,440
 Если мы говорим про такой кейс, как первичный контакт с клиентом, то промт имеет довольно стандартную структуру,

453
00:28:54,440 --> 00:29:00,440
 описывается роль, описывается задача. Например, вы хотите прозвонить с каким-то предложением,

454
00:29:00,440 --> 00:29:05,440
 сделать так называемый холодный звонок, узнать детали, узнать контакты,

455
00:29:05,440 --> 00:29:11,440
 и, соответственно, здесь вы добавляете все шаги, последовательность и ту информацию,

456
00:29:11,440 --> 00:29:15,440
 которая должна быть собрана по результатам такого звонка.

457
00:29:15,440 --> 00:29:22,440
 Еще я хотела тут такой пример привести, голосовое оформление заказа.

458
00:29:22,440 --> 00:29:29,440
 Здесь вы, например, можете даже в состав промта, если размер меню это позволяет,

459
00:29:29,440 --> 00:29:36,440
 передать меню как часть такого текстового промта.

460
00:29:36,440 --> 00:29:42,440
 Кстати, у нас будет подробный разбор кейса клиента, я не акцентировала внимание на предыдущих слайдах,

461
00:29:42,440 --> 00:29:49,440
 но 30 июля наш клиент Реалтайма, строенный РГКОМ, ребята специализируются на установке

462
00:29:49,440 --> 00:29:55,440
 и работе с умными счетчиками, расскажут, что находится в составе их промта,

463
00:29:55,440 --> 00:30:00,440
 как они с ним работают и как они вообще его меняли на протяжении разработки,

464
00:30:00,440 --> 00:30:03,440
 с чего начинали и к чему пришли в итоге.

465
00:30:03,440 --> 00:30:12,440
 Промт с переменами. Не забываем, что мы договорились называть промтом именно

466
00:30:12,440 --> 00:30:16,440
 системную вот эту промт, инструкцию, которую это задает агента.

467
00:30:16,440 --> 00:30:21,440
 И если промт создавался непосредственно в UI, а и студии, его можно параметаризовать.

468
00:30:21,440 --> 00:30:27,440
 На самом деле эта функциональность, она в каком-то смысле может быть в некоторых кейсах избыточна,

469
00:30:27,440 --> 00:30:31,440
 но она дает большие преимущества, когда вы параметаризуете заранее,

470
00:30:31,440 --> 00:30:36,440
 а промт перед его вызовом вы избавляете себя, например, от подходов MCP,

471
00:30:36,440 --> 00:30:39,440
 от походов function calling и так далее.

472
00:30:39,440 --> 00:30:42,440
 То есть вы когда звоните, вы уже знаете много параметров по тому звонку,

473
00:30:42,440 --> 00:30:44,440
 например, если звонок исходящий,

474
00:30:44,440 --> 00:30:47,440
 много параметров по тому клиенту, к которому обращаетесь,

475
00:30:47,440 --> 00:30:51,440
 и не начинаете разговор с таким: «Как же к вам обратиться?

476
00:30:51,440 --> 00:30:54,440
 Сейчас я по ID-шнику схожу и вытяну имя из серии».

477
00:30:54,440 --> 00:31:01,440
 Ну а давайте посмотрим, как вообще работать, как задавать переменные в iStudy.

478
00:31:01,440 --> 00:31:05,440
 Как работать с переменными?

479
00:31:05,440 --> 00:31:08,440
 Для нагленности мы максимально упростили наш промп.

480
00:31:08,440 --> 00:31:22,440
 И теперь добавим две переменные: AgentName и тематику вечера.

481
00:31:24,440 --> 00:31:28,440
 Сохраняем.

482
00:31:28,440 --> 00:31:37,440
 И теперь при каждом тестировании сессии можно вводить разные значения и тестировать, как поведет себя промп в зависимости от введенных параметров.

483
00:31:37,440 --> 00:31:43,440
 Голос у нас Маша, поэтому давайте назовем агента Мудрая Маша.

484
00:31:43,440 --> 00:31:51,440
 А топик вечер накануне экзамена.

485
00:31:51,440 --> 00:32:00,440
 И теперь запустим сессию и минимально протестируем наш промп, чтобы посмотреть, подхватились ли переменные.

486
00:32:00,440 --> 00:32:05,440
 Привет, как тебя зовут и какая сегодня тематика вечера?

487
00:32:05,440 --> 00:32:09,440
 Здравствуйте, меня зовут Мудрая Маша.

488
00:32:09,440 --> 00:32:13,440
 Сегодня у нас вечер в тематике, вечер накануне экзамена.

489
00:32:13,440 --> 00:32:16,440
 Думаю, для тестирования этого достаточно.

490
00:32:16,440 --> 00:32:25,440
 Таким образом, вы можете задать переменные, которые позволят вам параметризовать свой промп,

491
00:32:25,440 --> 00:32:30,440
 параметризовать сценарий, чтобы заполнять его максимально при запуске

492
00:32:30,440 --> 00:32:37,440
 и не обращаться, например, в MCP или не ходить в FunctionCalling.

493
00:32:37,440 --> 00:32:43,440
 Давайте немножко посмотрим, как бы это могло выглядеть в коде.

494
00:32:43,440 --> 00:32:50,440
 Вообще, в принципе, идея параметризации промптов и редактирования промптов из интерфейса.

495
00:32:50,440 --> 00:32:56,440
 Она позволяет немножко декомпозировать ваше решение,

496
00:32:56,440 --> 00:33:03,440
 например, разделив людей, которые пишут непосредственно какой-нибудь FunctionCalling

497
00:33:03,440 --> 00:33:10,440
 и обработку тулов, и людей, которые пишут непосредственный промпт.

498
00:33:10,440 --> 00:33:15,440
 В данном случае мы договариваемся про подстановку переменных,

499
00:33:15,440 --> 00:33:20,440
 и вот эти значения переменных можем передавать в качестве параметров сессии.

500
00:33:20,440 --> 00:33:25,440
 Ну и также вот здесь видно, что мы передаем промпт не целиком,

501
00:33:25,440 --> 00:33:28,440
 весь текст просто по ID-шнику, соответственно,

502
00:33:28,440 --> 00:33:31,440
 редактирование дальнейшего промпта уже через интерфейс

503
00:33:31,440 --> 00:33:35,440
 будет автоматически подхватываться новыми сессиями.

504
00:33:37,440 --> 00:33:42,440
 Какие вообще примеры, переменных сценариев можно дать?

505
00:33:42,440 --> 00:33:45,440
 Ну, здесь банальный пример с той же самой париклиникой,

506
00:33:45,440 --> 00:33:49,440
 когда вы звоните и напоминаете клиенту о том,

507
00:33:49,440 --> 00:33:51,440
 что у него завтра запись, он придет или перенести,

508
00:33:51,440 --> 00:33:53,440
 выполнить какое-то действие.

509
00:33:53,440 --> 00:33:56,440
 И, соответственно, вы здесь можете обращаться,

510
00:33:56,440 --> 00:33:59,440
 представиться, ну, обратиться к Анастасии,

511
00:33:59,440 --> 00:34:03,440
 «Здравствуйте, вы завтра записаны, допустим, на укладку»,

512
00:34:03,440 --> 00:34:05,440
 к мастеру Евгении.

513
00:34:05,440 --> 00:34:08,440
 Все это можно заранее предзаписать в промт,

514
00:34:08,440 --> 00:34:10,440
 а не выяснять в процессе звонка.

515
00:34:10,440 --> 00:34:13,440
 Конечно же, в ЦРМ это все есть, но, если позволяют обстоятельства,

516
00:34:13,440 --> 00:34:14,440
 это можно сделать.

517
00:34:14,440 --> 00:34:17,440
 Также можно даже передавать какие-то слоты,

518
00:34:17,440 --> 00:34:21,440
 на которые, в случае чего, я могла бы перезаписаться

519
00:34:21,440 --> 00:34:22,440
 к этому же мастеру.

520
00:34:22,440 --> 00:34:25,440
 Конечно, есть вероятность того, что в процессе разговора

521
00:34:25,440 --> 00:34:28,440
 слоты кто-то займет и это устареет, но, согласитесь,

522
00:34:28,440 --> 00:34:34,440
 попадание тоже высоковероятно, и это сэкономит время,

523
00:34:34,440 --> 00:34:38,440
 вас и вашего клиента и сделает диалог даже более

524
00:34:38,440 --> 00:34:41,440
 естественным, чем если бы выходили и спрашивали

525
00:34:41,440 --> 00:34:45,440
 в системе в реальном времени.

526
00:34:45,440 --> 00:34:49,440
 Итак, мы научились уже промкить базовый агентский

527
00:34:49,440 --> 00:34:55,440
 сценарий, давайте добавим нашему решению каких-то

528
00:34:55,440 --> 00:34:59,440
 мозгов, дополнительных знаний и так далее.

529
00:34:59,440 --> 00:35:03,440
 Будем использовать для начала файловый поиск.

530
00:35:03,440 --> 00:35:10,440
 Собственно, основная идея файлового поиска в том, что

531
00:35:10,440 --> 00:35:13,440
 у нас есть какая-то уже база знаний, какой-то набор

532
00:35:13,440 --> 00:35:18,440
 документов, в нашем сценарии с настольными играми

533
00:35:18,440 --> 00:35:23,440
 это могут быть правила настольных игр, и мы можем

534
00:35:23,440 --> 00:35:28,440
 просто накачать кучу файлов в различных форматах,

535
00:35:28,440 --> 00:35:34,440
 собрать их в один файловый индекс, получить один

536
00:35:34,440 --> 00:35:37,440
 идентификатор этого индекса, и дальше передавать

537
00:35:37,440 --> 00:35:41,440
 его как контекст нашему агенту в параметрах

538
00:35:41,440 --> 00:35:45,440
 сессии. Что дает эта возможность? Эта возможность

539
00:35:45,440 --> 00:35:51,440
 дает модели обращаться к внешней какой-то

540
00:35:51,440 --> 00:35:55,440
 базе данных. И нам, естественно, нужно будет

541
00:35:55,440 --> 00:35:58,440
 сообщить модели, что ты можешь использовать

542
00:35:58,440 --> 00:36:02,440
 такой тул, но простой как бы набор

543
00:36:02,440 --> 00:36:06,440
 каких-то небольших инструкций сразу

544
00:36:06,440 --> 00:36:11,440
 добавляет просто дополнительный какой-то

545
00:36:11,440 --> 00:36:14,440
 источник знаний, который дальше может

546
00:36:14,440 --> 00:36:16,440
 быть использован для построения уже

547
00:36:16,440 --> 00:36:19,440
 диалога. Давайте посмотрим, как можно

548
00:36:19,440 --> 00:36:22,440
 написать простой промпт для того, чтобы

549
00:36:22,440 --> 00:36:27,440
 загруженные файлы в интерфейсе и студии

550
00:36:27,440 --> 00:36:30,440
 организованные в поисковый индекс

551
00:36:30,440 --> 00:36:33,440
 использовать уже в рамках сессии.

552
00:36:33,440 --> 00:36:35,440
 Ну, собственно, модели нужно

553
00:36:35,440 --> 00:36:37,440
 рассказать, что ты можешь использовать

554
00:36:37,440 --> 00:36:41,440
 FileSearch, что это доступная тебе функция

555
00:36:41,440 --> 00:36:45,440
 и также ее немножко призвать, побудить

556
00:36:45,440 --> 00:36:49,440
 в случае, если ты получаешь запрос

557
00:36:49,440 --> 00:36:55,440
 на рассказ про правила игры, то сходи

558
00:36:55,440 --> 00:36:58,440
 в поисковый индекс, посмотри там

559
00:36:58,440 --> 00:37:02,440
 и найди, соответственно, релевантные

560
00:37:02,440 --> 00:37:05,440
 куски ответов.

561
00:37:05,440 --> 00:37:08,440
 Посмотрим на код. Код тоже достаточно

562
00:37:08,440 --> 00:37:13,440
 простой. Самое главное в этом

563
00:37:13,440 --> 00:37:16,440
 листинге - это то, что мы передаем

564
00:37:16,440 --> 00:37:21,440
 непосредственно поисковый индекс.

565
00:37:21,440 --> 00:37:23,440
 Ну и давайте посмотрим, как это

566
00:37:23,440 --> 00:37:29,440
 выглядит в живую.

567
00:37:29,440 --> 00:37:31,440
 В какой момент в манчкине можно

568
00:37:31,440 --> 00:37:35,440
 сбросить класс или расу?

569
00:37:35,440 --> 00:37:37,440
 Сбросить класс или расу в манчкине

570
00:37:37,440 --> 00:37:41,440
 можно в любой момент игры, даже в бою.

571
00:37:41,440 --> 00:37:45,440
 А как получить в манчкине 10 уровень?

572
00:37:46,440 --> 00:37:50,440
 Получить 10 уровень в манчкине можно за убийство монстров,

573
00:37:50,440 --> 00:37:53,440
 применение особых карт или продажу шмоток.

574
00:37:53,440 --> 00:38:00,440
 Уточните, хотите узнать про конкретный способ?

575
00:38:02,440 --> 00:38:08,440
 Ну и давайте посмотрим, как пользоваться файлсерчем в плэкграунде.

576
00:38:08,440 --> 00:38:11,440
 Чтобы воспользоваться инструментом файлопоиска,

577
00:38:11,440 --> 00:38:18,440
 выберите в инструментах файлсерч индекс, по которому хотите искать,

578
00:38:18,440 --> 00:38:24,440
 и количество чанков, которые хотите использовать для ответа модели.

579
00:38:24,440 --> 00:38:34,440
 У нас их 5, это значит, что 5 чанков из найденных будут использоваться модели для формирования ответа.

580
00:38:34,440 --> 00:38:41,440
 Конечно же, обязательно пропишите, в каких случаях необходимо вызывать файл-серч,

581
00:38:41,440 --> 00:38:48,440
 чтобы модель могла понимать, когда ей дергать функцию, при каких ситуациях.

582
00:38:48,440 --> 00:38:56,440
 Файл-серч в разных сценариях, интуитивно понятно, что в файл-серч можно заворачивать очень многое.

583
00:38:56,440 --> 00:39:00,440
 Если вы внимательно смотрели на тот скриншот, который показывал Миша,

584
00:39:00,440 --> 00:39:10,440
 там было различных расширений, вплоть до аудио и видео, которые вы можете отправить и использовать для построения вашего индекса.

585
00:39:10,440 --> 00:39:19,440
 Но, конечно, самая частая история – это построение на основе какого-то вики-формата, на основе текстэшек, эксельников и так далее.

586
00:39:19,440 --> 00:39:29,440
 Еще хочу обратить ваше внимание, что вы можете использовать как дефолтное чинкование нарезание на определенные кусочки,

587
00:39:29,440 --> 00:39:35,440
 ваших файлов, так и делать его самостоятельно, задавать через такой формат, как JSON-L,

588
00:39:35,440 --> 00:39:42,440
 где текст вы предварительно разбиваете на чанки и заворачиваете в этот файл с форматом JSON-L.

589
00:39:42,440 --> 00:39:47,440
 Но если говорить про файл все очень в различных сценариях, то здесь, повторюсь,

590
00:39:47,440 --> 00:39:52,440
 можно использовать факт, можно использовать ответы на какие-то типовые вопросы,

591
00:39:52,440 --> 00:39:58,440
 которые все больше и больше разрастаются. Прежде я говорила, что если типовых вопросов

592
00:39:58,440 --> 00:40:02,440
 не много, то вы можете буквально завернуть их в промпт. Есть еще, например,

593
00:40:02,440 --> 00:40:06,440
 практика у поддержки такая, когда каждый вопрос, на который

594
00:40:06,440 --> 00:40:09,440
 они ответили, на который хорошо получилось ответить,

595
00:40:09,440 --> 00:40:12,440
 они добавляют в индекс, и потом при последующих обращениях

596
00:40:12,440 --> 00:40:16,440
 пользователя буквально происходит следующее, что выполняется

597
00:40:16,440 --> 00:40:20,440
 поиск, находят похожее обращение и заранее подготовленный

598
00:40:20,440 --> 00:40:25,440
 на него ответ, который уже отлажен и был заранее добавлен

599
00:40:25,440 --> 00:40:31,440
 веб-поиск это очень похоже на файл search история, но в данном

600
00:40:31,440 --> 00:40:34,440
 случае в роли индекса выступает весь интернет.

601
00:40:34,440 --> 00:40:39,440
 Да, это возможность, которая может быть полезна, когда

602
00:40:39,440 --> 00:40:44,440
 вам нужна не какая-то конкретная база знаний, которая

603
00:40:44,440 --> 00:40:50,440
 у вас уже накоплена, а очевидно поиск по открытому интернету.

604
00:40:50,440 --> 00:40:54,440
 Давайте посмотрим на пример в нашем сценарии, когда

605
00:40:54,440 --> 00:40:58,440
 это может быть полезно. Ну очевидно, что новые

606
00:40:58,440 --> 00:41:02,440
 настольные игры выходят каждый год, соответственно

607
00:41:02,440 --> 00:41:06,440
 у нас нет возможности трекать, записывать все

608
00:41:06,440 --> 00:41:12,440
 эти правила, скачивать все эти игры в

609
00:41:12,440 --> 00:41:17,440
 нашей базе знаний, и мы просто говорим модели,

610
00:41:17,440 --> 00:41:23,440
 что в случае, если вдруг тебя спрашивают про какие-то

611
00:41:23,440 --> 00:41:26,440
 данные, которых у тебя нет, про свежие, например,

612
00:41:26,440 --> 00:41:30,440
 игры, то используй веб-серч, сходи в интернет

613
00:41:30,440 --> 00:41:34,440
 и найди оттуда новые результаты.

614
00:41:34,440 --> 00:41:38,440
 Давайте посмотрим, как это использовать в коде.

615
00:41:38,440 --> 00:41:44,440
 Код практически идентичен предыдущему листингу,

616
00:41:44,440 --> 00:41:49,440
 мы, по сути, просто рассказываем, что есть еще одна функция,

617
00:41:49,440 --> 00:41:52,440
 в данный момент она уже называется веб-серч,

618
00:41:52,440 --> 00:41:59,440
 и она используется для поиска уже актуальной информации в интернете.

619
00:41:59,440 --> 00:42:06,440
 Из интересного и файловый поиск по интернету,

620
00:42:06,440 --> 00:42:10,440
 они обрабатываются на серверной стороне,

621
00:42:10,440 --> 00:42:15,440
 дальше мы в нашей презентации покажем и функции,

622
00:42:15,440 --> 00:42:21,440
 которые обрабатываются на клиентской стороне, но в данный момент

623
00:42:21,440 --> 00:42:24,440
 пока вот такие функции.

624
00:42:24,440 --> 00:42:28,440
 Ну и давайте посмотрим, как это всё выглядит в сборке,

625
00:42:28,440 --> 00:42:31,440
 как оно работает вживую.

626
00:42:36,440 --> 00:42:41,440
 Суставь топ-5 игр, самых популярных в 2026 году.

627
00:42:46,440 --> 00:42:50,440
 Самые популярные настольные игры 2026 года.

628
00:42:50,440 --> 00:43:03,440
 Ну и давайте посмотрим, как это выглядит в интерфейсе iStudio.

629
00:43:03,440 --> 00:43:07,440
 Чтобы подключить поиск по интернету,

630
00:43:07,440 --> 00:43:10,440
 выбираем инструмент с типом WebSearch

631
00:43:10,440 --> 00:43:13,440
 и добавляем либо домены, если предполагается,

632
00:43:13,440 --> 00:43:16,440
 что нужно искать по конкретным доменам,

633
00:43:16,440 --> 00:43:19,440
 либо ничего не добавляем, если предполагается,

634
00:43:19,440 --> 00:43:23,440
 что поиск нужно осуществлять по всему интернету.

635
00:43:23,440 --> 00:43:26,440
 Точно так же, как мы для файл-серча

636
00:43:26,440 --> 00:43:28,440
 указывали, в каких случаях вызывать его,

637
00:43:28,440 --> 00:43:31,440
 указываем, в каких случаях нам необходимо

638
00:43:31,440 --> 00:43:33,440
 вызывать WebSearch.

639
00:43:33,440 --> 00:43:36,440
 Это поможет модели лучше ориентироваться

640
00:43:36,440 --> 00:43:40,440
 и правильнее вызывать функции.

641
00:43:40,440 --> 00:43:43,440
 Ну и как использовать WebSearch в разных сценариях?

642
00:43:43,440 --> 00:43:47,440
 На самом деле, WebSearch можно использовать во многих случаях

643
00:43:47,440 --> 00:43:52,440
 аналогично файловому поиску, но мы встречаем на практике,

644
00:43:52,440 --> 00:43:53,440
 когда это реально полезно.

645
00:43:53,440 --> 00:43:56,440
 Например, если у вас есть поддержка и вся документация,

646
00:43:56,440 --> 00:43:58,440
 как у нас, сосредоточена на сайте,

647
00:43:58,440 --> 00:44:02,440
 то даже не обязательно к ней поднимать какой-то MCP,

648
00:44:02,440 --> 00:44:04,440
 можно использовать веб-поиск для того,

649
00:44:04,440 --> 00:44:06,440
 чтобы находить ответы по ней.

650
00:44:06,440 --> 00:44:10,440
 Или, например, вы делаете такого универсального голосового ассистента,

651
00:44:10,440 --> 00:44:14,440
 который, ну, Алиса-like, который умеет многое,

652
00:44:14,440 --> 00:44:18,440
 и для ответов на вопросы, начиная от погоды, закачивая курсом валют,

653
00:44:18,440 --> 00:44:21,440
 вы можете обращаться в поиск.

654
00:44:21,440 --> 00:44:24,440
 Также поиск может вам помочь в ситуации на дорогах,

655
00:44:24,440 --> 00:44:27,440
 понять погоду в некоторых случаях,

656
00:44:27,440 --> 00:44:29,440
 это действительно может быть важно,

657
00:44:29,440 --> 00:44:33,440
 или узнать курс доллара, актуальный на текущий момент.

658
00:44:33,440 --> 00:44:40,440
 Ну и давайте поглубже поговорим про инструмент Function Calling,

659
00:44:40,440 --> 00:44:44,440
 вызов функций, как я уже говорил,

660
00:44:44,440 --> 00:44:48,440
 есть возможность описывать не только встроенные функции,

661
00:44:48,440 --> 00:44:50,440
 но и произвольные,

662
00:44:50,440 --> 00:44:54,440
 соответственно, есть интерфейс специальный для их описания,

663
00:44:54,440 --> 00:44:57,440
 и как это вообще работает.

664
00:44:57,440 --> 00:44:59,440
 Давайте разберёмся.

665
00:44:59,440 --> 00:45:09,440
 Очень базово идея вызова Function Calls состоит примерно в следующем:

666
00:45:09,440 --> 00:45:15,440
 мы модели заранее говорим о наличии некоторых функций,

667
00:45:15,440 --> 00:45:18,440
 говорим о параметрах этих функций,

668
00:45:18,440 --> 00:45:21,440
 и дальше, соответственно, когда модель понимает,

669
00:45:21,440 --> 00:45:24,440
 что ей не хватает для правильного ответа

670
00:45:24,440 --> 00:45:26,440
 каких-то знаний, каких-то данных,

671
00:45:26,440 --> 00:45:31,440
 она уже возвращает ответ с вызовом этих функций

672
00:45:31,440 --> 00:45:33,440
 с правильными параметрами.

673
00:45:33,440 --> 00:45:38,440
 И непосредственное применение этих функций

674
00:45:38,440 --> 00:45:41,440
 выполнения происходит уже,

675
00:45:41,440 --> 00:45:43,440
 ну либо, если это встроенные функции

676
00:45:43,440 --> 00:45:45,440
 на нашей серверной стороне,

677
00:45:45,440 --> 00:45:47,440
 либо, если это клиентские функции

678
00:45:47,440 --> 00:45:49,440
 на клиентской стороне.

679
00:45:49,440 --> 00:45:52,440
 Если вы занимаетесь разработкой,

680
00:45:52,440 --> 00:45:55,440
 вполне вероятно, вы здесь увидели

681
00:45:55,440 --> 00:45:59,440
 паттерн RPC ,

682
00:45:59,440 --> 00:46:02,440
 который используется примерно

683
00:46:02,440 --> 00:46:04,440
 в таком же подходе.

684
00:46:04,440 --> 00:46:07,440
 Соответственно, про Function Calling можно думать

685
00:46:07,440 --> 00:46:12,440
 примерно как про RPC, но в применении

686
00:46:12,440 --> 00:46:16,440
 в рамках, соответственно, моделей.

687
00:46:16,440 --> 00:46:18,440
 Ну и давайте чуть-чуть посмотрим,

688
00:46:18,440 --> 00:46:21,440
 заглянем в протокол,

689
00:46:21,440 --> 00:46:25,440
 что именно летит по шине данных

690
00:46:25,440 --> 00:46:28,440
 в момент, когда происходит Function Call.

691
00:46:28,440 --> 00:46:31,440
 Здесь видно, что мы сначала должны

692
00:46:31,440 --> 00:46:34,440
 модели объяснить, что некоторые

693
00:46:34,440 --> 00:46:36,440
 функции можно вызывать,

694
00:46:36,440 --> 00:46:39,440
 рассказать про схему вызова,

695
00:46:39,440 --> 00:46:42,440
 переменные, параметры.

696
00:46:42,440 --> 00:46:45,440
 Дальше, соответственно, уже серверная

697
00:46:45,440 --> 00:46:47,440
 сторона, модель, принимает решение

698
00:46:47,440 --> 00:46:50,440
 про то, что необходимо Function Call

699
00:46:50,440 --> 00:46:54,440
 вызвать, соответственно, передает

700
00:46:54,440 --> 00:46:56,440
 специально сформированное сообщение

701
00:46:56,440 --> 00:46:59,440
 уже на обработку уже

702
00:46:59,440 --> 00:47:03,440
 клиентского устройства, и там

703
00:47:03,440 --> 00:47:05,440
 происходит непосредственный вызов

704
00:47:05,440 --> 00:47:07,440
 этой функции, туда же передаются

705
00:47:07,440 --> 00:47:09,440
 параметры, ну вот в случае

706
00:47:09,440 --> 00:47:11,440
 нашего

707
00:47:11,440 --> 00:47:15,440
 сценария мы подумали, что

708
00:47:15,440 --> 00:47:17,440
 для настольных игр было бы полезно

709
00:47:17,440 --> 00:47:19,440
 уметь бросать

710
00:47:19,440 --> 00:47:21,440
 кубик, чтобы

711
00:47:21,440 --> 00:47:23,440
 не носить с собой

712
00:47:23,440 --> 00:47:25,440
 физический кубик, то есть

713
00:47:25,440 --> 00:47:27,440
 если тебе понадобился

714
00:47:27,440 --> 00:47:29,440
 в момент игры какой-нибудь

715
00:47:29,440 --> 00:47:31,440
 бросок кубика, то эту функцию

716
00:47:31,440 --> 00:47:33,440
 может выполнить этот голосовой наш агент

717
00:47:33,440 --> 00:47:37,440
 и сказать какая циферка выпала

718
00:47:37,440 --> 00:47:39,440
 соответственно

719
00:47:39,440 --> 00:47:41,440
 уже на клиентской стороне

720
00:47:41,440 --> 00:47:43,440
 происходит выполнение функции

721
00:47:43,440 --> 00:47:45,440
 результат ее обратно

722
00:47:45,440 --> 00:47:47,440
 отправляется на сервер

723
00:47:47,440 --> 00:47:49,440
 передается в контекст

724
00:47:49,440 --> 00:47:51,440
 и дальше модель уже на основании

725
00:47:51,440 --> 00:47:53,440
 вот этого расширенного контекста

726
00:47:53,440 --> 00:47:55,440
 понимает

727
00:47:55,440 --> 00:47:57,440
 что ей нужно отвечать

728
00:47:57,440 --> 00:48:01,440
 и уже формирует итоговый ответ

729
00:48:01,440 --> 00:48:03,440
 ну и давайте немножко

730
00:48:03,440 --> 00:48:05,440
 как я уже тизернул

731
00:48:05,440 --> 00:48:07,440
 на нашем примере

732
00:48:07,440 --> 00:48:09,440
 рассмотрим как вообще в принципе

733
00:48:09,440 --> 00:48:11,440
 такую функцию добавить

734
00:48:11,440 --> 00:48:13,440
 нашего голосового агента

735
00:48:13,440 --> 00:48:15,440
 простой очень промт

736
00:48:15,440 --> 00:48:17,440
 по сути нам нужно

737
00:48:17,440 --> 00:48:19,440
 рассказать что

738
00:48:19,440 --> 00:48:21,440
 есть такая функция

739
00:48:21,440 --> 00:48:23,440
 что ее нужно вызывать

740
00:48:23,440 --> 00:48:25,440
 когда это уместно

741
00:48:25,440 --> 00:48:27,440
 ну и соответственно

742
00:48:27,440 --> 00:48:29,440
 как с ней работать

743
00:48:29,440 --> 00:48:31,440
 большая часть

744
00:48:31,440 --> 00:48:33,440
 конечно же будет уже реализовано

745
00:48:33,440 --> 00:48:35,440
 на нашем клиентском коде

746
00:48:35,440 --> 00:48:37,440
 а именно нам необходимо

747
00:48:37,440 --> 00:48:39,440
 во первых правильно

748
00:48:39,440 --> 00:48:41,440
 анонсировать

749
00:48:41,440 --> 00:48:43,440
 нашу

750
00:48:43,440 --> 00:48:45,440
 функцию здесь

751
00:48:45,440 --> 00:48:47,440
 стоит обратить внимание

752
00:48:47,440 --> 00:48:49,440
 именно на то что

753
00:48:49,440 --> 00:48:51,440
 формат передачи вот этой

754
00:48:51,440 --> 00:48:53,440
 функции описания ее

755
00:48:53,440 --> 00:48:55,440
 параметров он достаточно строгий

756
00:48:55,440 --> 00:48:57,440
 и требует

757
00:48:57,440 --> 00:49:00,440
 особого внимания

758
00:49:00,440 --> 00:49:03,440
 ну и дальше соответственно нам необходимо

759
00:49:03,440 --> 00:49:05,440
 реализовать эту функцию

760
00:49:05,440 --> 00:49:07,440
 а связь

761
00:49:07,440 --> 00:49:09,440
 вот этого

762
00:49:09,440 --> 00:49:11,440
 вызова функции которая

763
00:49:11,440 --> 00:49:13,440
 прилетела в ответ и

764
00:49:13,440 --> 00:49:15,440
 выполнение конкретной функции

765
00:49:15,440 --> 00:49:17,440
 уже берет на себя агентский SDK

766
00:49:17,440 --> 00:49:19,440
 и он понимает уже когда

767
00:49:19,440 --> 00:49:21,440
 нужно вызвать конкретную переменную

768
00:49:21,440 --> 00:49:23,440
 соответственно в данном случае

769
00:49:23,440 --> 00:49:25,440
 не переменную а функцию

770
00:49:25,440 --> 00:49:27,440
 вызовет ее сериализует и отправит

771
00:49:27,440 --> 00:49:29,440
 дальше в модель

772
00:49:29,440 --> 00:49:33,440
 ну и давайте посмотрим

773
00:49:33,440 --> 00:49:35,440
 брысь кубик

774
00:49:35,440 --> 00:49:37,440
 выпало 3

775
00:49:37,440 --> 00:49:39,440
 брысь кубик 2 раза

776
00:49:39,440 --> 00:49:43,440
 выпало 5 и 6

777
00:49:47,440 --> 00:49:49,440
 ну наверное какая-то честность брысков гарантируется

778
00:49:49,440 --> 00:49:51,440
 в разных сценариях

779
00:49:51,440 --> 00:49:53,440
 это вообще основа для модели

780
00:49:53,440 --> 00:49:55,440
 для совершения любого действия

781
00:49:55,440 --> 00:49:57,440
 на самом деле если углубляться

782
00:49:57,440 --> 00:49:59,440
 то тот же файл веб-сече

783
00:49:59,440 --> 00:50:01,440
 это по факту function calling

784
00:50:01,440 --> 00:50:03,440
 просто их реализация и обработка

785
00:50:03,440 --> 00:50:05,440
 оно спрятано на уровне обвязки

786
00:50:05,440 --> 00:50:07,440
 на уровне API

787
00:50:07,440 --> 00:50:09,440
 то есть function calling это практически любое действие

788
00:50:09,440 --> 00:50:11,440
 которое можно совершить

789
00:50:11,440 --> 00:50:13,440
 от записи изменения чего-то

790
00:50:13,440 --> 00:50:15,440
 в CRM до перевода звонка

791
00:50:15,440 --> 00:50:17,440
 на оператора

792
00:50:17,440 --> 00:50:19,440
 мы

793
00:50:19,440 --> 00:50:21,440
 сегодня построили наш рассказ

794
00:50:21,440 --> 00:50:23,440
 по

795
00:50:23,440 --> 00:50:25,440
 усложнению функций

796
00:50:25,440 --> 00:50:27,440
 и

797
00:50:27,440 --> 00:50:29,440
 function calling

798
00:50:29,440 --> 00:50:31,440
 является таким

799
00:50:31,440 --> 00:50:33,440
 совершенно базовым кирпичиком

800
00:50:33,440 --> 00:50:35,440
 но на основе его

801
00:50:35,440 --> 00:50:37,440
 существует несколько вот вариантов

802
00:50:37,440 --> 00:50:39,440
 и когда вам уже

803
00:50:39,440 --> 00:50:41,440
 нужно

804
00:50:41,440 --> 00:50:43,440
 обогатить

805
00:50:43,440 --> 00:50:45,440
 ваш сценарий большим количеством

806
00:50:45,440 --> 00:50:47,440
 функций, каждую функцию

807
00:50:47,440 --> 00:50:49,440
 уже тяжеловато будет

808
00:50:49,440 --> 00:50:51,440
 описывать отдельно, поэтому

809
00:50:51,440 --> 00:50:53,440
 существует

810
00:50:53,440 --> 00:50:55,440
 отдельный такой протокол, он много

811
00:50:55,440 --> 00:50:57,440
 где используется в рамках

812
00:50:57,440 --> 00:50:59,440
 больших лингвистических моделей

813
00:50:59,440 --> 00:51:01,440
 он называется MCP

814
00:51:01,440 --> 00:51:03,440
 Model Context Protocol

815
00:51:03,440 --> 00:51:05,440
 и что же

816
00:51:05,440 --> 00:51:07,440
 он позволяет? По сути

817
00:51:07,440 --> 00:51:09,440
 внутри работает тот же самый

818
00:51:09,440 --> 00:51:11,440
 Function Calling, но

819
00:51:11,440 --> 00:51:13,440
 он позволяет, во-первых

820
00:51:13,440 --> 00:51:15,440
 создавать

821
00:51:15,440 --> 00:51:17,440
 какие-то серверные решения

822
00:51:17,440 --> 00:51:19,440
 которые удобно и легко

823
00:51:19,440 --> 00:51:21,440
 вызывать модели

824
00:51:21,440 --> 00:51:23,440
 модели понимают

825
00:51:23,440 --> 00:51:25,440
 как с этими серверными

826
00:51:25,440 --> 00:51:27,440
 решениями взаимодействовать, как их вызывать

827
00:51:27,440 --> 00:51:29,440
 есть решения

828
00:51:29,440 --> 00:51:31,440
 для вызова

829
00:51:31,440 --> 00:51:33,440
 тулов, это не в рамках

830
00:51:33,440 --> 00:51:35,440
 реалтайма, но в рамках

831
00:51:35,440 --> 00:51:37,440
 решений

832
00:51:37,440 --> 00:51:39,440
 каких-нибудь

833
00:51:39,440 --> 00:51:41,440
 кодинговых ассистентов, когда

834
00:51:41,440 --> 00:51:43,440
 эти MCP

835
00:51:43,440 --> 00:51:45,440
 серверы могут располагаться

836
00:51:45,440 --> 00:51:47,440
 у вас также

837
00:51:47,440 --> 00:51:49,440
 в вашем контуре

838
00:51:49,440 --> 00:51:51,440
 ну и

839
00:51:51,440 --> 00:51:53,440
 вообще в принципе

840
00:51:53,440 --> 00:51:55,440
 если говорить про

841
00:51:55,440 --> 00:51:57,440
 MCP, это целый такой отдельный

842
00:51:57,440 --> 00:51:59,440
 новый мир, в который

843
00:51:59,440 --> 00:52:01,440
 глобально позволяет

844
00:52:01,440 --> 00:52:03,440
 дать в

845
00:52:03,440 --> 00:52:05,440
 пару небольших инструкций

846
00:52:05,440 --> 00:52:07,440
 модели

847
00:52:07,440 --> 00:52:09,440
 новую функциональность

848
00:52:09,440 --> 00:52:11,440
 это может быть как функциональность

849
00:52:11,440 --> 00:52:13,440
 в плане дополнительного источника

850
00:52:13,440 --> 00:52:15,440
 знаний, так и возможность совершать

851
00:52:15,440 --> 00:52:17,440
 какие-то вот действия

852
00:52:17,440 --> 00:52:19,440
 ну давайте посмотрим

853
00:52:19,440 --> 00:52:21,440
 как это

854
00:52:21,440 --> 00:52:23,440
 как этот раздел

855
00:52:23,440 --> 00:52:25,440
 mcphub

856
00:52:25,440 --> 00:52:27,440
 mcp выглядит в

857
00:52:27,440 --> 00:52:29,440
 e-study

858
00:52:29,440 --> 00:52:31,440
 а как показывала

859
00:52:31,440 --> 00:52:33,440
 Настя на карте

860
00:52:33,440 --> 00:52:35,440
 e-study это также

861
00:52:35,440 --> 00:52:37,440
 стандартный компонент

862
00:52:37,440 --> 00:52:39,440
 ну и в нашем случае

863
00:52:39,440 --> 00:52:41,440
 мы подумали

864
00:52:41,440 --> 00:52:43,440
 что было бы классно если бы

865
00:52:43,440 --> 00:52:45,440
 мы могли не только

866
00:52:45,440 --> 00:52:47,440
 проконсультироваться с нашим голосовым ассистентом

867
00:52:47,440 --> 00:52:49,440
 по поводу настольных игр

868
00:52:49,440 --> 00:52:51,440
 но также попросить его запланировать

869
00:52:51,440 --> 00:52:53,440
 в календаре

870
00:52:53,440 --> 00:52:55,440
 встречу, чтобы мы все

871
00:52:55,440 --> 00:52:57,440
 пришли в нужное время и место

872
00:52:57,440 --> 00:52:59,440
 позвать всех друзей

873
00:52:59,440 --> 00:53:01,440
 и

874
00:53:01,440 --> 00:53:03,440
 действительно поиграть в настольные игры

875
00:53:03,440 --> 00:53:05,440
 я

876
00:53:05,440 --> 00:53:07,440
 не буду сейчас сильно много

877
00:53:07,440 --> 00:53:09,440
 рассказывать про то как

878
00:53:09,440 --> 00:53:11,440
 устроен наш

879
00:53:11,440 --> 00:53:13,440
 MCP-сервер

880
00:53:13,440 --> 00:53:15,440
 для работы

881
00:53:15,440 --> 00:53:17,440
 очень тезисно расскажу, что

882
00:53:17,440 --> 00:53:19,440
 мы использовали

883
00:53:19,440 --> 00:53:21,440
 стандартный их

884
00:53:21,440 --> 00:53:23,440
 набор компонент

885
00:53:23,440 --> 00:53:25,440
 которые идут либо в

886
00:53:25,440 --> 00:53:27,440
 E-студию, либо в

887
00:53:27,440 --> 00:53:29,440
 Яндекс Клауд, а именно

888
00:53:29,440 --> 00:53:31,440
 мы использовали MCP-сервер

889
00:53:31,440 --> 00:53:33,440
 для

890
00:53:33,440 --> 00:53:35,440
 для

891
00:53:35,440 --> 00:53:37,440
 интеграции в нашу модель

892
00:53:37,440 --> 00:53:39,440
 мы использовали

893
00:53:39,440 --> 00:53:41,440
 непосредственно

894
00:53:41,440 --> 00:53:43,440
 непосредственно

895
00:53:43,440 --> 00:53:45,440
 обработку событий

896
00:53:45,440 --> 00:53:47,440
 вот здесь вот внизу слайда видно

897
00:53:47,440 --> 00:53:49,440
 Create Event - это конкретный

898
00:53:49,440 --> 00:53:51,440
 тул в рамках нашего

899
00:53:51,440 --> 00:53:53,440
 MCP-сервера, который может использовать уже

900
00:53:53,440 --> 00:53:55,440
 модель, соответственно

901
00:53:55,440 --> 00:53:57,440
 внутри

902
00:53:57,440 --> 00:53:59,440
 задеплоены

903
00:53:59,440 --> 00:54:01,440
 Serverless функции

904
00:54:01,440 --> 00:54:03,440
 и там уже происходит

905
00:54:03,440 --> 00:54:05,440
 такой тонкий, тонкая прокся,

906
00:54:05,440 --> 00:54:07,440
 которая получает набор параметров

907
00:54:07,440 --> 00:54:09,440
 и уже взаимодействует

908
00:54:09,440 --> 00:54:11,440
 с API

909
00:54:11,440 --> 00:54:13,440
 Яндекс.Календаря

910
00:54:13,440 --> 00:54:15,440
 естественно подготовлены

911
00:54:15,440 --> 00:54:17,440
 специально инсталляции Яндекс.Календаря

912
00:54:17,440 --> 00:54:19,440
 точнее

913
00:54:19,440 --> 00:54:21,440
 созданы

914
00:54:21,440 --> 00:54:23,440
 приложения в рамках Яндекс.Календаря

915
00:54:23,440 --> 00:54:25,440
 со своими креденшилами

916
00:54:25,440 --> 00:54:27,440
 которые уже

917
00:54:27,440 --> 00:54:29,440
 являются

918
00:54:29,440 --> 00:54:31,440
 параметрами

919
00:54:31,440 --> 00:54:33,440
 Serverless функций

920
00:54:33,440 --> 00:54:35,440
 ну и

921
00:54:35,440 --> 00:54:37,440
 чуть-чуть

922
00:54:37,440 --> 00:54:39,440
 заглянем, что у нас находится

923
00:54:39,440 --> 00:54:41,440
 внутри каждого

924
00:54:41,440 --> 00:54:43,440
 из тулов

925
00:54:43,440 --> 00:54:45,440
 mcp-сервера, вот мы видим

926
00:54:45,440 --> 00:54:47,440
 здесь, по сути, схему

927
00:54:47,440 --> 00:54:49,440
 параметров инструмента

928
00:54:49,440 --> 00:54:51,440
 по вот этой схеме

929
00:54:51,440 --> 00:54:53,440
 модель понимает, какой ей

930
00:54:53,440 --> 00:54:55,440
 нужно сделать вызов, как

931
00:54:55,440 --> 00:54:57,440
 соответственно, какие параметры нужно передать

932
00:54:57,440 --> 00:54:59,440
 если ей каких-то

933
00:54:59,440 --> 00:55:01,440
 параметров не хватает, то она их

934
00:55:01,440 --> 00:55:03,440
 получает да узнает, ну и дальше, соответственно

935
00:55:03,440 --> 00:55:05,440
 в момент вызова происходит

936
00:55:05,440 --> 00:55:07,440
 уже обработка

937
00:55:07,440 --> 00:55:09,440
 как я уже сказал

938
00:55:09,440 --> 00:55:11,440
 МСП хаб

939
00:55:11,440 --> 00:55:13,440
 и

940
00:55:13,440 --> 00:55:15,440
 решение для МСП в

941
00:55:15,440 --> 00:55:17,440
 ИИ-студии - это

942
00:55:17,440 --> 00:55:19,440
 тема для отдельного разговора и

943
00:55:19,440 --> 00:55:21,440
 к счастью у нас такой разговор

944
00:55:21,440 --> 00:55:23,440
 уже происходил

945
00:55:23,440 --> 00:55:25,440
 поэтому, пожалуйста

946
00:55:25,440 --> 00:55:27,440
 сходите

947
00:55:27,440 --> 00:55:29,440
 по

948
00:55:29,440 --> 00:55:31,440
 QR-кодику, по ссылочке и

949
00:55:31,440 --> 00:55:33,440
 посмотрите отдельно лекцию

950
00:55:33,440 --> 00:55:35,440
 по поводу всех

951
00:55:35,440 --> 00:55:37,440
 возможностей

952
00:55:37,440 --> 00:55:39,440
 нашего решения для

953
00:55:39,440 --> 00:55:41,440
 МСП

954
00:55:41,440 --> 00:55:43,440
 Давайте немножко

955
00:55:43,440 --> 00:55:45,440
 посмотрим, как же

956
00:55:45,440 --> 00:55:47,440
 использовать

957
00:55:47,440 --> 00:55:49,440
 наш МСП сервер для работы

958
00:55:49,440 --> 00:55:51,440
 с календарем

959
00:55:51,440 --> 00:55:53,440
 Здесь супер важно

960
00:55:53,440 --> 00:55:55,440
 использовать

961
00:55:55,440 --> 00:55:57,440
 какие-то

962
00:55:57,440 --> 00:55:59,440
 переменные, чтобы модель понимала

963
00:55:59,440 --> 00:56:01,440
 в какой момент

964
00:56:01,440 --> 00:56:03,440
 происходит запрос

965
00:56:03,440 --> 00:56:05,440
 в какой сегодня день

966
00:56:05,440 --> 00:56:07,440
 и соответственно дать ей какой-то дополнительный контекст

967
00:56:07,440 --> 00:56:09,440
 Здесь же используется переменная

968
00:56:09,440 --> 00:56:11,440
 friends - это

969
00:56:11,440 --> 00:56:13,440
 способ модели сказать

970
00:56:13,440 --> 00:56:15,440
 кого нужно позвать в календарь

971
00:56:15,440 --> 00:56:17,440
 ну и какие-то дополнительные инструкции

972
00:56:17,440 --> 00:56:19,440
 примерно как нужно

973
00:56:19,440 --> 00:56:21,440
 работать с вот этим вот

974
00:56:21,440 --> 00:56:23,440
 тулом. Дальше соответственно

975
00:56:23,440 --> 00:56:25,440
 есть

976
00:56:25,440 --> 00:56:27,440
 имплементация в коде

977
00:56:27,440 --> 00:56:29,440
 по сути

978
00:56:29,440 --> 00:56:31,440
 ключевым

979
00:56:31,440 --> 00:56:33,440
 здесь является то что мы

980
00:56:33,440 --> 00:56:35,440
 созданный вот этот вот

981
00:56:35,440 --> 00:56:37,440
 mcp-сервер берем

982
00:56:37,440 --> 00:56:39,440
 в качестве

983
00:56:39,440 --> 00:56:41,440
 строчки подключения

984
00:56:41,440 --> 00:56:43,440
 в качестве

985
00:56:43,440 --> 00:56:45,440
 его идентификатора

986
00:56:45,440 --> 00:56:47,440
 передаем в

987
00:56:47,440 --> 00:56:49,440
 контекст сессии

988
00:56:49,440 --> 00:56:51,440
 и дальше

989
00:56:51,440 --> 00:56:53,440
 уже

990
00:56:53,440 --> 00:56:55,440
 модель сама понимает, как

991
00:56:55,440 --> 00:56:57,440
 работать с этим сторонним тулом

992
00:56:57,440 --> 00:56:59,440
 давайте посмотрим, как

993
00:56:59,440 --> 00:57:01,440
 это работает вживую

994
00:57:05,440 --> 00:57:07,440
 собери нас на игру

995
00:57:07,440 --> 00:57:09,440
 на вечер

996
00:57:09,440 --> 00:57:11,440
 уточните, пожалуйста

997
00:57:11,440 --> 00:57:13,440
 какую игру хотите

998
00:57:13,440 --> 00:57:15,440
 сколько человек будет

999
00:57:15,440 --> 00:57:17,440
 и на какую дату и время

1000
00:57:17,440 --> 00:57:19,440
 планируете встречу

1001
00:57:19,440 --> 00:57:21,440
 давай на пятницу 24 июля

1002
00:57:21,440 --> 00:57:25,440
 играть будем в мафию

1003
00:57:25,440 --> 00:57:27,440
 хорошо, подскажите, пожалуйста

1004
00:57:27,440 --> 00:57:29,440
 во сколько начнем

1005
00:57:29,440 --> 00:57:31,440
 и кто еще будет участвовать

1006
00:57:31,440 --> 00:57:33,440
 напишите их имена

1007
00:57:33,440 --> 00:57:35,440
 начнем в 7 часов вечера

1008
00:57:35,440 --> 00:57:37,440
 и приглашай всех

1009
00:57:43,440 --> 00:57:45,440
 события на пятницу 24 июля

1010
00:57:45,440 --> 00:57:47,440
 в 7 вечера по игре в мафию

1011
00:57:47,440 --> 00:57:49,440
 создано

1012
00:57:49,440 --> 00:57:51,440
 участники приглашены

1013
00:57:51,440 --> 00:57:53,440
 спасибо

1014
00:57:53,440 --> 00:57:55,440
 пожалуйста

1015
00:57:55,440 --> 00:57:57,440
 удачной игры

1016
00:57:59,440 --> 00:58:01,440
 ну и как результат

1017
00:58:01,440 --> 00:58:03,440
 это реальный скриншот

1018
00:58:03,440 --> 00:58:05,440
 из моего календаря

1019
00:58:05,440 --> 00:58:07,440
 там появилась встреча

1020
00:58:07,440 --> 00:58:09,440
 она действительно на 24 июля

1021
00:58:09,440 --> 00:58:11,440
 действительно 7 часов вечера

1022
00:58:11,440 --> 00:58:13,440
 я в качестве параметров

1023
00:58:13,440 --> 00:58:15,440
 чтобы не спамить

1024
00:58:15,440 --> 00:58:17,100
 своих друзей передал

1025
00:58:17,100 --> 00:58:19,460
 копии своих емейлов

1026
00:58:19,460 --> 00:58:21,540
 ну и соответственно в качестве участников

1027
00:58:21,540 --> 00:58:23,680
 меня позвали

1028
00:58:23,680 --> 00:58:25,500
 в качестве

1029
00:58:25,500 --> 00:58:27,780
 на игру

1030
00:58:27,780 --> 00:58:28,580
 и

1031
00:58:28,580 --> 00:58:30,960
 обратите внимание насколько

1032
00:58:30,960 --> 00:58:33,420
 круто модель умеет

1033
00:58:33,420 --> 00:58:34,580
 понимать каких

1034
00:58:34,580 --> 00:58:36,940
 данных ей не хватило

1035
00:58:36,940 --> 00:58:39,100
 умеет доспрашивать и уже

1036
00:58:39,100 --> 00:58:41,380
 собранные данные потом передать

1037
00:58:41,380 --> 00:58:43,120
 в один вызов

1038
00:58:43,120 --> 00:58:44,980
 ну и какие сценарии могут

1039
00:58:44,980 --> 00:58:47,160
 использовать mcp на самом деле если

1040
00:58:47,160 --> 00:58:49,600
 вот разделять mcp и function calling

1041
00:58:49,600 --> 00:58:52,120
 это конечно же у нас более такая

1042
00:58:52,120 --> 00:58:54,480
 история когда все подчинено

1043
00:58:54,480 --> 00:58:55,840
 определенному стандарту вам не

1044
00:58:55,840 --> 00:58:57,540
 приходится думать как задавать

1045
00:58:57,540 --> 00:59:01,320
 описание и mcp вот протокол который

1046
00:59:01,320 --> 00:59:02,840
 принят сообществом который уже

1047
00:59:02,840 --> 00:59:04,480
 наверное больше года так точно

1048
00:59:04,480 --> 00:59:07,180
 живет и все больше api получает

1049
00:59:07,180 --> 00:59:09,480
 обертку в виде mcp кто-то делает его

1050
00:59:09,480 --> 00:59:10,980
 самостоятельно где-то находятся

1051
00:59:10,980 --> 00:59:13,420
 энтузиасты но из того что мы видим что

1052
00:59:13,420 --> 00:59:16,240
 чаще всего с чего начинают это mcp для

1053
00:59:16,240 --> 00:59:19,120
 разного рода календарей crm для

1054
00:59:19,120 --> 00:59:21,340
 баз данных ну и практически каждый

1055
00:59:21,340 --> 00:59:22,680
 сервис у нас в последнее время

1056
00:59:22,680 --> 00:59:25,600
 получает обвязку в виде mcp единственное

1057
00:59:25,600 --> 00:59:27,360
 ограничение там конечно же нет никакого

1058
00:59:27,360 --> 00:59:28,980
 потокового взаимодействия все

1059
00:59:28,980 --> 00:59:33,460
 происходит в таком рест стиле и теперь

1060
00:59:33,460 --> 00:59:35,740
 мы когда построили агента наделили его

1061
00:59:35,740 --> 00:59:39,360
 знаниями дали ему такие инструменты пришла

1062
00:59:39,360 --> 00:59:41,860
 пора задуматься про и викс

1063
00:59:41,860 --> 00:59:43,720
 транкейт это функциональность которую мы

1064
00:59:43,720 --> 00:59:46,160
 запустили недавно про нее широко не

1065
00:59:46,160 --> 00:59:49,040
 рассказывали и что она позволяет делать на

1066
00:59:49,040 --> 00:59:52,720
 самом деле она позволяет определять в

1067
00:59:52,720 --> 00:59:55,580
 какой момент пользователь перебил агента

1068
00:59:55,580 --> 00:59:57,460
 казалось бы наверное проблема не такая

1069
00:59:57,460 --> 01:00:00,900
 глобальная как могло бы может показаться но на

1070
01:00:00,900 --> 01:00:04,540
 самом деле это довольно частый кейс и для

1071
01:00:04,540 --> 01:00:06,720
 ряда наших клиентов это даже было каким-то

1072
01:00:06,720 --> 01:00:08,780
 блокером для интеграции они буквально

1073
01:00:08,780 --> 01:00:11,020
 просили чтобы мы реализовали эту

1074
01:00:11,020 --> 01:00:12,980
 функциональность поддержали ее и суть в

1075
01:00:12,980 --> 01:00:15,700
 следующем что допустим вы сообщаете в

1076
01:00:15,700 --> 01:00:17,920
 одном в одной реплике что ваш заказ

1077
01:00:17,920 --> 01:00:20,320
 доставят завтра с 10 до 18 часов и

1078
01:00:20,320 --> 01:00:23,620
 пользователь такой да спасибо понял и если

1079
01:00:23,620 --> 01:00:27,460
 реализовывать агента без функциональности

1080
01:00:27,460 --> 01:00:29,800
 транкета то модель решит что она

1081
01:00:29,800 --> 01:00:31,900
 произнесла фразу которую задумала целиком

1082
01:00:31,900 --> 01:00:34,360
 то есть а фраза целиком состояла в том что

1083
01:00:34,360 --> 01:00:36,780
 там доставка в такое-то время что вам

1084
01:00:36,780 --> 01:00:42,180
 позвонят за час и курьер что тоже важно и

1085
01:00:42,180 --> 01:00:44,200
 если вас не окажется на месте доставка

1086
01:00:44,200 --> 01:00:47,180
 будет в нашем случае перенесена возможно

1087
01:00:47,180 --> 01:00:49,960
 другие варианты с транкетом модель

1088
01:00:49,960 --> 01:00:51,980
 будет понимать в какой момент ее именно

1089
01:00:51,980 --> 01:00:54,500
 перебили и и строить дальнейшее

1090
01:00:54,500 --> 01:00:57,720
 взаимодействие исходя из этого контекста на

1091
01:00:57,720 --> 01:00:59,380
 самом деле это очень востребованная

1092
01:00:59,380 --> 01:01:01,240
 x-механика если вы еще не пробовали

1093
01:01:01,240 --> 01:01:03,360
 прикрутить транкет в своем реал-тайм

1094
01:01:03,360 --> 01:01:06,060
 клиенте очень советую попробовать

1095
01:01:06,060 --> 01:01:07,800
 давайте заглянем чуть-чуть в глубь

1096
01:01:07,800 --> 01:01:12,900
 протокола и немножко освежу понимание

1097
01:01:12,900 --> 01:01:15,780
 как как именно вообще в какой момент

1098
01:01:15,780 --> 01:01:18,400
 возникает проблема у нас есть компоненты

1099
01:01:18,400 --> 01:01:20,300
 которые отвечают за синтез она уже

1100
01:01:20,300 --> 01:01:22,940
 сформировала аудиофайл и уже отправила

1101
01:01:22,940 --> 01:01:25,500
 его на устройство но при этом устройство

1102
01:01:25,500 --> 01:01:28,900
 весь аудиофайл проиграть не успела

1103
01:01:28,900 --> 01:01:31,400
 весь соответственно ответ и с точки

1104
01:01:31,400 --> 01:01:34,020
 зрения модели она уже ответила а с

1105
01:01:34,020 --> 01:01:35,340
 точки зрения конечного пользователя

1106
01:01:35,340 --> 01:01:38,700
 он весь ответ еще не прослушал и транклейт

1107
01:01:38,700 --> 01:01:42,060
 как раз решает вот этот разрыв он

1108
01:01:42,060 --> 01:01:45,620
 позволяет клиенту уже сообщить что я

1109
01:01:45,620 --> 01:01:49,340
 тебя перебил я тебя не дослушал и если ты

1110
01:01:49,340 --> 01:01:51,520
 со мной будешь разговаривать то учитывай

1111
01:01:51,520 --> 01:01:53,700
 что я дослушал только вот эту вот часть

1112
01:01:53,700 --> 01:01:57,000
 ну и глобально тут есть несколько

1113
01:01:57,000 --> 01:02:00,700
 событий из шины данных наверное самое

1114
01:02:00,700 --> 01:02:03,420
 важное тут выделено жирным шрифтом

1115
01:02:03,420 --> 01:02:08,120
 собственно тип события conversation

1116
01:02:08,120 --> 01:02:12,360
 item truncate он означает что мы

1117
01:02:12,360 --> 01:02:16,860
 truncate или вот этот вот файл и

1118
01:02:16,860 --> 01:02:22,180
 также он помечает как раз сколько какой

1119
01:02:22,180 --> 01:02:25,920
 кусок аудиофайла был уже проигран чтобы

1120
01:02:25,920 --> 01:02:29,000
 модель могла это учесть

1121
01:02:29,000 --> 01:02:32,300
 давайте попробуем реализовать это в

1122
01:02:32,300 --> 01:02:36,440
 нашем агентском сценарии а именно мы

1123
01:02:36,440 --> 01:02:38,900
 знаем что правило у настольных игр

1124
01:02:38,900 --> 01:02:40,820
 бывают достаточно долгими

1125
01:02:40,820 --> 01:02:43,160
 соответственно если вдруг мы перебили

1126
01:02:43,160 --> 01:02:45,500
 модель где-то посредине то было бы

1127
01:02:45,500 --> 01:02:47,900
 классно чтобы она не сначала начала нам

1128
01:02:47,900 --> 01:02:50,120
 зачитывать все правила а в том же месте

1129
01:02:50,120 --> 01:02:53,840
 где перебили нам бы и дочитала но если

1130
01:02:53,840 --> 01:02:56,900
 вдруг по какой-то причине мы не

1131
01:02:56,900 --> 01:02:59,900
 дослушали этот результат то соответственно

1132
01:02:59,900 --> 01:03:01,620
 модель бы тоже учитывала что вот мы

1133
01:03:01,620 --> 01:03:06,240
 знаем только часть этих правил большая

1134
01:03:06,240 --> 01:03:09,660
 часть имплементации она находится на

1135
01:03:09,660 --> 01:03:13,500
 серверной стороне поэтому нам самое

1136
01:03:13,500 --> 01:03:15,420
 важное немножко запромтить модель

1137
01:03:15,420 --> 01:03:19,500
 сказать что в случае чего во первых

1138
01:03:19,500 --> 01:03:21,780
 побудить ее отвечать нам развернуто во

1139
01:03:21,780 --> 01:03:24,060
 вторых учитывать что результаты были

1140
01:03:24,060 --> 01:03:28,260
 затранкличены посмотрим обработку в коде

1141
01:03:28,260 --> 01:03:32,220
 нам действительно нужно следить за тем

1142
01:03:32,220 --> 01:03:35,220
 сколько мы аудио файла проиграли и

1143
01:03:35,220 --> 01:03:37,500
 в случае если у нас происходит

1144
01:03:37,500 --> 01:03:41,140
 перебивание то необходимо как раз

1145
01:03:41,140 --> 01:03:45,420
 отправить вот это событие чтобы сервер

1146
01:03:45,420 --> 01:03:48,820
 уже понимал какой кусок данных уже был

1147
01:03:48,820 --> 01:03:51,120
 озвучен ну и давайте посмотрим это в

1148
01:03:51,120 --> 01:03:53,360
 живую

1149
01:03:54,880 --> 01:03:58,840
 расскажи правила игры в манчкин

1150
01:03:58,840 --> 01:04:02,200
 манчкин пародия на ролевые игры в начале

1151
01:04:02,200 --> 01:04:04,420
 игры

1152
01:04:04,420 --> 01:04:07,340
 продолжим

1153
01:04:07,340 --> 01:04:10,120
 в игре манчкин вы создаете персонажи

1154
01:04:10,120 --> 01:04:12,800
 человека первого уровня без класса

1155
01:04:12,800 --> 01:04:16,480
 выбираете пол расу и класс выкладываете

1156
01:04:16,480 --> 01:04:19,500
 карты шмоток свой ход можно открывать

1157
01:04:19,500 --> 01:04:23,320
 карты дверей если там монстр бой если нет

1158
01:04:23,320 --> 01:04:29,560
 выбираете искать неприятности или чистить нычки боевая сила это уровень плюс

1159
01:04:29,560 --> 01:04:35,200
 бонусы от шмоток и других карт если ваша сила выше силы монстра победили

1160
01:04:35,200 --> 01:04:41,020
 получаете уровень и сокровища можно помогать другим или мешать им использовать

1161
01:04:41,020 --> 01:04:47,920
 проклятие цель первым достичь 10 уровня победив монстра если хотите уточните

1162
01:04:47,920 --> 01:04:51,760
 что-то конкретное про правило расскажу подробнее

1163
01:04:51,760 --> 01:05:00,460
 теперь мы все знаем как греть манчкин транклейт в разных сценариях давайте я приведу там пару

1164
01:05:00,460 --> 01:05:05,260
 практических примеров не буду глубоко погружаться но например с тем же вызовом мастера на дом возможно

1165
01:05:05,260 --> 01:05:13,000
 такая ситуация мастер приедет завтра с 10 до 18 оплата только наличным если учесть ну например

1166
01:05:13,000 --> 01:05:20,320
 не дослушать окончание фразы может возникнуть довольно таки неприятная ситуация или когда у вас

1167
01:05:20,320 --> 01:05:26,620
 той же самой доставкой что если вы не снимете трубку допустим другом кейсе за час до прибытия

1168
01:05:26,620 --> 01:05:32,980
 курьера доставка будет перенесена на другой день и опять-таки человек может ваш потенциальный клиент

1169
01:05:32,980 --> 01:05:38,800
 убить какое-то количество времени там ждать целый день но из-за того что недослушал очень сильно

1170
01:05:38,800 --> 01:05:44,200
 пострадать вот эти всякие условия казалось бы их можно там разбивать на несколько реплик и после

1171
01:05:44,200 --> 01:05:50,460
 каждый спрашивать поняли поняли услышали но по факту это делает диалог ну максимально неудобным

1172
01:05:50,460 --> 01:05:56,620
 раздражающим для пользователя и такое вот поняли услышали оно хорошо тогда когда вы например звоните

1173
01:05:56,620 --> 01:06:03,880
 в поддержку и говорите у меня что-то не работает и поддержка зайдите на сайт получилось здесь да здесь

1174
01:06:03,880 --> 01:06:08,440
 такое уместно но в нашем кейсе когда мы например назначаем доставку и хочется все сказать в одной

1175
01:06:08,440 --> 01:06:15,740
 реплике разбивать на какие-то такие блоки ну это очень неестественно для живого диалога поэтому

1176
01:06:15,740 --> 01:06:21,460
 предлагаю попробовать транкейт это правда очень помогает в реальных диалогах и экономит кучу нервных

1177
01:06:21,460 --> 01:06:29,680
 лепток вам и вашим клиентам мультиагентность и вот мы добрались до мультиагентности что такое

1178
01:06:29,680 --> 01:06:36,720
 ну из названия понятно что это когда агентов не один а их несколько почему же возникает такого

1179
01:06:36,720 --> 01:06:42,500
 рода потребность почему же необходимо заводить несколько агентов возникает это тогда когда у вас

1180
01:06:42,500 --> 01:06:47,720
 идет некое усложнение и когда вы уже наверное начинаете понимать интуитивно что промт как-то

1181
01:06:47,720 --> 01:06:54,180
 раздувается и что здесь уже как бы ну не одна сущность оперируют а как минимум там две или даже

1182
01:06:54,180 --> 01:07:04,000
 три и у них могут быть даже разные голоса разные инструменты которыми они оперируют и разный контекст плюс

1183
01:07:04,000 --> 01:07:11,680
 может быть даже какие-то разные политики ведения диалога все зависит от вашего сценария и вот еще

1184
01:07:11,680 --> 01:07:16,960
 одна неочевидная причина это когда сколько в зависимости от того какая модель используется

1185
01:07:16,960 --> 01:07:22,060
 часто бывает так что не все модели справляются там с огромным количеством инструментов которые

1186
01:07:22,060 --> 01:07:29,380
 хочется присоединить ведь как начинают заворачивать mcp свой api и притаскивают 100 с лишним инструментом

1187
01:07:29,380 --> 01:07:35,980
 конечно это довольно сложновато переваривать модели а еще более сложно описывать и наверное

1188
01:07:35,980 --> 01:07:43,120
 как-то логично бы разбирать все это многообразие на какие-то конкретных агентов которые ими оперируют

1189
01:07:43,120 --> 01:07:49,000
 и вот таким образом у нас появляются дополнительные агенты один из самых частых паттернов вообще как

1190
01:07:49,000 --> 01:07:56,080
 работают несколько агентов есть диспетчер и соответственно он диспетчеризует запросы

1191
01:07:56,080 --> 01:08:00,140
 разным агентом, каждый из которых специализируется на чем-либо

1192
01:08:00,140 --> 01:08:06,400
 ну все буквально как в программировании декомпозиция, организация

1193
01:08:06,400 --> 01:08:14,840
 давайте в нашем сценарии попробуем выделить как раз несколько агентов

1194
01:08:14,840 --> 01:08:21,400
 давайте разделим часть тулов на консультационные, так скажем

1195
01:08:21,400 --> 01:08:26,840
 и вторую роль выделим как организатора встреч

1196
01:08:26,840 --> 01:08:31,600
 у нас получится два разных агента, два разных амплуа

1197
01:08:31,600 --> 01:08:35,800
 назначиваем разные голоса, чтобы было понятно с кем мы сейчас говорим

1198
01:08:35,800 --> 01:08:39,900
 ну и начинается все с промптинга

1199
01:08:39,900 --> 01:08:46,740
 мы рассказываем модели про то, что она должна делать, про ее роль

1200
01:08:46,740 --> 01:08:55,860
 и рассказываем про то, что в случае, если необходимо сделать что-то, что умеет соседний агент

1201
01:08:55,860 --> 01:09:06,040
 то необходимо как раз передать разговор в терминах, соответственно, агентских

1202
01:09:06,040 --> 01:09:08,060
 это действие называется хенд-офф

1203
01:09:08,060 --> 01:09:11,600
 нам нужно запромтить второго агента

1204
01:09:11,600 --> 01:09:18,620
 у второго агента все то же самое, история про базовую роль

1205
01:09:18,620 --> 01:09:28,600
 ну и конечно же тут нужно будет еще рассказать про передачу роли, передачу разговора второму агенту

1206
01:09:28,600 --> 01:09:36,480
 немножко напишем кода, по сути код здесь достаточно простой

1207
01:09:36,480 --> 01:09:43,380
 мы делаем двух агентов, большую часть оркестрации берет на себя SDK

1208
01:09:43,380 --> 01:09:51,620
 и в данном случае мы немножко кастомизируем второго агента, чтобы у нас был другой голос

1209
01:09:51,620 --> 01:09:56,000
 и дальше реализуем как раз функцию передачи

1210
01:09:56,000 --> 01:10:00,960
 ну и давайте посмотрим на тему кода передачи

1211
01:10:00,960 --> 01:10:10,940
 код передачи довольно простой, мы по сути говорим в какой момент и как его нужно обрабатывать

1212
01:10:10,940 --> 01:10:18,000
 соответственно уже знакомую нам function call объявляем

1213
01:10:18,000 --> 01:10:24,780
 ну и обрабатываем этот function call, немножко оркестрируя контекстом уже на устройстве

1214
01:10:24,780 --> 01:10:30,100
 давайте посмотрим на то, как данное решение уже выглядит вживую

1215
01:10:30,100 --> 01:10:45,040
 когда у нас запланирована игра у нас запланирована игра в мафию 24 июля в 19 часов ровно

1216
01:10:45,040 --> 01:10:48,120
 мы сейчас играем, брось кубик два раза

1217
01:10:48,120 --> 01:10:54,140
 первый бросок пять, второй один, всего шесть

1218
01:10:59,240 --> 01:11:02,380
 ну и как можно реализовывать мультиагентность в разных сценариях

1219
01:11:02,380 --> 01:11:05,300
 на самом деле все будет зависеть от ваших предпочтений и вкусов

1220
01:11:05,300 --> 01:11:09,560
 но, например, вы можете в той же поддержке делать разных агентов

1221
01:11:09,560 --> 01:11:12,480
 ответственных за разные продукты, за консультацию по ним

1222
01:11:12,480 --> 01:11:15,340
 можете делать агент обработки возражений

1223
01:11:15,340 --> 01:11:19,780
 сбора обратной связи, конкретной информации и так далее

1224
01:11:19,780 --> 01:11:24,920
 мультиагентность может быть продиктована еще и вопросом реализабельности агента

1225
01:11:24,920 --> 01:11:29,420
 в разных сценариях. Например, написав агента сбора информации,

1226
01:11:29,420 --> 01:11:32,000
 вы можете его использовать не только в одном сценарии,

1227
01:11:32,000 --> 01:11:37,860
 где вы совершаете холодный звонок и уточняете интересы

1228
01:11:37,860 --> 01:11:41,120
 клиента, но и таким образом сделать такой отчуждаемый

1229
01:11:41,120 --> 01:11:45,220
 компонент, который можно реиспользовать в разных сценариях,

1230
01:11:45,220 --> 01:11:48,540
 не только с этим продуктом, про который вы, собственно,

1231
01:11:48,540 --> 01:11:56,120
 сейчас думаете. Подключение к телефонии. Здесь встает

1232
01:11:56,120 --> 01:11:59,660
 вопрос, вот мы сделали агента, он выполняет задачу,

1233
01:11:59,660 --> 01:12:03,220
 протестировали в UI, что дальше? Какие вообще шаги

1234
01:12:03,220 --> 01:12:05,360
 можно предпринять для того, чтобы подключить агента

1235
01:12:05,360 --> 01:12:10,460
 к телефонии? Что можно сделать самостоятельно? Написать

1236
01:12:10,460 --> 01:12:15,340
 медиашлюз, который переводит WebSocket в СипРТП и обратно

1237
01:12:15,340 --> 01:12:22,420
 и сконнектить телефонию с реал-таймом.

1238
01:12:22,420 --> 01:12:28,580
 По опыту клиентов, кто писал, занимает не такое

1239
01:12:28,580 --> 01:12:32,100
 большое количество времени. Возможно, в «Строянаргоком»

1240
01:12:32,100 --> 01:12:35,420
 ребята расскажут на вебинаре, как они с этим справились,

1241
01:12:35,420 --> 01:12:39,780
 но по факту медиашлюз не такой страшный патрот,

1242
01:12:39,780 --> 01:12:42,300
 как может показаться и вполне себе реализуем, особенно

1243
01:12:42,300 --> 01:12:46,780
 с применением современных кодовых агентов.

1244
01:12:46,780 --> 01:12:48,960
 Также можно подключиться через партнеров, у нас есть

1245
01:12:48,960 --> 01:12:53,080
 партнеры, которые интегрируются по протоколу реалтайма

1246
01:12:53,080 --> 01:12:57,260
 от OpenAI, и среди них сейчас есть Vox Implant, поэтому

1247
01:12:57,260 --> 01:13:02,520
 если ваша телефония Vox Implant, или вы можете проложить

1248
01:13:02,520 --> 01:13:06,960
 транк для нее, можете воспользоваться агентом на реалтайме прямо

1249
01:13:06,960 --> 01:13:07,960
 сейчас.

1250
01:13:07,960 --> 01:13:11,260
 Сейчас мы еще делаем такой экспериментальный подход,

1251
01:13:11,260 --> 01:13:17,200
 когда сделали Endpoint Ки-студии, и у всех, у кого есть телефония

1252
01:13:17,200 --> 01:13:21,700
 и кто может поднять сип-транк для нас, может пользоваться

1253
01:13:21,700 --> 01:13:22,700
 агентами внутри.

1254
01:13:22,700 --> 01:13:25,660
 Это пока экспериментально и ограничено по числу

1255
01:13:25,660 --> 01:13:28,720
 участников, но я очень надеюсь, что в скором времени станет

1256
01:13:28,720 --> 01:13:29,720
 доступно всем.

1257
01:13:29,720 --> 01:13:33,580
 Там флоу такой, что вы буквально собираете агента в UI и

1258
01:13:33,580 --> 01:13:38,400
 потом, соответственно, обращаетесь от своей телефонии по сип-транку

1259
01:13:38,400 --> 01:13:40,220
 к нашему сип-эндпойнту.

1260
01:13:40,220 --> 01:13:44,660
 Таким образом, ваша телефония приобретает такую, ну, своего

1261
01:13:44,660 --> 01:13:48,500
 рода петлю в виде агента, который работает с голосовым

1262
01:13:48,500 --> 01:13:51,260
 трафиком и возвращает голосовой трафик назад.

1263
01:13:53,040 --> 01:13:55,040
 Упс, так, говорят, подключение.

1264
01:13:55,060 --> 01:13:58,920
 Ну и, да, давайте немножко подойдем, подведем итоги.

1265
01:13:59,260 --> 01:14:02,640
 Мы сегодня продемонстрировали достаточно много фичей,

1266
01:14:03,060 --> 01:14:09,060
 было много кода, очевидно, мы не надеемся, что вы

1267
01:14:09,180 --> 01:14:14,680
 быстро все переписали со слайдов, и более того, код у нас

1268
01:14:14,680 --> 01:14:17,080
 сегодня был на слайдах такой немножко иллюстрационный,

1269
01:14:17,440 --> 01:14:20,580
 он взят из реальных примеров, и вот реальные примеры

1270
01:14:20,580 --> 01:14:25,780
 мы оформили в виде гитхаб-репозитория с инструкциями по запуску.

1271
01:14:26,760 --> 01:14:31,240
 Пожалуйста, используйте первый QR-кодик для поиска этого

1272
01:14:31,240 --> 01:14:37,420
 как раз репозитория, ну и, конечно же, вам понадобится справка,

1273
01:14:38,140 --> 01:14:42,640
 документация, она у нас есть, и используйте второй QR-код

1274
01:14:42,640 --> 01:14:46,100
 для быстрого доступа к документации.

1275
01:14:48,500 --> 01:14:52,840
 Поговорим немножко про планы, что мы хотим делать с продуктом

1276
01:14:52,840 --> 01:14:56,440
 в ближайшее время, в перспективе, там, нескольких месяцев.

1277
01:14:57,560 --> 01:15:01,220
 По мере подготовки к вебинару у нас нарисовалась такая карта

1278
01:15:01,220 --> 01:15:06,400
 реалтайма, где у нас есть уже поддерживаемый уже функционал,

1279
01:15:06,400 --> 01:15:10,220
 среди которых FAC, SEO, web, SEO, MCP, то есть про что мы сегодня рассказывали,

1280
01:15:10,300 --> 01:15:15,220
 транкейт для выполнения разных UX-механик, синтез и распознавания речи.

1281
01:15:15,320 --> 01:15:18,860
 Все это, конечно, замечательно, но мы, конечно, не будем останавливаться на этом,

1282
01:15:19,280 --> 01:15:25,660
 мы будем врастить функционал и обновления ближайших, которые мы планируем.

1283
01:15:25,840 --> 01:15:32,960
 В первую очередь мы занялись голосами, занялись синтезом и планируем сделать его максимально живым,

1284
01:15:32,960 --> 01:15:40,020
 добавить в общую библиотеку голосов, новые голоса, которые больше подходят для таких операторских сценариев,

1285
01:15:40,100 --> 01:15:44,160
 когда нужно много и долго говорить и делать это максимально естественно.

1286
01:15:45,620 --> 01:15:53,960
 Из планируемых еще работ, это более стабильная работа с функциями,

1287
01:15:54,060 --> 01:15:58,580
 когда мы хотим больше экспериментировать с моделями в части ЛМ,

1288
01:15:59,480 --> 01:16:02,560
 экспериментировать с так называемыми агентскими моделями

1289
01:16:02,560 --> 01:16:07,600
 и делать все возможное для того, чтобы мы поддерживали больший контекст

1290
01:16:07,600 --> 01:16:11,140
 и чтобы можно было подключать большее число функций.

1291
01:16:12,220 --> 01:16:15,440
 Также мы хотим заниматься дальше улучшением диалоговых механик.

1292
01:16:15,580 --> 01:16:20,060
 Мы понимаем, что мы вступаем в это поле, в эту сферу,

1293
01:16:20,260 --> 01:16:23,560
 где хотят создавать голосовых роботов нового поколения,

1294
01:16:23,740 --> 01:16:27,860
 которые управляются ЛМ-ками, и там возникают многие челленджи,

1295
01:16:27,860 --> 01:16:32,020
 с которыми сталкиваются роботы, которые классически построены на графах,

1296
01:16:32,560 --> 01:16:37,180
 в плане X, в плане перебивания, активного слушания, долгих провисаний и так далее.

1297
01:16:37,660 --> 01:16:39,980
 Собираемся это все преодолевать.

1298
01:16:41,120 --> 01:16:47,480
 По ходу вебинара, наверное, стало понятно, что написание промта —

1299
01:16:47,480 --> 01:16:49,820
 это тоже довольно непростая задача.

1300
01:16:50,280 --> 01:16:52,320
 Я периодически привожу там две аналогии.

1301
01:16:52,400 --> 01:16:55,980
 Представьте, что у вас вышел хороший, замечательный сотрудник,

1302
01:16:55,980 --> 01:16:59,040
 первый день он работает, вы ему дали все необходимые инструменты,

1303
01:16:59,100 --> 01:17:01,520
 он очень сообразительный, но нужно поставить ему задачу.

1304
01:17:01,960 --> 01:17:03,620
 Сам он себе задачу не придумает.

1305
01:17:04,320 --> 01:17:06,420
 И вот вам нужно как-то это все объяснить.

1306
01:17:06,580 --> 01:17:09,460
 И чтобы это объяснить, нужно проделать ненулевую работу,

1307
01:17:09,580 --> 01:17:10,880
 подчас даже бизнес-аналитику.

1308
01:17:11,000 --> 01:17:14,480
 Вторая аналогия у меня — это, скажем так, ремонт.

1309
01:17:14,700 --> 01:17:19,400
 Все понимаем, как делать ремонт, что там вроде как и обои,

1310
01:17:19,580 --> 01:17:23,800
 вот там шпаклевка, что нужно позвать строителей и ограничения такие-то,

1311
01:17:23,800 --> 01:17:27,060
 но довести дело до конца, до ума бывает очень сложно,

1312
01:17:27,160 --> 01:17:29,220
 поэтому обращаемся к специализированным людям,

1313
01:17:29,320 --> 01:17:33,020
 которые нам помогают вот эту всю какофонию того, что у нас есть,

1314
01:17:33,120 --> 01:17:36,220
 привести к законченному проекту и реализовать такие ремонт,

1315
01:17:36,400 --> 01:17:38,280
 ну, в нашем контексте написать промт.

1316
01:17:38,860 --> 01:17:40,940
 Поэтому будем работать в этом направлении.

1317
01:17:41,120 --> 01:17:45,900
 И, конечно, хотелось бы, чтобы все экспериментально переросло в продакшены,

1318
01:17:45,980 --> 01:17:47,520
 и чтобы у нас появилось больше партнеров,

1319
01:17:47,520 --> 01:17:53,040
 которыми мы нативно интегрированы, и можно максимально быстро

1320
01:17:53,040 --> 01:17:57,320
 и без лишних усилий подключать созданных агентов в телефонии.

1321
01:17:59,300 --> 01:18:02,800
 Спасибо за внимание. Готовы ответить на вопросы.

1322
01:18:03,340 --> 01:18:07,100
 У нас есть определенная подборка вопросов в чате.

1323
01:18:08,340 --> 01:18:11,240
 Может быть, мы еще покажем еще один QR-код,

1324
01:18:11,440 --> 01:18:14,200
 перед тем, как мы вопросы ответим.

1325
01:18:14,200 --> 01:18:16,620
 У нас заготовлен еще один QR-код.

1326
01:18:17,420 --> 01:18:21,200
 По сути, здесь небольшая форма,

1327
01:18:22,280 --> 01:18:24,460
 для того, чтобы можно было проверить

1328
01:18:24,460 --> 01:18:27,780
 ваши знания по горячим следам.

1329
01:18:28,260 --> 01:18:30,380
 Мы собрали несколько вопросов,

1330
01:18:30,620 --> 01:18:32,400
 которые мы обсуждали в рамках

1331
01:18:32,400 --> 01:18:34,820
 нашей сегодняшней презентации.

1332
01:18:35,320 --> 01:18:37,800
 И можно сходить, посмотреть,

1333
01:18:39,200 --> 01:18:41,320
 насколько вы усвоили материал.

1334
01:18:43,320 --> 01:18:46,520
 Ну и теперь предлагаю вернуться к вопросам.

1335
01:18:47,880 --> 01:18:49,560
 Давайте пойдем по вопросам,

1336
01:18:49,560 --> 01:18:50,740
 которые нам прислали.

1337
01:18:51,520 --> 01:18:55,300
 Актуальны ли парамты сейчас общая практика?

1338
01:18:55,400 --> 01:18:57,420
 Это тоже самое на правильных файлах.

1339
01:18:57,500 --> 01:18:58,340
 Называется скиллы.

1340
01:18:58,960 --> 01:18:59,800
 Ну, давайте так.

1341
01:18:59,940 --> 01:19:01,860
 Мы в эту сторону тоже смотрим,

1342
01:19:02,020 --> 01:19:03,680
 понимаем необходимость скиллов,

1343
01:19:04,220 --> 01:19:06,880
 но в части голоса там есть определенные нюансы.

1344
01:19:07,380 --> 01:19:09,400
 Но вы правы, что хочется делать

1345
01:19:09,400 --> 01:19:11,680
 что-то такое подключаемое, настраиваемое.

1346
01:19:11,880 --> 01:19:13,560
 И, в принципе, вот эти все наши разговоры

1347
01:19:13,560 --> 01:19:15,020
 про маркдаун, они вот как раз

1348
01:19:15,020 --> 01:19:16,660
 перепрекаются с тенденцией скиллов.

1349
01:19:16,660 --> 01:19:18,000
 Да, мы смотрим в эту сторону.

1350
01:19:19,660 --> 01:19:20,600
 Посмотрим, что у нас.

1351
01:19:20,760 --> 01:19:22,540
 У нас буквально меняется каждый день.

1352
01:19:22,660 --> 01:19:25,060
 Хочется, конечно, ввести свой какой-то протокол.

1353
01:19:25,680 --> 01:19:27,760
 Возможно, мы его и введем, и попробуем

1354
01:19:27,760 --> 01:19:28,880
 для наших пользователей.

1355
01:19:29,240 --> 01:19:31,900
 Базовая идея промптинга, она никуда не уйдет.

1356
01:19:33,160 --> 01:19:37,160
 Вполне вероятно, что вот это вот тонкое искусство,

1357
01:19:37,380 --> 01:19:40,520
 управление промптом, соответственно,

1358
01:19:40,940 --> 01:19:43,820
 филигранное вытачивание инструкций,

1359
01:19:43,820 --> 01:19:46,020
 оно, скорее всего, как раз уйдет,

1360
01:19:46,180 --> 01:19:48,840
 модели становятся умнее, и какой-то файн-тюнинг

1361
01:19:48,840 --> 01:19:51,360
 с помощью промптов, он как раз уходит,

1362
01:19:51,760 --> 01:19:54,380
 но базовая идея, что тебе нужно рассказать

1363
01:19:54,380 --> 01:20:00,080
 модели, кого ей играть, как ей пользоваться

1364
01:20:00,080 --> 01:20:03,740
 тулами, и, соответственно, в каком контексте

1365
01:20:03,740 --> 01:20:06,400
 она будет вести разговор, конечно же,

1366
01:20:06,500 --> 01:20:10,680
 это останется, и на будущее формат при этом

1367
01:20:10,680 --> 01:20:11,380
 может поменяться.

1368
01:20:12,180 --> 01:20:13,400
 Вопрос от Андрея.

1369
01:20:13,540 --> 01:20:16,120
 Каждый запрос API может возвращать его стоимость,

1370
01:20:16,220 --> 01:20:17,560
 например, в поле ключ-кост.

1371
01:20:17,660 --> 01:20:19,940
 Нет, такое не происходит сейчас.

1372
01:20:21,100 --> 01:20:24,520
 У нас есть, я не помню, получается, событие, которое

1373
01:20:24,520 --> 01:20:28,720
 возвращает токены, которые использовались LLM, в части

1374
01:20:28,720 --> 01:20:31,660
 входящие и сходящие кэшированные токены инструментов.

1375
01:20:32,220 --> 01:20:34,920
 Но, насколько я помню, у нас не возвращаются токены,

1376
01:20:35,060 --> 01:20:36,400
 которые отвечают за голос.

1377
01:20:37,060 --> 01:20:40,020
 Посмотреть их вы можете непосредственно в интерфейсе

1378
01:20:40,020 --> 01:20:42,480
 AI-студии в разделе «Биллинга».

1379
01:20:42,480 --> 01:20:46,480
 И в целом нужно отличать API от «Биллинга»,

1380
01:20:46,480 --> 01:20:50,360
 то есть я соглашусь с тем, что можно возвращать какие-то единицы,

1381
01:20:50,680 --> 01:20:55,320
 которые как-то оцениваются, по которым идет тарификация,

1382
01:20:55,840 --> 01:20:59,460
 но сама стоимость в API нет, такого точно не будет.

1383
01:20:59,920 --> 01:21:02,200
 Еще один совет, когда вы работаете с агентом,

1384
01:21:02,260 --> 01:21:04,860
 как правильно считать, сколько там у вас получается минуту,

1385
01:21:05,260 --> 01:21:08,360
 на каждого агента я бы все-таки советовала заводить отдельный фолдер

1386
01:21:08,360 --> 01:21:12,540
 и смотреть, сколько там минут было и зарасходовано,

1387
01:21:12,540 --> 01:21:16,560
 и таким образом получать стоимость за минуту.

1388
01:21:17,060 --> 01:21:18,300
 Вопрос от Александра.

1389
01:21:18,600 --> 01:21:21,400
 Какие логи можно просматривать, где их просмотреть?

1390
01:21:21,760 --> 01:21:24,340
 Можно ли увидеть все, что ушло в модель для принятия решения?

1391
01:21:24,400 --> 01:21:24,900
 Давай я отвечу.

1392
01:21:25,020 --> 01:21:25,240
 Давай.

1393
01:21:25,900 --> 01:21:32,540
 Если глобально, то сам протокол, он достаточно такой вот избыточный,

1394
01:21:33,380 --> 01:21:37,700
 ну не избыточный, но достаточно такой вербос, многословный что ли.

1395
01:21:37,700 --> 01:21:45,940
 То есть есть канал аудио, где вы разговариваете, где пользователь даже разговаривает с моделью,

1396
01:21:46,500 --> 01:21:53,080
 а есть еще дополнительный слой, поток событий, и вот этот поток событий,

1397
01:21:53,100 --> 01:22:03,060
 он уже может служить таким вот логом для сервиса, приложения, чтобы понимать, что происходит.

1398
01:22:03,060 --> 01:22:09,420
 Ну и у нас пока не поддержано, мы в эту сторону тоже поглядываем.

1399
01:22:10,420 --> 01:22:19,580
 Наш дружеский соседний сервис Responsys недавно проинтегрировался с нашим же дружеским сервисом Monu,

1400
01:22:19,580 --> 01:22:32,800
 и глобально ребята поддержали такой вот паттерн observability в рамках как раз ассистентов,

1401
01:22:33,060 --> 01:23:03,040
 в рамках текстовых моделей соответственно там гораздо больше информации появляется что происходило в рамках вот именно общения вот мы активно в эту сторону тоже смотрим вопрос это Евгения настройки проекта в UI сохраняются в гид, ты ответишь или нет ну давай да они скорее существуют немножко в разных историях у нас есть какая-то вот преемственность

1402
01:23:03,060 --> 01:23:33,040
 да там история изменений промтов но при этом это не не гид репозиторий и в целом это два немножко таких вот разных мира один это редактирование через веб-интерфейс оно скорее решает задачу получения актуальной актуального слепка сейчас а работа с гидом хранение исходников это ближе к классической разработке

1403
01:23:33,040 --> 01:24:03,020
 ну и соответственно история версий в этом смысле у нас они немножко разделены вопрос от артема на конфе айту бизнес дали послушать новые голоса а это то что мы говорили которые должны появиться осенью все так это будут новые более умные реал-тайм модели обновиться только озвучивание у нас будут и более умные реал-тайм модели и обновиться озвучка в целом у нас как мы говорили ранее и говорила ранее под капотом реал-тайма каскад моделей но будут их

1404
01:24:03,020 --> 01:24:33,000
 по-прежнему три или больше и меньше как они будут комбинироваться мы будем экспериментировать и в любом случае голоса станут более живыми это осенью а модель реал-тайма поумнеют вопрос от Андрея есть ли возможность испринимать только голос того с кем был начат разговор изначально чтобы избежать включения в разговор перебивания этакая фильтрация по собеседнику ну то есть здесь идет речь про то что можем ли мы

1405
01:24:33,000 --> 01:25:02,560
 сделать своего рода такую биометрию и слушать только того собеседника с которым исходно начали разговор ну таких планов пока нет мы всячески работаем над обработкой мы думаем над тем как фильтровать разные шумы условно говоря звуки там телевизора и так далее то что может клиниться в разговоры или там разговаривать условно с банком а кто-то там сзади орёт там духовку выключить там все сгорело чтобы это

1406
01:25:02,980 --> 01:25:10,840
 никак не аффектила модель над механиками думаем но вот именно в таком ключе скорее нет вот постараемся как бы задача

1407
01:25:10,840 --> 01:25:19,180
 понятно чтобы не попадали лишние звуки не от целевого собеседника но решать ее будем постепенно как

1408
01:25:19,180 --> 01:25:27,520
 именно пока еще думаю вот у тебя есть какие-то комментарии по вопросу ну базово да тут всегда

1409
01:25:27,520 --> 01:25:34,720
 ищется какой-то баланс вы можете на самом деле и на себе понять когда разговариваешь с

1410
01:25:34,720 --> 01:25:41,620
 собеседником который находится в какой-то шумной среде иногда можно соответственно даже

1411
01:25:41,620 --> 01:25:48,100
 не понять правда ли это собеседник произнес какую-то фразу или нет там сильно очень много

1412
01:25:48,100 --> 01:25:54,880
 зависит от контекста мы правда смотрим на то как улучшить распознавание в таких шумных

1413
01:25:54,880 --> 01:26:03,940
 средах но при этом какого-то эталонного в общем классической серебряной пули в этом смысле нет вот

1414
01:26:03,940 --> 01:26:15,340
 мы тут работаем над тем чтобы это качество непременно росло так вопроса дмитрия можно ли

1415
01:26:15,340 --> 01:26:20,120
 реализовать такой сценарий пользователь просит что-то сделать проговаривать сложно для распознавания

1416
01:26:20,120 --> 01:26:24,560
 слова агент просит уточнить что сказал человек либо показывает текст расшифровки чтобы человек

1417
01:26:24,560 --> 01:26:30,060
 мог провалидировать и найти ошибки справить и отправить дальше уже провалидированный текст да вполне

1418
01:26:30,060 --> 01:26:36,800
 себе возможная история то есть realtime базе свою распознает а что с этим текстом дальше делать решает

1419
01:26:36,800 --> 01:26:41,420
 модель она может буквально показать его в неизменном виде или даже предложить какие-то

1420
01:26:41,420 --> 01:26:52,400
 корректировки глобально протокол вообще realtime предусматривает вот и вывод как голосовой так и

1421
01:26:52,400 --> 01:27:00,120
 текстовый и он активно использовался в наших презентациях вот те текстовки которые

1422
01:27:00,120 --> 01:27:07,460
 соответственно распознаны были на голосовом вводе и отправлены на синтез мы отображали на

1423
01:27:07,460 --> 01:27:16,100
 экране то есть они дублируют голосовой вывод нашего сервиса поэтому в целом вот это вот

1424
01:27:16,100 --> 01:27:22,580
 решение оно чуть-чуть сложновато интерфейсно решить потому что тебе нужно сразу и голосовой

1425
01:27:22,580 --> 01:27:31,040
 канал как-то решать и соответственно визуально поверхность иметь для отображения текста но идея

1426
01:27:31,040 --> 01:27:40,280
 вполне конструируемая и решаемая и так завершающий видимо вопрос вопрос от олега можно ли ограничить

1427
01:27:40,280 --> 01:27:47,480
 вопсёч для голосовых агентов только по доменам ru или rf но сейчас в рамках api такое сделать

1428
01:27:47,480 --> 01:27:56,120
 нельзя можно ли сделать принципе ну давайте мы возьмем как домашку на подумать то есть глобально

1429
01:27:56,120 --> 01:28:04,400
 у нас есть возможность ограничения конкретного домена чтобы искать на конкретном каком-то сайте

1430
01:28:04,400 --> 01:28:15,380
 мы давай возьмем в проработку запрос на видимо топ-level domain можно ли вот так фильтровать на этом

1431
01:28:15,380 --> 01:28:21,860
 все вопросы закончились и у нас есть еще такое небольшое объявление у нас есть ежегодная

1432
01:28:21,860 --> 01:28:29,660
 конференция scale она проходит в сентябре актуальные даты можно будет посмотреть на сайте и в рамках

1433
01:28:29,660 --> 01:28:37,580
 ее проходит называемый челлендж вы можете приходить со своими идеями по реализации всякого рода и

1434
01:28:37,580 --> 01:28:45,860
 проектов присылайте их к нам и лучшие идеи получат как гранты так и помощь в реализации а финалистов

1435
01:28:45,860 --> 01:28:51,440
 мы увидим и наградим на скиле подробности можно посмотреть на сайте а и студия вот пользуясь

1436
01:28:51,440 --> 01:28:57,740
 случаем прорекламирую эту нашу активность классные возможности себя показать и других посмотреть да

1437
01:28:57,740 --> 01:29:06,300
 спасибо нам очень понравился наш сегодняшний вебинар спасибо вам за вопросы будем рады видеть вас снова до новых встреч пока

1438
01:29:27,740 --> 01:29:29,740
 и

1439
01:29:57,740 --> 01:29:59,740
 и

