Месяц назад решил добавить поддержку 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.
Далее расскажу подробнее про сам баг.
На днях OpenAI выпустила GPT-4o-mini — новую флагманскую модель для дешёвого сегмента, так сказать.
Конечно я сразу побежал переводить на эту модель свою читалку новостей.
Если кратко подвести итоги, то это крутая замена GPT-3.5-turbo. У меня получилось сходу, не меняя промпты, заменить двух LLM агентов на одного и суммарно удешевить работу читалки раз в 5 без потери качества.
Но потом я полез тюнить промпт, чтобы сделать ещё круче, и начал сталкиваться с нюансами. О них расскажу далее.
Зима не успела закончиться, а я уже выполнил один из планов на год :-D
Причём не только перевёл блог на новый движок, но и сам этот движок написал и заопенсорсил: https://github.com/Tiendil/brigid
Что будет интересным для вас.
На индексной странице появился крутой фильтр постов по тегам. Вдохновлённый feeds.fun. Попробуйте поиграть с ним. Пока он доступен только для больших экранов — на мобилках не увидите — поправлю в будущем.
Посты должны стать читаемее, сайт — удобнее, красивее, быстрее.
Никаких cookies и корпоративных трекеров. Как трекер пока использую облачный plausible.io позже подниму свой инстанс.
Мультиязычность. Большинство новых постов будут доступны на русском и английском. Постепенно буду переводить интересные старые посты.
Исходники постов также открыты и лежат в отдельном репозитории: https://github.com/Tiendil/tiendil-org-content
Последние дни идут новости, что Sam Altman — CEO OpenAI — уволен советом директоров и вслед за ним уходит много сотрудников компании.
Точных причин не названо, формулировка борды в духе «утратил доверие».
На сколько я понимаю, основная гипотеза интернетов на текущий момент — разногласия между фракциями прогрессоров и регуляторов.
Sam Altman выступает за фракцию прогрессоров.
Если всё так, то его уход — плохая новость. На мой взгляд, самое вредное, что можно сейчас сделать для отрасли — это зарегулировать её.
Потребовалось сделать регистрацию/логин пользователей для пет-проекта. А я это жуть как не люблю, прямо до скрежета в зубах. Поэтому решил поискать что-нибудь совсем готовое, чтобы минимум кода писать и можно было однотипно использовать в будущих проектах.
В итоге нашёл несколько интересных сервисов. Забавно, при узкой предметной области они заметно отличаются друг от друга.
Далее будет моё предвзятое и не особо компетентное мнение. Сугубо для закрепления в истории результатов раскопок.
Есть три проекта, которые вызвали мой интерес:
Фич у каждого сервиса много, даже не буду пытаться перечислять. Учтите, у каждого из них уникальные их наборы. Надо проверять, что выбранный сервис умеет всё что надо и как надо.