LLM под капотом – Telegram
LLM под капотом
21.1K subscribers
286 photos
7 videos
10 files
550 links
Канал про разработку продуктов на базе LLM/ChatGPT. Выжимка важных новостей и разборы кейсов.
Download Telegram
А нет ли такого интерфейса, чтобы можно было загружать структурированные документы, вручную определять правила сборки ChatGPT контекста по ним, а потом уже задавать вопросы?

Клиент хочет себе надежного бизнес-ассистента, как в этом кейсе, а время на разработку (в ущерб ML/LLM) тратить не хочется. Вдруг уже есть готовый интерфейс?

Допустим, я собираю идеи для поста в Twitter про продукт компании. Хочется дать ChatGPT задачу brainstorming. У меня уже есть все материалы. Причем я точно знаю, что нужно собрать, поэтому в рулетку с embeddings играть не нужно. Я хочу вручную выбрать несколько глав из базы знаний компании про: (1) маркетинг в целом (2) сам продукт (3) отрасль продукта. Потом собрать это вместе и вставить в контекст как есть.

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

Никто не встречал такие продукты? Чтобы:
(1) поставил и добавил пользователей.
(2) вбил OpenAI ключ от компании.
(3) загрузил документы и проверил, как они разбились на части.
(4) набрал правил "сборки" контекстов chatGPT под задачи.
(5) передал сотрудникам в компании пользоваться и переиспользовать.
Готова новая версия продуктовых бенчмарков для LLM! За каждой категорией - набор тестов на основе реальных продуктовых кейсов. Скажем, marketing - это ассистент маркетолога, а CRM - это системы исправления ошибок в каталогах продуктов.

GPT-4 лидирует, как и ожидаемо. Но у него из конкуренции только GPT-3.5 и модели меньше 13B. Это все то, что я могу запускать на своем лаптопе (как описано тут).

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

Ваш, @llm_under_hood 🤗
🔥8👍1
Через два с половиной часа демка продукта на базе embeddings и индексов (кейс - персональный ассистент в компании).

Демку показываем на базе знаний клиента (голая выгрузка из confluence). Там данных куча, и эта вся куча - относительная каша. Причем клиент знает ее назубок, а база знаний - на немецом, который для LLM-ок не родной.

Из-за низкого качества исходной базы знаний, пришлось приложить немало усилий, чтобы начали выдаваться нормальные результаты. Посмотрим, что скажет клиент. Пожелайте удачи! :)

Ваш, @llm_under_hood 🤗
🔥20
Демка продукта с ассистентом удалась! Клиент был приятно удивлен качеством ответов по базе знаний. Они хотят запустить первых пользователей как можно быстрее 🎉.

Вот вопросы, к которым готовили заранее ответы (и они все пригодились) 🤔

Q: Почему задержки при поиске в 10-20 секунд?
Потому, что при происке нам нужно обработать где-то 10-15 потенциально релевантных документов в контексте вопроса. Даже с распараллеливанием, мы упираемся в задержки и лимиты OpenAI API.

Q: Можно ли это как-то ускорить?
Да, у нас есть несколько вариантов. Если получите выделенный Azure OpenAI deployment, тогда можно использовать его для скорости. Плюс наши бенчмарки отслеживают прогресс в области локальных LLM. Как только какая-нибудь локальная LLM наберет достаточно очков в категориях Docs и Reason для вашего языка, мы сможем все запустить локально на GPU. Embeddings уже работают локальные.

Q: Уходят ли куда-то наши данные?
Да, контекст вопроса и найденные обрезки документов уходят на Azure OpenAI в европейском регионе. Данные не используются для обучения, а доступ к ним ограничен, прямо как с Azure Cognitive services, которые вы уже используете.

Когда пересядем на локальные модели, данные будут полностью оставаться в вашем дата-центре.

Q: Есть ли какие-то ограничения по размеру поисковой базы?
Технических ограничений нет. Наш ассистент для автоматического исправления ошибок в каталогах вообще работает без проблем со всем интернетом :)


