Поделиться через


Важные понятия и рекомендации разработчиков по созданию решений для создания генерированных решений ИИ

Большие языковые модели (LLM) удивительны, но даже они имеют свои ограничения. Разработчики должны понять эти ограничения, то, что LLM способны "вне поля", и как настроить их, чтобы получить лучшие результаты для создаваемых решений ИИ, которые они создают. В этой статье описано несколько проблем и ограничений факторов, а также объяснить распространенные способы преодоления этих проблем и управлять процессом создания контента независимо от типа созданных функций ИИ, которые вы создаете в приложении.

Инженерные проблемы при работе с LLM

Наиболее важные проблемы или ограничения, которые следует учитывать при работе с LLM:

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

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

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

  • Нет конкретных знаний о домене . Аналогично "отсечению знаний , если у вас есть частная информация, например внутренние документы компании, LLM не была обучена по этой информации и поэтому не имеет конкретных знаний о домене.

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

Общие сведения о том, где LLM получают свои сведения

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

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

  • Получение поколения off (ROG) — это традиционный способ работы LLM, где модель создает ответы исключительно на знания, на которых она была обучена, без доступа к внешней информации во время процесса создания. Знание модели является статическим, ограничено тем, что было включено в его обучающие данные до даты отсечения. Помимо творческого письма, он может отвечать на вопросы о информации, доступной на большом уровне в Интернете.

  • Получение дополненного поколения (RAG) — объединяет создаваемые возможности LLM с возможностью получения информации из внешних баз данных или документов в режиме реального времени. Модель запрашивает внешний источник, чтобы найти соответствующие сведения, которые затем используются для информирования об ответе. Такой подход позволяет модели предоставлять более точные и актуальные сведения, чем это может быть только из предварительно обученных знаний. Варианты использования включают проверку фактов, ответы на вопросы на основе данных в режиме реального времени или частных данных, относящихся к домену.

  • Получение центрического поколения (RCG) — еще большее внимание уделяется внешнему получению содержимого, часто структурируя ответы вокруг информации, полученной из внешних источников. Модель может напрямую включать большие сегменты полученного текста в выходные данные, редактирование или аннотирование, чтобы они соответствовали запросу пользователя. Этот подход можно рассматривать как гибридный подход между методами на основе извлечения и создания, где баланс может в значительной степени поддержку информации, полученной по поводу собственных возможностей генерирования модели. Варианты использования включают обобщение более длинного документа, помощь в исследованиях для сравнения и тематических исследований в нескольких аналогичных документах, а также компиляция или сортировка различных источников материала в объединенный вывод.

Хорошим примером создания извлечения (ROG) является ChatGPT. Напротив, при необходимости Copilot (через Bing) расширяет LLM с помощью внешних источников из источников новостей (и предоставления ссылок на эти источники).

На первый взгляд, звук получения дополненного поколения (RAG) и ретривного центрического поколения (RCG), так как оба включают интеграцию внешней информации в процесс создания языка. Однако они отличаются в том, как они определяют приоритеты и используют полученную информацию в процессе создания.

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

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

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

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

Понимание факторов, влияющих на работу вывода

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

Когда пользователь взаимодействует с ChatGPT, дизайн пользовательского интерфейса дает иллюзию длительного сеанса чата, который поддерживает состояние в течение нескольких обратных обменов между вами и LLM. В действительности для данного сеанса чата все запросы и все ответы LLM (также известные как завершения) отправляются с каждым новым запросом. Таким образом, по мере роста беседы вы отправляете все больше текста в LLM для обработки — все предыдущие запросы и завершения. ChatGPT использует весь контекст сеанса чата ( а не только текущий запрос) при создании ответа на текущий запрос. Весь сеанс чата называется окном контекста.

Существует ограничение длины окна контекста в зависимости от версии ChatGPT, с которым вы работаете. Любая часть беседы чата, превышающая ограничение длины окна контекста, будет игнорироваться при создании ответа на последний запрос.

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

Что такое ограничение контекстного окна ChatGPT? Или, скорее, сколько слов может работать с ChatGPT? Ограничение контекстного окна зависит от модели LLM, версии и выпуска, с которым вы работаете. Кроме того, длина контекста измеряется в токенах, а не в словах. Маркеры — это наименьшие единицы текста, которые модель может понять и создать. Эти единицы могут быть словами, частями слов (например, слогами или слогами), или даже отдельными символами. Маркеры находятся в основе обработки естественного языка (NLP).

Использование маркеров влияет на два важных соображения для разработчиков:

  • Максимальное ограничение окна контекста
  • Цена за запрос и завершение

Что такое токенизация?

Токенизация — это процесс преобразования текста в маркеры. Это важный шаг подготовки данных для обучения или вывода (процесс создания завершений на основе запросов) с помощью LLM. Процесс включает несколько шагов, включая разбиение сложного текста на управляемые части (токены), которые модель может затем обрабатывать. Этот процесс может быть простым, например разделение текста по пробелам и пунктуации или более сложным, с участием сложных алгоритмов для обработки различных языков, морфологии (структура слов) и синтаксисов (расположение слов). Исследователи и разработчики LLM решают метод токенизации на основе того, что они пытаются достичь. OpenAI имеет полезную страницу , которая объясняет больше о токенизации, и даже имеет калькулятор, который иллюстрирует, как предложение или абзац разбивается на маркеры.

