Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
(00:25):
И приглашенный гость Федор Павлов.
И мы сегодня будем говорить, а мы будем сегодня говорить опять про General TFI.
Мы уже с Михаилом рассказывали про юзкейсы General TFI, но там мы как-то обошли стороной про промпт-инжиниринг.
А ведь чтобы сделать ваше приложение и чтобы...
(02:08):
И дальше вопрос, как эту информацию извлекать. На самом деле, первое, что приходит в голову, а давайте просто напишем какой-нибудь к ней вопрос и посмотрим на него ответ.
И мне кажется, это ошибочная стратегия использования такой технологии, потому что это похоже на какой-то поиск, а LLM все-таки не поисковик.
(02:29):
Можно ли сравнить промот-адженеринг с...
Вот мы с тобой до подкаста обсуждали,
и ты начал приводить в качестве примера SQL.
В SQL мы говорим сейчас про query language,
не про SQL-сервер как сервер,
а именно как query language.
(03:56):
Ты на самом деле говоришь о том, что ты должен понимать, как работает релационная база данных, и как устроена таблица, и как устроен сам query language.
Здесь похожая история. Ты должен понимать, как работает LLM, на что она реагирует, какими словами, прям в прямом смысле словами, инструкциями можно заставить ее вести так или иначе.
(06:51):
задачи непосредственно зачем мне нужен prompt engineering я поясню здесь наверное немножко
вот я когда пишу код а вот открываю вижу студию у меня есть замечательная amazon
q девелопер или я мне нужно сделать какой-то summary моего звонка я открываю клоуд в
плей-крауде mpd rock а просто пишу сделаем не summary вроде как бы это prompt и
(07:39):
Ну, условно, там я, опять же, пишу код, митинги, кучу документации, еще что-то.
Нужно ли мне погружаться в те бестпрактисы, в которые мы сейчас с тобой дальше пойдем шаг за шагом?
Или же достаточно остановиться на уровне простых, подготовленных, небольших описаний, что нужно сделать?
(09:32):
Слушайте, дальше, если хотите увеличить производительность, улучшить и стать максимально продуктивными в вашей профессии домохозяйки, перечеркиваю, разработчика.
Мне кажется, мы уже долго подводим, рассказывая, насколько это важно.
Пора, согласен.
Так, с чего же нужно начинать?
(09:53):
Какие, вот мы говорили несколько раз слово «это».
(11:04):
На один и тот же вопрос можно очень по-разному ответить, в зависимости от того, в каком контексте вы находитесь.
Контекста у нас в данный момент пока нет.
Мы с вами только-только начали писать промт, еще никакого контекста нет.
LLM содержит информацию, ну, будем считать, условно, всего публичного открытого интернета.
И она видела очень много разных контекстов.
Как только вы ей говорите «ты...»
(12:12):
Да, значит, первый наш пассаж, который говорил «будь ясен и директивен», он вообще относится к промту в целом.
А, в целом.
Да, в целом, ко всем его частям. И первая часть — это, конечно, задать роль, кто ты.
Окей, хорошо, дальше.
Что следующее. Если вы должны что-то запомнить из нашего сегодняшнего подкаста, самая мощная технология, которая просто кардинально улучшает...
(12:56):
Вы хотите классифицировать веб-страничку.
Допустим, это веб-страница вашего клиента,
и вы хотите понять, к какой индустрии относится эта страничка.
Вы даете текст какой-то страничке, которую вы уже знаете, как пример,
и даете ответ, что эта индустрия такая-то.
И так несколько раз.
(13:17):
Другой пример, например, извините за тавтологию,
но конфигуратор каких-то продуктов.
(13:47):
И вот вы таких серию нескольких примеров даете.
Как много нужно примеров дать?
На самом деле, зависит от вашего контекстного окна.
Сейчас, в принципе, в современных моделях
контекстное окно достаточно большое,
поэтому можно дать и сотню примеров.
Но даже если вы дадите 3-5,
это уже кардинально улучшит качество ответа,
чем просто без примеров.
(14:08):
Слушай, а если мы создаем какого-то такого более...
Я, на самом деле, не понял этого вопроса, но одну часть из того вопроса я понял. Можно ли синтезировать данные? Да, можно. На самом деле, здесь как раз включается история, что можно использовать разные модели в своей работе. Например, одна моделька синтезирует примеры запросов и ответов.
(18:36):
Ну, вообще, у нас, кстати, есть сервисы по эволюционной модели
Да, у нас же в Amazon Bedrock есть как раз сервис для сравнения моделей
И в том числе он может что-то, какие-то определенные параметры сравнивать автоматически
В том числе, например, такой параметр, как токсичность
Честно, я пока что не пробовал сам в продакшене это
(18:56):
Но звучит очень интересно, и мы с Витей обсуждали это пару эпизодов назад в новостном выпуске
(20:03):
Обычно это тег «examples». Очень хорошо, если эти теги, само название тегов несет в себе какой-то смысл релевантный.
На самом деле у модели нет требования, чтобы раздел «примеры» назывался «примеры».
Это может быть все, что угодно, но здорово, если… да, это значимое слово.
(21:57):
Когда мы пишем код, сколько дебатов, как называть переменные. И если мы называем просто переменную типа а, и потом что-то с ней делаем, ну черт пойми, что это значит. А если мы называем это, не знаю, скор, то мы уже понимаем, что, ну, наверное, это будет уже какой-то скор для чего-то там.
Здесь, наверное, такой же посыл,
(22:18):
что вы можете называть это как хотите,
но если это будет осмысленно,
во-первых, это будет и читать в будущем проще для вас,
так и для модели будет проще понимать.
Да, модельно это реагирует действительно.
А вы, кстати, переменные массивов
во множественном числе ставите.
(24:26):
Прям шаг за шагом, что модель должна сделать со всем тем добром,
которое вы ей в промте написали.
И вы обычно пишете конструкцию подобного рода.
Пожалуйста.
Ну, окей, пожалуйста, можно пустить.
Например, там, посмотри на примеры.
Возьми входной текст, указанный в теге «текст».
(25:45):
Одна из важных инструкций, это тоже хороший лайфхак, в инструкциях попросить модель думать
Вот что это значит? Ты мне так говорил, я до сих пор не могу в какой-то степени это осознать
Для меня модель условно не может думать
Мне понравилось, как ты сказал, что мы активируем правильные нейроны
(26:34):
Но как инструкция думать, как модель себя начинает вести, что происходит?
Точного ответа, конечно, у нас нет и быть не может на этот вопрос, но есть такое подозрение.
Вот в этом огромном многомерном пространстве с нейронами, которые могут быть активированы в разных состояниях,
видимо, между токенами или между какими-то векторами этого пространства есть прямые пути и более быстрые.
(27:00):
И модель тяготеет их использовать.
Да.
(29:14):
предзадана,
и этот контекст опущен.
Например, если мы с друг другом разговариваем,
мы автоматически подозреваем, что мы говорим правду.
Это, конечно, тоже не факт.
На самом деле, обычно подразумевается.
И если мы что-то отвечаем,
то подразумевается, что это логически
обосновано. Под этим есть какая-то
(29:42):
цепочка...
(31:14):
с ролями, как отвечать
и так далее, уже приведет к тому, что ты
как человек, который просто задает
вопрос, как мы называли, типа в домохозяйских
условиях или в своих
бытовых задачах, которые необходимо
решить здесь прямо сейчас, может быть,
для продакшена, но не как продакшен-приложение,
(32:26):
Для меня это звучит, знаешь, как будто мы хотим продебажить промпт.
Как будто мы пишем код на баше, мой любимый баш,
где очень тяжело дебажить по-нормальному,
то есть breakout особо там не поставишь,
и мы пишем примты.
(33:25):
e-commerce против nutra, diet and food supplies.
И достаточно большой процент классификации не сходился с ожиданиями,
пока мы не начали смотреть на reasoning, что она в этом думает.
И на самом деле поняли, что e-commerce и nutra — это пересекающееся множество.
(33:51):
Продажа баночек с таблетками
На самом деле это тоже e-commerce
Как и все остальное
Соответственно, мы поняли, что нам нужно переставлять
Вообще менять классификацию
Она получается вложенной
И так далее
Мы это поменяли
Таким образом, проблему убрали
Это, соответственно, трейсинг
Это первая задача
А вторая задача
На самом деле вы в инструкциях попросили модель думать
(34:11):
Степ-бай-степ
Ризонинг какой-то подкладывать под классификацией
(36:47):
Дальше в этой схеме вы, собственно говоря
Можете, например, использовать официальную JSON-ским-аннотацию
А можете сделать
Такую фейковую скиму
Вы пишете прям JSON-чик
В кавычках указываете поля
Двоеточие
А дальше пишете string
В котором такое-такое значение
То есть это не совсем правильная JSON-схема
(37:08):
Она больше похожа на человеческую схему
Но тем не менее
Она ее прекрасно понимает
Это вторая вещь, которую нужно сделать
То есть задать эту схему
(37:38):
Вы даете ей системный
промпт, вы даете ей user-промпт,
а потом вы начинаете за нее
генерировать ответ. Этот промпт
называется assistant, то есть вы как бы
говорите, помогаете
ей начать генерацию с первых
букв или символов.
И вы ей говорите, соответственно,
assistant, pre-fill
(38:48):
С галлюцинациями, на самом деле, можно бороться, во-первых, примерами, они у вас в контексте есть, это здорово, это с какой-то определенной степенью вероятностью помогает.
Но важный момент борьбы с галлюцинациями — это дать модели возможность сгаллюцинировать.
То есть вы такой ставите клапан защитный.
(41:32):
по смыслу похож на агентскую деятельность,
потому что вы подсовываете модели контекст,
который у нее не существовал при обучении.
Просто теперь мы говорим о том,
что это может быть не просто текстовый контекст,
вытащенный из базы знаний,
это может быть на самом деле любая информация,
полученная программным путем.
(42:18):
Федор. Михаил.
Всем спасибо большое. Всем пока-пока.
Пока. Пока-пока.
(42:53):
Продолжение следует...