⭐️Особенности технической реализации
Нулевая версия работала на LangChain/LLamaIndex c использованием GPT-4. Это стандартный способ начать работу над продуктом: “сначала докажи, что оно может работать на лучшей модели, прежде чем вбухивать недели в модель послабее”.

Думали, что этого и хватит, но вылезли грабли:
(1) база знаний - полная каша
(2) язык - немецкий, он не родной для LLM.
(3) предметная область очень специфичная и запутанная

Простые игры с индексами, размерами chunks и прочими параметрами особо не помогали. Айгиз перебенчмаркал индексы LangChain & LLamaIndex в разных комбинациях и конфигурациях.

🔧 SBERT для embeddings

В процессе быстро уперлись в производительность OpenAI Ada embeddings и пересели на локальные sentence transformers (SBERT). С ними хорошо, и это теперь дефолтовый вариант для всех продуктов.

🔬Тестовый dataset - наше все!

К слову, разные варианты embeddings моделей и конфигураций - тоже бенчмаркали. Во всех бенчмарках помогал тестовый dataset: попросили носителя языка пройтись по базе знаний и составить список простых вопросов, которые можно использовать для оценки качества системы. Благодаря ему все изменения были целенаправленными и итеративными.

🚧 LangChain/LLamaIndex заменили

В процессе итеративных улучшений оказалось проще заменить LangChain/LLamaIndex, на нативные вызовы OpenAI completion. Из NLP библиотек только остались numpy, sentence_transformers, openai. Причем основного кода - 400 строчек, считая начинку промптов 😃

Более быстрый OpenAI - это Azure OpenAI. И меньше вызовов ChatGPT

В процессе скорости OpenAI не совсем радовала. Особенно, она проседает, когда просыпается США. Для решения проблем:
(1) добавление asynсio и распареллеливание запросов
(2) переключение на Azure OpenAI, где скорости лучше
(3) добавление document re-rank, который может быстро отфильтровывать явно “мусорные” документы. Тем самым остается меньше работы на ChatGPT.

💪 ChatGPT-3.5 Turbo - достаточно хорош

Для работы системы используется ChatGPT-3.5, а не ChatGPT-4! В итоговой системе его “грузоподъемности” хватает для прохождения тестовых бенчмарков с достаточно хорошим качеством.

Это восхитительно влияет на бюджет, скорость и стабильность работы.

---
Окончание - ниже, ибо этот пост @llm_under_hood не лезет в лимиты Telegram 🤗
🔥71👍1
Окончание поста. Начало - выше.

📚Структурирование баз знаний - наше все!
Единственный секрет качества в том, что выгрузку из базы знаний сконвертировали в что-то вроде графа, используя логические связи по заголовкам текста. Страница содержит все заголовки. H1 содержит текст и все заголовки ниже, итп.

При поиске по embeddings достаем фрагменты, по фрагментам находим релевантные части документов для контекста. ❗️ Достаем не страницы целиком (много слов) и не голые chunks с обрывом слов! А просто цельные части документа, содержащие самый релевантный контекст.

А потом все найденное “тащим” в document rerank + синтез ответа при помощи ChatGPT. Результат выводится клиенту в интерфейса чата - синтезированный ответ, исходные фрагменты и ссылки на оригиналы в Confluence.

Итог
В итоге получилась работающая система "умного поиска" по запутанной базе знаний (из confluence) на немецком языке. Клиент демке порадовался, а если получится запустить первых пользователей на этой неделе - будет доволен вдвойне 💫

И все это сложилось вместе благодаря тестовому набору вопросов. Благодаря им получалось оценивать качество системы и последовательно улучшать его. Заводите бенчмарки качества для своих продуктов как можно раньше! В идеале, до написания первой строчки кода. Оно реально экономит время и силы💪

Ваш, @llm_under_hood 🤗
🔥172👍1
Сейчас у OpenAI & Azure острая нехватка GPU для inference. Они либо ежедневно просаживаются под нагрузкой от спроса, либо отказываются от запуска новых пользователей в waitlists (подробности в прошлом англоязычном newsletter).