Как отмечается в нижней части страницы OpenAI Tokenizer, в типичных английских текстах один токен эквивалентен примерно четырем символам. Это означает, что в среднем 100 токенов примерно равны 75 слов или три четверти слова на токен.

На странице OpenAI Tokenizer также рассказывается о tiktoken, пакете для Python и JavaScript, который позволяет программно оценить количество маркеров, которые вы будете использовать для заданного запроса, отправленного в API OpenAI.

Использование маркеров влияет на выставление счетов

Каждый API OpenAI Azure имеет другую методологию выставления счетов. Для обработки и создания текста с помощью API завершения чата выставляются счета на основе количества маркеров, которые вы отправляете в виде запроса, и количества маркеров, создаваемых в результате (завершение).

Каждая модель LLM (например, gpt-3.5, gpt-3.5-turbo, gpt-4 и т. д.) обычно имеет другую цену, которая отражает объем вычислений, необходимых для обработки и создания маркеров. Много раз цена представлена как "цена за 1000 токенов" или "цена за один миллион токенов".

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

Системные и пользовательские запросы

До этого момента обсуждение сосредоточено исключительно на "запросах пользователей" — запросы, составляющие обмен между пользователем и ChatGPT.

OpenAI представил "системный запрос" (также известный как "пользовательские инструкции"), который является набором инструкций, которые вы определяете и добавляете во все беседы чата. Думайте об этом как набор мета-инструкций, которые вы хотите, чтобы LLM всегда наблюдал каждый раз при запуске нового сеанса чата. Например, можно задать системный запрос на "всегда реагировать в поэтической форме хайку". С этого момента каждый новый запрос к ChatGPT приводит к тому, что хайку содержит ответ.

Хотя "ответ в форме haiku" не является полезным примером, он иллюстрирует идею о том, что вы можете повлиять на завершение LLM в запрос, изменив сам запрос.

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

Но изменение запроса пользователя — это только один метод для улучшения взаимодействия с созданием текста для пользователей.

Методы улучшения возможностей создания текста для пользователей в ChatGPT

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

  • Программное изменение запросов пользователя
  • Реализация конвейера вывода
  • Получение дополненного поколения (рассматривается в других статьях)
  • Уточнение (рассматривается в других статьях)

Программное изменение запросов пользователей

С программной точки зрения нет специального API для добавления системного запроса в беседы пользователей. При необходимости вы просто добавляете инструкции к запросу. Однако существует несколько способов улучшения запросов пользователей:

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

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

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

Реализация конвейера вывода

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

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

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

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

Существует одна предостережение по добавлению шагов предварительной обработки: при каждом добавлении вызова в конвейер вывода LLM увеличивается общая задержка (время ответа) и стоимость каждого взаимодействия с пользователем. Как опытный разработчик программного обеспечения, вы, вероятно, уже знаете об этих компромиссах, которые должны быть сделаны руководством, которые влияют на бюджет, производительность и эффективность программной системы.

В статье Создание расширенных систем расширенного создания дополненных данных подробно рассматривается в конкретных шагах по созданию конвейера вывода.

Другие факторы, влияющие на завершение

Помимо программного изменения запроса, создания конвейера вывода и других методов дополнительные сведения рассматриваются в разделе "Расширение крупной языковой модели с помощью получения дополненного поколения и тонкой настройки". Кроме того, существуют параметры, которые можно изменить при вызове API OpenAI Azure.

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

  • Температура. Управление случайностью выходных данных, созданных моделью. В нуле модель становится детерминированной, последовательно выбирая наиболее вероятный следующий маркер из обучающих данных. При температуре 1 модель балансирует между выбором маркеров высокой вероятности и введением случайности в выходные данные.

  • Максимальные маркеры: управляет максимальной длиной ответа. Установка более высокого или нижнего предела может повлиять на сведения и область создаваемого содержимого.

  • Top P (Выборка ядра): используется с температурой для управления случайностью ответа. Top P ограничивает ИИ учитывать только верхний процент вероятности массы вероятности при создании каждого токена. Более низкие значения приводят к более ориентированному и предсказуемому тексту, а более высокие значения позволяют повысить разнообразие.

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

  • Штраф присутствия: поощряет модель вводить новые понятия и термины в завершении. Наказание присутствия полезно для создания более разнообразных и творческих выходных данных.

  • Стоп-последовательности. Можно указать одну или несколько последовательностей, чтобы указать API, чтобы остановить создание дополнительных маркеров. Последовательности хранения полезны для управления структурой выходных данных, например завершение в конце предложения или абзаца.

  • Ошибка logit: позволяет изменить вероятность появления указанных маркеров в завершении. Logit Bias можно использовать для управления завершением в определенном направлении или для подавления нежелательного содержимого.

Общие сведения о защите Microsoft OpenAI

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

Во-первых, вызовы API к Службам Microsoft OpenAI автоматически фильтруют содержимое, которое он находит потенциально оскорбительным, и сообщает об этом вам во многих категориях фильтрации.

Api модерации OpenAI можно использовать непосредственно для явной проверки содержимого на наличие потенциально вредного содержимого.

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

Окончательные рекомендации, которые могут повлиять на решения по проектированию приложений

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

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

Если вы хотите начать экспериментировать с созданием решения для создания решения для создания искусственного интеллекта немедленно, рекомендуется ознакомиться с тем, как приступить к работе с чатом с помощью собственного примера данных для Python. В .NET, Java и JavaScript также доступны версии учебника.