tg-me.com/llm_under_hood/48
Last Update:
Демка продукта с ассистентом удалась! Клиент был приятно удивлен качеством ответов по базе знаний. Они хотят запустить первых пользователей как можно быстрее 🎉.
Вот вопросы, к которым готовили заранее ответы (и они все пригодились) 🤔
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 🤗
BY LLM под капотом
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/llm_under_hood/48