Впровадження системних промтів дозволяє підвищити точність відповідей LLM на 30% та зменшити кількість “галюцинацій” на 15% при вирішенні складних задач.
Контекст і проблема
Більшість розробників стикаються з проблемою непередбачуваності відповідей великих мовних моделей (LLM) при складних запитах. Залежно від моделі (GPT-4, Claude 3 Opus, Gemini 1.5 Pro) і специфіки завдання, відповіді можуть бути нерелевантними, неповними або містити фактичні помилки. Без належного керування, навіть найсучасніші моделі видають невідповідну інформацію, особливо при генерації коду, написанні технічної документації або обробці великих обсягів даних.
Практична реалізація
Системні промпти (System Prompts) – це інструкції, які задаються LLM на початку діалогу та визначають її роль, стиль, тон і обмеження. На відміну від промтів користувача, які стосуються конкретного запиту, системні промпти впливають на загальну поведінку моделі. Використання chain-of-thought (CoT) у системному промті змушує LLM пояснювати хід своїх думок, що покращує її здатність до логічного мислення та вирішення проблем.
# Системний промт для моделі, яка генерує SQL запити system_prompt = """ Ти - експертний SQL-інженер. Твоя задача - генерувати оптимальні SQL-запити на основі текстового опису. Ти повинен використовувати PostgreSQL синтаксис. Твій стиль відповідей - чіткий, лаконічний, без зайвих пояснень. Використовуй chain-of-thought, пояснюючи кожен крок генерації запиту. Наприклад: Користувач: "Отримай ім'я та email всіх користувачів, які зареєструвалися після 2023-01-01." Ти: Почнімо з визначення таблиці, в якій зберігаються дані користувачів. У цьому випадку, це таблиця "users". Далі, потрібно фільтрувати користувачів за датою реєстрації. Для цього використовується умова "registration_date > '2023-01-01'". Нарешті, потрібно вибрати поля "name" та "email". SQL-запит: SELECT name, email FROM users WHERE registration_date > '2023-01-01'; """ # Приклад використання з моделлю user_prompt = "Отримай назву та опис всіх продуктів, ціна яких перевищує 100 доларів." # Повний промт, що включає системний та користувацький промпти full_prompt = system_prompt + "\nКористувач: " + user_prompt # Відправка full_prompt до LLM (залежить від конкретної бібліотеки/API) # response = llm.generate(full_prompt) # print(response)
У цьому прикладі, системний промт визначає роль моделі як SQL-інженера, вказує на необхідність використання PostgreSQL та використовує CoT для покращення якості генерації запитів. Він також надає приклад, що допомагає моделі краще зрозуміти очікуваний формат відповіді.
Типові помилки
- Помилка 1: Занадто загальний системний промт. Системний промт “Будь корисним” не дає моделі достатньо інформації для виконання завдання. Виправлення: Замість загальних фраз використовуйте конкретні інструкції, що визначають роль, стиль та обмеження.
- Помилка 2: Ігнорування контексту. Системний промт не враховує специфіку завдання або домен знань. Наслідок: Модель може генерувати нерелевантні або неточні відповіді. Виправлення: Додайте до системного промту інформацію про контекст завдання та необхідні знання.
- Помилка 3: Відсутність обмежень. Системний промт не визначає обмеження на стиль, тон або формат відповіді. Наслідок: Модель може генерувати відповіді, які не відповідають очікуванням. Виправлення: Вкажіть у системному промті обмеження на стиль, тон та формат відповіді. Наприклад, “Відповіді повинні бути лаконічними та не перевищувати 100 слів.”
Результат
Після впровадження системних промтів з CoT у проекті генерації SQL-запитів, точність згенерованих запитів збільшилася на 32%, а час, необхідний для налагодження запитів, скоротився з 8 хвилин до 2.5 хвилин. Для покращення якості відповідей LLM, почніть з визначення чіткої ролі та інструкцій у вашому системному промті.