А продукты надо пилить и релизить на практике, так? Поэтому:

1️⃣ Берем талончики и встаем во все возможные waitlists заранее и про запас. Это будет план B. Ссылки:
GPT-4 at OpenAI
GPT-4 at Azure OpenAI
Claude at Anthropic
AWS Bedrock (там тоже обещали Claude завезти).

2️⃣ Ответа не ждем, а заранее собираем datasets для тестирования своих продуктов. Чтобы быть оценивать возможность замены GPT-3/4 на локальные language models. Это будет план A.

Если у кого есть вопросы насчет портирования продуктов между LLM/GPT моделями, айда в комменты! Я туда попозже еще скину последний отчет нашего продуктового бенчмарка моделей, и можно будет обсудить.

Ваш, @llm_under_hood 🤗
🔥8🤩1
Каналы, чтобы держать нос по ветру

Kumar & Solo - фигачат свою компанию, как data-driven продукт 🤩
Стартап дня. Один пост - один стартап. Иногда попадаются интересные.
addmeto и TechSparks - интересные IT новости в целом
Сиолошная - IT новости с уклоном в NLP/VR и космос
NLP и Better Data Community/NLP - технические чаты, где очень много спецов
Langchain Developers Chat - про продукты на базе LangChain. Душевные и качественные обсуждения
gonzo-обзоры ML статей

Есть еще прикольные каналы?
🔥6👍2
Завтра выкатываем ассистента компании пользователям!

В среду была демка продукта MVP клиенту. Как я уже писал, клиент захотел поскорее выкатить первым пользователям, чтобы начать собирать feedback. Поэтому прототип сегодня довели до состояния “можно пускать пользователей”, и “само падать не должно” 🤓

Что эта “доводка” включала в себя:
(1) Нормальное логгирование всех запросов/ответов (структурированные логи в файлах - минимально и достаточно)
(2) Кнопки сбора отзывов: 👍 👎
(3) Чтобы сервер не выключался по расписанию каждый вечер :D

А вот переносить вызовы GPT с OpenAI на Azure OpenAI не стали. Но не потому, что код сложный, а из-за оптимизаций и тормозов.

Выяснилось, что Айгиз умудрился оптимизировать работу системы настолько, что ей для работы нужна уже не GPT-4, а достаточна GPT-3.5 🤯 Это значит, что система работает быстрее, дешевле и надежнее!

При этом использовалась новая версия модели gpt-3.5 с максимальным контекстом в 16k. Она оказалась очень хороша и удобна для задач information retrierval. 😎

Но есть нюанс. Оказывается, на Azure OpenAI такое пока не завезли. Microsoft пока не говорит даже примерной даты 🐌

Так что тут было три варианта:
(1) переписать все на маленький gpt-3 - непонятные сроки и риски;
(2) переключить на gpt-4-32k, что сделало бы систему раз в 10 медленнее (она и так не очень быстра), а стоимость каждого запроса подняла до 1-2 евро;
(3) ничего не делать и остаться на OpenAI, пока Azure не выкатит gpt-3-16k у себя.

В итоге клиент принял правильное решение - оставить пока прототип как есть. Завтра они смогут запустить первых пользователей, а я - переключиться на обработку отзывов по ассистенту маркетолога

Ваш, @llm_under_hood 🤗

PS: кстати, скриншот интерфейса - в комментариях.
🔥11👍1
Как и обещал, небольшой update по LLM бенчмаркам. В отличие от HuggingFace/Lmsys, у нас измеряется не абстрактный accuracy, а способность модели выполнять ту или иную задачу в продукте. Оценка считается по нескольким категориям:

- docs - работа с большими документами и базами знаний
- crm - для работы с каталогами продуктов и маркетплейсами
- integrate - интеграция со сторонними апишками, сервисами и плагинами
- marketing - способность работать как ассистент маркетолога - brainstorming, idea refinement, text generation
- reason - насколько хорошо с логикой в рамках предоставленного контекста
- code - работа с кодом
- final - общий рейтинг модели

