Fabrice AI: текущая техническая реализация

В последней заметке ” Fabrice AI: Техническое путешествие” я рассказал о том, как мы прошли путь создания Fabrice AI, сделав полный круг. Я начал с использования Chat GPT 3 и 3.5. Разочаровавшись в результатах, я попытался использовать Langchain Framework для построения собственной модели ИИ поверх него, а затем вернулся к Chat GPT, когда они начали использовать векторные базы данных и значительно улучшили результаты с помощью 4o.

Вот текущий процесс обучения искусственного интеллекта Fabrice:

  • Данные для обучения (записи в блогах, URL-адреса Youtube, URL-адреса подкастов, URL-адреса PDF и URL-адреса изображений) хранятся в нашей базе данных WordPress.
  • Мы извлекаем данные и структурируем их.
  • Мы предоставляем структурированные данные Open AI для обучения с помощью API Assistants.
  • Затем Open AI создает базу данных векторного хранилища и сохраняет его.

Вот пример фрагмента структурированных данных. Каждый фрагмент контента имеет свой собственный JSON-файл. Мы следим за тем, чтобы не превысить лимит в 32 000 лексем.

{

“id”: “1”,

“date”: ” “,

“link”: “https://fabricegrinda.com/”,

“title”: {

“rendered”: “Что такое искусственный интеллект Фабриса?”

  },

“Категория”: “О Фабрисе”,

“featured_media”: “https://fabricegrinda.com/wp-content/uploads/2023/12/About-me.png”,

“other_media”: “”,

“knowledge_type”: “блог”,

“contentUpdated”: “Fabrice AI – это цифровое представление мыслей Фабриса, основанное на его записях в блоге и некоторых транскрибированных подкастах и интервью с помощью ChatGPT. Учитывая, что многие транскрипции несовершенны и что этот блог – лишь ограниченное представление Фабриса как личности, мы приносим извинения за неточности и недостающую информацию. Тем не менее, это хорошая отправная точка для ознакомления с мыслями Фабриса на многие темы.”

}

Это текущая техническая реализация:

  • Сайт, ориентированный на потребителя, размещен на AWS Amplify.
  • Интеграция между публичным сайтом и Open AI осуществляется через уровень API, который размещен на AWS в виде сервера Python API.
  • Мы используем MongoDB в качестве журнала для хранения всех вопросов, заданных публикой, ответов, данных Chat GPT, и URL-адресов источников.
  • Мы используем различные скрипты для структурирования данных из блога, YouTube и т.д., чтобы передать их в Open AI для обучения.
  • Мы используем функцию распознавания речи React-Speech Recognition для преобразования голосовых запросов в текст.
  • Мы также используем Google Analytics для отслеживания посещаемости сайта.

Важно отметить, что мы используем двух ассистентов:

  • Один для ответов на вопросы.
  • Один для получения URL метаданных, URL блогов, содержащих оригинальный контент, для отображения источников в нижней части ответов.

Что дальше?

  1. Улучшения преобразования речи в текст

Модель Whisper от Open AI для преобразования речи в текст более точна, чем React. Она также поддерживает несколько языков из коробки и хорошо справляется со смешанной речью, акцентами и диалектами. В результате я, скорее всего, перейду на нее в ближайшие месяцы. Тем не менее, он более сложен в настройке, так что это может занять некоторое время. Вам нужно работать с моделью, управлять зависимостями (например, Python, библиотеки) и убедиться, что у Вас достаточно оборудования для эффективной работы. Кроме того, Whisper не предназначен для прямого использования в браузерах. При создании веб-приложения Вам необходимо создать внутренний сервис для обработки транскрипции, что добавляет сложности.

  • Аватар Фабриса ИИ

Я хочу создать ИИ-аватар Fabrice, который будет выглядеть и звучать как я, и с которым можно будет вести беседу. Я оценил D-iD, но решил, что он слишком дорог для моих целей. Eleven Labs работает только с голосом. Synthesia – замечательная программа, но в настоящее время она не создает видео в реальном времени. В итоге я решил использовать HeyGen, учитывая более подходящую цену и функциональность.

Я подозреваю, что в какой-то момент Open AI выпустит свое собственное решение, и тогда вся эта работа окажется напрасной. Я спокойно отношусь к этому и перейду на решение Open AI, когда и если оно появится. На данном этапе смысл всей этой работы заключается в том, чтобы узнать, что возможно с ИИ и сколько работы требуется, чтобы помочь мне лучше понять пространство.

  • Пользовательская приборная панель

Сейчас мне нужно выполнить запрос к MongoDB, чтобы получить выдержку из вопросов и ответов за день. Я создаю простую приборную панель, на которой я смогу получать извлечения и простую статистику по количеству запросов на каждый язык, количеству запросов “речь в текст” и т.д.

  • Дополнительные источники данных

Мы только что загрузили портфолио FJ Labs в Fabrice AI. Теперь Вы можете спросить, входит ли та или иная компания в портфолио. Fabrice AI ответит кратким описанием компании и ссылкой на ее сайт.

Учитывая количество личных вопросов, которые получал ИИ Fabrice и на которые у него не было ответов, я потратил время на то, чтобы вручную пометить каждого говорящего в моем видеоролике, посвященном 50-летию , чтобы дать ему необходимый контент.

Заключение

Учитывая всю ту работу, которую я проделал за последние двенадцать месяцев по всем вопросам, связанным с искусственным интеллектом, можно сделать однозначный вывод: чем больше Вы ждете, тем дешевле, проще и лучше все становится, и тем больше вероятность того, что Open AI предложит это! А пока дайте мне знать, если у Вас возникнут вопросы.

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. Как уже упоминалось в последнем посте, я буду пересматривать заданные вопросы, чтобы дополнить базу знаний там, где есть пробелы. Я также надеюсь со временем выпустить интерактивную версию, которая будет выглядеть и звучать как я, и с которой Вы сможете разговаривать.

>