🚀 Pro-сообщество тут (там есть видео и автоматизация, которая делит юридические документы на чанки строго по статьям и пунктам):
https://t.me/iishenka_pro_bot
⭐️ Бесплатные материалы из этого видео тут:
https://t.me/+W1SnvvkcV6A3NWMy
Следующее видео:
https://youtu.be/tawFHMNF-T8
В этом видео я расскажу, как работать с метадаными, когда вы строите ваших RAG ассистентов.
Что особенного в этом видео?
Мы не только изучим разные способы формирования метаданных для RAG, но и посмотрим на практике, как внедрять тот или иной подход.
🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач.
💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌
Я — Илья Бовкунов, основатель и СЕО Sendforsign — это компания, занимающаяся AI-автоматизацией договоров и документооборота. В прошлом был Директором по продукту и продуктовому дизайну в международных AI-стартапах.
Позвать в подкаст или предложить другое сотрудничество aiiszdes@gmail.com
Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!
Друзья, всем привет. Ну что, сегодня мы с вами обсуждаем повышение качества и точности рак через работу с метаданными. Это огромная большая тема и вообще тема самого Рак у нас на канале поднималась уже многократно. Посмотрите наш канал. Мы с вами уже и ускоряли рак, подключали разные базы данных, даже векторизовали картинки и графики. Ну а сегодня будем работать с метаданными. В рамках этого видео мы с вами обсудим штатную векторизацию и формирование метаданных штатными средствами умолчательного даталоудера. Посмотрим, что такое обогащённый контекст и каким образом с ним работать и повышать качество нашего рака. Проговорим, что такое векторизация вообще любых PDF, в том числе отсканированных и каким образом это можно делать. Ну и в самом конце обсудим мегатехническую тему, каким образом можно размеры чанков делать соответствующими размерам конкретных пунктов в наших сложных документах. Всё это мы будем делать на примере непростых документов. Например, в этот раз мы с вами поработаем с Гражданским кодексом и викторизуем его вдоль поперёк с помощью разных методов и поработаем с метаданными. И также посмотрим, каким образом агенты отрабатывают данные, векторизованные различным способом. Ну что такое интересно? Лайк, подписка, коммент и смотрим обязательно до самого конца. Ну что, я только что загрузил себе этот гражданский кодекс в мой Google Drive и буду подключать его к разным автоматизациям. Давайте начнём самое первое со штатной векторизации. Каким образом это работает? Это автоматизация, которую вы можете построить буквально за 5 минут. Она заключается в том, что мы получаем некоторый бинарник из нашего Google Драйва, то есть сам наш PDF. И после этого мы можем использовать с вами умолчательные средства NVC main, включая Data Loader, в котором прописаны соответствующие поля. Мы обязательно сюда хотим прокинуть айдишник нашего файла. Ну и само название файла. Вот прямо вот так у нас называется файл. И сама эта автоматизация работает непосредственно с файлом, то есть текстом предварительно доставать не нужно. Более того, если указать здесь опцию разделять PDF на страницы, то мы ещё и сами номера страниц можем получить в метаданных, то есть работает максимально прямолинейно. Давайте попробуем выполнить этот шаг и посмотрим, каким образом запишутся данные в нашу базу. Давайте перейдём в нашу базу и посмотрим. Вот у нас абсолютно всё векторизовалось. можем проследить, что вот весь наш контент прямо до второго пункта первой статьи, вот до этого места у нас первый чанк образовался. Давайте посмотрим на его метаданные. Здесь уже очень много полезной информации. Например, мы видим, что мы из этой пдфки забрали первые 30 строк, page number сюда приехал и те самые файл ID и названия файла, которые мы указывали в даталоудере. Давайте попробуем перейти на нашего агента и спросить по этой векторизованной базе какой-нибудь вопрос. Я спрошу вот такой вопрос: как признать приобретателя недвижимого имущества недобросовестным? И давайте сразу посмотрим, каким образом работает наша векторная база и каким образом с ней коммуницирует наш агент. Видим, что вернулись чанки совершенно с разных страниц, например, страница девять. У этого чанка страница 15. Но в общем и целом весь этот контекст позволил нейронке кое-как сформировать ответ на каком-то приемлемом уровне. Этот метод уже работает хорошо. Если у вас есть толерантность к периодическим ошибочным суждениям вашего агента. Но, в принципе, это быстро, действенно и не требует никаких существенных затрат. Что делать, если у нас тексты сложные? Допустим, у вас какая-то научная статья со сложными терминами, и вам всегда требуется давать дополнительный контекст для нейронки, чтобы она точнее формировала свои ответы. Для этого есть второй метод, он называется обогащённый контекст. И у нас на канале было отдельное видео, где мы рассказывали про контекстуальный ретрил или обогащённый контекст. Поэтому обязательно посмотрите это видео, там очень много подробной информации. А сейчас мы пройдёмся по азам для того, чтобы мы понимали, каким образом это работает. Начало очень похожее. Мы получаем бинарник из нашего Google Драйва или из места, где вы храните ваши бинарники, и уже самостоятельно извлекаем текст из этого бинарника таким образом, что мы получаем прямо сплошной текст с разделителями, но уже не работаем с самим файлом. Мы достаём весь текст для того, чтобы самим нарезать этот текст на чанке. У нас есть специальный код, который используется для нарезания текста начанки по 400 символов. И итог работы этого кода предсказуемый. У нас появляется много-много чанков, которые мы сами образовали из полученного текста. После этого разбивается этот массив на несколько элементов. Соответственно, мы получили 84 элемента по 400 символов каждый. И это делается для того, чтобы обогатить эти чанки контекстом. Это мегамощная штука, но требует большого контекстуального окна вашей неронки, потому что здесь мы работаем одновременно с чанком и общим текстом всего документа, который у нас был в самом начале. Это делается для того, чтобы мы могли задать вот такой промт. Мы сначала отдаём полный текст документа, после него отдаём чанк и при этом инструктируем нейронку таким образом, чтобы она определила контекст этого чанка в рамках всего документа. И это приводит, на самом деле, к поразительным результатам. И мы видим
как нейронка работает поштучно с каждым чанком, с каждым из восьмиче чанков, и проворачивает операцию, которую мы проговорили. берёт каждый чанк, сравнивает его с общим текстом документа и после этого делает некоторый короткий сари о том, каково есть место этого чанка и значение этого чанка в рамках всего документа. Таким образом происходит формирование контекста для каждого чанка. И давайте теперь посмотрим, каким образом выглядят наши контексты. Этот фрагмент находится в разделе, который устанавливает структуру, раздел, содержащий положение о принятии. То есть мы получили 84 элемента, 84 контекста, которые определили значение каждого чанка, с которыми мы работали. И теперь мы можем объединить в единое целое контекст с чанком и векторизовать уже эти конструкции как одно целое. Давайте попробуем это сделать. Запустим векторизацию объединённых объектов чанка и контекста и перейдём в нашу базу. Давайте откроем какой-нибудь чанк и посмотрите, из чего он состоит. Сначала идёт контекст. Этот отрывок относится к разделу, описывающим сферу применения гражданского законодательства. И дальше уже сам Чанг к имущественным отношениям, основанным на административном или ином властном подчинении одной стороны другой и так далее, и так далее. То есть теперь, если мы вернёмся к нашему агенту и спросим ещё раз тот же самый вопрос, давайте посмотрим, с каким типом данных уже будет работать наш агент. Обратите внимание, когда мы начали подбирать чанки, мы стали получать одновременно и контекст, то есть некоторую выжимку о том, что представляет из себя этот чанк, так и сам чанк с прямым текстом. Это дало нашей нейронке возможность более гибко подходить к ответу и, в общем и целом, точнее отвечать на наши вопросы. Как я уже сказал, этот подход очень круто работает, если у вас научные тексты, которые вам нужно векторизовать. А что делать, если у нас пдфки разношёрсные? Если у нас есть отсканированные пдфки, текстовые пдфки и даже пдфки с картинками. Здесь имеет смысл использовать уже сторонние сервисы, сторонние парсеры. Давайте посмотрим на пункт три. Векторизация любых PDF. Начало точно такое же. Мы получаем наш бинарник. Бинарник есть. А дальше мы хотим воспользоваться сторонним character recognition сервисом, который называется Mrль OCR. И, естественно, у нас тоже было видео, которое мы обсуждали сугубо этот метод. обязательно его посмотрите тоже. А сейчас мы пройдёмся по его озазам. Этот метод позволяет загрузить наши бинарники в их файловое хранилище, после этого получить URL и после этого запустить OCR. Посмотрите, каким образом это работает и в каком формате нам отдаются результаты. Результаты отдаются в формате маркдауна, сразу уже разделённые по страницам. Сюда уже проставлены какие-то технические характеристики страниц. И более того, если у вас на страницах встречаются картинки, картинки будут вычлены отдельно для того, чтобы мы могли их тоже, например, охарактеризовать, создать описательную часть с помощью нейронок и завекторизовать картинки тоже. Это очень мощный инструмент, с которым можно работать следующим образом. Мы разделяем весь ответ этой нейронки на страницы. То есть мы получаем сейчас 10 элементов, в каждом из которых есть свой marркдаун. И теперь векторизуем этот markркдаун. Смотрим, что у нас теперь появляется в нашей базе данных. И видим теперь, что у нас контент уже разбит на очень удобные маркдауны. Мы с ним можем делать что угодно. И также в метаданных появляется имя файла, из которого мы забирали этот marкdдаун. Друзья, как и всегда, автоматизации, которые мы строим в рамках нашего видео, прямо в конце видео я выгружаю вот отсюда и кладу в свой бесплатный Telegram-канал. Ссылка на него будет в описании, поэтому вы можете загрузить себе в N8N и экспериментировать. А если вам нравится, в принципе, тематика искусственного интеллекта и вы хотите развиваться в ней, и вам импонирует формат подачи этого материала, то обязательно залетайте в нашу прогруппу. Мы там обсуждаем мегаглубокие темы про искусственный интеллект со сложной технической информацией. Туда выкладываются исходные коды и материалы наших автоматизаций. И там масса материалов, как для новичков, так и для про. Обязательно присоединяйтесь. Ну а нам осталось обсудить ещё один метод. Этот метод как раз глубоко технический. Здесь придётся писать код, но мне важно раскрыть, в чём его суть. Если мы ещё раз посмотрим на файл, с которым мы работаем, мы понимаем, что у него есть очень жёсткая иерархия и структура. И когда мы векторизуем данные обычными способами, размер чанков задаётся чётко. Поэтому иногда бывают моменты, когда чанк соответствует некоторой минимальной структуре, а бывают случаи, когда чанки захватывают сразу несколько статей или глав. При этом мы знаем, что часто случаются кейсы, которые требуют векторизации строго в соответствии со структурой документов. Поэтому здесь, конечно же, нужно писать код, подстраиваться под структуру разных типов документов, но это чаще всего того стоит, потому что даёт прекрасные результаты. Например, здесь вы можете увидеть, каким образом нарезаются чанки строго по структуре статьи. И даже более того, в номера прокидывается номер статьи, название статьи, номер пункта и, естественно, имя файла. И всё это хранится вот таким очень аккуратным образом в вашей базе данных, где все чанки начинаются строго со своей статьи.
И в метаданных содержатся все те ключевые знания, которые позволяют повышать качество рак значительно. Это позволяет работать с нашей векторной базой данных уникальным способом. Допустим, мы сразу можем динамически настраивать фильтры. Например, мы знаем, что нам потребуются только записи из статьи 81, хотя записей там очень много. И теперь, если мы спросим опять тот же самый вопрос: "Как признать приобретателя недвижимого имущества недобросовестным, мы увидим ошеломляющие результаты, потому что весь текст подобран строго с нашими фильтрами. Обратите внимание, номер статьи 8,1, номер статьи 8,1. И в ответе есть как сам ответ от нейронки, так и прямые цитаты и статей и даже конкретные номера и статей, и пунктов. Статья 8,1, пунктше. И теперь, если мы откроем самый исходный документ, посмотрим на статью 81 и пункт 6, мы увидим, что здесь прямо точная цитата: "Приобретатель недвижимого имущества, полагавшийся при его приобретении на данный государственного реестра, признаётся добросовестным". И это именно та цитата, к которой привела нам неронка. вот этот технический флоу, где нужно писать код, я положу свою прогруппу, и там будет сопровождающее видео, где я проговорю, в чём нюансы этого подхода, каким образом его использовать и подстраивать под свои нужды. Ну что, я надеюсь, видео было полезным. Обязательно подписывайтесь на канал. Хорошего вам дня. y