Внутри каждой категории - набор бенчмарков, которые "выдрали" из реальных продуктов.

Пока с отрывом лидирует chat-gpt, но, думаю, скоро ансамбль из обученных моделей сможет ему составить неплохую конкуренцию.

Update: бенчмарк с ансамблем.

Ваш, @llm_under_hood 🤗
🔥6👍1
Claude появилась у нас в продуктовых LLM бенчмарках! И сразу поднялась на второе место, а ее instant версия - на четвертое место 🎉

Спасибо Дмитрию (@Dimasfer) за ключик Anthropic для тестирования! 🙏

Подробнее про бенчмарки - в предыдущем посте.

Ваш, @llm_under_hood 🤗

PS: Большой Falcon на очереди, как и новая Vicuna 1.3. Там еще с интеграцией поработать придется.
👍8🔥2
В LLM Product Leaderboard добавили Luminous от AlephAlpha.

Luminous - это европейский ответ на Chat GPT. По очкам luminuous-extended-control пока даже хуже, чем vicuna 13B.

Еще добавили "open ensemble". Если верить слухам, то ChatGPT-4 - это aнсамбль из 8 экспертов, а чем локальные модели хуже?

open ensemble - в каждой категории берем лучшую не проприетарную модель (которую можно запустить локально), и используем ее результаты.

Понятно, что результаты "open ensemble" высосаны из пальца, но позволяют прикинуть потенциал использования под задачи лучших в своем классе моделей.

А сам leaderboard основан на бенчмарках, которые были "выдраны" из реальных продуктов. Чем лучше очки в категории, тем лучше модель справляется с какой-то задачей, которая важна для пользователей.

Ваш, @llm_under_hood 🤗
👍9🔥3
Перекличка! 🙌

В нашем чатике собралось много специалистов (из 170 подписчиков канала “LLM под капотом” 110 добавились прямо в чат).

Давайте представимся и познакомимся в комментариях:

(1) кто вы и чем занимаетесь?
(2) на каких кейсах специализируетесь?
(3) какие услуги вы предлагаете?

Обо мне:

Я - Ринат Абдуллин, технический консультант, помогаю запускать продукты с ML/LLM.

Я созваниваюсь с командами раз в неделю, делюсь деталями реализации фич с LLM, рассказываю про старые грабли и новые инсайты. Это позволяет командам значительно сокращать время и расходы на разработку, быстрее выкатывая продукт на рынок.

Я работал с разными командами, начиная с небольших BigData/SaaS стартапов и до запуска отдела Data Science в международной транспортной компании. Cайт, twitter, LinkedIn.

Сейчас я веду 7 кейсов продуктов на базе LLM (Q&A системы и ассистенты для компаний), делясь опытом здесь в канале. А еще отвечаю за ML & Innovation в Trustbit, веду LLM Product Leaderboard и публикую newsletter для англоязычной аудитории.

Чем занимаетесь Вы? 🤗
🔥13👍54
Новая модель LongChat с контекстом в 16k!

Её выпустили LMSYS, которые раньше сделали Vicuña.

Говорят, что качество сравнимо с Vicuña. Примерная стоимость обучения моделей с нуля на A100 за $300 + $700 (7B и 13B)

https://lmsys.org/blog/2023-06-29-longchat/
🔥7👍5
Про внедрение маркетингового ассистента, с раскрытием секретов 🤗

Описание кейса тут: кейс 👈

В прошлый четверг у меня дошли руки обработать отзывы клиента. Клиент был рад, но хотел "дообучить ассистента под себя":

(1) чтобы ассистент мог писать статьи по бОльшему числу отраслей и продуктов
(2) прокачки стиля письма ассистента в том, какие он слова использует (меньше продажного сленга и более уверенный тон), как говорит про компанию (что это надежный партнер с долгой историей на рынке), как описывает продукты.

В прошлый четверг, я улучшил прототип, "написал" пачку новых статей и отправил для проверки.

