Fabrice AI: Техническое путешествие

Как я уже упоминал в предыдущем посте, разработка Fabrice AI оказалась намного сложнее, чем ожидалось, что заставило меня изучить множество различных подходов.

Начальный подход: Индекс Llama — векторный поиск

Моя первая попытка расширить поисковые возможности Fabrice AI заключалась в использовании индекса Llama для векторного поиска. Концепция была проста: взять контент из моего блога, преобразовать его в документы Langchain, а затем преобразовать их в документы Llama. Затем эти документы Llama будут храниться в векторном индексе, что позволит мне запрашивать по этому индексу необходимую информацию.

Однако, когда я начал тестировать систему, стало очевидно, что такой подход не дает тех результатов, на которые я рассчитывал. В частности, когда я задавал системе вопросы с большим контекстом, например, «Какие самые большие ошибки совершают основатели рынка?», ИИ не смог дать вразумительных ответов. Вместо того, чтобы найти нюансы, которые, как я знал, были заложены в данных, он возвращал нерелевантные или неполные ответы.

Эта первая неудача заставила меня пересмотреть свой подход. Я понял, что просто хранить контент в векторном индексе недостаточно; механизм поиска должен понимать контекст и нюансы задаваемых вопросов. Это осознание стало первым из многих уроков, которые определили эволюцию Fabrice AI.

Хранение знаний: Хранение и поиск документов в MongoDB

Помня об ограничениях подхода с использованием индекса Llama, я рассмотрел возможность хранения документов Llama в MongoDB. Гибкая схема и ориентированная на документы структура MongoDB показались мне перспективным решением для управления разнообразным контентом, который я накапливал годами.

План состоял в том, чтобы создать более динамичный и отзывчивый поисковый опыт. Однако такой подход быстро столкнулся с проблемами. Функциональность поиска, которая, как я предполагал, будет более надежной, не оправдала ожиданий. Запросы, которые должны были возвращать соответствующие документы, вместо этого не давали никаких результатов или выдавали нерелевантный контент.

Эта неудача расстроила меня, но она также подчеркнула важный урок: метод хранения данных так же важен, как и стратегия поиска. Я начал рассматривать другие варианты, например, использование MongoDB Atlas для векторного поиска, который потенциально мог бы обеспечить необходимую мне точность и масштабируемость. Однако прежде чем остановиться на этом варианте, я хотел изучить другие подходы, чтобы определить, может ли быть более эффективное решение.

Ретривер метаданных и магазин векторов: В поисках конкретики

Одним из следующих направлений, которые я исследовал, было использование ретривера метаданных в сочетании с векторным хранилищем. Идея этого подхода заключалась в том, чтобы классифицировать огромный массив информации в Fabrice AI и затем получить ответы на основе этих категорий. Структурируя данные с помощью метаданных, я надеялся улучшить способность ИИ предоставлять конкретные, целевые ответы.

Однако и у этого метода были свои недостатки. Хотя на первый взгляд он казался многообещающим, ИИ с трудом давал точные ответы на все типы запросов. Например, когда я спросил «Оптимистичен ли автор?». Система не смогла интерпретировать вопрос в контексте соответствующего содержания. Вместо того, чтобы предоставить глубокий анализ, основанный на метаданных, она либо давала расплывчатые ответы, либо не давала их вовсе.

Этот подход преподал мне ценный урок о важности контекста в ИИ. Недостаточно просто классифицировать информацию; ИИ должен также понимать, как эти категории взаимодействуют и накладываются друг на друга, чтобы сформировать целостное понимание содержания. Без такого глубокого понимания даже самые сложные методы поиска могут оказаться неэффективными.

Структурирование знаний: Индекс SummaryTreeIndex

Продолжая совершенствовать ИИ Fabrice, я экспериментировал с созданием индекса SummaryTreeIndex. Этот подход был направлен на то, чтобы обобщить все документы в древовидном формате, позволяя ИИ перемещаться по этим обобщениям и извлекать необходимую информацию, основываясь на структуре содержания.

