1
00:00:00,000 --> 00:00:25,140
 Друзья, добрый день! Рады приветствовать вас на нашем сегодняшнем заключительном вебинаре нашей AI Studio

2
00:00:25,140 --> 00:00:30,420
 Series. У нас сегодня суперинтересная тема, как создавать мультиагентные системы для

3
00:00:30,420 --> 00:00:37,000
 end-to-end автоматизации процессов. Сегодня с вами я, Женя Барановский и Даня. Даня,

4
00:00:37,060 --> 00:00:41,380
 представься, пожалуйста. Привет, Женя, привет, зрители. Я разработчик Яндекс.Клауд,

5
00:00:41,460 --> 00:00:45,600
 собственно, я разрабатываю сервис Workflows. Во, по всем вопросам, связанных с Workflows,

6
00:00:45,940 --> 00:00:50,760
 мы теперь знаем, к кому идти и спрашивать. Верно. Окей. Давайте тогда определимся,

7
00:00:50,760 --> 00:00:56,520
 о чем мы сегодня поговорим. В части основной программы у нас первая, это небольшая вводная

8
00:00:56,520 --> 00:01:01,020
 и экскурс, да, Дань, что такое Workflows, как он создавался и почему он сейчас существует,

9
00:01:01,100 --> 00:01:06,240
 для каких сценариев. Дальше мы с вами посмотрим на создание линейных мультиагентных пайплайнов,

10
00:01:06,320 --> 00:01:11,360
 то, что мы называем, ну, простыми какими-то сценариями для Workflows, да. Дальше в следующем

11
00:01:11,360 --> 00:01:16,660
 шагу у нас будет сложная бизнес-логика, когда необходимы какие-то там ветвления и прочее,

12
00:01:16,660 --> 00:01:45,020
 и прочее, прочее. После этого мы с вами углубимся в то, что называется сочетание агентов и какого-то кодового подхода, да, в рамках этих мультиагентских сценариев, и на закуску оставим вот, собственно, point, который называется Workflows как MCP для агента. Мне кажется, это очень интересная история, которая будет полезна для понимания в целом, как это все работает. Едем дальше? Да. Давай тогда про краткую историю, Дань, потому что ты, как никто, владеешь этой информацией.

13
00:01:45,420 --> 00:02:14,180
 Верно. Собственно, у нас изначально сервис Workflows, он создавался как инструмент для автоматизации процессов для девопсов и разработчиков. То есть мы в целом предполагали, что у нас пользователи будут использовать такие механизмы, как ретрали, таймауты, и в целом предполагали, что пользователи будут писать какие-то GQ-скрипты для передачи контекста из кубика в кубик. Но мы на самом деле, в самом начале понимали, что у нас будет

14
00:02:14,180 --> 00:02:21,980
 вектор развития на low-code в сторону low-cod'изации workflows, и мы сейчас это усиленно делаем с акцентом на

15
00:02:21,980 --> 00:02:29,760
 пользовательский интерфейс, но при этом мы сохраняем старую гибкость и расширяемость, которую мы закладывали в самом начале.

16
00:02:30,140 --> 00:02:34,960
 Да, я правильно понимаю, что ключевой пользователь был DevOps-инженер, ну или какой-то технический специалист,

17
00:02:34,960 --> 00:02:42,820
 который мог бы это использовать. Окей, да, собственно говоря, теперь к сегодняшнему времени, сейчас workflows — это часть Яндекса iStudio.

18
00:02:42,940 --> 00:02:56,460
 Собственно говоря, поэтому, как Даня и сказал, что у нас есть трек большой на упрощение этого интерфейса для того, чтобы в нем могли работать, ну, фактически, бизнес-пользователи, которые с помощью простых понятных шагов будут достигать своего результата.

19
00:02:56,960 --> 00:03:05,760
 Вот, здесь что важно отметить, workflows — это конструктор для автоматизации рутинных бизнес-процессов с помощью агентских пайплайнов, сценариев и всего остального.

20
00:03:05,760 --> 00:03:14,040
 Здесь не меняется в целом позиционирование, просто добавляется именно мультиагентная составляющая для ваших бизнес-процессов, для их автоматизации.

21
00:03:14,040 --> 00:03:29,600
 Мы здесь не рекомендуем строить каких-то чат-ботных сценариев или что-то около того, мы говорим про end-to-end автоматизацию процесса, когда у вас есть что-то на вход, дальше есть набор каких-то шагов, которые необходимо выполнить, в том числе и с AI-агентами, и дальше есть что-то на выход.

22
00:03:29,740 --> 00:03:32,160
 Все, процесс завершился, пайплайн закончился.

23
00:03:33,380 --> 00:03:47,400
 Тогда едем дальше про автоматизацию линейных процессов, то, что мы, собственно, в самом начале назвали легким простым сценарием, когда есть какой-то, ну, заранее, наверное, понятный флоу для того, чтобы это нужно было реализовать.

24
00:03:47,800 --> 00:03:50,560
 Из чего состоит тот самый простой линейный сценарий.

25
00:03:51,060 --> 00:03:53,260
 В первую очередь у нас существуют триггеры, да, Витя?

26
00:03:54,160 --> 00:03:55,080
 Они запускают workflow.

27
00:03:55,360 --> 00:03:57,100
 Они помогают нам запускать workflow.

28
00:03:57,100 --> 00:04:05,820
 Те, кто работали с BPMN-нотациями, прекрасно представляют, что там есть как раз flow, есть триггерка, входящая в действие, чтобы этот процесс начинал работу.

29
00:04:06,600 --> 00:04:15,280
 Так как мы говорим в рамках этого вебинара про мультиагентные сценарии, то у нас существуют интерграционные шаги, которые называются агент Яндекс.ИАИ Студио.

30
00:04:16,100 --> 00:04:21,340
 Вот. Ну и еще у нас есть, наверное, суперважный компонент, который позволяет связать все это между собой, да?

31
00:04:21,340 --> 00:04:23,300
 Это называется саджест.

32
00:04:24,020 --> 00:04:24,300
 Ага.

33
00:04:24,860 --> 00:04:26,120
 Давай тогда сюда.

34
00:04:27,080 --> 00:04:29,040
 Из чего состоит тот самый простой сценарий.

35
00:04:29,180 --> 00:04:32,920
 Вот. Первый триггер, про который мы говорили, есть у нас триггер Telegram.

36
00:04:33,000 --> 00:04:34,260
 Здесь вроде все очевидно, да?

37
00:04:34,340 --> 00:04:37,780
 Есть какое-то сообщение, которое начинает запускать наш workflow.

38
00:04:37,980 --> 00:04:42,320
 При этом этот workflow имеет контекст того, что пришло в этом сообщении.

39
00:04:42,460 --> 00:04:46,420
 Ну, фактически какой-то входящий контекст для агента.

40
00:04:47,500 --> 00:04:50,540
 Следующий шаг, следующий триггер, который у нас есть, это вебхук.

41
00:04:50,740 --> 00:04:52,120
 Ну, здесь что-то интересное.

42
00:04:52,300 --> 00:04:53,840
 Дань, расскажись подробнее про него.

43
00:04:54,380 --> 00:04:59,860
 Да, вебхук — это скорее такой более обобщенный вебинар, обобщенный механизм.

44
00:05:01,260 --> 00:05:07,100
 Механика такая же, как у Телеграма, то есть если мы хотим интегрировать наш

45
00:05:07,100 --> 00:05:11,660
 workflow с какой-то внешней системой, мы говорим «workflow, дай нам публичный

46
00:05:11,660 --> 00:05:15,480
 вебхук», и мы берем этот вебхук и встраиваем во внешнюю систему,

47
00:05:16,140 --> 00:05:20,800
 чтобы она по возникновению какого-то события дернула этот

48
00:05:20,800 --> 00:05:25,760
 URL по HTTP и передала как раз какой-то контекст на

49
00:05:25,760 --> 00:05:27,900
 вход, а в «workflow» уже, собственно, сам разберется,

50
00:05:28,060 --> 00:05:28,400
 что делать.

