В эти выходные я участвовал в 12-часовом хакатоне через Сообщество MLOps области залива Сан-Франциско при спонсорской поддержке Redis, RelevanceAI и EssenceVC. Это был мой второй хакатон и первый, который я посетил через сообщество MLOps. Начиная с 9 утра в субботу, 3 июня, мы встретились в современном офисе в Сан-Франциско с видом на Южный парк.

После кофе и закусок мы собрались в круг, представились и самоорганизовались, чтобы сформировать команды. Участниками хакатона были (1) опытные инженеры НЛП по искусственному интеллекту, (2) инженеры машинного обучения/обработки данных/данных с ограниченным опытом НЛП/текста и (3) специалисты по продуктам или инвестициям. Мы все боролись за похвалу и призы до 1500 долларов за лучшее общее решение и лучшее использование инфраструктуры Redis или инструментов RelevanceAI.

Рахул Парундекар, руководитель хакатона сообщества MLOps, и команда RelevanceAI предоставили всем участникам хакатона файлы данных .csv для всех слабых сообщений и чатов сообщества MLOps, предварительно рассчитанные вложения OpenAI в эти сообщения и блокноты Python с примерами того, как используйте API OpenAI или API RelevanceAI для текстового поиска, завершения чата и подключения к базе данных Redis. Две темы проекта для хакатона включали:

(1) Создайте Slackbot для вопросов и ответов, чтобы отвечать на конкретные технические вопросы, основанные на исторических сообщениях Slack канала сообщества MLOps.

(2) Создать инструмент для получения общей информации из неструктурированных сообщений MLOPs Community в слабом канале.

Моя команда, в которую входили Forrest Meng, Jianghong Ying, Travis Cline и я, протестировала обе реализации ноутбуков OpenAI и выбрала вариант 1 с использованием инструментов Parundekar для использования API OpenAI для обработки сообщений MLOps Community Slack. Наш проект (см. рис. 1) заключался в том, чтобы использовать новый канал Slack в качестве пользовательского интерфейса для бота вопросов и ответов Slack с помощью искусственного интеллекта. Мы также внедрили Slack Observer для чтения и хранения новых сообщений Slack сообщества MLOps и регулярно переобучаем всю систему искусственного интеллекта, чтобы бот Q&A Slack мог изучать и сохранять коллективные технические знания сообщества MLOps. Подробная информация о различных модулях описана ниже.

Модуль Slack Observer был создан с использованием Go для записи любых новых входящих сообщений MLOps Community Slack в локальную базу данных Redis с использованием шаблона проектирования публикации/подписки. Мы также создали уровень взаимодействия Python AI, который извлекал новые сохраненные вопросы Slack из базы данных Redis pub/sub, а затем использовал вложения OpenAI, вычислял и сохраняются для исторических данных MLOps Slack в векторной базе данных Redis для поиска связанных сообщений Slack. Затем первые n наиболее релевантных исторических данных Slack были сведены в ответ с использованием службы OpenAI chatCompletion, включая некоторые подсказки для определения приоритетности исторических вопросов Slack над любым сводным текстом и предоставления некоторых приблизительных рекомендаций по формат ответа. Чтобы дополнительно очистить данные для получения наиболее подходящих технических ответов на вопросы и ответы, мы ограничили набор данных, включив в него только каналы MLOps Community Slack, которые, по-видимому, были сосредоточены на технических обсуждениях и поддержке. Затем сообщение ответ передавалось в базу данных Redis pub/sub, что запускало модуль Go Slack Observer для публикации ответа в виде новой темы в пользовательском интерфейсе хакатона нашего канала Slack.

Для дополнительного визуального интереса мы также создали Embeddings Explorer как отдельное веб-приложение Svelte/JS, созданное с использованием для визуализации вложений OpenAI данных Slack MLOP для отображения кластеров связанные сообщения Slack, найденные в сообществе. UMAP или (Uniform Manifold Approximation and Projection) — популярный метод уменьшения размерности, который предполагает, что исходный набор данных лежит на гладком римановом многообразии с положительно определенной касательной в каждой точке, которую можно представить как нечеткую топологическую структуру. Алгоритм UMAP вычисляет вложения для данных на основе проекции данных на низкоразмерное представление с ближайшей эквивалентной нечеткой топологической структурой.

Мы смогли запустить наш первый сквозной тест к 15:00:

После некоторой доработки окончательного формата ответа Slackbot на вопросы и ответы у нас появилась первая работающая демонстрация. Типичная сессия вопросов и ответов с допустимым техническим вопросом будет выглядеть так:

Типичный ответ сеанса вопросов и ответов, не содержащий вопросов, получит следующий ответ об ошибке:

Если ранее в слабых каналах сообщества MLOps не было задано связанных вопросов, это был бы типичный ответ, подтверждающий этот факт и предоставляющий полезную информацию через GPT4.

По этим результатам наша команда выиграла хакатон сообщества MLOps 2023!

В целом, этот хакатон улучшил мое понимание того, как использовать OpenAI API в Python для создания текстовой поисковой системы, а также познакомил меня с потенциальным подходом к тонкой настройке базового LLM OpenAI с новыми данными и точными подсказками. Используя вложения / веса входных данных OpenAI в соответствии с узлами в большой языковой модели GPT4, можно вычислить сходство между любыми двумя сообщениями и обеспечить ранжирование прошлых данных, наиболее похожих на входной вопрос. Затем наиболее похожие прошлые данные могут быть обработаны для получения ответа, необходимого для конкретной проблемы проектирования. Чтобы узнать больше об API OpenAI, ознакомьтесь с их примерами, репозиторием github, документацией по API, личным или виртуальным классом.