UX и AI: Паттерны программирования на промт-языках. В поисках устойчивых практик
Кажется, что появление promt-манипуляций изменяет область взаимодействия человек-машина и предлагает достаточно широкое поле для исследований: единый язык для не-программистов, конечно, фантастика, но постепенно Promt обрастает паттернами и устойчивыми последовательностями.
Обычно люди задают прямые вопросы LLM. Это называется zero-shot promting, нулевой подсказкой. Также существует паттерн коротких примеров, которые возвращают ответ. Например,
Пример вопроса от человека
Пример ответа от человека
Вопрос от человека
Какой ответ? Отвечает LLM
В коротком промте вы можете получить лучшие результаты, если продемонстрируете аргументацию, которая приводит к конкретному ответу.
Это называется "цепочка мыслей" "Chain of thoughts" https://arxiv.org/pdf/2201.11903.pdf
Цепочка мыслей в ответах предполагает, что человек должен показать “аргументацию” ответа перед тем как задавать вопрос, что качественно увеличит ответ от LLM
Пользователь пишет вопрос и ответ, в ответе показывает логику своих рассуждений.
Вопрос человека: у Маши было пять яблок, одно упало. Сколько осталось?
Ответ человека: Было 5 яблок и минус одно. Осталось 4.
Вопрос: сколько было яблок у Михаила, если 4 пропало?
Ответ LLM c рассуждением
Некоторой такой модификацией может послужить пример «Спросить самого себя» паттерна https://ofir.io/self-ask.pdf . Например, мы хотим получить в конце наименьший вариант без ошибок и проблем.
Сначала все пишет человек:
Вопрос: Кто прожил дольше, Теодор Геккер или Гарри Воан Уоткинс?
Нужны ли здесь дополнительные вопросы: Да.
Продолжение: сколько лет было Теодору Хеккеру, когда он умер? Промежуточный ответ: Теодору Геккеру было 65 лет, когда он умер. Продолжение: сколько лет было Гарри Вогану Уоткинсу, когда он умер? Промежуточный ответ: Гарри Вогану Уоткинсу было 69 лет, когда он умер.
Итак, окончательный ответ: Гарри Воан Уоткинс.
После чего задается окончательный вопрос к LLM и ответ происходит в той же форме, что кардинально уменьшает число галлюцинаций
Вы можете вызвать целенаправленные ответы, ссылаясь на концепции или аналогии (например, «представьте, что вы профессор физики. Ответьте на этот вопрос:»).
В литературе это уже назвали «меметический прокси» - «Memetic Proxy» . Кажется, что такое использование наиболее частое в русской среде, эдакий персонализм
(https://arxiv.org/pdf/2102.07350.pdf ).
Для длинных диалогов с LLM предполагается эвристика, которая зарекомендовала себя успешной MemPrompt - после уточнение предалагется промт с заметкой “Запомни”
https://arxiv.org/pdf/2201.06009.pdf
Если вы повторно запустите один и тот же запрос несколько раз, вы получите разные ответы, поэтому выбор согласованного ответа на несколько запросов повышает качество ответов. Это называется «Самосогласованность» - Self-consistency (https://arxiv.org/pdf/2203.11171.pdf). Смысл в том, чтобы маргинализировать некоторые ответы в выдаче LLM: кажется, не самым простым подходом к тому, чтобы решать задачи.
Респонденты и тестеры получают лучшие результаты с паттерном «ReAct», когда мы вызываем промежуточные мысли из LLM и связываем их с действиями связанными с поиском информации (например, «Каков возраст Вселенной?» -> «Мне нужно найти больше информации о вселенной" -> [поиск в Википедии]). Это дополняет промт постоянным поиском в вики и открытых данных
https://arxiv.org/pdf/2210.03629.pdf
Наконец есть паттерн план действий для того, чтобы решать сложные проблемы, наводя план действий (https://say-can.github.io/assets/palm_saycan.pdf). Каждый шаг плана можно использовать для генерации собственной цепочки действий, но, кажется, что такое пока может работать только если есть манипулятор или робот. Низкоуровневые навыки машин можно комбинировать с большими языковыми моделями, чтобы языковая модель давала высокоуровневые знания о процедурах выполнения сложных и протяженных во времени инструкций, а функции значений, связанные с этими навыками, давали основу, необходимую для соединения этих знаний.
Post #2174
2.03K