🚀 Pro тут:
https://t.me/iishenka_pro_bot
⭐️ Все бесплатные материалы из этого видео тут:
https://t.me/+W1SnvvkcV6A3NWMy
Sendforsign тут:
https://sendforsign.com
В этом видео я покажу, как автоматизировать свой документооборот, внедрить в него RAG и начать создавать соглашения (КП, НДА и любые другие) на его основе. Что особенного в этом уроке? Мы векторизуем библиотеку формулировок, устанавливаем все необходимые тулы для своего ИИ-процесса и строим workflow вместе.
🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач.
💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌
Тайм-коды:
00:01 - Введение
00:55 - Демо
03:01 - Строим векторизацию для таблиц
13:17 - Нюансы Text Splitter
17:53 - Строим телеграм бота
22:19 - Подключаем Sendforsign
Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео о AI-агентах и автоматизациях!
автоматизируем наш документооборот. Хотим ли мы генерировать коммерческие предложения, договоры на оказание услуг, договоры о неразглашении, любые договоры с любым уровнем сложности? Сегодня мы научимся это делать вместе. Наша работа будет состоять из двух частей. Сначала мы научимся правильно векторизовать данные, которые мы захотим использовать в нашем договоре. Допустим, если у нас есть какая-то библиотека абзацев или библиотека формулировок, которая принята в нашей компании, и мы часто используем эти формулировки, мы научимся с вами пробрасывать их в наши контракты с помощью искусственного интеллекта без изменений. Впоследствии мы также научимся работать с шаблонами. Допустим, если у нас уже есть устоявшиеся шаблоны и мы хотим заполнять только выбранные места в этих шаблонах и не трогать остальные куски, которые трогать не следует, и это нас может привести к потрясающим результатам. Например, так.
При, привет. А подготовь мне контракт на доставку запчастей. Давайте представим, что мы логистическая компания. А туда обязательно включи два пункта из нашей библиотеки формулировок про ответственность заказчика и ответственность исполнителя. Договор будет между нашей компанией ООО Рога и копыта и сторонней компанией. А, ООО Мы едем вместе. Спасибо. Давайте запустим WFlow, чтобы увидеть, как это работает. Мы видим, каким образом отрабатывают, какие модули задействуются в нашем Workflow. Должна задействоваться векторная база данных. Да, отлично, потому что мы просили использовать наши формулировки. Так, теперь задействуется инструмент SF sign. Это инструмент, который формулирует конечной версии договоров. Так, отлично. И у нас приезжает ответ от бота. Контракт на доставку запчастей между О, рога и копыта и О. Едем вместе вместо ООО ОО. О'кей, пожалуйста, проверьте информацию ниже. И даже нам предоставляют ссылку на то, чтобы мы посмотрели этот контракт. И даже ссылки для подписания, если там указаны получатели, а не указаны. Илья Петров, Иван Иванов. Давайте вместе откроем этот контракт. Так, что мы здесь видим? До стороны договора. Заказчик. Всё верно. Исполнитель. Да, могут быть какие-то ошибки, да, мы можем дописать ООО вместо о ООО ид вместе. Контактницу. Верно. Смотрите. Ответственность заказчика. Заказчик несё несёт ответственность за достоверность представления информации о Грузии. ответственность исполнителя в случае полной или частичной утраты груза, а также его повреждения. Откуда эти формулировки, настолько точные он взял? Если мы сейчас откроем мой Google Drive и пойдём в формулировки и найдём, пример ответственность заказчика. Заказчик несёт ответственность за достоверность предоставленной информации о Грузии. Проверяем. Заказчик. Заказчик несёт ответственность за достоверность предоставленной информации о Грузии. То есть максимально точные формулировки. И наш контракт уже финально сформирован и готов для отправки. Нам осталось только указать наши имейлы правильно, да, имена, может быть, перебить и, в принципе, отдать ссылку на подписание либо прямо отправить использовать этот интерфейс. Каким образом это только что всё произошло? Чтобы нам всё это понять, нам нужно вернуться в наш Workflow Nem и
разобраться с частями этого workflow. На самом деле workflow состоит из двух частей. Первая часть - это векторизация. Мы с вами уже несколько раз делали векторизацию, да, в прошлых видео, но сейчас мы будем векторизовать а табличные данные и будем делать это немножечко в другом ключе. То есть нам нужно несколько иначе работать с векторизацией для того, чтобы наш флоу работал корректно и каждый раз безошибочно. И после этого мы создаём агента, который умеет принимать нашу речь, отсылать запрос в нужный нам инструмент для того, чтобы формировался конкретный договор или документ. Но прежде чем мы продолжим, обязательно подпишитесь на этот YouTube канал. Ставьте лайк, без этого вообще никак. И помните, что конкретно этот шаблон, который мы будем вместе с вами создавать, я прямо в конце видео нажму download, сохраню и опубликую в нашем бесплатном Telegram-канале. Ссылка на него будет в описании. Также там будет вторая ссылка на наш проканал. Это канал, где мы намного глубже уходим в автоматизации искусственный интеллект. Например, там мы вместе разбираемся, каким образом работать с файлами, с разными типами файлов. Если у вас, например, на Google Драйве хранятся пдфки, Google доки, Google таблицы, отдельные эксельки, каким образом это всё векторизовать в одном совершенно автоматически и разбираться с этими типами на лету. Вот такие вещи у нас есть в Прогруппе. Обязательно её тоже посмотрите. А сейчас мы начнём создавать нашу автоматизацию с нуля. Как всегда, мы пользуемся сервисом N8N, да? То есть вам нужно будет зайти сюда на N8Niio, создать ваш аккаунт. Мы это уже делали в наших предыдущих видео. Обязательно посмотрите, чтобы не повторяться и не растягивать видео до ненормальных масштабов. И как только вы создадите аккаунт, вы увидите очень похожий на этот интерфейс. Вам нужно будет создать Workflow и после этого нажать здесь три точки import from file и загрузить тот же, который вы возьмёте в моём Telegram-канале. Весь Workflow у вас появится прямо здесь, в вашем воркспейсе. А мы сейчас начнём создавать векторизацию заново. Итак, с чего всё начинается? Наша векторизация всегда начинается с данных, да, то есть с файлов, которые мы хотим забрать для того, чтобы использовать их впоследствии для векторизации. Я не буду прямо конкретную ноду создавать с нуля, потому что вот конкретно вот этот процесс мы делали прямо пару видео назад, когда мы говорили про викторизацию, которая сама себя обновляет. Обязательно посмотрите пря мы будем использовать в этом видео прямо куски оттуда для того, чтобы сэкономить нам время. Всё начинается с того, что мы подключаем наш Google Drive, да, с помощью соответствующих нот. Мы идём в наш плюсик, да, нажимаем Google Drive и здесь используем ноды. Да, вот нас интересуют, вообще говоря, триггеры, да, onchas, то есть specific file или onchanges involving specific folder. Мы как раз используем фolder. Здесь мы указываем, как часто мы хотим проверять ту или иную папку на Google Драйве, да? Вот мы каждую минуту проверяем файлы в папке Legal Dogs. И если файлы новые добавляются, либо если файлы новые изменяются, мы хотим организовать цикл. Да, циклы мы тоже с вами уже организовывали. Посмотрите обязательно предыдущее видео. И дальше собираем все нужные нам данные, которые мы получаем из файла, в один единый пучок для того, чтобы с ними нам было проще работать. Допустим, мы исполним это. Мы видим, что у нас новый файл добавился. Организуем цикл. Да, первый. А бранч у нас есть. обязательно, да, чтобы мы проверяли весь флоу, мы должны пошагово проходить по всем шагам workflow для того, чтобы прямо иметь представление о том, что происходит. И сейчас как раз наша любимая нода, да, которая собирает в пучок всем все наши нужные файлы. Смотрите, здесь есть нода, которая собрала наш файл ID, да, файл Type - это наш как раз сsetт, файл title, да, то есть название файла, формулировки и непосредственный URL к этому файлу. И дальше мы хотим забрать контент этого файла для того, чтобы его векторизовать. Соответственно, нас интересуют две ноды. Первое downloadфайл, да, мы её получаем ровно таким же образом. Мы идём в drive Google Drive, и здесь у нас есть нода, которая называется downloadфай. Прямо её забрали, да? Соответственно, так как мы уже на предыдущих шагах получили файл ID, да, то есть мы об этом позаботились, вон, вот он наш файл ID, мы прямо указываем файл download by ID, айдишка у нас есть. Выполняем ноду. Наш файл скачан. Теперь давайте посмотрим, а что же вообще говоря в этом файле, зачем е мы его скачиваем. Мой файл выглядит вот таким образом, да, мы уже с вами видели, здесь есть, э, совершенно простая структура, здесь есть категория, заголовок, формулировка. Это сборник всех формулировок, которые мы используем в компании для того, чтобы составлять наше соглашение. Да, здесь есть про разные самые тематики формулировки. Тут у нас их порядка 30 штук, да? У вас их может быть 300 или 3.000. Мы для этого их и векторизуем, для того, чтобы впоследствии точечно выбирать нужную формулировку, отдавать в нашу систему, чтобы формировался конечный контракт. Да, вот мы только что получили этот файл прямо с этими формулировками. И теперь мы хотим добавить ноду Google Sheets обязательно, да? Как только вы встречаете сейчас Google Sheets аккаунт или Google Drive аккаунт, посмотрите предыдущее видео, мы прямо коннектили и Google Драйвы, и Google шиты, всё вместе коннектили. Это всё в разных видео можно найти. Они все интересные. Обязательно смотрите. Либо в нашей прогруппе у нас есть прямо сборник отдельный, каким образом мы коннектим те или иные тулзы. Всё это в единой классифицированной системе лежит. Можете прямо там это всё посмотреть. Соответственно, мы забираем Google Sheet, да, нас интересует как раз Sheit One, да, потому что идёт на первом, а, на первой странице вся наша формулировки. Execut. И смотрите, какая красота. У нас скачался, да, у нас появился 31 айтем. И здесь мы можем прямо, если включим таблицу, мы видим, что, а, row number 2, да, здесь есть настоящий договор, да, вот, но row number 3, все наши формулировочки очень красиво, очень чётенько, да, с заголовочком, с категорией, прямо всё красиво и структурировано мы получили прямо из Google Драйва. Отлично, нас это более чем устраивает, и мы готовы продолжать. Смотрите, теперь нас интересуют две ноды, да? Одна называется agгреate, а другая sumarйзe. Мы раньше этого никогда не делали, да? Это уже так, ну, более глубинная история с тем, как мы работаем с таблицами, потому что векторизовать таблицы нельзя просто в лоб, как текст, да? Мы должны научиться делать это специальным образом, чтобы потом наши векторизованные данные помогали нам, да, и мы с минимальными ошибками находили наши релевантные данные. Давайте подключим. Что такое агрегирование? Агрегирование служит для того, чтобы мы массив, да, вот на самом деле, а может быть, мы не обращаем часто внимания, но нам предыдущая нода отдала 31 айтем. То есть наша нода отдала 31 элемент массива. С этим работать можно, да, но не очень удобно. Что если мы хотим все эти 301 элемент массива превратить в один массив с три одним элементом? Это разные вещи, да? Потому что с единым массивом мы потом можем работать как угодно. Для этого нам нужна нода агрегейта, да, она для этого и служит. Мы гово мы хотим сагрегировать все данные, да, в поле дата. То есть мы сами организуем массив с названием дата и хотим туда включить всевсевсе филды из предыдущей ноды. Делаем. И смотрите, с одной стороны мало что поменялось, да, но с другой стороны, если мы обратим внимание на нюансы, поменялось очень много. Теперь у нас один itemм, да? Если мы включим JSON, мы видим, что теперь это item data, то есть массив, который называется дата, у которого есть 31 элемент, да? То есть вот элемент номер один, да? Элемент номер два. И тут наши формировки в очень красивом виде. Всё прямо в одном элементе, в одномном массиве. И теперь, казалось бы, пора идти векторизовать эту историю, но её просто так векторизовать не следует, да? И с неё сначала нужно следо нужно сделать единый список, единую строку. Для этого существует инструмент, который называется самаризация. Это нодаv cement нативная, да? И здесь есть а такой механизм, который называется конкатинация, то есть объедение срок строк в одну, да? Мы хотим забрать то самое поле дата, которое мы получили на предыдущем шаге, да? Сепаратор поставить, кома запятая. То есть между элементами этого массива мы вставим запятую и будем слепливать все эти элементы в один. И в принципе нас больше тут ничего интересует. Давайте выполним. Опять же кажется, что мало что изменилось. На самом деле изменилось вообще всё, да? Теперь мы имеем единое поле, да, concinated data. И внутри этого поля, смотрите, что происходит. Весь наш массив собран в единую строку. И между элементами, которые раньше были разными элементами массива, теперь у нас запятая, да? То есть мы видим row number 3 начинается. Вот, например, начинается row number 4, row number 5. И теперь это единая строка, но строка, которая сохранила очень важные элементы. Во-первых, в этой строке остались элементы, да, фигурные скобки, внутрь которых завёрнуты наши элементы. Внутри фигурных скобок у нас всегда есть row number for, да? Всегда есть категория, потому что мы это забрали из Google Есть заголовок, обязанность, да, например, обязанность заказчика и есть формулировка, сама формулировка, которая нас интересует, но теперь это единая строка. А вот теперь мы готовы это векторизовать. Для того, чтобы векторизовать, нам понадобится нода Superabase Vector Store, да? То есть мы прямо так и пишем: Superbase vector Store. Вот эту ноду прямо накидываем. Мы это опять же делали уже в предыдущих видео. Обязательно, я буду часто это повторять, обязательно сходите, посмотрите, потому что там, например, мы занимаемся настройкой аккаунта, да, кредов. Superbase. Это прямо обязательно нужно сделать, потому что мы почти в каждом видео используем Superbase. Также там будет указано, каким образом создаётся таблица, да, для векторизации. Это не классическая таблица, и мы прямо отдельно проговаривали, что такое векторные таблицы. Опять же, всё там посмотрите. Либо в прогруппе есть у нас отдельная прямо отдельный пост, что такое subbase и как создавать векторные базы данных. И здесь есть у нас очень важные, а, штуки, да. Во-первых, бединги. Мы указываем openedдинги, да, здесь должен быть текст eding 3 small, умолчательный датаader, да, недалее, как два видео назад, мы обсуждали, насколько же важно держать метаданные вместе с оригинальными данными. Да, опять же, мы будем сейчас экономить время, мы не будем про проговаривать, зачем это нужно, посмотрите обязательно в предыдущем видео. Но краеугольная штука для нас теперь, а, которую мы до этого не делали, да, сегодня сделаем первый раз вместе, это мы настроим рактер сплиттер. Да, в чём история. Вы можете послушать
разных людей, которые уже векторизовали себе таблицы или различные данные. Вы можете услышать, а, страшные истории про то, что на самом деле рак не работает очень уж хорошо. Да, я себе сделал, находит стрёмно, находит неточно, находит с ошибками. И, вообще говоря, это всё выглядит красиво, но на самом деле работает не очень, потому что для каждого кейса нужно настраивать викторизацию, а, уникально, уникальным способом, потому что каждый кейс требует, ну, некоторой своей процедуры, которая поможет нам, а, потом правильно извлекать данные. Например, что будет, если мы сейчас настроим векторизацию так, как мы делали это в прошлый раз, в прошлые разы просто разобьём, например, там, почанкам в 600 или 1.000 символов и таким образом засунем в нашу векторную базу данных. что-то будет работать, да? То есть, например, представьте, если мы попросим нашего бота найти пункт ответственность заказчика, он найдёт этот пункт. Но кажется, что этот пункт был разделён ровно посередине, вот посюда, да, потому что векторизация закончилась, да, на этом моменте. То есть один кусочек будет в предыдущем чанке, а следующий кусочек будет уже в следующем чанке. Скорее всего, тогда бот найдёт вот этот кусок, вот этот чанк, использует его как контекст, и только лишь половина формулировки окажется у вас в тексте. Вы наверняка этому не обрадуетесь и скажете, что ничего не работает. И с этим надо работать уникальным способом. Чтобы это произошло верно, давайте ещё раз посмотрим на данные, которые мы а получили для после самаризации. Мы получили данные, которые в которых содержатся полностью все формулировки. И так уж произошло, а на самом деле мы это специально настроили, что в этих данных, а, между ними есть, ну, прямо специальный разделитель, да, фигурная скобка, запятая фигурная скобка, да, если мы посмотрим другие, тут тоже фигурная скобка закрывающая, да, запятая фигурная скобка открывающая. И этим надо воспользовать для того, чтобы максимально круто векторизовать эти данные. Если мы используем рактер spпitter, прямо вот отсюда вы забираете, да, ратерпITter и присоединяете к вашему даталоad. Здесь нам нужно указать, во-первых, chun size, то, что мы делаем каждый раз обязательно, а потом мы можем указать сепаратор. И смотрите, мы уже знаем, что наш сепаратор, да, между нашими формулировками выглядит вот именно таким образом. Что это даст? Какую инструкцию для текстплитера? Текстплиitтер всегда будет искать ближайший сепаратор для того, чтобы отсечь данные по нему. То есть это нам даст такое преимущество, что каждой формулировки останутся не нарезанными на куски. он будет всегда максимально пытаться оставлять целостность формулировки и векторизовать формулировку полностью. Но от слов к делу давайте попробуем. Мы настроили наш сепаратор, да, и теперь попробуем просто нажать execute. Так, у нас выполняется наша процедура. Так, и посмотрите, что произошло. Вот наша характерная структура из векторной из векторизации, да? И смотрите, page content, да, row number 2 категория. И смотрите, он заканчивает формулировку прямо там, где она реально заканчивается в Экселе. Да, давайте, вот тут заканчивается первая формулировка фразы. А в случае расхождений с приложениями, смотрите, в случае расхождений с приложениями, отлично, это то, что нам прямо нужно было. Идём на следующую формулировку. Следующее заканчивается. Также исполнитель обязан соблюдать конфиденциальность, полученная из заказчика информации. Идём сюда. Также исполнитель обязан соблюдать конфиденциальность, э, полученная из заказчика информации. Это краеугольная штука. Мы только что векторизовали данные так формулировки остались целостными. Это то, что нам нужно для того, чтобы наш бот работал отлично. Если мы пробежимся, мы увидим, что все-всевсе формулировки остались прямо целостными. И если мы теперь откроем а таблицу documents в нашей векторной базе данных. Давайте обновимся. Смотрите, и мы видим, что тут у нас 30 записей. Это ровно столько, сколько у нас было в нашей а Excelтаблице. И теперь, если мы откроем любую запись, да, то есть её контент, мы видим, что это R row number 21, да? И она заканчивается прямо своей точкой, да? То есть формулировки остались целостными. И у каждой из этих формулировок есть свой embдинг, да, который вот мы можем видеть прямо тут. И также есть метод данные, которые указан, да, которые указывают из каки из какого файла мы забрали эту формулировку. Отлично. Мы только что закончили с векторизацией именно таким образом, которая помогает нам использовать формулировки чётко и полноценно. Теперь настало время создать нашего бота, который умеет обращаться к этим формулировкам и отсылать данные в S for Sign, то есть толзу, которая умеет из текста или из запроса формировать конечные документы. Итак, мы с вами делали это уже несколько раз, да, это начало нашего бота. Мы с вами несколько
раз настраивали Telegram таким образом, чтобы он мог понимать наш текст или наши слова, наш голос для того, чтобы потом использовать это дальше. Мы не будем, опять же, а делать это заново. Я вас отправлю в самое первое видео на этом канале. Мы прямо вот ровно эту процедуру делали, да, мы учили его распознавать. Это голос либо обычный текст. И если это голос, то транскрибировать его. Если это текст, то, соответственно, посылать дальше этот текст. Каким образом строить в Telegram? Вы помните, нам нужен ботфазр, да, в нашем Телеграме. Это бот, который умеет создавать других ботов. Он вам создаст вашего бота, отдаст вам уникальный апи ключ этого бота для того, чтобы вы вставили это в креды. Прямо здесь, да, у меня уже есть мой бот. Дальше мы делаем свитчер, да, мы понимаем, это голос либо не голос. После этого, если голос, мы используем open AI транскрибатор для того, чтобы превратить голос в текст. Если это текст, да, мы прямо напрямую отправляем дальше этот текст по нашему workкflow. Дальше мы пишем небольшой код. Мы опять же делали это в предыдущих видео. Если это текст и мы хотим его, а, то есть инpпу из Телеграма, да, оставить в переменный текст, да, если это чат ID, мы прямо сохраняем jonчик чаid. Соответственно, у нас всегда будет на выходе из этой ноды наш маленький джейсончик, где будет два поля текст и чат ID, которые будут всегда содержать нужную информацию, вне зависимости от того, вы что-то надиктовали, либо вы что-то прямо написали в вашего бота. И дальше мы накидываем прямо ноды, которые мы уже делали, ну, множество раз, да. Нас интересует нода AI agent, да? То есть вы её прямо отсюда накидываете. AI agent, да? Туда вы накидываете тулзу, которая называется Vector Store, да, и, собственно, подключать к этому всему ваши а модели, которые будут процессить всю эту информацию. Что тут важно, да, мы только что использовали Supase для того, чтобы векторизовать данные, да, и поместить это в таблицу доcuments, да, это значит, что мы должны для нашего второго бота уже, который работает на чтение, на самом деле использовать ту же самую таблицу documents и прописать ему, а, очень маленькие инструкции. Например, я его назвал Vector Store. Я говорю, это, ну, тулзак, который называется Vector Store. Используй только для определённого кейса. Я сейчас объясню, зачем это нужно. Мы хотим, вообще говоря, каждый раз, когда работаем с нейронками, экономить ресурсы. Мы сейчас пропишем в нашего агента а- ну довольно важные инструкции. Смотрите, мы можем же ведь попросить агента делать разные вещи. Мы, например, мы можем просто с ним общаться, да? Вот мы, например, просто ему скажем: "Привет". Хотим ли, чтобы мы каждый раз, когда говорим боту: "Привет", бот шёл в векторную базу данных, например, искал релевантные чанки информации. Что он найдёт по фразе "Привет"? он найдёт всякий мусор, и мы потом будем расстраиваться. Это решается несколькими способой, да, но самый простой способ - это прямо прописать системный промт для этого агента, который будет руководством для этого бота. В каких случаях использовать, например, векторные данные, а в каких случаях не использовать векторные данные. Что я хочу? Я прямо пишу ему, что у тебя будет две опции, и ты помогаешь только выбрать между этими двумя опциями. Если пользователь говорит простые фразы или задаёт самые простые вопросы, да, или не просит тебя использовать твою библиотеку формулировок, в которой у нас уже сохранены наши формулировки, не используй Vector Tool. Никогда не используй вектор Tool. В этом случае просто отвечай: "У меня нет никакого контекста". Да, это нам существенно сэкономит наши ресурсы, потому что мы каждый раз не будем выходить в векторную базу данных и осуществлять там тот самый similarриity search, да, который позволяет искать релевантные чанки информации. Но если пользователь напрямую тебя попросил использовать библиотеку формулировок, пожалуйста, иди в векторную базу данных и найти все релевантные формулировки, которые пользователь тебя попросил найти. Да, никогда ничего не выдумывай, да, просто следуй инструкциям. И на этом наш агент готов. Теперь, когда у нас есть такой инструментарий, у нас есть, по сути, классная вилка. Если мы просим бота использовать библиотеку наших формулировок, он сконконтинирует все формулировки, которые считает релевантными, и отправит это дальше. А если мы не просим использовать эти формулировки, он просто пройдёт дальше и ответит, типа ничего не добавлю сюда к этому, да, к нашему запросу, который мы прислали из Телеграма. Так, теперь мы должны как раз присоединить тузу, которая помогает нам собирать документы вообще из запросов пользователя в единый красивый документ. Этот называется SFS.
Мы идём на sinforsign. com. Так, это лза для как раз встроенных контрактов, да, для того, чтобы создавать, менеджерить контракты через AP запросы. У них тут масса всего есть, но нас интересует конкретная функциональность, которая позволяет нам как раз через голос, нормальный человеческий текст работать с контрактами, да? Мы идём в документацию, да, и здесь отдельная вкладка называется AIA API, да, которая позволяет генерировать соглашение, используя человеческий голос, да, здесь масса чего можно делать. Нас конкретно интересует create contract infформаatт, да? То есть мы можем создавать контракты в свободном формате, да? Тут также можно создавать из тимплейтов, либо созда либо заполнять тимплейты. Мы с этим потом разберёмся. Нас конкретно интересует возможность создавать контракты в свободном формате. Так, мы идём в обратно с Infor, да, нажмёте здесь get started, вас система проведёт через онбординг небольшой, да, и дальше нас тут вообще ничего не интересует, кроме как API ключи, да? То есть здесь можно забрать наш IP ключ, да, нажать кнопочку копия, и здесь можно забрать клиентский ключ - это как раз то, что в документации указано, да, как то, что мы должны засунуть в headдер, ваш клиентский, ваш IP ключ, и потом уже просто человеческая фраза там, что мы хотим сделать. Отлично, мы забрали наш IP ключ, да, мы забрали наш клиентский ключ и создаём ноду HTTP request, который мы будем посылать непосредственно в S for Sign. Добавляем HTTP request. Да. Так, и здесь есть такое понятие, как импортировать из курл, да? Мы прямо из документации всё это забираем, вставляем сюда импорт. Отлично. Смотрите, у нас прямо сразу всё импортирова. Это постзапрос по определённому URL, да? Здесь мы вставим ваш IP ключ, здесь мы вставим ваш клиентский ключ. И здесь просто Hello World уже можно посылать, да? Я сейчас вставлю себе апи ключик клиентский ключ и будем пробоваться. Так, я только что вставил сверху апи ключ и клиентский а-а ключ и просто скажу: "А давайте прямо по-русски: "Привет, как ты?" Мы проверим работоспособность в принципе всей системы, да? Отсылаем запрос, он выполняется. О, отлично. Он Я всего лишь программа, но готов помочь вам в созданием контрактов или ответить на ваши вопросы. Отлично. Система работает. И там в документации указано, что как только он создаёт для вас контракт, да, или, а, подписантов этого контракта, вот эти поля будут заполнены. Соответственно, можем менеджерить гибко ответы, да, их потом парсить или включать в наш ответ, если те или иные поля заполнены либо не заполнены. Отлично. Давайте чуть-чуть модифицируем. Да, меня интересует, чтобы здесь был сам User questions, и мы его прокидываем прямо из all the data, то есть оригинальный вопрос. Мы же не хотим, чтобы он трансформировался, но мы помним, что из нашего агента на выходе мы просили возвращать. Если это простой вопрос, то не возвращай ничего, просто возвращаешь там no конк, да? А если это вопрос сложный и ты сходил в библиотеку наших формулировок, то саморизуй, то есть склей вместе все формулировки, которые ты считаешь релевантными запросу, и отдай их дальше. Соответственно, мы хотим это отработать, да, что если наш агент отработал, да, и, соответственно, а он что-то вернул, мы хотим это вставить стоить вставить прямо как отдельный контекст. Вот jon outp - это будет output из нашего агента. А оригинальный запрос, который мы получили прямо из Телеграма, мы никогда не хотим менять. Пускай он прямо уходит в Sent for Sign, как есть. Так, ну давайте прямо попробуем, пока не завершая флоу, а задать какой-то вопрос, который нас интересует. Там можем ли мы сходить прямо в нашу векторную базу, да, и какую-нибудь формулировочку оттуда достать. Например, ответственность за утрату груза. Да. Ну хорошо, давайте прямо так и попробуем его спросить. Так, он подсоединён к нашему телеграму, да? Так. Привет. Подготовь ещё один контрактик в свободной прямо форме, но включи туда пункт про ответственность за утрату груза. Это очень важно. Так, послали голос. Так, смотрим. Он должен Так. Тактак. Пошёл, пошёл. Ага. О, отлично. Так, вот смотрите, пожалуйста, уточните, между, а, какими сторонами должен быть составлен контракт? Какие, а, контактные лисы должны быть указаны. Давайте посмотрим, а сходил ли он в векторную базу данных. Он не сходил в векторную базу данных, потому что мы с вами прямо прописали ему условия. Если человек прямо просит тебя сходить в библиотеку абзацев, тогда ходи. Видите, он как бы он мне чуть-чуть нас, потому что я сам забыл это сказать, да? Давайте попробуем ещё раз. Так, не, давай ещё раз. А, прямо сходи в нашу библиотеку формулировок, найди там пункт про ответственность за утрату грузов и сделай мне новые контрактик в свободной форме, где прямо этот пунктик стоит. Спасибо. Так, посмотрим, насколько мы теперь его, а, как бы запрос удовлетворили. Отлично. Он сходил в нашу векторную базу данных. Да, что сейчас он комбинирует вместе эти запросы и отправляет это в S for sign. Пока он отправляет, давайте посмотрим, что конкретно он сделал. Он нашёл, да, ответственность за утрату груза, которая называется в случае полной или частичной утраты груза. Идём сюда. В случае полной частичной, а полной или частичной утраты груза также его повреждения. То есть он прямо нашёл нужную формулировку, вставил его это и отдал это в SF Science. И Set for Sci, кстати, уже что-то сделал, да, и, судя по всему, он даже нам сделал, а, контракт, который мы можем, а, открыть с помощью публичной URL, да, так как он нам надаёт это объектом, да, мы сейчас ещё напишем небольшой код, который как раз этот объект, ну, скажем так, работает с ним таким образом, чтобы это потом приятно было отдавать в Telegram. Так. И добавим две ноды. Первая нода код, которые мы часто очень используем, да? А наш, а, S for Sign, он даёт же, а, эти поля в зависимости от того, создал он что-то, да, создал контракт либо не создал, создал рессиентом в контракте либо не создал. И в зависимости от этого всего, да, он формирует ответы. И давайте прямо напишем код, который, а, ну, предусматривает это, да? Если существует, тогда в messageд добавь название, да? Если public URL существует, тогда в ответный месседж добавь прямо ссылочку. прямо сделаем HTML, да, и на выходе мы добавим ноду Telegram sende. Да, то есть это ответ в по телеграму. То есть мы туда укажем нас наш чат ID, который мы сохранили в нашей ноде All the data, да? И мы туда добавим месседж, который мы только что получили из предыдущей ноды. Но обязательно здесь нужно будет добавить addfield, да? Давайте сейчас это уберём. Вот addfield. И здесь должен быть pars mode, да? и укажите HTML, потому что в предыдущей ноде мы прямо возвращаем HTML, и тогда это будет всё выглядеть красиво. Давайте попробуем прямо тогда выполнить этот. У нас же уже ответ есть от Стфорсана, да? Давайте выполним. Так, отлично, да, он меessдж сформировал. Это какой-то HTML. А теперь, если тут execute, смотрите, он нам раскидал этот месседж, да, и очень красиво всё это прямо упаковал. То есть, по идее, если мы вернёмся, а, смотрите, вот у нас прямо красивый ответ и сформирован динамически в зависимости от того, какие поля нам отдался forф. Так. И теперь у нас прямо есть возможность проверить полностью этот флоу, да? То есть мы хотим прямо нормально так залезть в нашу бибтику шаблонов, попросить сформировать документ в свободной форме, да, и таким образом, а, работать с SF Sign. Так, давайте пробовать. Так, что меня теперь интересует? А, опять же, мне нужен новый контракт, да, в свободной форме. Там я хочу, чтобы ты аа такие штуки мне, а, указал. Так, это будет, например, а, контракт на доставку груза, там будут запчасти, а, будет о рога и копыта с нашей стороны, да, с той стороны о возим вместе, да, с нашей стороны будет, а, контактное лицо Илья Иванов, с той стороны будет Игорь Петров. Да, и давай туда вставим из нашей библиотеки формулировок прямо а пункт про страхование груза. Спасибо. Так, и вот нам возвращается ответ. Так, контракт на доставку груза успешно создан получатели Илья Иванов, Игорь Петров. Всё точно. И вот он даже ссылка на документ. Так, мы сейчас с вами смотрим так контракт на доставку груза здесь указано уже. А, всё верно. И пункт о страховании груза. Давайте посмотрим, насколько Так, он заказчик самостоятельно принимает решение, да? Так, заказчик самостоятельно принимает решение страхованиние груза на период транспортировки, несёт ля-ля-ля. Да, отлично. То есть всё, что мы хотели, да, контракт, который а у нас оказался здесь, да, потом же это публичная ссылка, которая создана только для того, чтобы мы могли, например, что-то подредактировать, да, в этом контракте. Но мы всегда можем потом нажать логин, да, провалиться в наш Workspace. Соответственно, там же этот контракт тоже будет лежать, да, это персональная ссылка только для нас, чтобы мы поредактировали. Но таким образом мы можем достигать довольно неплохих результатов в автоматизации документооборота. В следующие разы мы поговорим про то, каким образом мы можем заполнять прямо шаблоны, если мы не хотим никакой не хотим прямо никакой вольности, да, в создании контрактов. Прямо только в чётких местах будет занесены данные, которые нам нужны. И на этом всё на сегодня. Надеюсь, было интересно. Обязательно ещё раз подпишитесь на наш, э, YouTube канал, да, поставьте лайк, это важно. Посмотрите этот шаблон в нашем, а, бесплатном Telegram-канале и обязательно идите в нашу прогруппу. Там просто гиперглубина, ответы на самые сложные вопросы, и мы там просто делаем клёвые вещи. Всем пока. y