51
00:05:28,520 --> 00:05:32,540
 То есть в системе генерируется событие, «workflow» запускается.

52
00:05:32,800 --> 00:05:35,380
 Я правильно понимаю, давай немножко упростим.

53
00:05:35,440 --> 00:05:38,800
 Вот у нас есть какая-то CRM, куда менеджер по продажам

54
00:05:38,800 --> 00:05:42,680
 ввел своего лида, клиента, кого угодно, и дальше вот

55
00:05:42,680 --> 00:05:45,200
 по этому событию, что этот клиент появился в этой

56
00:05:45,200 --> 00:05:47,280
 системе, может стартануть наш «workflow».

57
00:05:47,280 --> 00:05:51,280
 Да, если CRM поддерживает поход по HTTP.

58
00:05:51,280 --> 00:05:53,280
 Ну, это какой-то стандартный протокол.

59
00:05:53,280 --> 00:05:54,280
 Да, популярный.

60
00:05:54,280 --> 00:05:55,280
 Окей, да.

61
00:05:55,280 --> 00:05:57,280
 Следующий триггер, который есть, это триггер-таймер.

62
00:05:57,280 --> 00:05:59,360
 Ну, как будто бы здесь тоже в целом понятно, и он

63
00:05:59,360 --> 00:06:02,040
 сам за себя говорит, но достаточно часто встречаются

64
00:06:02,040 --> 00:06:06,000
 сценарии у наших клиентов, когда они ставят запуск

65
00:06:06,000 --> 00:06:08,440
 какого-то исследования с помощью мультиагентского

66
00:06:08,440 --> 00:06:10,680
 сценария по расписанию, чтобы он там каждую неделю

67
00:06:10,680 --> 00:06:13,900
 прислал какие-то новости на почту, ну, либо в какой-то

68
00:06:13,900 --> 00:06:17,620
 другой канал, который для этого существует.

69
00:06:17,620 --> 00:06:20,720
 Про кубик-агент Яндекса iStudio, мне кажется, мы достаточно

70
00:06:20,720 --> 00:06:23,560
 часто на разных вебинарах об этом говорим, ну и в интерфейсе

71
00:06:23,560 --> 00:06:26,100
 вы это можете увидеть, попробовать в рамках Agent

72
00:06:26,100 --> 00:06:28,620
 Atelier, который существует у нас интерфейс для создания

73
00:06:28,620 --> 00:06:29,620
 этих агентов.

74
00:06:29,620 --> 00:06:32,700
 Здесь на чем хочется сконцентрировать свое внимание, опять же,

75
00:06:32,700 --> 00:06:35,380
 это умный кубик, который позволяет сконфигурировать

76
00:06:35,380 --> 00:06:38,360
 вам какую-то модель, какой-то системный пром, как она

77
00:06:38,360 --> 00:06:41,160
 должна работать, и подключить в рамках этого кубика набор

78
00:06:41,160 --> 00:06:44,160
 инструментов, которые есть в рамках Яндекса и Студио.

79
00:06:44,160 --> 00:06:45,160
 Да, Юльдан?

80
00:06:45,160 --> 00:06:46,160
 Верно.

81
00:06:46,160 --> 00:06:48,160
 Еще могу тут подсветить про я агента.

82
00:06:48,160 --> 00:06:51,160
 У него можно выставить выходную схему данных.

83
00:06:51,160 --> 00:06:52,160
 Там есть три варианта.

84
00:06:52,160 --> 00:06:53,160
 Первое – текстовое.

85
00:06:53,160 --> 00:06:56,160
 Это значит, что мы, по сути, ограничения не накладываем.

86
00:06:56,160 --> 00:06:59,500
 Можем выбрать JSON, тогда агент ответит в формате

87
00:06:59,500 --> 00:07:02,160
 JSON обязательно, но мы не знаем, с какой структурой.

88
00:07:02,160 --> 00:07:05,740
 Или прям там strict.json-схема, когда мы можем прям детально

89
00:07:05,740 --> 00:07:10,640
 описать все поля, типы этих полей, и агент ответит

90
00:07:10,640 --> 00:07:14,440
 нам ровно в этом формате, и это нам поможет в будущем.

91
00:07:14,460 --> 00:07:15,200
 Ты расскажешь дальше.

92
00:07:15,320 --> 00:07:17,240
 Ну ладно, не будешь спойлерить.

93
00:07:18,280 --> 00:07:21,180
 Окей, да, следующий у нас компонент, про который

94
00:07:21,180 --> 00:07:24,380
 мы говорили, для связанности в рамках наших шагов, это

95
00:07:24,380 --> 00:07:25,240
 фактически Suggest.

96
00:07:25,680 --> 00:07:28,420
 Он реализован для того, чтобы бизнес-пользователям

97
00:07:28,420 --> 00:07:30,960
 было достаточно просто и понятно использовать

98
00:07:30,960 --> 00:07:35,600
 какие-то переменные, ну, несложные, я имею в виду,

99
00:07:35,680 --> 00:07:37,960
 без различных языков программирования и тому подобное, для

100
00:07:37,960 --> 00:07:40,340
 того, чтобы передавать контекст из одного кубика в другой.

101
00:07:40,620 --> 00:07:42,560
 Ну, и таким образом построить этот вот флоу.

102
00:07:43,460 --> 00:07:44,520
 Есть что добавить к тебе?

103
00:07:45,060 --> 00:07:48,380
 Да, я могу объяснить, что мы как раз выбирали GQ изначально

104
00:07:48,380 --> 00:07:51,200
 для того, чтобы иметь максимальную гибкость, чтобы максимально

105
00:07:51,200 --> 00:07:54,340
 детально можно было описать, как данные должны из одного

106
00:07:54,340 --> 00:07:55,600
 кубика перейти в другой.

107
00:07:56,280 --> 00:08:00,060
 Но, признаюсь честно, это было сложно даже для самих

108
00:08:00,060 --> 00:08:04,700
 разработчиков Workflows, поэтому мы особое внимание

109
00:08:04,700 --> 00:08:06,400
 уделяли упрощению этого места.

110
00:08:07,860 --> 00:08:11,580
 Простили мы сейчас это с помощью UI, то есть под капотом

111
00:08:11,580 --> 00:08:14,240
 саджисты на самом деле просто точно так же пишут

112
00:08:14,240 --> 00:08:16,780
 GQ выражение, оно исполняется точно так же, просто мы

113
00:08:16,780 --> 00:08:19,440
 на UI генерируем его правильным образом.

114
00:08:19,560 --> 00:08:22,440
 На самом деле там 90% кейсов, когда используется

115
00:08:22,440 --> 00:08:24,640
 GQ, это просто правильно переложить JSON из одного места

116
00:08:24,640 --> 00:08:27,320
 в другое, когда надо обратиться к какому-то, может быть,

117
00:08:27,360 --> 00:08:28,180
 вложенному полю.

118
00:08:28,720 --> 00:08:31,900
 И вот, собственно, кликаем на саджист, выбираем там

119
00:08:31,900 --> 00:08:35,940
 нужное поле, может быть, с учетом вложенных, и готово.

120
00:08:35,940 --> 00:08:40,040
 У нас генерируется правильное GQ выражение, которое будет дальше работать.

121
00:08:40,160 --> 00:08:42,320
 Я правильно слышу, что, ну, условно, для бизнес-пользователей

122
00:08:42,320 --> 00:08:45,700
 у нас есть саджист, который позволяет накликать то же самое GQ выражение,

123
00:08:45,760 --> 00:08:48,880
 но если я технический специалист, то я фактически могу сам написать

124
00:08:48,880 --> 00:08:51,560
 GQ выражение, если нужно расширить каким-то образом логику,

125
00:08:51,820 --> 00:08:52,540
 и это исполнится.

126
00:08:52,920 --> 00:08:55,580
 Да, верно, упрощение, оно просто помогает написать

127
00:08:55,580 --> 00:08:59,960
 GQ автоматически, но если вы и так знаете, что такое GQ,

128
00:09:00,040 --> 00:09:03,200
 как его писать, то да, конечно, можно его написать вручную.

