Искусство промптинга 🥵
В последнее время изучаю техники промптинга. Основной проблемой ✨ Vibe Coding ✨ является объем данных — тот же Курсор не держит в контексте моделей весь код, а сначала ищет нужные куски кода с помощью векторного поиска (принцип работы). При разрастании проекта моделька не видит целиком код и творит фигню.
Модели с большим контекстом (> 4k) работают на Sparse Attention, который считает внимание только от некоторых "якорных" токенов (для нас — слов), что чем-то похоже на первый вариант, хоть работает намного лучше.
Ранее писал, что архитектуру кода нужно продумывать самому. Однако, и сюда добирается прогресс. В обоих случаях нужно говорить ИИ, как ему генерить код (но эти принципы подойдут не только для программирования!):
🟣 Лучше через промпт указывать ИИ на те токены, которые нужно сделать якорными. Можно подсветить токен смыслом, выделить жирным или КАПС ЛОКОМ.
🟣 В механизме внимания модель видит токены последовательно благодаря маске, сохраняя вычисленные эмбеддинги в KV cache, чтобы не пересчитывать их по нескольку раз. Поэтому токен, обозначающий некоторое понятие, должен быть в конце последовательности, чтобы в него записался смысл предыдущих токенов. Примеры: промпт от Google (Fig. 3, "END ID 0" как раз про это), определение бетона.
🟣Первые два принципа идут в связке — просим ИИ подсвечивать якорные токены через дополнительные описания так, чтобы якорный токен был в конце. Грубо говоря, описание того, что делает некоторая функция, должно идти перед тем, как задекларирована функция (или название функции дублируем в конце описания).
🟣Ставить смысловые отсечки между блоками информации. Так же можно давать числовые ID сущностям — промпт от Google (Fig. 3).
🟣Все, что связано с постановкой задачи, пусть ИИ генерит сам. То есть сначала можно сгенерировать ТЗ, попросить модель позадавать уточняющих вопросов и проч. Пусть он сам для себя сделает понятное задание, а так же продумает несколько вариантов архитектуры и выберет лучший.
🟣При поступлении большого объема информации нужно просить ИИ строить для себя выжимку в виде графа, таблицы (учитывая предыдущие пункты!!). И только потом давать задания. Пример таблицы тот же: промпт от Google (Fig. 3), пример графа (раздел 3)
В общем тема обширная и очень интересная — но инфу приходится собирать по крупицам. Сами вендоры ИИ не особо палят промпты, видимо это конкурентное преимущество на всяких LLM бенчмарках.
В последнее время изучаю техники промптинга. Основной проблемой ✨ Vibe Coding ✨ является объем данных — тот же Курсор не держит в контексте моделей весь код, а сначала ищет нужные куски кода с помощью векторного поиска (принцип работы). При разрастании проекта моделька не видит целиком код и творит фигню.
Модели с большим контекстом (> 4k) работают на Sparse Attention, который считает внимание только от некоторых "якорных" токенов (для нас — слов), что чем-то похоже на первый вариант, хоть работает намного лучше.
Ранее писал, что архитектуру кода нужно продумывать самому. Однако, и сюда добирается прогресс. В обоих случаях нужно говорить ИИ, как ему генерить код (но эти принципы подойдут не только для программирования!):
🟣 Лучше через промпт указывать ИИ на те токены, которые нужно сделать якорными. Можно подсветить токен смыслом, выделить жирным или КАПС ЛОКОМ.
🟣 В механизме внимания модель видит токены последовательно благодаря маске, сохраняя вычисленные эмбеддинги в KV cache, чтобы не пересчитывать их по нескольку раз. Поэтому токен, обозначающий некоторое понятие, должен быть в конце последовательности, чтобы в него записался смысл предыдущих токенов. Примеры: промпт от Google (Fig. 3, "END ID 0" как раз про это), определение бетона.
🟣Первые два принципа идут в связке — просим ИИ подсвечивать якорные токены через дополнительные описания так, чтобы якорный токен был в конце. Грубо говоря, описание того, что делает некоторая функция, должно идти перед тем, как задекларирована функция (или название функции дублируем в конце описания).
🟣Ставить смысловые отсечки между блоками информации. Так же можно давать числовые ID сущностям — промпт от Google (Fig. 3).
🟣Все, что связано с постановкой задачи, пусть ИИ генерит сам. То есть сначала можно сгенерировать ТЗ, попросить модель позадавать уточняющих вопросов и проч. Пусть он сам для себя сделает понятное задание, а так же продумает несколько вариантов архитектуры и выберет лучший.
🟣При поступлении большого объема информации нужно просить ИИ строить для себя выжимку в виде графа, таблицы (учитывая предыдущие пункты!!). И только потом давать задания. Пример таблицы тот же: промпт от Google (Fig. 3), пример графа (раздел 3)
В общем тема обширная и очень интересная — но инфу приходится собирать по крупицам. Сами вендоры ИИ не особо палят промпты, видимо это конкурентное преимущество на всяких LLM бенчмарках.