У цьому модулі розглядаються ключові поняття та техніки створення ефективних підказок для генеративних AI-моделей. Те, як ви формулюєте підказку для LLM, також має значення. Ретельно продумана підказка може забезпечити кращу якість відповіді. Але що ж насправді означають такі терміни, як підказка та інженерія підказок? І як покращити вхідну підказку, яку я надсилаю LLM? На ці питання ми спробуємо відповісти у цьому та наступному розділі.
Генеративний AI здатен створювати новий контент (наприклад, текст, зображення, аудіо, код тощо) у відповідь на запити користувача. Це досягається за допомогою великих мовних моделей (LLM), таких як серія GPT ("Generative Pre-trained Transformer") від OpenAI, які навчені працювати з природною мовою та кодом.
Тепер користувачі можуть взаємодіяти з цими моделями у звичному форматі чату, без необхідності мати технічні знання чи проходити спеціальне навчання. Моделі працюють на основі підказок — користувач надсилає текстовий запит (підказку) і отримує відповідь AI (completion). Далі можна "спілкуватися з AI" у кілька етапів, поступово вдосконалюючи підказку, поки відповідь не відповідатиме очікуванням.
"Підказки" стають основним інтерфейсом програмування для генеративних AI-додатків, визначаючи, що має робити модель, і впливаючи на якість отриманих відповідей. "Інженерія підказок" — це стрімко зростаюча галузь, яка зосереджена на розробці та оптимізації підказок для отримання стабільних і якісних відповідей у масштабі.
У цьому уроці ми дізнаємося, що таке інженерія підказок, чому це важливо і як створювати більш ефективні підказки для конкретної моделі та цілей застосування. Ми розглянемо основні поняття та найкращі практики інженерії підказок, а також познайомимося з інтерактивним середовищем "пісочниці" у Jupyter Notebooks, де ці концепції можна побачити на реальних прикладах.
Після завершення цього уроку ви зможете:
- Пояснити, що таке інженерія підказок і чому вона важлива.
- Описати складові підказки та їх використання.
- Вивчити найкращі практики та техніки інженерії підказок.
- Застосовувати вивчені техніки на реальних прикладах, використовуючи endpoint OpenAI.
Інженерія підказок: Практика розробки та вдосконалення вхідних даних для спрямування AI-моделей на отримання бажаних результатів. Токенізація: Процес перетворення тексту на менші одиниці — токени, які модель може розуміти та обробляти. LLM, налаштовані на інструкції: Великі мовні моделі (LLM), які були додатково навчені на основі конкретних інструкцій для підвищення точності та релевантності відповідей.
Інженерія підказок наразі більше мистецтво, ніж наука. Найкращий спосіб розвинути інтуїцію — більше практикуватися і використовувати підхід проб і помилок, поєднуючи експертизу у предметній області з рекомендованими техніками та оптимізаціями під конкретну модель.
Jupyter Notebook, що супроводжує цей урок, надає пісочницю, де ви можете спробувати все на практиці — як під час навчання, так і в рамках завдання наприкінці. Для виконання вправ вам знадобиться:
- Ключ API Azure OpenAI — endpoint сервісу для розгорнутої LLM.
- Середовище виконання Python — для запуску Notebook.
- Локальні змінні середовища — виконайте кроки з SETUP, щоб підготуватися.
У notebook вже є стартові вправи, але ви можете додавати власні розділи Markdown (опис) та Code (запити-підказки), щоб спробувати більше прикладів чи ідей — і розвивати інтуїцію щодо створення підказок.
Хочете отримати загальне уявлення про те, що охоплює цей урок, перш ніж зануритися у деталі? Перегляньте цей ілюстрований гід, який допоможе зрозуміти основні теми та ключові висновки, на які варто звернути увагу. Дорожня карта уроку проведе вас від розуміння базових понять і викликів до їх вирішення за допомогою відповідних технік інженерії підказок і найкращих практик. Зверніть увагу, що розділ "Розширені техніки" у цьому гіді стосується матеріалу, який буде розглянуто у наступному розділі цього курсу.
Тепер поговорімо, як ця тема пов’язана з нашою місією стартапу — впроваджувати AI-інновації в освіту. Ми хочемо створювати AI-додатки для персоналізованого навчання — тож подумаємо, як різні користувачі нашого застосунку можуть "конструювати" підказки:
- Адміністратори можуть просити AI аналізувати дані навчальних програм, щоб виявити прогалини. AI може підсумувати результати або візуалізувати їх за допомогою коду.
- Викладачі можуть просити AI створити план уроку для певної аудиторії та теми. AI може скласти персоналізований план у заданому форматі.
- Студенти можуть просити AI допомогти з важким предметом. AI може проводити навчання, давати підказки та приклади, адаптовані до рівня студента.
І це лише верхівка айсберга. Перегляньте Prompts For Education — відкриту бібліотеку підказок, яку створили експерти з освіти, — щоб побачити ширші можливості! Спробуйте запустити деякі з цих підказок у пісочниці або в OpenAI Playground і подивіться, що вийде!
Ми почали цей урок із визначення інженерії підказок як процесу розробки та оптимізації текстових вхідних даних (підказок) для отримання стабільних і якісних відповідей (completions) відповідно до цілей застосування та моделі. Це можна розглядати як двоетапний процес:
- створення початкової підказки для конкретної моделі та мети
- покрокове вдосконалення підказки для підвищення якості відповіді
Це обов’язково процес проб і помилок, який вимагає інтуїції та зусиль користувача для досягнення оптимального результату. Чому це важливо? Щоб відповісти на це питання, спершу потрібно розібратися з трьома поняттями:
- Токенізація = як модель "бачить" підказку
- Базові LLM = як базова модель "обробляє" підказку
- LLM, налаштовані на інструкції = як модель може бачити "завдання"
LLM сприймає підказки як послідовність токенів, причому різні моделі (або версії моделі) можуть токенізувати одну й ту ж підказку по-різному. Оскільки LLM навчаються на токенах (а не на сирому тексті), спосіб токенізації підказки безпосередньо впливає на якість згенерованої відповіді.
Щоб краще зрозуміти, як працює токенізація, спробуйте інструменти на кшталт OpenAI Tokenizer, показаного нижче. Вставте свою підказку — і подивіться, як вона перетворюється на токени, звертаючи увагу на пробіли та розділові знаки. Зверніть увагу, що цей приклад показує старішу LLM (GPT-3) — тому з новішою моделлю результат може відрізнятися.
Після токенізації підказки основна функція "базової LLM" (або Foundation model) — передбачити наступний токен у цій послідовності. Оскільки LLM навчені на величезних текстових наборах, вони добре "відчувають" статистичні зв’язки між токенами і можуть робити такі передбачення з певною впевненістю. Водночас вони не розуміють значення слів у підказці чи токені; вони просто бачать шаблон, який можуть "доповнити" наступним передбаченням. Вони можуть продовжувати передбачати послідовність, поки користувач не зупинить процес або не буде досягнуто певної умови.
Хочете побачити, як працює завершення на основі підказки? Введіть підказку вище у Chat Playground Azure OpenAI Studio з налаштуваннями за замовчуванням. Система налаштована так, щоб сприймати підказки як запити на інформацію — тож ви побачите completion, що відповідає цьому контексту.
Але що, якщо користувач хоче побачити щось конкретне, що відповідає певним критеріям чи завданню? Саме тут у гру вступають LLM, налаштовані на інструкції.
LLM, налаштована на інструкції починається з базової моделі, яку додатково навчають на прикладах або парах вхід/вихід (наприклад, багатокрокові "повідомлення"), що містять чіткі інструкції — і відповідь AI намагається цим інструкціям слідувати.
Для цього використовуються такі техніки, як навчання з підкріпленням із зворотним зв’язком від людини (RLHF), які дозволяють моделі дотримуватися інструкцій і вчитися на зворотному зв’язку, щоб генерувати відповіді, які краще підходять для практичних застосувань і більш релевантні цілям користувача.
Давайте спробуємо — поверніться до підказки вище, але тепер змініть системне повідомлення, додавши таку інструкцію як контекст:
Підсумуй наданий контент для учня другого класу. Зроби результат у вигляді одного абзацу з 3-5 пунктами.
Бачите, як результат тепер налаштований під бажану мету та формат? Викладач може одразу використати цю відповідь у своїй презентації для класу.
Тепер, коли ми знаємо, як LLM обробляють підказки, поговорімо, чому нам потрібна інженерія підказок. Причина в тому, що сучасні LLM мають низку особливостей, які ускладнюють отримання надійних і стабільних відповідей без додаткових зусиль щодо створення та оптимізації підказок. Наприклад:
-
Відповіді моделі стохастичні. Одна й та сама підказка може дати різні відповіді з різними моделями або версіями моделі. І навіть з однією й тією ж моделлю у різний час результат може відрізнятися. Техніки інженерії підказок допомагають мінімізувати ці варіації, забезпечуючи кращі обмеження.
-
Моделі можуть вигадувати відповіді. Моделі навчені на великих, але обмежених наборах даних, тому не знають про поняття поза цим обсягом. В результаті вони можуть генерувати відповіді, які є неточними, вигаданими або навіть суперечать відомим фактам. Техніки інженерії підказок допомагають користувачам виявляти та зменшувати такі вигадки, наприклад, просячи AI наводити джерела або пояснювати логіку.
-
Можливості моделей різняться. Новіші моделі чи покоління моделей мають ширші можливості, але також свої особливості, компроміси у вартості та складності. Інженерія підказок допомагає розробити найкращі практики та робочі процеси, які абстрагують ці відмінності та адаптуються до вимог конкретної моделі масштабовано й зручно.
Давайте подивимося це на практиці в OpenAI або Azure OpenAI Playground:
- Використайте одну й ту ж підказку з різними LLM (наприклад, OpenAI, Azure OpenAI, Hugging Face) — чи помітили ви відмінності?
- Використайте одну й ту ж підказку кілька разів з однією й тією ж LLM (наприклад, у Azure OpenAI playground) — як відрізнялися результати?
У цьому курсі ми використовуємо термін "вигадка" для позначення явища, коли LLM іноді генерують фактично некоректну інформацію через обмеження навчання чи інші причини. Можливо, ви також чули термін "галюцинації" у популярних статтях чи наукових роботах. Однак ми наполегливо рекомендуємо використовувати саме "вигадка", щоб не наділяти машину людськими рисами, приписуючи їй людську поведінку. Це також відповідає принципам відповідального AI з точки зору термінології, уникаючи слів, які можуть бути образливими чи неінклюзивними в певних контекстах.
- Ознайомити учнів з основними подіями та причинами Марсіанської війни 2076 року
- Розвивати навички аналізу історичних подій та їх наслідків
- Заохотити учнів до обговорення етичних та соціальних аспектів міжпланетних конфліктів
- Коротко обговоріть, що таке Марсіанська війна 2076 року
- Запитайте учнів, що вони знають про колонізацію Марса та можливі причини конфліктів у космосі
- Обговоріть політичні, економічні та соціальні передумови війни
- Поясніть роль Землі та марсіанських колоній у виникненні конфлікту
- Огляд основних битв та стратегічних рішень
- Визначте ключові фігури та сторони, що брали участь у війні
- Обговоріть зміни у політичній структурі Марса та Землі після війни
- Розгляньте вплив війни на технології, культуру та міжпланетні відносини
- Запропонуйте учням обговорити, чи можна було уникнути війни
- Поставте питання: які уроки людство може винести з цього конфлікту?
- Напишіть коротке есе на тему: "Як Марсіанська війна 2076 року вплинула на майбутнє людства?"
- Підготуйте презентацію про одну з ключових битв або фігур війни
- Книги, статті та фільми про Марсіанську війну 2076 року
- Посилання на наукові дослідження з історії колонізації Марса
- Підведіть підсумки уроку, виділіть основні моменти
- Відповідайте на запитання учнів Веб-пошук показав, що існують вигадані історії (наприклад, телесеріали чи книги) про марсіанські війни — але жодної у 2076 році. Здоровий глузд також підказує, що 2076 рік — це майбутнє, а отже, не може бути пов’язаний із реальною подією.
Що ж відбувається, якщо ми запустимо цей запит у різних LLM-провайдерів?
Відповідь 1: OpenAI Playground (GPT-35)
Відповідь 2: Azure OpenAI Playground (GPT-35)
Відповідь 3: : Hugging Face Chat Playground (LLama-2)
Як і очікувалось, кожна модель (або версія моделі) видає трохи різні відповіді завдяки стохастичній природі та відмінностям у можливостях моделей. Наприклад, одна модель орієнтується на аудиторію восьмого класу, а інша — на старшокласників. Але всі три моделі створили відповіді, які могли б переконати необізнаного користувача, що подія була реальною.
Техніки інженерії підказок, такі як метапромптинг та налаштування температури, можуть певною мірою зменшити вигадки моделі. Нові архітектури інженерії підказок також інтегрують нові інструменти та методи у процес створення підказок, щоб зменшити або пом’якшити ці ефекти.
Завершимо цей розділ, подивившись, як інженерія підказок використовується у реальних рішеннях на прикладі GitHub Copilot.
GitHub Copilot — це ваш "AI-парний програміст": він перетворює текстові підказки на доповнення коду та інтегрується у ваше середовище розробки (наприклад, Visual Studio Code) для максимально зручної роботи. Як описано у серії блогів нижче, найперша версія базувалася на моделі OpenAI Codex — і інженери швидко зрозуміли необхідність донавчання моделі та розробки кращих технік інженерії підказок для підвищення якості коду. У липні вони представили покращену AI-модель, яка перевершує Codex для ще швидших підказок.
Читайте пости у наведеному порядку, щоб простежити їхній шлях навчання.
- Травень 2023 | GitHub Copilot краще розуміє ваш код
- Травень 2023 | Всередині GitHub: робота з LLM, які стоять за GitHub Copilot.
- Червень 2023 | Як писати кращі підказки для GitHub Copilot.
- Липень 2023 | .. GitHub Copilot виходить за межі Codex із покращеною AI-моделлю
- Липень 2023 | Посібник розробника з інженерії підказок та LLM
- Вересень 2023 | Як створити корпоративний LLM-додаток: уроки від GitHub Copilot
Ви також можете переглянути їхній інженерний блог для інших публікацій, наприклад цієї, яка показує, як ці моделі та техніки застосовуються для створення реальних рішень.
Ми вже побачили, чому інженерія підказок важлива — тепер розглянемо, як підказки конструюються, щоб ми могли оцінити різні техніки для ефективнішого дизайну підказок.
Почнемо з базової підказки: текстовий запит, який надсилається моделі без додаткового контексту. Ось приклад — коли ми надсилаємо перші кілька слів гімну США до OpenAI Completion API, вона миттєво доповнює відповідь наступними рядками, демонструючи базову поведінку передбачення.
| Підказка (Вхід) | Доповнення (Вихід) |
|---|---|
| Oh say can you see | Здається, ви починаєте слова до "The Star-Spangled Banner", національного гімну США. Повний текст такий: ... |
Тепер додамо контекст та інструкції до базової підказки. Chat Completion API дозволяє створювати складну підказку як набір повідомлень з:
- Парами вхід/вихід, що відображають запит користувача та відповідь асистента.
- Системним повідомленням, яке задає контекст для поведінки чи особистості асистента.
Запит тепер має такий вигляд, де токенізація ефективно захоплює релевантну інформацію з контексту та розмови. Тепер зміна системного контексту може так само сильно впливати на якість відповідей, як і самі вхідні дані користувача.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)У наведених вище прикладах підказка користувача була простим текстовим запитом, який можна трактувати як прохання надати інформацію. За допомогою інструктивних підказок ми можемо використати цей текст для детальнішого опису завдання, даючи AI чіткіші вказівки. Ось приклад:
| Підказка (Вхід) | Доповнення (Вихід) | Тип інструкції |
|---|---|---|
| Напиши опис Громадянської війни | повернуто простий абзац | Проста |
| Напиши опис Громадянської війни. Вкажи ключові дати та події і опиши їхнє значення | повернуто абзац, а далі список ключових дат подій із описами | Складна |
| Напиши опис Громадянської війни в 1 абзаці. Додай 3 марковані пункти з ключовими датами та їх значенням. Додай ще 3 пункти з ключовими історичними постатями та їх внеском. Поверни результат у форматі JSON | повернуто детальнішу інформацію у текстовому полі, відформатовану як JSON, яку можна скопіювати у файл і перевірити | Складна. Форматована. |
У наведених вище прикладах підказка залишалася досить відкритою, дозволяючи LLM самостійно визначати, яка частина її попередньо навченого датасету є релевантною. З патерном основного контенту вхідний текст ділиться на дві частини:
- інструкція (дія)
- релевантний контент (який впливає на дію)
Ось приклад, де інструкція — "підсумуй це у 2 реченнях".
| Підказка (Вхід) | Доповнення (Вихід) |
|---|---|
| Юпітер — п’ята планета від Сонця і найбільша у Сонячній системі. Це газовий гігант із масою, що становить одну тисячну від маси Сонця, але у два з половиною рази перевищує масу всіх інших планет Сонячної системи разом узятих. Юпітер — один із найяскравіших об’єктів, видимих неозброєним оком у нічному небі, і був відомий стародавнім цивілізаціям ще до появи писемності. Він названий на честь римського бога Юпітера.[19] З Землі Юпітер може бути настільки яскравим, що його відбите світло створює видимі тіні,[20] і в середньому є третім за яскравістю природним об’єктом у нічному небі після Місяця і Венери. Підсумуй це у 2 коротких реченнях |
Юпітер — п’ята планета від Сонця, найбільша у Сонячній системі та відома як один із найяскравіших об’єктів нічного неба. Названий на честь римського бога Юпітера, це газовий гігант, маса якого у два з половиною рази перевищує масу всіх інших планет Сонячної системи разом узятих. |
Сегмент основного контенту можна використовувати по-різному для ефективнішого формулювання інструкцій:
- Приклади — замість того, щоб прямо казати моделі, що робити, дайте їй приклади бажаного результату і дозвольте вивести закономірність.
- Підказки (cues) — після інструкції дайте "підказку", яка налаштовує модель на потрібний формат відповіді.
- Шаблони — це повторювані "рецепти" підказок із заповнювачами (змінними), які можна підставляти для конкретних задач.
Давайте розглянемо ці підходи на практиці.
Цей підхід полягає у тому, щоб "нагодувати модель" прикладами бажаного результату для певної інструкції і дозволити їй самостійно вивести закономірність. Залежно від кількості прикладів, це може бути zero-shot, one-shot, few-shot підказки тощо.
Підказка тепер складається з трьох компонентів:
- Опис завдання
- Кілька прикладів бажаного результату
- Початок нового прикладу (який стає неявною інструкцією)
| Тип навчання | Підказка (Вхід) | Доповнення (Вихід) |
|---|---|---|
| Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando". |
| One-shot | "The Sun is Shining" => ""El Sol está brillando". "It's a Cold and Windy Day" => |
"Es un día frío y ventoso". |
| Few-shot | The player ran the bases => Baseball The player hit an ace => Tennis The player hit a six => Cricket The player made a slam-dunk => |
Basketball |
Зверніть увагу, що у zero-shot-підказці ми мусили дати явну інструкцію ("Translate to Spanish"), але у one-shot-прикладі вона вже виводиться з контексту. Few-shot-приклад показує, як додавання ще кількох прикладів дозволяє моделі робити точніші висновки без додаткових інструкцій.
Ще одна техніка використання основного контенту — це надання підказок замість прикладів. У цьому випадку ми "підштовхуємо" модель у потрібному напрямку, починаючи відповідь фрагментом, який відображає бажаний формат. Модель підхоплює цю підказку і продовжує у тому ж стилі.
| Кількість підказок | Підказка (Вхід) | Доповнення (Вихід) |
|---|---|---|
| 0 | Юпітер — п’ята планета від Сонця і найбільша у Сонячній системі. Це газовий гігант із масою, що становить одну тисячну від маси Сонця, але у два з половиною рази перевищує масу всіх інших планет Сонячної системи разом узятих. Юпітер — один із найяскравіших об’єктів, видимих неозброєним оком у нічному небі, і був відомий стародавнім цивілізаціям ще до появи писемності. |
Підсумуй це | Юпітер — найбільша планета Сонячної системи та п’ята від Сонця. Це газовий гігант із масою, що становить одну тисячну маси Сонця, але він важчий за всі інші планети разом узяті. Юпітер був відомий ще давнім цивілізаціям і легко помітний на нічному небі. |
| 1 | Юпітер — п’ята планета від Сонця і найбільша в Сонячній системі. Це газовий гігант із масою, що становить одну тисячну маси Сонця, але у два з половиною рази важчий за всі інші планети разом узяті. Юпітер — один із найяскравіших об’єктів, які можна побачити неозброєним оком на нічному небі, і був відомий ще до появи писемності.
Підсумуй це
Ми дізналися, що Юпітер | є п’ятою планетою від Сонця і найбільшою в Сонячній системі. Це газовий гігант із масою, що становить одну тисячну маси Сонця, але у два з половиною рази важчий за всі інші планети разом узяті. Його легко побачити неозброєним оком, і він був відомий ще з давніх часів. |
| 2 | Юпітер — п’ята планета від Сонця і найбільша в Сонячній системі. Це газовий гігант із масою, що становить одну тисячну маси Сонця, але у два з половиною рази важчий за всі інші планети разом узяті. Юпітер — один із найяскравіших об’єктів, які можна побачити неозброєним оком на нічному небі, і був відомий ще до появи писемності.
Підсумуй це
Топ-3 факти, які ми дізналися: | 1. Юпітер — п’ята планета від Сонця і найбільша в Сонячній системі.
2. Це газовий гігант із масою, що становить одну тисячну маси Сонця...
3. Юпітер був видимий неозброєним оком ще з давніх часів ... |
| | | |
Шаблон підказки — це заздалегідь підготовлений рецепт для підказки, який можна зберігати та використовувати повторно, щоб забезпечити більш стабільний досвід для користувачів у масштабі. У найпростішому вигляді це просто набір прикладів підказок, як цей від OpenAI, що містить як інтерактивні компоненти підказки (повідомлення користувача та системи), так і формат запиту для API — для підтримки повторного використання.
У складнішому вигляді, як цей приклад від LangChain, він містить заповнювачі, які можна замінити даними з різних джерел (введення користувача, контекст системи, зовнішні джерела даних тощо) для динамічного створення підказки. Це дозволяє створювати бібліотеку підказок, які можна використовувати для забезпечення стабільного досвіду для користувачів програмно у масштабі.
Справжня цінність шаблонів полягає у можливості створювати та публікувати бібліотеки підказок для окремих галузей — де шаблон підказки вже оптимізований з урахуванням специфіки застосування або прикладів, що робить відповіді більш релевантними та точними для цільової аудиторії. Репозиторій Prompts For Edu — чудовий приклад такого підходу, де зібрано бібліотеку підказок для освітньої сфери з акцентом на ключові завдання, як-от планування уроків, розробка навчальних програм, репетиторство тощо.
Якщо розглядати створення підказки як поєднання інструкції (завдання) та основного (цільового) контенту, то додатковий контент — це додатковий контекст, який ми надаємо, щоб вплинути на результат. Це можуть бути параметри налаштування, інструкції щодо форматування, тематичні таксономії тощо, які допомагають моделі адаптувати свою відповідь під бажані цілі чи очікування користувача.
Наприклад: маючи каталог курсів із розгорнутою метаданими (назва, опис, рівень, теги, викладач тощо) для всіх доступних курсів у навчальній програмі:
- ми можемо задати інструкцію "підсумуй каталог курсів на осінь 2023"
- використати основний контент, щоб надати кілька прикладів бажаного результату
- використати додатковий контент, щоб визначити топ-5 "тегів", які нас цікавлять.
Тепер модель може надати підсумок у форматі, показаному в прикладах, але якщо результат має кілька тегів, вона може пріоритезувати 5 тегів, визначених у додатковому контенті.
Тепер, коли ми знаємо, як можна створювати підказки, варто подумати, як їх дизайнити, щоб дотримуватися кращих практик. Це можна розділити на дві частини — правильний підхід і застосування відповідних технік.
Інженерія підказок — це процес проб і помилок, тому варто пам’ятати про три основні орієнтири:
-
Розуміння домену має значення. Точність і релевантність відповіді залежать від домену, в якому працює додаток чи користувач. Використовуйте свою інтуїцію та експертизу, щоб додатково адаптувати техніки. Наприклад, визначайте доменні персоналії у системних підказках або використовуйте доменні шаблони у підказках користувача. Додавайте додатковий контент, що відображає специфіку домену, або використовуйте доменні сигнали та приклади, щоб спрямувати модель до знайомих патернів.
-
Розуміння моделі має значення. Ми знаємо, що моделі мають стохастичну природу. Але реалізації моделей також можуть відрізнятися за навчальним датасетом (попередні знання), можливостями (наприклад, через API чи SDK) та типом контенту, для якого вони оптимізовані (код, зображення, текст). Розумійте сильні та слабкі сторони моделі, яку використовуєте, і використовуйте ці знання для пріоритезації завдань або створення адаптованих шаблонів, оптимізованих під можливості моделі.
-
Ітерації та валідація мають значення. Моделі швидко розвиваються, як і техніки інженерії підказок. Як експерт у домені, ви можете мати додатковий контекст чи критерії для вашого додатку, які не завжди актуальні для ширшої спільноти. Використовуйте інструменти та техніки інженерії підказок, щоб "запустити" створення підказки, потім ітеруйте та перевіряйте результати, спираючись на свою інтуїцію та експертизу. Фіксуйте свої інсайти та створюйте базу знань (наприклад, бібліотеки підказок), яку зможуть використовувати інші для швидших ітерацій у майбутньому.
Ось поширені кращі практики, які рекомендують фахівці OpenAI та Azure OpenAI.
| Що | Чому |
|---|---|
| Оцінюйте найновіші моделі. | Нові покоління моделей, ймовірно, мають кращі функції та якість — але можуть бути дорожчими. Оцініть їхній вплив, а потім приймайте рішення щодо міграції. |
| Відокремлюйте інструкції та контекст | Перевірте, чи ваш провайдер/модель визначає роздільники для чіткого розмежування інструкцій, основного та додаткового контенту. Це допоможе моделі точніше розставляти пріоритети для токенів. |
| Будьте конкретними та чіткими | Давайте більше деталей про бажаний контекст, результат, довжину, формат, стиль тощо. Це покращить якість і стабільність відповідей. Зберігайте рецепти у шаблонах для повторного використання. |
| Будьте описовими, використовуйте приклади | Моделі краще реагують на підхід "покажи і розкажи". Почніть із zero-shot — дайте інструкцію (без прикладів), потім спробуйте few-shot для уточнення, надаючи кілька прикладів бажаного результату. Використовуйте аналогії. |
| Використовуйте сигнали для старту відповіді | Підштовхніть модель до бажаного результату, давши їй кілька початкових слів чи фраз, які вона може використати як старт для відповіді. |
| Повторюйте | Іноді потрібно повторити інструкцію для моделі. Дайте інструкцію до і після основного контенту, використовуйте інструкцію та сигнал тощо. Ітеруйте та перевіряйте, що працює. |
| Порядок має значення | Порядок подання інформації моделі може впливати на результат, навіть у навчальних прикладах, через ефект недавності. Спробуйте різні варіанти, щоб знайти найкращий. |
| Дайте моделі "запасний вихід" | Дайте моделі альтернативну відповідь, яку вона може надати, якщо не може виконати завдання. Це зменшує ймовірність отримання неправдивих чи вигаданих відповідей. |
Як і з будь-якими кращими практиками, пам’ятайте, що ваш досвід може відрізнятися залежно від моделі, завдання та домену. Використовуйте ці поради як стартову точку, ітеруйте, щоб знайти найкраще для себе. Постійно переглядайте процес інженерії підказок із появою нових моделей та інструментів, з акцентом на масштабованість процесу та якість відповідей.
Вітаємо! Ви дійшли до кінця уроку! Час перевірити деякі з цих концепцій і технік на реальних прикладах!
Для завдання ми використаємо Jupyter Notebook із вправами, які можна виконувати інтерактивно. Ви також можете доповнювати Notebook власними Markdown- і Code-комірками, щоб досліджувати ідеї та техніки самостійно.
- (Рекомендовано) Запустіть GitHub Codespaces
- (Альтернатива) Клонуйте репозиторій на свій пристрій і використовуйте з Docker Desktop
- (Альтернатива) Відкрийте Notebook у вашому улюбленому середовищі для Notebook.
- Скопіюйте файл
.env.copyз кореня репозиторію у.envі заповніть значенняAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTтаAZURE_OPENAI_DEPLOYMENT. Поверніться до розділу Learning Sandbox, щоб дізнатися як.
- Виберіть ядро виконання. Якщо використовуєте варіанти 1 або 2, просто виберіть стандартне ядро Python 3.10.x, яке надає dev-контейнер.
Ви готові виконувати вправи. Зверніть увагу, що тут немає правильних чи неправильних відповідей — просто досліджуйте варіанти методом проб і помилок та формуйте інтуїцію щодо того, що працює для конкретної моделі та сфери застосування.
Тому в цьому уроці немає сегментів із рішенням коду. Натомість у Notebook будуть Markdown-комірки з назвою "Моє рішення:", де показано один приклад для довідки.
Яка з наступних підказок є хорошою і відповідає розумним кращим практикам?
- Покажи мені зображення червоного автомобіля
- Покажи мені зображення червоного автомобіля марки Volvo, моделі XC90, припаркованого біля скелі на заході сонця
- Покажи мені зображення червоного автомобіля марки Volvo, моделі XC90
Відповідь: 2, це найкраща підказка, оскільки вона містить деталі про "що саме" і конкретизує (не просто будь-який автомобіль, а певна марка і модель), а також описує загальну обстановку. 3 — наступна за якістю, бо теж містить багато опису.
Спробуйте використати техніку "сигналу" з підказкою: Доповни речення "Покажи мені зображення червоного автомобіля марки Volvo і ". Що модель відповість, і як би ви це покращили?
Хочете дізнатися більше про різні концепції інженерії підказок? Перейдіть на сторінку для продовження навчання, щоб знайти інші корисні ресурси з цієї теми.
Переходьте до уроку 5, де ми розглянемо просунуті техніки створення підказок!
Відмова від відповідальності:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичний переклад може містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для отримання критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильне тлумачення, що виникли внаслідок використання цього перекладу.