129
00:09:03,200 --> 00:09:04,760
 Скипнуть этот саджист и написать самому.

130
00:09:05,280 --> 00:09:15,060
 Да, на самом деле у нас с следующим слайдом есть демо конструирования того самого суперпростого пайплайна из нескольких агентов.

131
00:09:15,520 --> 00:09:20,520
 У нас есть запуск по расписанию, здесь почти все рабочие дни.

132
00:09:20,700 --> 00:09:25,980
 Дальше у нас есть возможность вставить агенты, которые будут заниматься исследованием,

133
00:09:25,980 --> 00:09:33,860
 то есть поиск в интернете информации на заданную тему, которую вы конфигурируете как текстовое сообщение.

134
00:09:34,000 --> 00:09:38,760
 При этом, я отмечу еще раз, когда мы создавали этого агента, здесь важно подключить ему тул веб-сердж,

135
00:09:38,760 --> 00:09:42,280
 для того, чтобы он имел доступ во внешний мир.

136
00:09:43,760 --> 00:09:48,700
 После того, как мы сконфигурировали, добавили этот кубик, дали ему какое-то задание,

137
00:09:49,480 --> 00:09:55,540
 мы следующим шагом хотим добавить еще одного агента, который будет заниматься версткой того самого исследования

138
00:09:55,540 --> 00:09:57,360
 в том формате, который нам нужен.

139
00:09:57,360 --> 00:10:02,720
 Ну и, соответственно, здесь достаточно простой пример, когда из предыдущего шага мы выбираем suggest

140
00:10:02,720 --> 00:10:13,160
 в виде результ, общий ответ этого агента, ну и дальше наш второй агент, который писатель будет на основании этого результата подготавливать какую-то статью.

141
00:10:13,160 --> 00:10:32,000
 Да, здесь не хватает как будто бы следующего шага, ну он как будто бы зависит от пользователя, куда эту информацию хочется передать, да, условно отправить там в Telegram, положить в какое-то хранилище, не знаю, там в Яндекс.Диске, например, да, создать файлик, почему бы и нет, да, ну либо там на почту отправить какую-то верстку в формате HTML.

142
00:10:32,000 --> 00:10:59,000
 Так, здесь, мне кажется, хорошо, едем дальше. Про сценарии со сложной бизнес-логикой, ну у нас и название. Давай, наверное, немножко поговорим про проблемы, которые существуют в рамках работы мультиагентских систем. Разведи нам, пожалуйста, вот есть два термина, есть детерминированный пайплайн, есть недетерминированный. В чем сущность этого слова, зачем мы его вообще вводим, почему мы говорим об этом в контексте workflow?

143
00:10:59,280 --> 00:11:09,900
 Да, у нас в AI-агентах, которые можно накликать в Agent Atelier, у нас там, естественно, в центре стоит LLM, и она чаще всего с температурой выше нуля.

144
00:11:09,900 --> 00:11:16,740
 Это значит, что даже один тот же вопрос LLM, то есть агент может отвечать немного по-разному.

145
00:11:17,140 --> 00:11:26,560
 И вот это как раз вероятностное исполнение, такое недетерминированное, иногда может мешать, если нам, например, нужно выполнить какой-то пайплайн

146
00:11:26,560 --> 00:11:31,620
 со строгой структурой, с определенным порядком, нам нужен какой-то оркестратор, и вот как раз

147
00:11:31,620 --> 00:11:37,560
 Workflow сможет быть таким оркестратором, то есть с локализованными, недетерминированными шагами

148
00:11:37,560 --> 00:11:43,180
 у нас, в общем и целом, Workflow оркестрируется со строгой структурой.

149
00:11:43,260 --> 00:11:49,800
 То есть Workflow нам, по сути, помогает этот пайплайн как-то стандартизировать, да, и с его работой…

150
00:11:49,800 --> 00:11:52,560
 Да, задать рамки структуры выполнения.

151
00:11:53,560 --> 00:11:57,500
 Окей, ну то есть это нам фактически дает какую-то воспроизводимость сценария,

152
00:11:57,620 --> 00:12:02,240
 который мы можем из раза в раз получать примерно одинакового характера, ну результат, правильно?

153
00:12:02,760 --> 00:12:06,520
 Да, что нам, собственно говоря, в рамках инструмента Workflow позволяет это делать, можешь рассказать?

154
00:12:07,040 --> 00:12:12,560
 Да, значит, воспроизводимость опирается, в первую очередь, конечно, на управляющие шаги.

155
00:12:13,140 --> 00:12:19,500
 Это шаги, которые как раз определяют, в каком порядке нужно выполнять действия внутри Workflows.

156
00:12:19,500 --> 00:12:25,400
 И это на самом деле является как бы таким отражением того, что мы знаем об Control Flow в языках программирования.

157
00:12:25,520 --> 00:12:31,600
 То есть у нас там есть и Fails, For Loop, While, и очень схожие конструкции, у нас есть и Workflows.

158
00:12:31,760 --> 00:12:36,440
 То есть мы тоже можем с помощью них определять порядок выполнения действий Workflows.

159
00:12:36,660 --> 00:12:42,140
 Ты в следующий раз, когда будешь так показывать, можно рэп наложить на тебя, чтобы было органично это выглядело.

160
00:12:42,140 --> 00:12:42,680
 Про Workflows.

161
00:12:42,680 --> 00:12:43,820
 Про Workflows, да.

162
00:12:44,440 --> 00:12:48,980
 Расскажи, пожалуйста, про режим отладки. Это же тоже фактически что-то про воспроизводимость сценария.

163
00:12:49,380 --> 00:13:02,060
 Да, это в целом инструмент, когда мы можем, во-первых, локализовать какую-то проблему или просто детально посмотреть на какой-то кубик, посмотреть, а правильно он работает, если мы ему, например, передаем какой-нибудь input.

164
00:13:03,220 --> 00:13:10,060
 Окей. Наверное, мы сейчас подробнее, да, посмотрим про управляющие шаги. Давай тогда с этого демо начнем.

165
00:13:10,060 --> 00:13:32,780
 Давайте посмотрим детально на управляющий шаг Switch. Такая конструкция есть в языках программирования, и у нас она тоже устроена, например, схожим образом. В Switch есть набор веток, и на каждой ветке есть условия. И, в общем, мы просто по порядку смотрим, а истинно ли это условие. И вот первое условие, которое выполнилось, оно и передает управление ветке дальше.

166
00:13:32,780 --> 00:13:53,760
 То есть мы просто хотим в зависимости от чего-то передать управление в разные шаги в workflow, чтобы просто сделать разные действия. На нашем кейсе, который у нас на экране, у нас есть AI-агент, который берет текст и смотрит на его тональность, эмоциональность с разными вердиктами. Негативная, позитивная, нейтральная.

167
00:13:54,860 --> 00:14:04,120
 И как раз в зависимости от того, что нам там пришло, switch разносит управление на разные части. Давайте посмотрим, как это у нас выглядит в интерфейсе.

168
00:14:05,040 --> 00:14:12,940
 Вот у нас есть, собственно, switch, вот у нас есть вердикт негативный, нейтральный, и хотим добавить третью ветку, позитивную.

169
00:14:12,940 --> 00:14:20,420
 Вот как раз берем наш suggest, смотрим на поле вердикт, который нам прислал до этого AI-агент, и смотрим, а равно ли оно значению позитивно.

170
00:14:20,620 --> 00:14:28,860
 И если равно, тогда у нас вот есть ветка, которая будет исполняться в этом случае, мы туда добавляем какой-нибудь следующий шаг, вот, например, AI-агента.

171
00:14:29,660 --> 00:14:45,900
 Слушай, правильно ли я здесь понимаю, что это, например, кейс какого-нибудь сайта по сбору отзывов, и условно, если попало сообщение, и агент определял на него тональность, то мы по разным веткам можем положить, типа, вот здесь ругаются, здесь не ругаются, и разные спам, или что-нибудь, что там разные классификации могут быть.

172
00:14:45,900 --> 00:14:53,940
 — Ага, понятно. Хорошо. А еще напомни, пожалуйста, про вердикт. Я правильно же понимаю, что это какая-то строгая заданная схема для агента?

