Практическое оперативное проектирование для небольших компаний LLM

Мод Налпас
Maud Nalpas

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

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

Это справедливо и для моделей разных размеров.

Интерфейсы чата, основанные на крупных LLM, таких как Gemini или ChatGPT, часто могут давать удовлетворительные результаты с минимальными усилиями по подсказкам. Однако при работе со стандартным меньшим LLM, который не настроен точно, вам необходимо адаптировать свой подход.

Меньшие LLM менее эффективны и имеют меньший объем информации, из которой можно извлечь пользу.

Что мы подразумеваем под «меньшими LLM»?

Определить размеры LLM сложно, и производители не всегда раскрывают их.

В этом документе «меньшие LLM» означают любую модель с параметрами ниже 30B. На сегодняшний день модели с числом параметров от нескольких миллионов до нескольких миллиардов реально можно запускать в браузере на устройствах потребительского уровня.

Где используются меньшие LLM?

  • Генеративный искусственный интеллект на устройстве/в браузере , например, если вы используете Gemma 2B с API вывода LLM MediaPipe (подходит даже для устройств только с процессором) или DistilBert в браузере с Transformers.js . Загрузка модели и выполнение вывода на устройстве пользователя возможны только с помощью этих небольших LLM, чтобы обеспечить разумную загрузку через Интернет и соответствовать ограничениям памяти устройства и графического процессора/процессора.
  • Пользовательский генерирующий искусственный интеллект на стороне сервера . Небольшие модели с открытым весом, такие как Gemma 2B, Gemma 7B или Gemma 27B, доступны для запуска на вашем собственном сервере (с возможностью тонкой настройки).

Начать

Интерфейсы чата, основанные на крупных LLM, таких как Gemini или ChatGPT, часто могут давать удовлетворительные результаты с минимальными усилиями по подсказкам. Однако при работе с меньшими LLM вам необходимо адаптировать свой подход. Меньшие LLM менее эффективны и имеют меньший объем информации, из которой можно извлечь пользу.

Предоставьте контекст и точные инструкции по формату.

Чтобы добиться оптимальных результатов с небольшими LLM, создавайте более подробные и конкретные подсказки.

Например:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Ввод (обзор) Выход (рейтинг)
Более крупный LLM (Gemini 1.5) Меньший LLM (Джемма 2B)
Очень нравится посадка! Хорошо распределяет вес и удивительно удобен даже в походах на целый день. Рекомендую. 5 4 из 5 звезд**
Лямки хлипкие, при большой нагрузке начинали впиваться в плечи. 1 2/5

Хотя Gemini 1.5 обеспечивает желаемый результат с помощью этой простой подсказки, результат Gemma неудовлетворительный:

  • Формат неправильный. Мы запросили целое число для оценки.
  • Рейтинг выглядит не совсем точным. Первый отзыв достаточно восторженный, чтобы указать на 5-звездочный обзор.

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

Например:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
Ввод (обзор) Выход с меньшим LLM (Gemma 2B)

Очень нравится посадка! Хорошо распределяет вес и удивительно удобен даже в походах на целый день. Рекомендую.

Анализ: Этот отзыв является весьма положительным и подчеркивает удобство и комфорт продукта, что указывает на большое удовлетворение продуктом. Это оправдывает высокий рейтинг.

Рейтинг (целое): 5

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

**Анализ:** В обзоре подчеркивается серьезная проблема с комфортом лямок. Это также говорит о том, что изделие может не подойти для тяжелых грузов или длительных прогулок.

**Рейтинг:** 1 (худший)

Наши более сложные подсказки в сочетании с методами подсказок в несколько шагов и цепочкой мыслей дают более точные оценки.

Ожидайте ручной синтаксический анализ вывода

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

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

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

Разумные различия API

Облачные API LLM, такие как Gemini API или OpenAI, которые обычно являются точкой входа в более крупные LLM, предлагают удобные функции подсказок. Например, Gemini 1.5 Pro предлагает системные инструкции и режим JSON .

На данный момент эти функции не всегда доступны для использования пользовательских моделей или для небольших LLM, доступ к которым осуществляется с помощью API-интерфейсов искусственного интеллекта в браузере, таких как MediaPipe LLM Inference API или Transformers.js . Хотя это не обязательно является техническим ограничением, API-интерфейсы искусственного интеллекта в браузере, как правило, более компактны.

Ограничения жетонов разума

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

Кроме того, модели меньшего размера, как правило, имеют меньший лимит входных токенов. Например, Gemini 1.5 Pro имеет лимит входных токенов в 1 миллион, а модели Gemma имеют контекстное окно 8K .

Используйте функции подсчета токенов , чтобы не достичь предела.

Адаптируйте свои оценки времени

При расчете времени на проектирование учитывайте оперативность проектирования и тестирования.

Из-за различий в API и ограничений токенов вам, вероятно, потребуется больше времени и усилий, чтобы создать приглашение для меньшего LLM, чем для более крупного. Тестирование и проверка результатов LLM также может потребовать больше усилий.

Подсказка инженера или тонкая настройка?

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

Используйте точную настройку, когда:

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