Как улучшал? 👨🏻‍💻

Сначала собрал документы про новую отрасль и продукты. Отрасль и продукты взял из маркетинговых материалов. Сконвертировал Product sheets в текстовый формат для удобства LLM. Докинул еще пару комментариев от экспертов, пометив их для системы как "важно!"

Все это я добавил в базу знаний и разметил. И сразу пометил новые секции для использования на этапах brainstorming / draft (этапы показаны на схеме)

Потом завел в базе знаний новую секцию про "company voice", куда практически 1 в 1 скопировал пожелания клиента. Пометил эту секцию для использования в написании финального текста.

После того, как я прогнал цикл написания статей пару раз, увидел, что тексты стали лучше, но агент порывается втюхивать 🛑 Втюхивать нам не надо!

Поскольку информация достается не через embeddings/векторы, а по жестким правилам, то проблема явно была в недостаточно четких указаниях.

Поэтому я просто дописал в секцию company voice:
(1) не обращайся к аудитории напрямую
(2) не дави на эмоции
(3) не используй такие слова (список)

Ну и в поставку задачи для этапа написания переписал описание роли. Вместо "самый лучший продажник" - "уверенный специалист, который информирует долгосрочных партнеров о продуктах". И оно сработало.

Результат: клиент очень рад результатам, говорит про milestone и хочет выкатить поскорее у себя.

Cамый прикол в том, что этот milestone был сделан за 2 часа в сумме. 🤪

И это очень круто. LLM - это рычаг, который во много раз увеличивает производительность:

(1) на этапе разработки - минимум кода, просто вставить информацию в базу знаний и разметить ее
(2) на этапе использования - задачи, которые отдел маркетинга клиента делал годы, теперь можно сделать за недели.

Пользуйтесь этим рычагом! 💪

Ваш, @llm_under_hood 🤗
👍19🔥4
Надоели галлюцинации? 😵

Клиент спросил, как с ними бороться, и вот что мы вместе сделали.

Продукт - площадка для продажи товаров. Что-то вроде специализированного аналога ebay/Avito/WillHaben. При выкладывании товаров, продавцам надо заполнять описание, выбирать категорию и подкатегорию. От правильного заполнения много зависит.

Но люди могут делать ошибки или просто отваливаться на этом этапе. И то и другое - плохо.

Поэтому решили сделать так - пусть пользователь загрузит фотографии и напишет пару слов от себя, а мы категорию предзаполним сами.

Естественно начинали с тестовых наборов данных. На цифрах все было достаточно неплохо.

Subcategory guessed right: 66.7%
Subcategory is within 3 options: 90.9%


Пока не стали измерять галлюцинации - сколько подкатегорий ChatGPT выдумывает вместо того, чтобы брать из предложенного списка. Вот тут и всплыла печалька.

Hallucinated categories: 63.6%

Что делать? Слушать модель!

Галлюцинации моделей - это полезная штука. Они показывают области, где модель выходит за рамки комфорта и начинает придумывать что-то свое. Такое происходит, когда в контекст подается слишком мало необходимой информации. Модель в таких случаях пытается угодить человеку. Она начинает “заполнять пробелы” за счет своей памяти, которая осталась от обучения и fine-tuning. Вот только эта память - как JPEG с максимальным сжатием, дырявая и порождает артифакты.

Ситуация становится хуже, если в контекст попадает нерелевантная информация. Модель начнет и ее притягивать за уши, умножая галлюцинации.

Поэтому, если видим галлюцинации, то начинаем смотреть на контекст - упрощать, уменьшать количество концепций и улучшать соотношение signal/noise.

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

В процессе итераций над системой промптов я постоянно прогонял через них тестовый датасет, чтобы контроллировать качество на каждом этапе. В результате я снизил клиенту количество галлюцинаций с 63.6% до 1%

Subcategory guessed right: 76.9%
Subcategory is within 3 options: 86.2%
Hallucinations: 1.0%

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

Ваш, @llm_under_hood 🤗