173
00:14:54,500 --> 00:15:12,360
 — Верно, да. Это хорошее напоминание. Я у этого AI-агента как раз выставил strict JSON-схему и сказал ему, что ответ нужно вернуть в формате, когда у нас есть поле вердикт текстового, и как раз оно может принимать значение там positive, neutral и negative, чтобы потом сравнить.

174
00:15:12,360 --> 00:15:16,980
 И это ты сделал в интерфейсе iStudio, когда конфигурировал агента в расширенных параметрах.

175
00:15:17,580 --> 00:15:23,800
 Окей, хорошо, давай тогда пойдем дальше, поговорим про режим отладки, немножко детальнее его посмотрим.

176
00:15:24,200 --> 00:15:26,060
 Да, давайте посмотрим, как это выглядит в интерфейсе.

177
00:15:26,500 --> 00:15:33,320
 Как я уже говорил, с помощью режима отладки можно посмотреть более детально на какой-то кубик.

178
00:15:33,320 --> 00:15:39,820
 Это особенно полезно, если у вас, например, есть большой workflow, и вы не хотите ждать весь префикс исполнения.

179
00:15:40,020 --> 00:15:42,240
 Вам нужно только этот кубик посмотреть.

180
00:15:42,500 --> 00:15:44,320
 Может быть, там подозрение, что что-то не так.

181
00:15:46,520 --> 00:15:49,600
 Очень хорошо, мы берем в режиме дебага, запускаем ровно с этого кубика,

182
00:15:49,820 --> 00:15:55,440
 поставляем наш input, который нас интересует, и смотрим, правильно ли там что-то выдается.

183
00:15:55,540 --> 00:15:59,300
 А потом у нас есть такие же возможности, как в целом мы привыкли в дебаге.

184
00:15:59,300 --> 00:16:05,240
 Можно сделать следующий шаг или сделать общий континью, чтобы workflows исполнился до конца.

185
00:16:05,960 --> 00:16:11,200
 У нас тут кейс, где есть три агента, как раз они, каждый выполняется примерно по минуте, и мы не хотим ждать.

186
00:16:12,060 --> 00:16:14,380
 У нас есть Researcher, Analyzer и Samarizer.

187
00:16:15,480 --> 00:16:18,800
 Хотим посмотреть на то, как работает Analyzer.

188
00:16:18,880 --> 00:16:22,280
 Давайте посмотрим, как это выглядит в интерфейсе.

189
00:16:22,360 --> 00:16:25,480
 Вот у нас три агента, Researcher, Analyzer, Samarizer.

190
00:16:25,480 --> 00:16:30,260
 Мы знаем, что Analyzer принимает список топиков, которые мы хотим посмотреть.

191
00:16:30,600 --> 00:16:34,780
 Вот переходим в режим дебага, тыкаем на наш агент Analyzer,

192
00:16:35,380 --> 00:16:39,100
 передаем ему какие-то топики, которые мы хотим пресерчить.

193
00:16:39,320 --> 00:16:41,020
 Вот, начинаем дебаг.

194
00:16:41,520 --> 00:16:45,100
 Видно, что у нас кубик сейчас, он как бы на паузе,

195
00:16:45,280 --> 00:16:49,980
 и чтобы он начал уже прямо исполняться, нужно нажать кнопочку «Следующий шаг».

196
00:16:49,980 --> 00:16:53,660
 Вот сейчас он уже прямо исполняется, агент пошел что-то делать.

197
00:16:55,200 --> 00:16:58,200
 Да, синий цвет нам подсказывает, что кубик еще не выполнился,

198
00:16:58,480 --> 00:17:00,420
 он в процессе выполнения.

199
00:17:00,900 --> 00:17:03,680
 Когда выполнится, он станет зеленым, и мы можем как раз,

200
00:17:03,800 --> 00:17:06,280
 во-первых, увидеть этот момент, во-вторых,

201
00:17:06,700 --> 00:17:08,380
 ткнуть на него и посмотреть на аутпут,

202
00:17:08,680 --> 00:17:12,680
 и в целом посмотреть, а все ли у нас тут, как мы ожидаем.

203
00:17:13,040 --> 00:17:15,580
 То есть, релевантен ли выдача этого ответа тому,

204
00:17:15,740 --> 00:17:17,460
 что мы дальше планируем в наших...

205
00:17:17,460 --> 00:17:18,460
 Правильный ли там аутпут.

206
00:17:18,560 --> 00:17:20,960
 И если неправильный, например, мы знаем, что здесь проблема,

207
00:17:20,960 --> 00:17:23,680
 может, надо что-то менять, или, если у нас все хорошо,

208
00:17:23,820 --> 00:17:26,260
 просто останавливать режим дебага, все.

209
00:17:26,480 --> 00:17:27,100
 И в продакшн.

210
00:17:27,220 --> 00:17:27,500
 Хорошо.

211
00:17:28,420 --> 00:17:29,460
 Хоп-хоп и в продакшн.

212
00:17:30,040 --> 00:17:30,440
 Окей.

213
00:17:30,740 --> 00:17:39,160
 Так, тогда у нас есть интересная демка, которую мы показывали не так давно в рамках нашего вебинара тоже.

214
00:17:39,440 --> 00:17:45,200
 И здесь, что хочется отметить, это фактически такое достаточно продакшн-рэди решение для того,

215
00:17:45,320 --> 00:17:49,340
 чтобы можно было подготовить какой-то продуктовый артефакт,

216
00:17:49,340 --> 00:17:54,440
 который будет создан из абсолютно разного количества агентов, достаточно большого,

217
00:17:54,820 --> 00:17:58,220
 и каждый этот агент какую-то свою очевидную роль выполняет.

218
00:17:58,920 --> 00:18:04,120
 В интерфейсе вы его сейчас увидели, но фактически вот как раз у нас здесь есть демонстрация того,

219
00:18:04,560 --> 00:18:09,120
 как работает не только управляющий шаг свитч, но как еще работает управляющий шаг параллел.

220
00:18:09,560 --> 00:18:14,920
 Фактически, как вы можете по своему опыту понимать, агенты могут иметь долгий цикл работы.

221
00:18:14,920 --> 00:18:20,300
 Для того, чтобы нам не ждать какого-то агента и вот этот строго структурированный пайплайн выполнять,

222
00:18:20,380 --> 00:18:25,640
 мы можем некоторые агенты, которые разделены друг от друга, я сейчас тоже пошел, вот этот вот заразил меня,

223
00:18:26,000 --> 00:18:31,620
 да, выполнять параллельно, что фактически нам ускоряет процесс работы этого пайплайна,

224
00:18:31,620 --> 00:18:39,260
 ну и, конечно же, имеет дополнительную ценность в части того, что вы можете примерно прогнозировать какое-то время этого запуска,

225
00:18:39,320 --> 00:18:43,240
 да, ведь если несколько раз запустил, примерно ты будешь понимать, сколько он будет отрабатывать.

226
00:18:43,620 --> 00:18:50,100
 Да, ну, по итогу вот этот мультиагентский пайплайн сгенерировал там документ, который положил файл в рамках AI-студия,

227
00:18:50,220 --> 00:18:55,060
 и с которым можно будет дальше уже каким-то образом работать и что-то делать, анализировать.

228
00:18:55,080 --> 00:19:24,160
 Так, следующий у нас слайд очень важный. На самом деле, workflow — это не только про агентский сценарий, хотя у нас в рамках нашего вебинара мы говорим про мультиагентные системы, но очень важно подсветить, что не всегда, абсолютно не всегда нужно использовать именно шаги, только состоящие из агентов, потому что у нас бывают задачи, где нужен, ну, понятный, предсказуемый исход, и там в целом вообще-то как будто бы не нужна языковая модель, да, например, дернуть какую-то опишку, сходить куда-нибудь посмотреть, получить какие-то данные, и в этом...

229
00:19:24,160 --> 00:19:33,000
 и в этом разном направлении. Вот, поэтому, собственно, у нас есть и шаги специальные, да, о которых ты сейчас расскажешь.

