Месяц назад решил добавить поддержку Gemini в Feeds Fun и под это дело изучал топовые LLM фреймворки — писать свой велосипед не хотелось.
В итоге нашёл стыдный баг в интеграции с Gemini в LLamaIndex. Судя по коду, он есть и в Haystack и в плагине для LangChain. А корень проблемы вообще в SDK Google для Python.
При инициализации нового клиента для Gemini код фреймворка перетирает/подменяет API ключи во всех клиентах, созданных до этого. Потому что API ключ, по-умолчанию, хранится в синглетоне.
Смерти подобно, если у вас multi-tenant приложение, и незаметно во всех остальных случаях. Multi-tenant — это когда ваше приложение работает с несколькими пользователями.
Например, в моём случае, в Feeds Fun пользователь может ввести свой API ключ, чтобы улучшить качество сервиса. Представьте какой забавный казус мог бы случиться: пользователь ввёл API ключ для обработки своих рассылок, а потратил токенов (заплатил) за всех пользователей сервиса.
Репортил только в LLamaIndex как security issue и уже 3 недели ноль реакции, для Haystack и LangChain лень воспроизводить. Так что это ваш шанс зарепортить багу в топовый репозиторий. Под катом будет вся инфа, воспроизвести не сложно.
Ошибка примечательна многим:
В итоге я забил на эти фреймворки и впилил свой костыль, благо HTTP API для Gemini есть.
Мой вывод из этого безобразия такой: доверять коду, который под капотом у современных LLM фреймворков нельзя. Надо перепроверять, вычитывать. То, что у них написано «production ready», не значит, что они действительно production ready.
Далее расскажу подробнее про сам баг.
Неожиданно столкнулся с работающим правосудием в США, причём почти ничего не делал для этого.
Какие выводы можно из этого сделать:
Когда выкладывал отчётную презентацию (слайды) по World Builders 2023 (мои посты, сайт), обещал рассказать как делал roadmap и финансовую модель для игры. Выполняю обещание.
К концу поста у нас на руках будут:
Все итоговые документы вы можете найти тут.
Ещё один из вариантов концепта Сказки 2.0.
Возможно, последний в этом формате: мне понравилось оформлять концепт в форме презентации, пока занимался в школе World Builders.
Lords Captains MMO
Да, это калька с Warhammer 40k и Rogue Trader в частности, но для концепта пойдёт.
Исследуй бесконечную вселенную на звёздном корабле с миллионами душ на борту, объединяй и развивай заброшенные миры.
Браузеры, мобильные.
Ориентированная на исследования торгово-политическая MMO PVE песочница.
EVE, Sim City, Crusader Kings, 4X игры, Rogue Trader.
Открыл для себя новые направления для мониторинга.
Авторам минус за тавтологию. Есть вычислительная механика, которая занимается численным моделированием механических процессов и про неё есть статься на вики. Этот пост не про неё.
Этот пост про computational mechanics, которая изучает абстракции сложных процессов: как эмерджентное поведения возникает из суммарного поведения / статистики низкоуровневых процессов. Например, почему стабильно Большое Красное Пятно на Юпитере, или, почему результат вычислений процессора не зависит от свойств каждого электрона в нём.
Концепт устройства, которое может существовать в конечном множестве состояний и может предсказывать своё будущее состояние (или распределения состояний?) на основе текущего.
Computational mechanics позволяет (или должно позволять) представить сложные системы как иерархию ε-machine. Тем самым появляется формальный язык для описания сложных систем и эмерджентного поведения.
Для примера, наш мозг можно представить как ε-machine. Формально, состояние мозга никогда не повторяется (напряжения на нейронах, позиции молекул нейромедиаторов, etc), но существует огромное количество ситуаций, когда мы делаем одно и то же в одних и тех же условиях.
Научно-популярное изложение: https://www.quantamagazine.org/the-new-math-of-how-large-scale-order-emerges-20240610/
P.S. Попробую копнуть в научные статьи. Расскажу, если найду что-нибудь интересное и прикладное. P.P.S. Давно думаю в сторону похожей штуки. К сожалению, повороты жизненного пути не позволяет серьёзно копать в науку и математику. Всегда радуюсь, когда сталкиваюсь с результатами копания других людей.