Идея заключалась в том, что, обобщив документы, ИИ сможет быстро определить ключевые моменты и ответить на запросы лаконичной и точной информацией. Однако этот метод также столкнулся с серьезными проблемами. ИИ с трудом давал осмысленные ответы на сложные запросы, такие как «Как принимать важные решения в жизни?». Вместо того, чтобы использовать богатый, насыщенный нюансами контент, хранящийся в резюме, ответы ИИ часто были поверхностными или неполными.

Этот опыт подчеркнул сложность баланса между широтой и глубиной в ИИ. Хотя резюме могут обеспечить высокоуровневый обзор, им часто не хватает подробного контекста, необходимого для ответа на более сложные вопросы. Я понял, что любое эффективное решение должно включать в себя как подробный контент, так и высокоуровневые резюме, позволяя ИИ использовать и то, и другое по мере необходимости.

Именно поэтому в текущей версии Fabrice AI я заставляю ИИ сначала дать краткое изложение ответа, а затем перейти к более подробной информации.

Расширяя горизонты: Индекс Графа знаний

Осознав ограничения предыдущих методов, я обратился к более сложному подходу: Индекс Графа Знаний. Этот подход предполагает построение графа знаний из неструктурированного текста, позволяя ИИ выполнять запросы на основе сущностей. Цель состояла в том, чтобы создать более динамичное и взаимосвязанное понимание контента, что позволило бы ИИ Fabrice более эффективно отвечать на сложные вопросы с большим контекстом.

Несмотря на свои перспективы, индекс Knowledge Graph также столкнулся с серьезными препятствиями. ИИ с трудом выдавал точные результаты, особенно для запросов, которые требовали глубокого понимания контекста. Например, на вопрос «Каковы справедливые оценки посевных инвестиций и серии А?» ИИ снова не смог дать релевантный ответ, что подчеркивает сложность интеграции неструктурированного текста в последовательный граф знаний.

Этот подход, хотя в конечном итоге и оказался неудачным, позволил получить важные сведения о проблемах, связанных с использованием графов знаний в ИИ. Сложность данных и необходимость точного контекста означали, что даже хорошо построенный граф знаний может не дать желаемых результатов. Еще одним недостатком индекса графа знаний была его низкая скорость. Время отклика для получения связанных документов было очень высоким по сравнению с индексом векторного хранилища.

Переоценка данных: Близнецы

После нескольких неудач я решил применить другой подход, воспользовавшись ИИ Gemini от Google. Идея заключалась в создании наборов данных из файлов JSON-CSV и последующем обучении пользовательской модели LLM на этих данных. Я надеялся, что, используя структурированные данные и надежную обучающую модель, я смогу преодолеть некоторые из проблем, которые мешали предыдущим попыткам.

Однако и этот подход столкнулся с трудностями. Процесс обучения был остановлен из-за неправильного форматирования данных, что не позволило эффективно обучить модель. Эта неудача подчеркнула важность целостности данных при обучении ИИ. Без правильно отформатированных и структурированных данных даже самые совершенные модели могут не справиться с поставленной задачей.

Этот опыт заставил меня задуматься о возможности использования BigQuery для хранения данных в формате JSON, что обеспечит более масштабируемую и надежную платформу для управления большими массивами данных, необходимых для эффективного обучения искусственного интеллекта Fabrice.

Объединение сильных сторон: Документы Langchain с Pinecone

Несмотря на все трудности, с которыми я столкнулся до сих пор, я был полон решимости найти решение, которое позволило бы ИИ Fabrice эффективно хранить и извлекать знания. Эта решимость привела меня к экспериментам с документами Langchain и Pinecone. Этот подход предполагает создание векторного хранилища Pinecone с использованием документов Langchain и вкраплений OpenAI, а затем извлечение наиболее похожих документов на основе запроса.

Этот метод оказался многообещающим, особенно когда запрос включал название документа. Например, на вопрос «Что является ключом к счастью?» ИИ смог точно найти и обобщить соответствующий контент. Тем не менее, ограничения все же были, особенно когда в запросе не было конкретных ключевых слов или названий.