230
00:19:33,480 --> 00:19:46,100
 Верно. Собственно, мы обсуждали уже управляющие шаги, и они определяют порядок выполнения чего? Вот как раз интеграционных шагов, потому что именно они ходят во внешние системы и выполняют какие-то действия.

231
00:19:46,100 --> 00:20:05,400
 У нас Workflows изначально зарождался в контексте клауда, поэтому у нас уже есть изначально какой-то список интеграции с Яндекс.Облаком, то есть у нас есть запись чтения из S3, сходить в MQ, в IDS, положить сообщения, сходить в базу данных.

232
00:20:06,200 --> 00:20:26,380
 Также у нас недавно начали появляться AI-кубики, вызовы AI-агента, вызвать LLM, OCR, speech-to-text, но понятно, что это не все объемлющий список интеграций, которые вообще можно себе представить, и поэтому мы в самом начале еще закладывали некоторые инструменты для расширения.

233
00:20:26,380 --> 00:20:38,120
 Давайте посмотрим на них по очереди. Вот у нас, собственно, уже виден на экране первый возможный способ для расширения интеграции — это, собственно, просто HTTP-запрос.

234
00:20:39,460 --> 00:20:43,620
 Указываем URL, header, body и так далее, в общем, все, что мы привыкли видеть в HTTP.

235
00:20:43,620 --> 00:20:55,440
 Он выполняется, результат возвращается в workflow, можно ретравить, например, или хендлить ошибки на основании того, какой код ответа у HTTP.

236
00:20:56,380 --> 00:21:25,280
 Дальше расширение, как бы тоже близкое по духу, так сказать, к HTTP, это gRPC, можем сходить в gRPC сервер, если он поддерживает gRPC reflection, например, можем сходить в то же самое Яндекс.Облак, потому что вот у нас не ко всем сервисам пока есть нативные интеграции, а мы можем взять и вручную выставить endpoint, метод проставить использование сервиса на аккаунте workflows, и отлично, мы сходим, например, и вот как на этом примере,

237
00:21:25,540 --> 00:21:54,700
 по листам функций, у нас такого нативного кубика нет, а мы это возьмем и используем, и еще один кейс, наверное, самый интересный, это Cloud Functions, это кейс, когда вы хотите не просто сделать какой-нибудь один запрос, а может быть делать целую серию запросов, какую-нибудь интерактивную сессию запросов, или использовать ваш любимый пакет в языке программирования, или ваш любимый бинарник, например, ffimpeg, ну и давайте в целом посмотрим на

238
00:21:54,700 --> 00:22:23,860
 что вообще такое Cloud Functions. Это, в общем, отдельный сервис, когда вы можете взять и принести кусочек своей бизнес-лойки в Яндекс.Клауд и сделать из этого прям отдельный облачный ресурс. И мы прямо из коробки получаем инструменты observability, можем версионировать функцию, нам не нужно заниматься частью опса, которую мы можем сделать за вас. В контексте workflows это как раз как такая самая кастомная интеграция, вы можете

239
00:22:23,860 --> 00:22:37,580
 принести свою достаточно кастомную бизнес-логику. Можно писать на где-то 10 языков программирования, популярных мы поддерживаем, а если не поддерживаем, то есть еще сервис-контейнер, можно принести свою бизнес-логику в формате докер-файла.

240
00:22:37,580 --> 00:22:53,020
 Паскаль заработает. Паскаль можно через сервис-контейнер. Ну давайте посмотрим, как это выглядит в интерфейсе. Да, давайте рассмотрим функцию, которая обрезает видео и оставляет у нее только аудио.

241
00:22:53,020 --> 00:22:59,920
 Ну вот в интерфейсе выглядит следующим образом. Есть URL, есть какие-то настройки, там тайм-аут, количество памяти,

242
00:22:59,920 --> 00:23:09,060
 которое мы выделяем, рантайм. Вот есть даже logbox-секрет с каким-то токеном. Давайте посмотрим на код функции.

243
00:23:09,060 --> 00:23:22,180
 Ну видно по коду функции, что мы тут что-то скачиваем с пользованием, собственно, нашего токена из Яндекс.Форм. Ну мы скачиваем как раз видео. Потом после того,

244
00:23:22,180 --> 00:23:29,500
 мы скачиваем видео, отдельно под процессом запускаем как раз ffmpeg, убираем видео,

245
00:23:29,500 --> 00:23:35,380
 оставляем только аудио и записываем это дело на наш object storage. То есть вот такого как бы

246
00:23:35,380 --> 00:23:40,460
 нативного кубика у нас не было, а мы взяли его и сами написали, как бы расширили то, что мы можем.

247
00:23:40,460 --> 00:23:45,940
 Да. И вот можно посмотреть на логи того, как работают функции, только они в обратном порядке.

248
00:23:45,940 --> 00:23:51,340
 Короче, да, мы сначала записали, потом преобразовали, потом скачали.

249
00:23:51,340 --> 00:23:58,580
 Ну вот, тут видно: успешно отработала функция.

250
00:23:58,580 --> 00:24:05,180
 Ну и давайте посмотрим на какой-нибудь сложный кейс с использованием этой функции.

251
00:24:05,180 --> 00:24:13,500
 Кейс будет такой: мы берем видео, которое к нам прислал юзер через Яндекс.Формы.

252
00:24:13,500 --> 00:24:18,940
 Как раз Яндекс.Формы можно интегрировать с Workflows через Webhook.

253
00:24:18,940 --> 00:24:24,080
 Webhook присылает нам URL для скачивания видео.

254
00:24:24,080 --> 00:24:28,200
 Функция уже с этим разбирается, мы только что обсуждали, как это происходит.

255
00:24:28,200 --> 00:24:33,540
 Потом у нас есть аудио уже на нашем Object Storage.

256
00:24:33,540 --> 00:24:40,940
 Туда идет спичный текст, преобразует аудио в текст, более технический, развернутый.

257
00:24:40,940 --> 00:24:46,540
 Нам надо скорее саморизацию почитать, поэтому мы используем AI-агент для саморизации.

258
00:24:46,540 --> 00:24:51,940
 А потом, да, и выставим, кстати, у него схему, скажем, выдай нам title и description.

259
00:24:51,940 --> 00:24:55,740
 Description еще в формате HTML, чтобы мы могли отправить, например, куда-нибудь на почту.

260
00:24:55,740 --> 00:24:58,740
 И вот, собственно, потом куда-нибудь используем этот контент.

261
00:24:58,740 --> 00:25:05,340
 То есть, тут пример - это отправка через PostBox и запись в S3 просто для истории текста.

262
00:25:05,340 --> 00:25:08,740
 Давайте посмотрим, как это выглядит в интерфейсе.

263
00:25:08,740 --> 00:25:11,940
 Вот у нас как раз есть триггер випхук.

264
00:25:11,940 --> 00:25:14,140
 Нам Workflow сдает URL.

265
00:25:14,140 --> 00:25:17,140
 Мы его как раз должны вставить во внешнюю систему.

266
00:25:17,140 --> 00:25:19,140
 У нас внешняя система - это Яндекс.Форма.

267
00:25:19,140 --> 00:25:24,140
 То есть мы вставляем сюда URL, говорим: сделай пост-запрос с вот таким параметром.

268
00:25:24,140 --> 00:25:31,140
 Верни нам URL как раз, куда ты загрузишь видос юзера, который юзер, собственно, принес.

269
00:25:31,140 --> 00:25:32,140
 Вот.

270
00:25:32,140 --> 00:25:34,140
 Дальше это передается в Cloud функцию.

271
00:25:34,140 --> 00:25:37,140
 Она уже знает, как с этим разбираться.

272
00:25:37,140 --> 00:25:39,140
 Аудио она записывает в Object Storage.

273
00:25:39,140 --> 00:25:51,140
 Поэтому мы указываем, что speech-to-text нужно распознать речь на русском языке, взять с конкретного bucket и файл с конкретным именем, который как раз тоже выдает функции.

274
00:25:51,140 --> 00:25:56,140
 Потом этот более технически развернутый текст придется в AI-агента.

