Стек оперативной оптимизации

Тайны эффективной оптимизации

Примечание редакции: Майк Тейлор выступит на конференции ODSC West с 30 октября по 2 ноября. Обязательно ознакомьтесь с его докладом «Оптимизация запроса с помощью GPT-4 и Langchain»!

Отличие между обычным пользователем ИИ и инженером по запросам — это тестирование. Большинство людей запускают запрос 2-3 раза и находят то, что работает достаточно хорошо. Инженеры по запросам запускают один и тот же запрос сотни раз и проводят A/B-тестирование с другими вариантами, чтобы определить, как часто он соответствует ключевым критериям оценки, вызывает значительные затраты или дает нежелательные ответы.

Стек оптимизации запросов

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

Ответы от моделей генеративных ИИ имеют элемент случайности, с которым мы раньше не сталкивались при программировании компьютера. Вы можете запустить точно такой же запрос 100 раз, и при 101-й попытке получить расистский ответ, придумать что-то или полностью не выполнить задачу. При увеличении размеров моделей и спроса на графические процессоры оптимизация запроса также позволяет сэкономить много денег.

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

Langchain

Стек оптимизации запросов

Многие инженеры ИИ имеют любовь-ненависть к открытому фреймворку Langchain, и я знаю нескольких, кто удалял его из своего продукта, чтобы позже решить вернуть его обратно. Наличие стандартных компонентов важно для отрасли, даже если стандарт не является идеальным.

Асинхронные вызовы

Это то, чего я не оценил ценность, но теперь использую все время. Если вы последовательно запускаете 100 запросов (по одному после другого), это может занять более 10 минут (дольше, если вы ограничены по скорости). Я не ожидал большого увеличения скорости от их параллельного запуска (все одновременно), но это может быть в 6 раз быстрее! OpenAI может обрабатывать несколько вызовов одновременно, даже если каждый отдельный вызов занимает некоторое время.

КОНФЕРЕНЦИЯ – ODSC West 2023

Очная и виртуальная конференция

С 30 октября по 2 ноября

Присоединяйтесь к нам на глубоком погружении в последние тренды, инструменты и техники в области data science и искусственного интеллекта, от LLM до аналитики данных и от машинного обучения до ответственного ИИ.

Логика повторных попыток

То, что мне особенно нравится в Langchain, так это его встроенная логика повторных попыток. В индустрии, где время — деньги, эта функция имеет безценную ценность. Если запрос не удался или дал нежелательные результаты, Langchain автоматизирует процесс повторного запуска, устраняя необходимость в ручном вмешательстве. Это действительно необходимо, когда вы запускаете сотни вызовов, особенно при асинхронном выполнении. Без этого это совершенно невозможно, особенно с проблемами надежности, которые преследуют сервис.

Стандартное соглашение

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

Абстрактные компоненты

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

LangSmith

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

Логирование

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

Отладка

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

Результаты тестов

Одна из интересных особенностей – это возможность интеграции результатов тестов и метрик оценки. Это не только оценки “проходит” или “проваливается”; это предоставляет глубокий анализ производительности каждого запроса, включая автоматические метрики оценки. Это глубоко интегрировано в LangChain (как и следовало ожидать), поэтому вы можете использовать все классические оценщики LangChain здесь.

Данные для настройки модели

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

GPT-4

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

Лучшее качество

Хотя LangChain позволяет абстрагировать модель, которую вы используете, есть одна модель, которая выделяется среди остальных. GPT-4 является золотым стандартом для генерации естественного языка, об этом нет сомнений. Будь вы ищете чистку электронной почты, написание кода или даже создание концепции вашей следующей маркетинговой кампании, GPT-4 предлагает непревзойденное качество вывода. Я видел, как он создает такие согласованные и контекстно связанные ответы, которые легко можно принять за текст, написанный человеком.

Медленная задержка

Теперь к подвоху – задержке. Сложность GPT-4 имеет свою цену в виде замедленной скорости работы. Если вы планируете использовать большой масштаб запросов, это может стать узким местом. Для меня это похоже на то, что у вас есть Ламборгини, который застрял в пробке – это здорово, но не полностью использовано. Это значительное соображение для проектов, требующих моментальной реакции. Именно по этой причине я часто переключаюсь на использование Anthropic’s Claude.

Самый дорогой

Качество имеет свою цену. Буквально. Вычислительные ресурсы, необходимые для генерации ответов от GPT-4, могут значительно увеличить затраты. Если у вас стартап с ограниченным бюджетом или даже предприятие, стремящееся к масштабированию, это неизбежное препятствие. Однако, учитывая его возможности, вы часто обнаружите, что окупаемость вполне оправдывает затраты. В некоторых случаях может быть лучше сначала протестировать на GPT-3.5-turbo (что более вероятно выявит ошибки), исправить их и затем переключиться на GPT-4.

Часто ненадежный

Хотя GPT-4 обеспечивает высокую производительность, у него могут возникать операционные сбои. Сервис может быть непредсказуемым; он часто выходит из строя и имеет случайные ограничения по скорости. Эта непредсказуемость может стать не только неудобством, но и остановить проект, если у вас ограниченное время, и я знаю, что это серьезное соображение для всех, кто работает над продуктами LLM. Существуют решения, такие как переключение на более простую модель при ограничении скорости, и помощь функции повтора «out-of-the-box» от LangChain, но всем нам не терпится, чтобы отрасль достигла зрелости.

IPyWidgets