#клиентспросил
🔥16👍3
Смотрите, как интересно!

Июньская gpt-35-turbo-16k обогнала не только мартовскую gpt-35, но и claude-v1 на продуктовых бенчмарках.

А вот июньская GPT-4 показывает результаты чуть хуже предыдущей версии GPT-4. Похоже, что оптимизация производительности не прошла даром.
👍6🔥3👏1
GPT-4 Code Interpreter - это нечто 🤯

Это как Jupiter Notebook вместе с Junior Data Scientist, который послушно выполняет указания. График в начале - это его ответ на мой вопрос.

Я задал такой вопрос, и ChatGPT довел его до конца с первого раза!

Generate a simple SQLite schema for an online store, fill it with a realistic sample data using a generator. Then come up with a way to analyze that data with a query. Compute the answer and plot results beautifully. Add to the plot big noscript "Sample Plot Made by GPT-4 with Code Interpreter".

По пути он споткнулся об exception с datetime, сам перед собой извинился, поправил и пошёл дальше. В итоге он выдал мне готовый график.

Теперь вместо возни с юпитером буду мелкие datasets загружать в ChatGPT и просить «сделай мне красивый анализ»
🔥7👍1
Как зайти в LLM/GPT программисту?

Вышла обзорная статья от участницы нашего чата - tigris. Там и про нас говорится)

Пожалуйста, читайте и комментируйте, чтобы мотивировать её на написание более детальных статей и кукбуков! 😉

https://habr.com/ru/companies/ascon/articles/745594/
🎉9👍2🤗1
Как определить, что проект использует LangChain? 😉

Он не может по статье про Bitcoin ответить на вопрос "How is the work by "R.C. Merkle" used in this paper?"
🤔6
Словарик для разработки продуктов с LLM

В работе с клиентами у нас выработалась своя терминология. Она помогает точнее доносить идеи между командами и меньше путаться. Плюс код становится понятнее всем (спасибо Эрику Эвансу за Domain-Driven Design 🙏).

Привожу тут краткий словарик. Иллюстрация в комментах.

Контекст: Я работаю с продуктами, у которых под капотом не только LLM, но и большой набор данных. Еще не Big data, но в LLM на вход уже не влезает.

Поэтому в основе всегда лежат структурированные данные (structured data). Тут содержится вся информация, которую процесс с LLM должен учитывать при выполнении задачи. Например, это могут быть большие PDF, выгрузки из Confluence и истории переписок с клиентами.

Навыки (AI Skills) - это то, что делает конкретную работу. Обычно это цепочки GPT/LLM промптов, которые заточены на выполнение конкретных задач. Навыки достают релевантную информацию для выполнения задач выполнения. В отличие от агентов, навыки более специализированы, хорошо тестируются и легче отлаживаются.

(но ничто не мешает собрать дерево из специализированных навыков)

В теории, результаты работы системы с LLM под капотом могут быть достаточно хороши. Но это до выкатывания системы в продакшн в реальный мир к живым пользователям. Тут-то и начинают случаться нежданчики 🤣

Реальный мир - это то, что наглядно показывает различие между практикой и теорией.

В этот момент появляется обратная связь (feedback), которая поможет сделать продукт дальше. Собирайте все, начиная от лайков/дислайков, до сообщений с жалобами и метрик из бизнеса.

Feedback лучше полуавтоматически обрабатывать и интегрировать в structured data. Ваши разработчики получат новую информацию, которую позволит улучшить систему на следующей итерации разработки. Так система будет расти и развиваться.

Улучшаем, выкатываем и сообщаем пользователям про это.

Процесс можно повторять быстрыми итерациями (rapid iterations) до тех пор, пока реальное качество работы системы не достигнет желаемого уровня.

👋 А какие специфичные термины используете вы?

Ваш, @llm_under_hood 🤗

PS: Я не умею добавлять картинки в ТГ так, чтобы текст не сужало. Поэтому иллюстрация к посту - в комментах.
👏6👍2🤩2🥰1