275
00:25:56,140 --> 00:26:13,140
 Мы как раз прокидываем все параметры, весь текст, который нам нужен, и агент нам выдает как раз благодаря схеме title, description и description в формате HTML, и мы как раз в postbox его и указываем.

276
00:26:13,140 --> 00:26:18,140
 Ну и потом просто для истории в object storage записываем.

277
00:26:18,140 --> 00:26:27,140
 Я взял, кстати, кейс, когда видео, где Женя рассказывает про интеграцию Яндекс.Агентов с OpenWeb.UI.

278
00:26:27,140 --> 00:26:29,140
 Да, я рекомендую всем посмотреть.

279
00:26:29,140 --> 00:26:37,140
 Вот как раз такое письмо получилось после суммаризации, то есть мы взяли видео, только аудиотекст, суммаризировали и вот отправили такое письмо.

280
00:26:37,140 --> 00:26:40,140
 Давайте посмотрим теперь на историю исполнения этого workflow.

281
00:26:40,140 --> 00:26:44,140
 Давайте посмотрим, что нам вообще прислала Яндекс.Формы.

282
00:26:44,140 --> 00:26:50,140
 Вот как раз мы видим тот самый видеоурл, с которого нам надо будет скачивать видео из Яндекс.Форм.

283
00:26:50,140 --> 00:26:56,140
 Собственно, дальше Cloud Functions скачивает это видео, записывает потом уже только аудио на S3.

284
00:26:56,140 --> 00:27:02,140
 Видим потом, как у нас speech-to-text выдало такую портянку технического текста.

285
00:27:02,140 --> 00:27:04,140
 Ну, как обычно бывает.

286
00:27:04,140 --> 00:27:08,140
 Есть разметка всякая с таймингами.

287
00:27:08,140 --> 00:27:18,140
 Агент уже выдает такой человекочистаемый текст и еще HTML сверху, чтобы письмо отправить.

288
00:27:18,140 --> 00:27:24,140
 Ну и потом просто видим, что у нас постбоксы, записи в Object Storage прошли успешно.

289
00:27:24,140 --> 00:27:25,140
 В общем, все хорошо.

290
00:27:25,140 --> 00:27:28,140
 Давай попробуем приземлить этот сценарий на какой-то бизнесовый.

291
00:27:28,140 --> 00:27:33,140
 Но в этом случае я так понимаю, что какой-то клиент-пользователь заполнил форму, указал туда какое-то видео,

292
00:27:33,140 --> 00:27:36,140
 и это видео уже разложилось на весь этот pipeline.

293
00:27:36,140 --> 00:27:43,140
 Я понимаю, что в рамках Яндекс.Форум можно будет собрать в рамках отдела закупок, логистики, сбор заявок, потребностей.

294
00:27:43,140 --> 00:27:48,140
 Дальше, когда эта форма заполняется, передать этот вход в контекст агенту,

295
00:27:48,140 --> 00:27:57,140
 у которого будет тул, который помогает в интернете, MCP, который помогает оценить компанию по риску его.

296
00:27:57,140 --> 00:28:02,140
 Соответственно, этот агент даст какой-то результат, и этот результат можно уже отправить в человек, принимающий решение.

297
00:28:02,140 --> 00:28:09,140
 Да, на спорте мы в целом достаточно гибкие, можно принимать… у меня, например, где-то только видео, но вообще там достаточно сложные…

298
00:28:09,140 --> 00:28:22,140
 Да, ну и я к тому, что дальше агент, либо мультиагентская система, она может уже это дело и соркестрировать, когда мы говорили про свитч, если это что-то там позитивное, то поощрение у нас негативное, соответственно, что-то другое.

299
00:28:22,140 --> 00:28:52,120
 Ну окей, хорошо, тогда едем дальше. Да, кажется, в хорошем темпе двигаемся. Следующий у нас блок, который называется Workflows как MCP Tool для агента. Вот, это на самом деле интересная история, почему? Потому что, а, небольшой дисклеймер, да, для того, чтобы мы говорили про этот сценарий, важно понимать, что в целом такое MCP, мы, кажется, уже тоже, да, упоминали это, но я призываю вас, если вы пропустили вот который вебинар у нас по QR-коду, автоматизация рутинных операций,

300
00:28:52,120 --> 00:29:01,040
 то есть задача с помощью агентов и MCP, посмотреть там достаточно подробно, мне кажется, раскрывалась вся суть того, что это за протокол и как он работает, чем он полезен.

301
00:29:01,720 --> 00:29:11,540
 Вот, давай посмотрим в контексте нашего вебинара, чем полезен в целом MCP для агента, у которого этот workflow обернут как этот протокол, как этот инструмент.

302
00:29:12,680 --> 00:29:22,100
 Да, я, наверное, такой банальный вопрос тебе задам, вообще зачем это нужно и чем это может быть полезно в рамках работы с агентами, ну и в рамках работы с агентами,

303
00:29:22,100 --> 00:29:52,080
 но мы уже говорили, что MCP у нас, то есть LM, это у нас источник недетерминированного исполнения, когда мы хотим выполнить что-то со строгой структурой, со строгим порядком, мы как раз это можем обернуть в workflows, и в MCP просто отдать это как тул, чтобы там агент не думал о том, в каком порядке нужно выполнять шаги, то есть просто говорю MCP, вызови вот этот workflow, он разберется, и все будет хорошо, и у него там,

304
00:29:52,080 --> 00:29:54,820
 там не будет протечки вот этих лишних деталей в контексте.

305
00:29:55,000 --> 00:30:01,760
 Это звучит так, что, например, я как человек, который общаюсь с агентом, условно, даю ему какую-то информацию,

306
00:30:01,920 --> 00:30:08,520
 ну, например, там, бриф по написанию статьи, нужно на эту тему написать статью, и вот какое-то еще подмножество дополнительных тем.

307
00:30:09,080 --> 00:30:16,460
 Дальше агент может взять это как входящие параметры для workflow, да, и запустить уже реально вот этот большой мультиагентский pipeline,

308
00:30:16,460 --> 00:30:23,640
 тогда фактически у нас вот этот агент, который коммуницирует с пользователем, не будет условно выполнять миллион вот этих действий,

309
00:30:23,720 --> 00:30:26,260
 они будут в рамках workflow детерминированно выполняться.

310
00:30:26,580 --> 00:30:32,220
 То есть это опять же про управляемость, наверное, да, и про какую-то предсказуемость работы агента.

311
00:30:32,440 --> 00:30:39,480
 Да, у нас есть небольшая демо тоже, как обернуть, собственно говоря, workflow в MCP,

312
00:30:39,480 --> 00:30:45,900
 есть у нас MCP-хаб, в нем есть замечательная вот эта функция, которая позволяет нам создать MCP из workflow.

313
00:30:46,100 --> 00:30:53,720
 Вот, мы здесь называем каким-то образом этот тул для агента, у нас сейчас создается этот MCP-сервер,

314
00:30:54,160 --> 00:30:57,100
 вот, после этого нам необходимо выполнить несколько действий.

315
00:30:57,240 --> 00:31:04,840
 Первое — это указать сервисный аккаут, от которого будет исполняться этот тул и создаваться workflow.

316
00:31:04,840 --> 00:31:08,920
 Здесь ты можешь пояснить, какие необходимые роли навесить на это?

317
00:31:09,880 --> 00:31:13,000
 Нужно, чтобы была роль workflows-executor.

318
00:31:13,680 --> 00:31:34,180
 Дальше мы указываем имя этого агента, и здесь нужно вставить достаточно понятную инструкцию для агента, что это за workflow, чтобы он понимал, в какой эпизод его нужно вызвать, во-первых, а во-вторых, чтобы он понимал, какие необходимы параметры принести, как входящий input в этот workflow.

319
00:31:34,180 --> 00:32:02,320
 Соответственно, вы здесь эти параметры тоже можете указать, как я показывал. Дальше, собственно говоря, у нас процесс оборачивания workflow вот этого детерминированного процесса в MCP закончен. Мы идем в наше агентское ателье, выбираем инструмент MCP и выбираем то название, которое мы только что указали. Проверяем, что у нас там approve на все действия есть, ну и фактически таким образом у нас закончена вот эта вот логика. Правда?

