Месяц назад решил добавить поддержку 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 и финансовую модель для игры. Выполняю обещание.
К концу поста у нас на руках будут:
Все итоговые документы вы можете найти тут.
Назвать презентацию отчётной — моя придумка. На мой взгляд это лучше всего описывает суть презентации, так как она сильно размыта, чтобы собирать деньги с её помощью. Плюс, я не во всём согласен с её структурой и фокусом, но это то, что от нас просили.
По сути, это рассказ об итогах всех моих активностей в школе.
Слайды: https://drive.google.com/file/d/1gg0rcotCtX2g0PsJsEWFX-qdhqEf6--y/view
Все материалы по моему участию в школе смотрите в блоге по тегу World Builders.
Это не последний рассказ о World Builders. Как минимум, я расскажу как делал roadmap и финансовую модель для игры. Следите за блогом.
Продолжаю участвовать в школе World Builders. За последний месяц набросал технический прототип механик манипуляции общественным мнением.
Вы играете за главного редактора новостного агентства, который отправляет журналистов на задания, а по результатам расследований публикует статьи с фокусом на нужные (игроку) темы.
Всё интересное можно найти в заглавном видео, ниже текстом пройдусь по основным моментам.
От опросов про предпочтения игроков потихоньку перешёл к работе над прототипом игры.
Игра будет про новостное агентсво, где вы — главный редаткор, а ваша задача — манипулировать общественным мнением, расследуя события и выбирая коннотацию новостей: на что обратить внимение публики, что скрыть, в каком тоне преподнести темы, etc.
Поэтому всё действие будет происходить вокруг текста новостей.
Сходу можно сказать, что создавать большие простыни текста для каждой новости нет смысла — игра не про чтение новостей, а про управление ими. Поэтому разумно взаимодействие строить только на заголовках.
Но как сделать отображение новостей одновременно интересным и простым?