Эссе о разработке игр, мышлении и книгах

Топовые LLM фреймворки могут быть не так надёжны, как вы думаете

Месяц назад решил добавить поддержку 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 лень воспроизводить. Так что это ваш шанс зарепортить багу в топовый репозиторий. Под катом будет вся инфа, воспроизвести не сложно.

Ошибка примечательна многим:

  1. Оценка критичности ошибки очень зависит от вкусовщины, опыта и контекста. Для меня, в проектах в которых я работал, — это критическая ошибка безопасности. Но, похоже, для большинства актуальных проектов, которые используют LLM, это вообще не принципиально. Что навевает некоторые мысли о мейнстрим около-LLM разработках.
  2. Это хороший индикатор низкого уровня контроля качества кода: код ревью, тестов — всех процессов. Всё-таки это интеграция с одним из топовых провайдеров API, найти проблему можно было кучей разных способов, но ни один не сработал.
  3. Это хорошая иллюстрация порочного подхода к разработке: «копипастим из туториала и льём на прод». Чтобы допустить эту ошибку нужно было проигнорить одновременно и базовую архитектуру твоего проекта и логику вызова кода, который ты копипастишь.

В итоге я забил на эти фреймворки и впилил свой костыль, благо HTTP API для Gemini есть.

Мой вывод из этого безобразия такой: доверять коду, который под капотом у современных LLM фреймворков нельзя. Надо перепроверять, вычитывать. То, что у них написано «production ready», не значит, что они действительно production ready.

Далее расскажу подробнее про сам баг.

Далее

Места для обсуждения Feeds Fun

Продолжаю развивать свою читалку новостей: feeds.fun. Чтобы собирать информацию и людей вместе, завёл несколько ресурсов, где можно обсудить проект и найти полезную информацию:

Пока что там никого и ничего нет, но со временем обязатено будут и новости и люди.

Если вам интересен этот проект, добавляйтесь! Буду рад вас видеть и постараюсь быстро реагировать на все вопросы.

P.S. Если вы пропустили эту мою активность, то вот пост с описанием проекта.

Мигрируем с GPT-3.5-turbo на GPT-4o-mini

Угадайте когда я переключил модели.

Угадайте когда я переключил модели.

На днях OpenAI выпустила GPT-4o-mini — новую флагманскую модель для дешёвого сегмента, так сказать.

  • Говорят, работает «почти как» GPT-4o, а иногда даже круче GPT-4.
  • Почти в 3 раза дешевле GPT-3.5-turbo.
  • Размер контекста 128k токенов, против 16k у GPT-3.5-turbo.

Конечно я сразу побежал переводить на эту модель свою читалку новостей.

Если кратко подвести итоги, то это крутая замена GPT-3.5-turbo. У меня получилось сходу, не меняя промпты, заменить двух LLM агентов на одного и суммарно удешевить работу читалки раз в 5 без потери качества.

Но потом я полез тюнить промпт, чтобы сделать ещё круче, и начал сталкиваться с нюансами. О них расскажу далее.

Далее

О книге «Piranesi»

Обложка книги «Piranesi»

Обложка книги «Piranesi»

«Piranesi» одновременно продолжение магических историй Сюзанны Кларк и независимая книга.

Прямой связи с миром английской магии из «Джонатан Стрендж и мистер Норрелл» нет. При большом желании связь можно найти и даже сказать, что мир один и тот же, только в разные времена: события «Piranesi» происходят в начале 2000-ых. Но автор не дала никаких намёков на это. Поэтому я пока считаю, что миры разные.

При этом Сюзанна продолжает очень упорно и результативно копать даже не в сторону анимизма, как основы мировосприятия, а в сторону крайне холистического взгляда на мир, в противовес доминирующему нынче редукционизму.

И от последнего, меня как технаря (а значит интуитивного редукциониста в виду профессиональной деформации), жуть как штырит. Читая «Джонатана Стренджа» и «Piranesi» я ощущал как Кларк, аки Пётр Первый, рубит мне в мозгу окно в другую картину мира, иное мировосприятие. И это прекрасно.

Кстати, не путайте холистику со, скажем, инженерным взглядом на мир, а-ля системной инженерией или даже наукой. Последние про декомпозицию реальности на составные части с чёткими границами и синтез из них «чистых» моделей мира, в то время как холистика про то, что у частей нет чётких границ и они проникают друг в друга.

Но это моя интерпретация, есть интерапретации когда холистика — просто альтернативное название системного мышления/взгляда — сейчас туго с литературой на эту тему, поэтому мне сложно сказать где правда.

Итак, «Piranesi».

Далее

Блог переехал на новый движок

Документальная журналистика: процесс перевозки контента на новый движок (c) ChatGPT

Документальная журналистика: процесс перевозки контента на новый движок (c) ChatGPT

Зима не успела закончиться, а я уже выполнил один из планов на год :-D

Причём не только перевёл блог на новый движок, но и сам этот движок написал и заопенсорсил: https://github.com/Tiendil/brigid

Что будет интересным для вас.

На индексной странице появился крутой фильтр постов по тегам. Вдохновлённый feeds.fun. Попробуйте поиграть с ним. Пока он доступен только для больших экранов — на мобилках не увидите — поправлю в будущем.

Посты должны стать читаемее, сайт — удобнее, красивее, быстрее.

Никаких cookies и корпоративных трекеров. Как трекер пока использую облачный plausible.io позже подниму свой инстанс.

Мультиязычность. Большинство новых постов будут доступны на русском и английском. Постепенно буду переводить интересные старые посты.

Исходники постов также открыты и лежат в отдельном репозитории: https://github.com/Tiendil/tiendil-org-content

Далее