320
00:32:03,320 --> 00:32:28,280
 Да, давайте, наверное, будем подводить краткие итоги по сегодняшнему нашему вебинару. Первое, мы, когда говорим про мультиагентскую систему, мы говорим в части нашего инструмента Workflows. Здесь важно понимать, что это автоматизация, еще раз, end-to-end процессов, которые есть как раз эти умные агенты. Мы говорим про какие-то, собственно, где есть вход, выход, между ними что-то существует.

321
00:32:32,460 --> 00:33:01,600
 Все тривиально и просто. Если у нас есть простая логика, простой пайплайн, то он как будто бы линейный, не нужно нам использовать никаких ветвей, никаких клауд-функций, ничего, в общем-то, сложного, да? Но наш инструмент Workflow, опять же, он достаточно сильно расширяемый, в части того, что и говорил. Ну, конечно, какую-то фантастику там рассказывал. Надеюсь, наши зрители поняли, потому что для меня было тяжело осознать это, но ладно. Дальше. Что еще здесь важно добавить? Что агенты, они существуют не вместо

322
00:33:01,600 --> 00:33:07,240
 процесса, а внутри него. Опять же, про то, что мы с вами достаточно много проговаривали. Если нужна

323
00:33:07,240 --> 00:33:14,840
 детерминированная логика, то, пожалуйста, ее структурируйте и настраивайте. Так, кажется,

324
00:33:14,840 --> 00:33:21,400
 по основной части мы прошлись. Да, спасибо вам большое за внимание. Спасибо. Да, давайте, у нас есть

325
00:33:21,400 --> 00:33:30,100
 небольшая вот такая просьба к вам пройти тест для закрепления знаний. Мы оставим здесь QR-код, его, собственно,

326
00:33:30,740 --> 00:33:36,620
 будем убирать. У нас есть вопросы, на которые мы в целом видим их. Да, мы их видим, можем на них

327
00:33:36,620 --> 00:33:41,560
 поотвечать. Есть у нас первый вопрос от Дмитрия. У него есть цепочка агентов. Workflow,

328
00:33:42,360 --> 00:33:47,320
 сорсер информации, исследователь, валидатор итогового результата. Это вполне мультиагентский

329
00:33:47,320 --> 00:33:53,780
 пайплайн. Да, вопрос по упаковке этого результата. Классно, куда его дальше и отправлять в комп-формате.

330
00:33:53,880 --> 00:33:59,880
 Да, агент без код-интерпретатора не сможет врастать файлы в PDF, PPTX и других офисных форматах.

331
00:33:59,880 --> 00:34:04,880
 Да, это утверждение верное. Тул у агента-интерпретатора кода как раз нужен для этого.

332
00:34:04,880 --> 00:34:12,440
 У нас был достаточно большой вебинар на эту тему, можно там чуть-чуть подробнее посмотреть и обратить внимание.

333
00:34:12,440 --> 00:34:22,340
 Нужно ли дописать код для того, чтобы в конце всего флоу агент мог верстать файл на выход для пользователя?

334
00:34:22,340 --> 00:34:29,020
 Здесь, наверное, хотелось бы понять, куда он этот файл должен складывать, кажется.

335
00:34:29,020 --> 00:34:31,900
 Ну, у тебя есть возможность прокомментировать про вот этот вот сценарий?

336
00:34:33,240 --> 00:34:38,660
 Ну, насколько я помню, да, без кода интерпретатора такое сделать сейчас нельзя.

337
00:34:38,920 --> 00:34:40,020
 Нет, это точно факт.

338
00:34:40,080 --> 00:34:45,780
 Вопрос в том, что нам по исполнению этого воркфлоу нужно дальше этот файл куда-то отправить, положить.

339
00:34:45,780 --> 00:34:51,460
 Ну, сейчас мы поддерживаем передачу вот именно для такого сценария.

340
00:34:51,560 --> 00:34:53,520
 Мы можем использовать это в Postbox.

341
00:34:54,040 --> 00:34:57,380
 То есть туда мы можем положить вот результат работы этого файла.

342
00:34:57,680 --> 00:35:02,880
 И сейчас, короче, можно положить в Postbox все файлы, там без какой-то фильтрации,

343
00:35:02,980 --> 00:35:06,180
 просто все файлы перекинуть, и они отправятся в письме.

344
00:35:07,560 --> 00:35:11,980
 Если есть запрос на то, чтобы сделать это более гибко, там, в других шагах,

345
00:35:11,980 --> 00:35:13,580
 то пишите в поддержку.

346
00:35:14,500 --> 00:35:20,120
 Да, ну, в целом и в комьюнити, да, мы точно придем туда после этого вебинара и почитаем.

347
00:35:20,260 --> 00:35:25,720
 Если, Дмитрий, чуть-чуть подробнее расскажете именно, куда хочется этот результат дальше передавать,

348
00:35:25,800 --> 00:35:30,540
 я не знаю, ну, положить в Яндекс.Диск, например, для менеджера этого, либо что-то еще,

349
00:35:30,940 --> 00:35:34,220
 то было бы классно пообсуждать и, ну, собрать от вас ту потребность,

350
00:35:34,320 --> 00:35:37,600
 которую мы бы взяли в бэклог и подумали бы, как реализовывать.

351
00:35:38,700 --> 00:35:42,200
 Дальше. Вопрос от Андрея. Это про дебаг, мне кажется.

352
00:35:42,380 --> 00:35:47,280
 Остановить и прекратить, в чем разница, нет ли у нас там опечатки остановить и приостановить.

353
00:35:47,800 --> 00:35:48,240
 И пауза.

354
00:35:49,220 --> 00:35:53,440
 Так, ну, я помню такие операции. Есть следующий шаг, есть как бы continue.

355
00:35:53,920 --> 00:35:57,820
 И прямо вот посередине приостановить. Нет, у нас такого нет.

356
00:35:58,460 --> 00:36:07,180
 Я думаю, там либо опечатка UI, потому что у нас кнопки на самом деле могут быть в двух местах, там, типа, справа и чуть внизу.

357
00:36:07,800 --> 00:36:10,040
 Прекратить, это полностью остановить дебаг.

358
00:36:10,360 --> 00:36:15,860
 Да, еще есть вопрос от Александра по поводу саджистов, которые у нас не так давно появились.

359
00:36:15,860 --> 00:36:20,720
 Где прочитать на это? У нас вышла документация, которая говорит о саджистах.

360
00:36:21,440 --> 00:36:36,480
 И как с ними работать, но, наверное, самый простой пайплайн — это прийти в интерфейс, создать несколько агентов, нажать на кнопку, которая была на скриншотах, и вывелиться этот список, в рамках которого можно будет с этим делом поработать.

361
00:36:40,960 --> 00:36:46,700
 Так, сейчас показать, наверное, мы не можем, потому что у нас тут не наш рабочий ноутбук.

362
00:36:47,560 --> 00:36:55,400
 Да, сори, я не зачитал вопрос. Можете сейчас показать просто пример саджеста внутри схемы, как именно перекинуть.

363
00:36:57,280 --> 00:37:07,080
 Ну, написать кастомный саджест мы сейчас не можем, но для начала, ну, вообще, можно почитать про то, как работает state workflow.

364
00:37:07,080 --> 00:37:17,080
 Это в документации написано. Но если там, как бы, очень упрощенно рассказывать, то мы у каждого кубика знаем примерно…

365
00:37:17,560 --> 00:37:45,740
 Его формат. Во-первых, потому что мы часть кубиков написали, как бы, сами. Во-вторых, в части кубиков формат может выставить пользователь. Это как раз тот самый, та самая JSON-схема у AI-агента. И точно так же можно в Foundation Models запрос тоже сделать strict схему. И это, как бы, такое дополнение сверху. И на основании этого мы будем генерировать саджисты.

366
00:37:45,920 --> 00:38:00,920
 То есть, на самом деле, самое главное, вот, фундаментальное правило саджиста, типа, он должен работать. То есть, не только во время, как бы, дизайн-тайм генерировать красивые джеки-выражения, но еще и работать в реальности.

