Если вы читаете это, у вас, вероятно, уже есть некоторый опыт использования ChatGPT. Возможно, вы использовали его, чтобы перефразировать свое электронное письмо или придумать креативные подписи для кампаний в социальных сетях. Однако большие языковые модели, такие как GPT, имеют гораздо больший потенциал, чем просто эти простые задачи.
На самом деле, мы можем применять GPT и LLM к более сложным вариантам использования в вашем производственном рабочем процессе или в вашем собственном продукте/бизнесе. Вы можете создавать сложные подсказки для многоэтапных задач в своем продукте. Вы также можете соединить их со своими функциями программирования и внешними данными, чтобы полностью раскрыть их потенциал.
В этой статье я расскажу о некоторых продвинутых способах использования GPT и покажу вам, как раскрыть всю его мощь в вашей производительности и рабочих процессах разработки продуктов. Мы изучим оперативное проектирование, оперативное создание шаблонов, оперативное связывание, встраивание и планирование.
Краткий обзор оперативной инженерии
Запрос языковой модели на один и тот же запрос разными способами может привести к совершенно разным ответам. Искусство разработки подсказок для получения конкретных высококачественных ответов называется подсказкой. Исследователи изучили множество методов, чтобы получить лучшие ответы от больших языковых моделей.
Вот некоторые распространенные полезные методы разработки подсказок:
- Предоставление контекста и спецификаций задач (подсказка Instruct). Включите контекст того, что вы пытаетесь сделать, и конкретно спросите о типе контента и формате, который вы хотите получить от языковой модели.
- Несколько подсказок. Демонстрация языковой модели нескольких пар подсказок и ответов в качестве примеров в вашей подсказке может значительно улучшить качество ответов [1]. Включите разнообразные и репрезентативные примеры, похожие на реальный запрос, который вы задаете.
- Подсказка по цепочке мыслей (CoT). Этот метод полезен для сложных логических задач. Он просит LLM сгенерировать последовательность логических рассуждений и прийти к окончательному ответу [3]. Исследователи обнаружили, что добавление «Давайте подумаем шаг за шагом» в конце подсказки работает хорошо.
- Созданные знания/внутренний поиск. Этот метод просит LLM генерировать знания, которые потенциально могут решить задачу, прежде чем решать задачу. Например, добавление «Создайте некоторые знания о запросе, чтобы ответить на вопрос» перед вашим фактическим запросом может улучшить рассуждения на основе здравого смысла в LLM.
Эти быстрые инженерные методы могут значительно улучшить качество ответа от LLM, если ваша задача может быть решена за один ход человека и чат-бота (одно сообщение от вас и один ответ от LLM). Я настоятельно рекомендую освоить эти методы, прежде чем переходить к более продвинутым навыкам, основанным на этих методах и помогающим LLM решать более сложные задачи.
Шаблоны подсказок помогают определять и повторно использовать подсказки LLM.
Если у вас есть некоторый опыт программирования, вы, вероятно, знаете, что в программировании, если мы хотим сделать что-то многократно, мы определяем функцию и вызываем ее с некоторыми параметрами позже, вместо того, чтобы писать все шаги снова и снова.
Этот способ мышления можно применить и к LLM. Если рассматривать каждую подсказку как функцию для выполнения определенной задачи, то есть части подсказки, которые являются согласованными, и части подсказок, которые меняются от контекста к контексту.
Например, если вы хотите, чтобы LLM отвечал на вопрос из определенного контекста с помощью маркеров, вы можете использовать такой шаблон, как
Answer the question from the provided context. Answer using bullet points. - -CONTEXT START - - {context} - -CONTEXT END - - Question: {query}
Вы можете просто динамически вставить {context} и {query} в шаблон перед их отправкой в LLM. Вы можете сделать это с помощью форматирования строк или с помощью таких библиотек, как LangChain [5] или Semantic Kernel [6].
Цепочка подсказок соединяет подсказки для решения сложных задач
В программировании мы можем связать одну функцию с другой функцией, вызывая вторую функцию с результатами предыдущей функции. Для комплексного решения проблем с несколькими шагами такая цепочка важна.
Когда дело доходит до подсказок большой языковой модели, вы также можете рассматривать их как функции — каждый вызов подсказки имеет вход и выход. Вы можете подавать выходные данные одной подсказки в качестве входных данных для другой подсказки.
Библиотеки, такие как LangChain, позволяют нам легко создавать цепочки подсказок [5], например, если вы хотите связать две подсказки с первой подсказкой, написавшей шутку, и второй подсказкой, объясняющей, почему шутка смешная:
from langchain.chains import SimpleSequentialChain from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain llm = OpenAI(temperature=0.9) # Define the prompts first_prompt = PromptTemplate( input_variables=["joke_topic"], template="Write a joke about: {joke_topic}", ) second_prompt = PromptTemplate( input_variables=["joke_content"], template="Explain why this joke is funny: {joke_content}", ) # Define the chain chain_one = LLMChain(llm=llm, prompt=first_prompt) chain_two = LLMChain(llm=llm, prompt=second_prompt) overall_chain = SimpleSequentialChain(chains=[chain_one, chain_two], verbose=True) # Run the chain specifying only the input variable for the first chain. joke_explanation = overall_chain.run("functional programming") print(joke_explanation)
С помощью цепочки подсказок вы можете просто соединить подсказки для очень сложных процессов, требующих нескольких шагов.
Вы также можете связать подсказки LLM (семантические функции) с функциями программирования с помощью семантического ядра Microsoft [6], что может быть очень полезно, если вы хотите интегрировать LLM в бизнес-логику вашего продукта.
Используйте вложения для сравнения текста, ответов на вопросы, семантического поиска, памяти, кластеризации и многого другого.
Для LLM, чтобы понять ваш быстрый ввод и сгенерировать вывод, тексты должны быть преобразованы в векторы в многомерном пространстве. Этот процесс называется вложением. С помощью вложений вы можете выполнить большую предварительную обработку, прежде чем попросить LLM выполнить свою работу, обойти ограничения контекстного окна или разрешить LLM получить доступ к памяти или базе данных.
Существует множество готовых к использованию методов встраивания, таких как Word2Vec, GloVe и т. д. Сами GPT OpenAI также предлагают возможность встраивания, например, модель text-embedding-ada-002 через API.
После того, как вы преобразовали тексты во вложения, вы можете сделать много вещей, которые преобразуют текст, потому что вложения в векторном пространстве содержат много информации об исходном тексте, такой как семантика, лексика и контекст. Затем вы можете вычислить сходство (например, используя косинусное сходство) между вложениями текста для сравнения текста или кластеризации похожих текстов вместе.
Вы также можете преобразовать свои собственные документы во вложения в векторный индекс или базу данных. Затем вы можете извлечь наиболее важные части из базы данных, сравнив сходство вашей подсказки и фрагментов в вашем индексе или базе данных, чтобы передать их в шаблонную подсказку для GPT. Это практически дает LLM постоянную память, выходящую за рамки только текущего разговора.
(Пошаговое руководство по созданию указателя с вашим собственным документом для бота, отвечающего на вопросы, вы можете найти: https://medium.com/design-bootcamp/a-step-by-step- руководство по созданию чат-бота на основе ваших собственных документов с помощью gpt-2d550534eea5)
Используйте LLM для планирования действий для достижения целей и полной бизнес-логики
Еще один расширенный вариант использования GPT — планирование. Если у вас есть цель, вы можете попросить GPT спланировать действия, которые могут достичь цели, из набора доступных действий (которые могут быть API или функциями). Вы можете попросить GPT итеративно спланировать доступную информацию и решить, что следует делать для достижения конечной цели.
Такое планирование может открыть большую гибкость в программах — вам не нужно записывать всю бизнес-логику, а только необходимые шаги/функции более низкого уровня, которые могут потребоваться для выполнения того, что хочет пользователь.
Например, здесь я предлагаю три API GPT: API IP_To_Location, API Location_To_Weather и API Send_Email с определенными форматами ввода и вывода. Я попросил GPT спланировать следующий шаг для достижения цели отправки электронного письма на адрес электронной почты о текущей погоде. GPT может распознать, какая информация у него уже есть, и выяснить, какой API он должен вызвать следующим. Соединив это приглашение с внешней функцией, которая выполняет API и подключает результат из API к приглашению GPT в части «Информация», GPT может шаг за шагом достичь конечной цели, вызывая необходимый API.
Semantic Kernel SDK от Microsoft также реализует нечто подобное, что позволяет LLM решать, какую семантическую функцию (подсказку) или функцию программирования следует вызывать для достижения последнего шага.
Когда я пишу эту статью, OpenAI объявила о своих подключаемых модулях для GPT, которые делают нечто подобное — вам просто нужно сообщить LLM, какие действия или API доступны для него в манифесте. LLM может решить, что он должен сделать, чтобы достичь цели пользователя.
Заключительные слова
Возможности LLM, таких как GPT, просто поразительны, и они растут в геометрической прогрессии. Пока я пишу эту статью, OpenAI анонсировала функцию плагинов, которая позволяет GPT получать доступ к Интернету, кодировать и использовать сторонние API [8]. С навыками, описанными в этой статье, и подключаемыми модулями, я считаю, что могут быть фундаментальные изменения в способах создания и использования приложений. Возможно, даже появятся новые бизнес-модели, основанные на таких плагинах.
(Если вы хотите еще больше узнать о том, как реализовать приложения с поддержкой GPT/LLM, и решить проблемы, с которыми вы можете столкнуться во время реализации, такие как память, поиск, кэширование и т. д., вы можете прочитать этот Пособие по решению общих проблем при создании GPT. /LLM приложения»)
Рекомендации
[1] Браун, Том Б. и др. Языковые модели — это малоэффективные ученики. arXiv, 22 июля 2020 г. arXiv.org, https://doi.org/10.48550/arXiv.2005.14165.
[2] Вей, Джейсон и др. Подсказка по цепочке мыслей вызывает рассуждения в больших языковых моделях. arXiv, 10 января 2023 г. arXiv.org, https://doi.org/10.48550/arXiv.2201.11903.
[3] Вей, Джейсон и др. Подсказка по цепочке мыслей вызывает рассуждения в больших языковых моделях. arXiv, 10 января 2023 г. arXiv.org, https://doi.org/10.48550/arXiv.2201.11903.
[4] Лю, Цзячэн и др. Созданные знания, побуждающие к рассуждениям на основе здравого смысла. arXiv, 28 сентября 2022 г. arXiv.org, https://doi.org/10.48550/arXiv.2110.08387.
[5] Добро пожаловать в LangChain — 🦜🔗 LangChain 0.0.118. https://langchain.readthedocs.io/en/latest/. По состоянию на 22 марта 2023 г.
[6] Семантическое ядро. Семантическое ядро, https://devblogs.microsoft.com/semantic-kernel/. По состоянию на 22 марта 2023 г.
[7] API OpenAI. https://platform.openai.com. По состоянию на 24 марта 2023 г.
[8] Плагины ChatGPT. https://openai.com/blog/chatgpt-plugins. По состоянию на 24 марта 2023 г.