Эта простая библиотека с открытым исходным кодом является самым быстрым способом создания интерфейса. Она работает в Jupyter Notebooks, где, если честно, большинство ученых-исследователей и инженеров проводят большую часть времени, и заставляет вас не откладывать работу, придерживаясь точного дизайна пикселей на экране.

Интерфейс в Notebooks

Библиотека IPyWidget’s, основанная на Notebooks, представляет собой удобный способ создания быстрого интерфейса. Когда я показал это своему соучредителю, он спросил: “зачем нам нужен интерфейс, если мы достаточно технически подкованы в чтении и редактировании кода?” Ответ заключается в том, что даже самому увлеченному программисту надоедает редактирование текста весь день, и что-то визуальное меньше напрягает мозг. Конечно, вы можете сделать это в командной строке или в электронной таблице, но компьютеры имеют графические интерфейсы по какой-то причине.

Минималистический дизайн

Библиотека предлагает минималистический стиль, придавая приоритет функциональности. Такой подход позволяет сосредоточиться на том, что действительно важно – оптимизации ваших подсказок и скриптов, не допуская отвлечений. В эпоху чересчур сложных технологий и излишнего дизайна, простота часто оказывается недооцененной. IPyWidgets делает это правильно. Если вам нужно привлечь не технических оценщиков, всегда можно создать красивый интерфейс на React позднее.

Работает в Python

Совместимость с Python и Jupyter Notebooks – значительная победа, поскольку я мыслю на языке Python. Перемещаться из Python в TypeScript и React, чтобы создать замысловатый интерфейс только для создания демонстрации и проверки работоспособности, было настоящим испытанием. Python – “лингва франка” мира искусственного интеллекта, поэтому имеет смысл иметь интерфейс, который безупречно интегрируется с остальным кодом, который вы пишете.

Показ HTML

Вы не ограничены виджетами, которые идут “из коробки”. Вы также можете отображать HTML, что расширяет возможности того, что можно отобразить. Я часто помещаю свои таблицы и графики в виджеты и форматирую их так, как мне нравится. Для оптимизации подсказок это означает отображение результатов теста строчно, сразу после завершения оценки.

Pandas

Excel в мире Python, многие карьеры в области науки о данных начались с хорошего знания Pandas. Ни один из анализов для инженерии подсказок не является особенно сложным, поэтому вам не нужно ничего более сложного, чем это.

Сводные таблицы

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

Фильтры

Благодаря своим мощным возможностям фильтрации, Pandas позволяет нарезать и анализировать данные, как шеф-повар, удостоенный звезд Мишлен. Независимо от того, ищете ли вы успешные компоненты запросов с наилучшим показателем успеха, временем ответа или любой другой метрикой, пользовательские фильтры позволяют получить детальные сведения и обнаружить важные аспекты, которые могут быть упущены.

Метрики оценки

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

Экспорт в CSV

Pandas также предлагает простой инструмент экспорта в формат CSV, позволяя использовать полученные инсайты на разных платформах или с коллегами. Pandas может быть эквивалентом Excel в мире Python, но часто бывает удобно просто поместить данные в Excel, и этот инструмент делает это легко.

Бонус: Thumb

Thumb – это созданная мной библиотека по оптимизации и тестированию запросов в стиле “open-source”, которая включает все вышеупомянутое. Я так часто использовал те же компоненты, что решил упаковать их в модуль и сделать его доступным всем в качестве проекта с открытым исходным кодом, чтобы другие могли воспользоваться и дополнить его.

Асинхронное тестирование и кэширование

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

Интеграция с LangChain и LangSmith

Конечно, Thumb полностью основан на компонентах LangChain, поэтому вы получаете все преимущества логики повторной попытки, но без необходимости заботиться о дополнительных аспектах форматирования. Настройка журналирования с LangSmith сводится к указанию одной переменной среды: LANGCHAIN_API_KEY. Если вам нужно добавить дополнительные функции или настроить их, вы можете посмотреть исходный код и вносить изменения, расширяя его, чтобы работать с ключевыми компонентами LangChain.

Интерфейс IPyWidgets

Thumb начался как простой внутренний инструмент, который я использовал для повышения эффективности своей работы, и я стараюсь сохранить это. Это означает, что вы можете быстро запустить простой пользовательский интерфейс в Jupyter Notebook, оценить множество запросов, а затем экспортировать данные и анализировать их. Хотя нет возможности создать ссылку для передачи коллегам, это сосредоточено на 80% работы, которая происходит между созданием первого запроса и его оптимизацией перед внедрением в производство. Когда запросы находятся в производстве, есть много инструментов, таких как prodigy или brat, для маркировки и оценки ответов моделей машинного обучения.

Заключение

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

Встречайтесь со мной на сцене на мероприятии OSDC West 2023, где я выступлю с докладом “Оптимизация запросов с помощью GPT-4 и LangChain.” Я продемонстрирую реальный тест с использованием этого набора инструментов, чтобы показать вам, как оптимизировать свои запросы. Если вам нужно больше информации о разработке запросов от меня, вы можете ознакомиться с моим курсом на Udemy или получить раннюю версию моей книги с O’Reilly.

Об авторе

Майк – это аналитик, технический маркетолог, который создал маркетинговое агентство с 50-ю сотрудниками (Ладдер), и его онлайн-курсы прошли более 300 тысяч человек (LinkedIn, Udemy, Vexpower). В настоящее время он работает фрилансером над проектами по генеративным ИИ, а также пишет книгу о технике генерации для издательства O’Reilly Media.