Этот подход продемонстрировал потенциал сочетания различных технологий для повышения производительности ИИ. Интегрировав документы Langchain с векторным хранилищем Pinecone, я смог повысить релевантность и точность ответов ИИ, хотя и с некоторыми ограничениями.

Достижение последовательности: GPT Builder OpenAI

После изучения различных методов и технологий я обратился к GPT Builder от Open AI, чтобы консолидировать и уточнить знания, хранящиеся в Fabrice AI. Загрузив весь контент в базу знаний GPT, я стремился создать более последовательную и надежную платформу для поиска и взаимодействия с моими знаниями.

Этот подход оказался одним из самых успешных: ИИ смог предоставить лучшие результаты по целому ряду запросов. Ключом к успеху стала интеграция всех знаний в единую, целостную систему, что позволило ИИ использовать всю широту содержания при ответе на вопросы.

Как я уже упоминал в предыдущем посте, я не мог заставить его работать на моем сайте, и он был доступен только для платных подписчиков Chat GPT, что, по моему мнению, было слишком ограничено. Кроме того, хотя это было лучше, мне все еще не нравилось качество ответов, и мне было неудобно выкладывать их в открытый доступ.

Окончательная доработка: Помощники GPT, использующие модель 4o

Последний кусочек головоломки в разработке искусственного интеллекта Fabrice AI появился с внедрением GPT-помощников с помощью модели 4o. Этот подход стал кульминацией всего, чему я научился на протяжении всего проекта. Используя векторную базу данных и дорабатывая подсказки, я стремился достичь максимально возможного уровня точности и контекстуального понимания в ответах ИИ.

Этот метод подразумевал загрузку всех накопленных мною знаний в векторную базу данных, которая затем использовалась в качестве основы для взаимодействия ИИ. Векторная база данных позволила ИИ выполнять более сложный поиск, извлекая информацию на основе семантического значения запросов, а не полагаясь исключительно на совпадение ключевых слов. Это стало значительным прогрессом по сравнению с предыдущими подходами, позволив ИИ лучше понимать и отвечать на сложные вопросы с нюансами.

Одним из ключевых новшеств этого подхода была тщательная доработка подсказок. Скрупулезно разрабатывая и тестируя различные подсказки, я смог направить ИИ на предоставление более точных и релевантных ответов. Это включало в себя не только изменение формулировок подсказок, но и эксперименты с различными способами структурирования запросов, чтобы получить наилучшие возможные ответы.

Результаты были впечатляющими. Теперь ИИ мог с высокой точностью обрабатывать широкий спектр запросов, даже если вопросы были открытыми или требовали глубокого понимания контекста. Например, на вопрос «Как принимать самые важные решения в своей жизни?» ИИ дал исчерпывающий и глубокий ответ, опираясь на различные источники и точки зрения, чтобы предоставить всесторонний ответ.

Этот успех стал кульминацией сотен часов работы и бесчисленных экспериментов. Он продемонстрировал, что при правильном сочетании технологий и доработок можно создать ИИ, способный не только эффективно хранить и извлекать информацию, но и осмысленно работать с ней. Разработка GPT Assistants с использованием модели 4o ознаменовала момент, когда ИИ Fabrice по-настоящему вступил в свои права, достигнув того уровня сложности и точности, который я предполагал с самого начала. Затем API GPT Assistants был интегрирован в мой блог, чтобы позволить конечным пользователям взаимодействовать с ИИ Fabrice так, как Вы видите это в блоге прямо сейчас.

Размышляя о путешествии

Процесс разработки ИИ Fabrice показал, насколько сложна работа с ИИ, особенно когда речь идет о понимании и контекстуализации информации. Он научил меня тому, что в разработке ИИ нет коротких путей — каждый шаг, каждая итерация и каждый эксперимент являются необходимой частью пути к созданию чего-то действительно эффективного.

Забегая вперед, скажу, что мне не терпится продолжить совершенствование и расширение Fabrice AI. Как уже упоминалось в последнем посте, я буду пересматривать заданные вопросы, чтобы дополнить базу знаний там, где есть пробелы. Я также надеюсь со временем выпустить интерактивную версию, которая будет выглядеть и звучать как я, и с которой Вы сможете разговаривать.