367
00:38:01,180 --> 00:38:27,960
 Слушай, да, мне кажется, про саджисты прямо достаточно много вопросов, но видно, что эта тема, так сказать, зашла, и в части понимания тоже нам нужно будет, наверное, доработать. Мне кажется, что первое, где источник истины и правды, это условно в документации есть информация, которую можно будет прочитать про саджисты, но и в целом, как запрос, наверное, к нам я считываю, что нам нужно чуть больше давать информации для того, чтобы пояснить, как работают саджисты.

368
00:38:27,960 --> 00:38:53,960
 И, ну, видимо, какие-то сценарии, наверное. Мы возьмем это себе в домашнюю работу, и как раз в рамках комьюнити, наверное, надо будет запланировать нам несколько постов, где мы будем пояснять, что это саджисты и как они работают в каких-то конкретных сценариях. Было бы классно, на самом деле, если бы мы могли собрать от вас, вот как нам коллеги рассказывали свои пайплайны, workflow, да, вот такие вот сценарии, мы могли бы на них конкретно показать, как работают саджисты, было бы здорово.

369
00:38:54,740 --> 00:39:22,520
 Так, у нас есть еще вопрос от Олега, я вижу, подходит ли механизм workflow для использования с голосовыми агентами, ну, у нас сейчас краткий ответ, нет, не подходит, у нас workflow работает сейчас только с текстовыми агентами, вот, как и будет ли интегрировано с голосовыми агентами, здесь пока, наверное, вопрос, ну, потому что все-таки голосовые агенты, они предполагают реал-тайм сценарий, там нет какой-то прям долгой обработки,

370
00:39:22,520 --> 00:39:47,980
 и это значительно могло бы ухудшить именно пользовательское восприятие работы с голосовым агентом, потому что workflow все-таки он про долгие циклы, которые могут обрабатываться, вот, но на самом деле я бы хотел тоже здесь понять какой-то бизнесовый кейс и применение, может быть, вам в целом и не нужен в этой части workflow, а подойдет просто MCP-тул, который будет голосовой агент вызывать, ну, в общем, нужно чуть-чуть больше деталей.

371
00:39:50,300 --> 00:39:58,020
 Есть вопрос от Максима, можно ли интегрировать с Google Doc, чтобы оттуда брать данные и туда же сохранять?

372
00:39:58,080 --> 00:40:20,080
 Мне кажется, это у нас расширенный кубик какой-то, ну, то есть, давайте так, да, у нас текущей базовой простой интеграции нет, есть только с Яндекс.Диском, но с Google Workspace мы не брали во внимание этот кейс, сценарий, но запрос в целом, мне кажется, понятен, да, но в целом вот эту структуру работы с Google Doc, наверное, можно реализовать через какие-то...

373
00:40:20,080 --> 00:40:23,120
 через какие-то вот эти кубики, которые ты рассказывал.

374
00:40:23,420 --> 00:40:41,220
 Да, я не помню сходу, как Google Doc устроен, скорее всего, там есть поход по HTTP, поэтому можно прямо HTTP, если нет, то можно прямо написать функцию на условном питоне, может быть, у них даже есть SDK, короче, через функцию 100% можно, через HTTP тоже, наверное, да.

375
00:40:41,280 --> 00:40:44,860
 Ну, давай так, первое, наверное, лоукодного сценария такого, чтобы...

376
00:40:44,860 --> 00:40:48,400
 Прямо нативного, да, нативной поддержки Google Doc у нас сейчас нет.

377
00:40:48,400 --> 00:41:16,720
 Да, ну, как будто как такой запрос тоже можно забрать, пообрабатывать, посмотреть просто, насколько это частотный сценарий, потому что мы понимаем в рамках интерфейса инструмента Яндекс.360, да, в рамках России, это достаточно частотный сценарий, мы его дальше будем здесь с уверенностью, говорю, развивать и упрощать для того, чтобы можно было лоукод пользователям этот сценарий в рамках таких же, как Google Doc, реализовывать.

378
00:41:16,720 --> 00:41:19,560
 Вот, ну, с Google посмотрим.

379
00:41:20,660 --> 00:41:22,520
 Да, дальше вопрос от Романа.

380
00:41:24,040 --> 00:41:27,000
 Да давай прочитай ты, мне кажется, это ближе к тебе.

381
00:41:28,980 --> 00:41:30,020
 Вопрос от Романа.

382
00:41:30,600 --> 00:41:41,820
 Правильно понимаю, что через request данные берутся, URL через другой модуль берем, JSON или XML данные присылаются друг от друга, и это ваш интерфейс.

383
00:41:43,040 --> 00:41:52,500
 Я очень рад, что у Романа возник такой вопрос. Спасибо большое. Я его не до конца понял, мне кажется.

384
00:41:52,960 --> 00:41:53,880
 Ну ты очень рад.

385
00:41:53,880 --> 00:42:03,760
 Нет, ну да, может быть есть какая-то расширенная, здесь не очень понятно в каком контексте. Через request данные берутся, URL через другую модуль берем.

386
00:42:10,580 --> 00:42:12,620
 Можно уточнение от Романа, если там…

387
00:42:12,620 --> 00:42:14,140
 Ну или слушай, давай у нас хороший…

388
00:42:14,140 --> 00:42:17,400
 Это кейс, который я рассказывал, большой, или вообще в целом?

389
00:42:17,740 --> 00:42:24,860
 То есть у нас есть, да, возможность и через URL, через JSON и через XML скачать…

390
00:42:24,860 --> 00:42:30,340
 Давай, у меня есть классное предложение. На самом деле это вопросы, понятно, где приходят. Мы можем сейчас после вебинара прийти.

391
00:42:30,500 --> 00:42:32,080
 Да, можно просто прийти и ответить.

392
00:42:32,180 --> 00:42:37,260
 Уточняющий вопрос Романа, наверное, мы так и сделаем. В целом, для того, чтобы эту коммуникацию чуть-чуть расширить и продолжить.

393
00:42:38,120 --> 00:42:58,440
 Так, вопросов пока больше мы не видим. Это значит, собственно говоря, что мы в рамках вебинара можем завершить нашу активность, ну и взять на себя задачку прийти в чат и доуточнять какие-то вопросы и ответить, может быть, более расширенно, если мы сейчас не смогли дать ответ.

394
00:42:59,580 --> 00:43:08,380
 Так, есть еще один вопрос, да, вот прилетел, вижу. Есть какой-то способ посмотреть количество запусков workflow по дням или неделям?

395
00:43:09,220 --> 00:43:12,520
 Вот есть вкладка «Мониторинг», да, есть ли у нас там фильтрация на текущий момент?

396
00:43:13,320 --> 00:43:14,860
 По дням или неделям?

397
00:43:15,260 --> 00:43:20,360
 Я сходу не помню, я думаю, что да. Давайте тоже этот кейс разберем.

398
00:43:20,360 --> 00:43:28,700
 Да, если я правильно его понимаю, то фактически вы хотите зайти в вкладку «Мониторинг» и выставить дату, на которую хочется посмотреть.

399
00:43:29,580 --> 00:43:38,600
 Количество запусков в workflow. Если это так, то мне кажется, в интерфейсе сейчас такого инструмента нет, но кажется, довольно тоже понятный запрос, почему это необходимо сделать.

400
00:43:38,600 --> 00:43:53,060
 Не, но там же есть мониторинг. В мониторинге есть какая-то степень гибкости, точно. Вот я говорю, что деталей сходу не помню, но в целом я не вижу тут преград. Я думаю, что там гибкости хватит, чтобы построить такой график.

401
00:43:53,740 --> 00:44:15,000
 Так, окей, тогда на сегодня завершаем. Да, с нас прийти в чат, поотвечать коллегам на то, что мы не смогли, ну да уточнять вопрос. Если, коллеги, вы немножечко расширите свой контекст этого вопроса, ну чтобы мы в него провалились, то будет очень здорово. Да, собственно, спасибо за внимание. Было сегодня, мне кажется, круто.

