Transcription
Одна из самых больших проблем, с которыми мы сталкиваемся с большими языковыми моделями, заключается в том, что их знания слишком общие и ограничены для чего-либо нового. И нет, загружать ваши документы в ChatGPT каждый раз, когда вы хотите их использовать, определенно недостаточно. Вот почему генерация с дополненным поиском является такой огромной темой, когда речь идет об ИИ, и так будет всегда. Это метод курирования внешних знаний для большой языковой модели. Таким образом, вы можете, по сути, сделать ее экспертом по вашим данным, вашим заметкам о встречах, вашим бизнес-процессам, буквально всему, что вы хотите.
Теперь проблема с RAG заключается в том, что этот шаг курирования, когда мы готовим наши документы для нашего агента, чтобы поместить их в нашу векторную базу данных, может быть очень трудным, особенно когда у нас есть не просто куча идеальных документов в формате, например, Markdown, где это необработанный структурированный текст для наших LLM. Что, если у нас нет кучи Markdown? Что, если у нас куча разных типов файлов, таких как PDF? Удачи в попытке извлечь необработанный текст из этого. Или документы Word, даже работа с аудиофайлами или видеозаписями. Как нам беспрепятственно извлечь данные из всех этих различных типов файлов для нашего RAG-конвейера?
Ну, мой друг, именно здесь на помощь приходит Dockling. Это бесплатный инструмент с открытым исходным кодом, который я покажу вам сегодня, как использовать для работы со всеми этими сложными типами данных, чтобы вы могли должным образом курировать свои данные, независимо от того, насколько они сложны, чтобы подготовить их для ваших RAG-реализаций. Таким образом, мы можем фактически работать со сложными файлами, такими как эти. Это не просто необработанный текст. У нас есть таблицы, у нас есть диаграммы, у нас есть страницы, которые разделяют вещи. Мы сможем работать со всем этим. Это то, что Dockling дает нам практически из коробки.
Итак, прямо сейчас я покажу вам, как работает Dockling и как вы можете начать с ним работать очень легко. Очень быстро можно начать работу. Я покажу вам, как работать с различными типами файлов в Dockling. И даже в конце этого видео я покажу вам полный RAG AI-агент, который я построил. Это шаблон, доступный вам прямо сейчас, который использует Dockling в RAG-конвейере для работы с различными типами файлов и даже использует некоторые стратегии разбиения, которые Dockling предоставляет нам в библиотеке. Так что это действительно помогает нам позаботиться обо всем в нашем RAG-конвейере. И, как я уже сказал, шаг курирования данных является самой важной частью RAG, потому что он закладывает основу для всего.
Итак, Dockling — это пакет Python. Все, что нам нужно сделать, чтобы начать, это установить его с помощью PIP. И затем у них есть несколько примеров, очень простых в их README здесь. Плюс, у них есть страница документации. И, следовательно, я дам ссылку на оба в описании. Отличные ресурсы, чтобы начать, конечно, вместе с этим видео. Итак, третья ссылка, которую я оставлю в описании, предназначена для полного AI-агента, который я сделал для вас, используя Dockling под капотом. И, следовательно, на верхнем уровне репозитория у нас есть агент. А затем в папке Dockling basics, здесь у нас есть несколько вариантов использования, которые я хочу вам показать. Таким образом, у вас будет очень четкое представление о том, как использовать Dockling на довольно базовом уровне. Итак, очень простые скрипты здесь, чтобы показать вам, насколько легко работать со всеми этими различными типами файлов с Dockling для наших RAG-конвейеров.
Таким образом, мы рассмотрим функции Dockling на высоком уровне и как работать с этими различными типами файлов, а затем своего рода кульминацией этого будет этот RAG-агент, который использует Dockling под капотом. И, следовательно, этот вопрос прямо здесь, ответ на который на самом деле исходит из одного из аудиофайлов, которые у меня есть в папке документов. Итак, то, что я парсю здесь для своей базы знаний, — это именно то, что у меня есть для вас в репозитории GitHub. Посмотрите на это. У нас есть рентабельность инвестиций в 458%. Я могу подтвердить, что это правильный ответ. Так что это выглядит очень, очень хорошо. И у меня даже есть полный RAG-конвейер в этом репозитории. Теперь я скажу, если вы хотите более полное RAG-реализацию, которая также использует Dockling под капотом, я провожу мастер-класс в сообществе Dynamis в эту пятницу, где я встраиваю Dockling в основной RAG-конвейер, который у меня есть как часть курса AI Agent Mastery в сообществе. Так что, если вы заинтересованы в создании RAG-конвейеров и агентов, готовых к производству, обязательно ознакомьтесь с Dynamis. И запись этого пятничного мастер-класса с Dockling будет доступна постоянно в сообществе, как и все мастер-классы, которые мы проводим каждую неделю.
Итак, давайте начнем сейчас с README, который у меня есть в папке Dockling basics. Небольшая прогрессия, которую я составил для вас, чтобы мы могли пройти основы этого довольно невероятного инструмента. Начиная с простого извлечения. Мы просто хотим извлечь из PDF-документа такие вещи, как текст и таблицы. Это первый скрипт, который у меня есть для вас здесь. и он основан на базовом примере, который у нас есть в документации Dockling. Итак, у нас есть источник, мы создаем этот объект DocumentConverter, а затем преобразуем источник в документ. И теперь у нас есть этот объект, который мы можем экспортировать в различные типы, такие как JSON, необработанный текст или Markdown. Markdown обычно считается лучшим форматом для LLM, как я сказал в начале этого видео. И, следовательно, это то, что мы хотим сделать. И посмотрите на это. Мы извлекли текст из довольно сложного PDF. Как я на самом деле покажу вам это здесь. Если я перейду к этому PDF, это не тривиально со всеми примерами кода, диаграммами и таблицами, которые у нас есть в этом. Это то, что мы извлекаем всего за несколько строк кода в Dockling. Это очень круто. И я делаю практически то же самое здесь. У меня есть путь к одному из PDF-файлов, которые у меня есть в этой папке документов. Я создаю этот DocumentConverter, преобразую его, экспортирую в Markdown, и это практически все, что я отображаю в скрипте. Итак, я на самом деле покажу вам это прямо здесь. И он обрабатывает все с помощью OCR под капотом. Итак, у нас есть распознавание объектов. На самом деле происходит довольно много машинного обучения для извлечения всего из PDF, особенно из-за мелких нюансов, которые есть у PDF с такими вещами, как таблицы, разделенные между страницами. Нам нужно справиться со всем этим. И Dockling также имеет множество встроенных функций для вас, если вы хотите настроить процесс OCR. Итак, у нас есть много различных вариантов для различных OCR-решений. Например, Tessact. Вы, возможно, слышали об этом раньше. Итак, вот оно. Это полный Markdown нашего PDF. И мы не извлекаем изображения и не захватываем или что-либо еще прямо сейчас. Есть способы сделать это и в Dockling, но он действительно распознает это. Как здесь у нас есть изображение, и мы можем обрабатывать таблицы. Как в целом это прекрасно. И это было довольно быстро. Как определенно менее 30 секунд, чтобы обработать этот весь PDF. И, следовательно, эти данные готовы к разбиению и помещению в нашу базу знаний для нашего RAG-агента. Мы доберемся до этого немного позже.
Хорошо. Теперь, для второго примера здесь, я просто хочу показать вам, насколько легко работать с несколькими различными форматами файлов в Dockling, потому что под капотом он распознает расширение файла и знает, что делать, чтобы работать с этими различными типами файлов, без того, чтобы нам приходилось делать что-то еще в нашем коде. И, следовательно, теперь во втором скрипте, посмотрите на это. Если я спущусь вниз, у меня есть список нескольких разных файлов, из которых я хочу извлечь. У меня есть пара PDF, документ Word и Markdown, чтобы показать, что мы можем продолжать работать с необработанным текстом, конечно же. Итак, мы создаем наш DocumentConverter, а затем у меня есть эта функция для обработки любого документа, и она довольно короткая в целом. Мы можем просто вызвать converter.convert по этому пути к файлу. Нам не нужно указывать расширение. Нам не нужно указывать стратегию. Я имею в виду, у нас есть некоторые варианты, если мы хотим настроить вещи, но Dockling может быть очень, очень простым и все еще работать чрезвычайно хорошо, а затем мы просто экспортируем его в Markdown, и это все, и мы просто выводим вывод каждого из этих файлов. И, следовательно, я запущу этот скрипт тоже. Я поставлю на паузу и вернусь, когда мы завершим обработку каждого из этих файлов. И вот оно. У нас есть небольшое резюме всего, что было извлечено из наших четырех разных документов. И на этот раз я также настроил его так, чтобы этот скрипт выводил в папку прямо здесь. Так что мы можем быстро взглянуть на выходные данные из наших разных файлов. И, следовательно, например, документ Word, который мы обработали. Я могу нажать сюда. У нас есть наши заметки о встречах. Вот оно. Выглядит очень хорошо. И все это структурированный Markdown. Посмотрите, как красиво выглядят эти таблицы. Это идеальные таблицы Markdown, которые он взял из документа Word. И у нас есть наш PDF, например. Еще более красивые таблицы. И он распознает, где у нас есть изображения. как это просто так хорошо. Именно то, что нам нужно теперь разбить и поместить в нашу базу знаний. И я на самом деле покажу стратегии разбиения немного позже. Но следующее, что я хочу обсудить с вами здесь, — это работа с аудиофайлами. И есть особый способ легко справиться с этим с Dockling. Итак, использование аудиофайлов в Dockling требует нескольких дополнительных зависимостей, потому что нам нужен способ получить модель для обработки речи в текст. И, следовательно, убедитесь, что вы установили FFmpeg. У меня есть инструкции в зависимости от вашей операционной системы. И затем, если мы посмотрим на требования в этом проекте, я добавил OpenAI Whisper, который является инструментом с открытым исходным кодом. Мы будем использовать Whisper Turbo в качестве нашей модели преобразования речи в текст полностью локально. Все здесь с Dockling локально, кстати, просто извлекая модели из Hugging Face. Это прекрасная вещь. И, следовательно, переходя к третьему скрипту, который у нас есть здесь, у нас есть путь к аудиофайлу. А затем мы вызываем эту функцию transcribe_audio. И эта функция довольно проста в целом. Мы настраиваем то, что называется ASR-конвейером. И есть много различных вариантов, которые вы можете настроить для своего конвейера преобразования речи в текст. Вы можете ознакомиться с документацией Dockling для этого. Я в основном придерживаюсь настроек по умолчанию, чтобы сохранить простоту, используя модель Whisper Turbo. Итак, я настроил свой DocumentConverter, как мы делали при работе с текстовыми файлами. И затем, опять же, как и с текстовыми файлами, мы вызываем converter.convert. И затем мы можем экспортировать содержимое MP3 в виде документа Markdown. В этом и заключается красота Dockling: все различные типы файлов, с которыми мы работаем, в конечном итоге становятся Markdown. Таким образом, у нас есть папка с идеальными документами, где все настроено как Markdown, готовое к помещению в нашу базу знаний. И нам нужно иметь этот дополнительный шаг подготовки данных, чтобы это произошло. Но Dockling просто делает это так легко.
Хорошо, я запустил третий скрипт вне камеры, чтобы транскрибировать наш аудиофайл длиной около 30 секунд. И в общей сложности это заняло 10 секунд и выдало 576 символов. И 10 секунд — это неплохо, учитывая, что это работает полностью локально с Dockling. Итак, вот вывод нашей транскрипции. И, конечно же, у меня есть это и в папке вывода. И даже есть временные метки для всех предложений, которые он транскрибировал. Вы можете отключить это, конечно, если хотите, но довольно приятно, что у нас есть эти метаданные для встраивания в нашу RAG-систему для любых наших аудиофайлов. Очень, очень приятно. И, следовательно, возвращаясь к нашему README здесь, последнее, что я хочу обсудить. Теперь, когда мы рассмотрели извлечение из различных типов файлов и увидели, насколько это легко с Dockling, я хочу поговорить о разбиении. Dockling может помочь нам не только с извлечением данных из наших документов, но и с разбиением данных при подготовке. И это крайне важно, потому что мы не можем просто взять текст нашего документа, как только мы его извлекли, и загрузить его в нашу векторную базу данных. Это слишком много для LLM, чтобы извлечь все сразу с помощью RAG. Мы не можем просто дать ему весь документ, особенно когда они намного больше. Что нам нужно сделать, это разделить наши документы на небольшие части информации для извлечения нашей LLM. Таким образом, она получает только этот абзац или этот список маркированных пунктов, все, что ей нужно, чтобы ответить на наш вопрос. И существует множество различных стратегий, чтобы сделать это эффективно, потому что, очевидно, проблема здесь в том, как определить эти границы? Как мы будем разделять? Мы будем разделять прямо здесь? Как это будет чанк один, а это будет чанк два, или мы будем разделять прямо здесь. Как именно мы это сделаем? Мы определенно хотим убедиться, что мы не разделяем в середине абзацев и списков маркированных пунктов, например. И именно с этим помогает Dockling. Это довольно техническая задача под капотом, но Dockling делает ее легкой с помощью нескольких различных стратегий, которые он нам предоставляет. И та, на которой я хочу сосредоточиться здесь, которая дает мне безумные результаты, — это гибридное разбиение. Это становится немного техническим, но потерпите меня, потому что я считаю это увлекательным и очень мощным. При гибридном разбиении мы используем модель встраивания для определения семантического сходства между различными, вы знаете, абзацами и предложениями, которые у нас есть в нашем документе. Таким образом, мы используем модель встраивания, чтобы выяснить, где мы можем разделить этот документ, чтобы сохранить основные идеи вместе в этих небольших частях информации для LLM. И поскольку Dockling берет на себя всю логику стратегии под капотом, его использование на самом деле довольно просто. Итак, в четвертом скрипте, который у меня есть для вас здесь, у нас есть путь к PDF, который мы хотим обработать. И, следовательно, мы преобразуем это в документ Dockling, как мы делали в наших других скриптах. Но вместо того, чтобы сразу извлекать из него текст, мы создадим этот объект гибридного чанкера. Есть несколько различных параметров, которые вы можете настроить здесь. Как только у вас это будет, вы просто вызываете chunker.chunk на документе. Итак, это наш PDF-документ, очевидно. И, следовательно, мы получим вывод, который несколько похож на Markdown, который мы видели, когда запускали первый скрипт, но на этот раз вещи будут разделены таким образом, что у нас уже будут наши чанки, готовые для вставки в векторную базу данных. Как буквально то, что у нас есть в качестве вывода из этого скрипта, это то, что мы можем поместить прямо в нашу векторную базу данных.
Итак, как и в последнем примере, я запустил четвертый скрипт вне камеры, чтобы извлечь текст из нашего PDF и разбить его с помощью гибридного разбиения. И, следовательно, в итоге у нас 23 чанка. 13 из которых составляют от 0 до 128 токенов, а 10 — от 128 до 256. И, следовательно, у нас есть некоторое разнообразие, потому что мы позволяем модели встраивания в разумных пределах. Конечно, у нас есть максимальный лимит токенов для каждого чанка. Мы позволяем модели встраивания решать, что входит в каждую небольшую часть информации, чтобы сохранить все похожие идеи вместе. И, конечно же, у меня есть вывод для чанков. И это выглядит очень хорошо. У нас есть верхний чанк с заголовком и подзаголовком. У нас есть все наши разделы вместе. Списки маркированных пунктов сохраняются в каждом чанке. Это очень идеально. Все наши разделы, пока они достаточно короткие, остаются в одном чанке. И все это исходит из сложного PDF. Как это просто прекрасная вещь. И, следовательно, на этом этапе мы можем взять все эти чанки и вставить их прямо в нашу векторную базу данных. Фактически, это то, что у меня теперь есть в качестве примера верхнего уровня для вас здесь. И я обсужу это немного позже с вами. Это полный RAG AI-агент, который берет все эти идеи. Мы парсим MP3 и PDF, и документы Word. Мы используем гибридное разбиение. Мы готовим все это. И затем у меня есть AI-агент, построенный поверх него, который может запрашивать его. И это то, что я продемонстрировал в начале этого видео.
Последнее, что я хочу сказать о Dockling, прежде чем перейти к RAG-агенту, это то, что вам определенно стоит ознакомиться с примерами в их документации, если вы хотите узнать больше. У них есть так много отличных вариантов использования, которые они разработали здесь, и просто показывая вам способы настройки платформы. Например, пользовательское преобразование. Мы можем увидеть, как использовать различные OCR-бэкенды для извлечения текста из файлов, таких как наши PDF. Также у них есть этот пример визуального обоснования, который очень, очень крут. Агент не только может ссылаться на знания в нашей базе знаний, которую мы курировали с помощью Dockling, но он также может буквально выделять, как рисовать рамку вокруг части документа, из которой он получил свой ответ. Очень, очень круто. Итак, Dockling действительно обрабатывает все, что нам нужно, с точки зрения извлечения данных. И, следовательно, обычно я думаю об этом так: если я имею дело с веб-данными, то я использую Crawl for AI. Я уже рассказывал об этом на своем канале. Я даже дам ссылку на видео прямо здесь. Для всего, кроме веб-сайтов, с любыми типами документов, с которыми я имею дело, я тогда перейду к Dockling. Итак, это два инструмента, которые у меня есть в моем арсенале для создания практически любого RAG-конвейера, который я хочу. И, следовательно, обязательно дайте мне знать в комментариях, если вы хотите, чтобы я осветил больше вариантов использования с Dockling или даже показал вам, как использовать его в других платформах, таких как N8N. Я определенно хочу продолжать освещать Dockling в большем количестве контента для вас.
Хорошо, вот грандиозное завершение, потому что теперь мы объединяем все, что мы узнали о разбиении и парсинге различных типов документов, в единый RAG-агент, который у меня есть в качестве шаблона для вас. Ссылка на все это ниже. И, следовательно, прямо сейчас я просто хочу на высоком уровне рассказать, как это работает, и как Dockling вписывается в наш RAG-конвейер, и даже показать агента и инструменты, которые я даю ему для поиска нашей базы знаний, которую мы курируем с помощью Dockling. И, следовательно, этот README, который у меня есть на верхнем уровне репозитория. Это содержит обзор агента, предварительные требования, быстрое начало работы, включая настройку вашей базы данных и всех таблиц, которые у нас есть здесь. Очень легко запустить это самостоятельно, если вы хотите использовать его и развивать. И, следовательно, у нас есть схема нашей базы данных здесь. Для векторной базы данных я использую Postgress с PG Vector. И, конечно же, вы можете настроить это для использования Pine Cone или Quadrant. У них даже есть некоторые примеры с Quadrant в документации Dockling. Но да, у нас есть таблица документов здесь, где мы храним информацию более высокого уровня, такую как каждый из отдельных документов, которые у нас есть в нашей базе знаний. А затем у нас есть таблица для хранения всех чанков, которые мы создаем с помощью стратегии гибридного разбиения Dockling. А затем у нас есть функция match_chunks. Это SQL, который наш агент фактически вызывает в качестве инструмента для поиска нашей базы знаний. И, следовательно, большая часть логики с самим Dockling находится в файле chunker.py здесь, потому что именно здесь мы разбиваем наши документы. И, следовательно, у меня есть эта функция здесь, где мы передаем этот документ Dockling. Итак, это будет наш PDF или наш документ Word. И, как и в более простых примерах ранее, мы просто вызываем chunker.chunk на этом документе Dockling. Это все, что нам нужно сделать, чтобы выполнить гибридное разбиение. Это так просто. А затем мы извлекаем контекстуализированный текст. Контекстуализация в основном означает, что мы также включаем такие вещи, как заголовки и подзаголовки, которые у нас есть в Markdown. А затем мы создаем метаданные нашего чанка. Я мог бы сделать еще одно видео о метаданных, но просто предоставляя эту дополнительную информацию, которая говорит о нашем чанке. А затем мы просто добавляем это в наш список чанков, которые мы курируем. Затем мы берем эти чанки, встраиваем их с помощью модели встраивания и храним их в нашей векторной базе данных. На этом этапе больше нет обработки документов, которую нам нужно сделать, потому что с Dockling, путем парсинга наших различных типов файлов и выполнения гибридного разбиения, у нас теперь есть наш текст в точном формате, который мы теперь собираемся вставить в нашу векторную базу данных. Опять же, независимо от векторной базы данных, которую вы используете. А затем для нашего AI-агента, вы знаете, я люблю использовать Pyantic AI, если вы видели какой-либо из моих предыдущих материалов. Итак, мы используем Pydantic AI для создания нашего агента здесь. Итак, у нас есть некоторая логика здесь для настройки нашего подключения к базе данных, потому что мы передаем это в качестве зависимости нашему агенту. Итак, у нас есть хороший системный промпт здесь, а затем мы даем ему один инструмент для поиска нашей базы знаний для выполнения RAG-запроса. И, следовательно, я быстро перейду к этой функции. Search_knowledge_base. У нас есть запрос, который агент решает, по сути, искать в нашей базе знаний. Мы настраиваем подключение к базе данных. Мы встраиваем запрос с той же моделью встраивания, которую мы используем в нашем RAG-конвейере. А затем мы вызовем функцию match_chunks, которую я показал ранее. Итак, мы передаем запрос здесь. Он вернет все похожие чанки, которые у нас есть, вы знаете, по сравнению с запросом пользователя, а затем это возвращается агенту, чтобы он мог рассуждать о том, что он получил, и использовать это, чтобы помочь нам дать окончательный ответ. Это RAG в двух словах. И, следовательно, возвращаясь к нашей диаграмме здесь, мы в основном охватывали подготовку данных, но теперь я начинаю говорить о извлечении с дополненной генерацией, фактическом процессе запроса, который у нас есть, потому что мы создаем встраивание на основе этого запроса, который агент решает, что он попадает в векторную базу данных для извлечения соответствующих чанков, которые мы курировали из Dockling. Затем это передается обратно в LLM, чтобы дать нам окончательный ответ.
Хорошо, снова в терминале, мы можем запустить CLI, который запускает интерфейс чата с нашим агентом. И я уже запустил весь конвейер приема, который извлекает все документы, и он выглядит очень похоже на примеры, которые мы видели ранее, где он просто извлекает текст из каждого из документов, выполняет гибридное разбиение, помещает его в нашу базу данных. Итак, наша база знаний готова к работе. 13 документов, всего 157 чанков, все обработано Dockling. И, следовательно, теперь я могу задать ему вопросы, где явно нужно было бы обратиться к базе знаний, чтобы получить ответы для нас здесь. И это все просто фиктивные данные для поддельной компании, которую я сгенерировал для демонстрационных целей. И вот оно. Целевой доход на первый квартал 2025 года установлен на уровне 3,4 миллиона. И я считаю, что это из одного из PDF-документов, которые у нас есть. И, следовательно, на моем левом мониторе у меня есть другие вопросы, например, из одного из наших документов Word. Когда была основана Neuroflow AI? Давайте убедимся, что он дает нам ответ 2023 года. Да, вот оно. Хорошо, выглядит хорошо. Давайте зададим еще один вопрос, просто чтобы протестировать что-нибудь. Э, может быть, из одного из MP3-файлов. Итак, один из MP3-файлов, о котором я говорил, — глобальные финансы. Какой ROI достигли Global Finance? И он должен сказать, вот оно. Да. 458%. Хорошо. И каждый раз он говорит нам, что использует инструмент search_knowledge_base, который мы видели, настроенный в коде для нашего агента и в базе данных. Так что это работает феноменально. Так вот. Это все, что у меня есть для вас сегодня по Dockling. И, как я уже сказал, это один из самых важных инструментов для вашей RAG-реализации для любого агента или приложения, которое вы создаете и которому необходимо привносить внешнюю информацию в большую языковую модель. Так что определенно я хочу осветить Dockling гораздо больше в будущем, разрабатывая более конкретные варианты использования с ним, показывая некоторые из более продвинутых функций, такие как фактическое добавление подписей к изображениям, которые мы извлекаем из PDF. Есть так много других вещей, которые мы можем сделать с этим инструментом. Dockling плюс Crawl for AI — это все, что вам нужно для любых данных, которые вы должны извлечь для любого варианта использования. Так что, если вам понравилось это видео и вы с нетерпением ждете большего о RAG и AI-агентах, я был бы очень признателен за лайк и подписку. И с этим я увижу вас в следующем.