Конспект 4: Prompt Engineering - Продвинутые техники

Pavel 13.12.2025 21:53 10 просмотров

Оглавление

  1. Введение в Prompt Engineering
  2. Базовые принципы
  3. Chain-of-Thought (CoT) Prompting
  4. Few-Shot и Zero-Shot Learning
  5. Self-Consistency
  6. Tree of Thoughts (ToT)
  7. ReAct Prompting
  8. Prompt Templates и управление
  9. Structured Output
  10. Prompt Optimization
  11. Evaluation и тестирование
  12. Практические примеры в N8N
  13. Лучшие практики

Введение в Prompt Engineering

Что такое Prompt Engineering?

Определение: Prompt Engineering — это искусство и наука создания эффективных текстовых инструкций (промптов) для получения желаемых результатов от больших языковых моделей.

Почему это важно: - ✅ Улучшает точность ответов на 30-70% - ✅ Снижает галлюцинации - ✅ Экономит токены и деньги - ✅ Делает поведение LLM предсказуемым - ✅ Обеспечивает консистентность результатов

Эволюция Prompt Engineering

Год Подход Пример Эффективность
2020-2021 Простые инструкции "Переведи текст" ⭐⭐
2022 Few-shot learning "Вот 3 примера, теперь сделай так же" ⭐⭐⭐
2023 Chain-of-Thought "Подумай пошагово" ⭐⭐⭐⭐
2024 ReAct, ToT "Рассуждай и действуй" ⭐⭐⭐⭐⭐
2025 Agentic + Meta-prompting "Создай план, выполни, проверь" ⭐⭐⭐⭐⭐

Базовые принципы

Анатомия хорошего промпта

[Role/Persona]  Кто ты
[Context]  Какая ситуация
[Task]  Что нужно сделать
[Format]  В каком формате
[Constraints]  Ограничения
[Examples]  Примеры (опционально)

Пример:

[Role] Ты опытный Python разработчик с 10-летним стажем.

[Context] Пользователь хочет автоматизировать обработку CSV файлов в N8N.

[Task] Напиши код на Python, который:
1. Читает CSV файл
2. Фильтрует строки по условию
3. Сохраняет результат

[Format] Ответ должен содержать:
- Чистый код без объяснений
- Комментарии на русском
- Обработку ошибок

[Constraints]
- Использовать только стандартную библиотеку
- Код должен работать в Python 3.9+
- Максимум 50 строк

Компоненты качественного промпта

1. Clarity (Ясность)

❌ ПЛОХО: "Расскажи про N8N"

✅ ХОРОШО: "Объясни в 3 предложениях, что такое N8N и для каких задач автоматизации он подходит лучше всего"

2. Specificity (Конкретность)

❌ ПЛОХО: "Создай функцию"

✅ ХОРОШО: "Создай JavaScript функцию validateEmail(email), которая возвращает true/false и проверяет email по RFC 5322"

3. Context (Контекст)

❌ ПЛОХО: "Исправь эту ошибку"

✅ ХОРОШО: "В N8N workflow при вызове OpenAI API получаю ошибку 400. Вот мой запрос: {...}. Что не так?"

4. Examples (Примеры)

❌ ПЛОХО: "Извлеки сущности"

✅ ХОРОШО: 
"Извлеки имена, даты и компании из текста.
Пример:
Текст: 'Иван работает в Google с 2020 года'
Результат: {name: 'Иван', company: 'Google', date: '2020'}"

Chain-of-Thought (CoT) Prompting

Что такое Chain-of-Thought?

Определение: Техника, при которой модель явно показывает промежуточные шаги рассуждения перед финальным ответом.

Как работает:

Без CoT:
Вопрос: "Сколько будет 23 * 47?"
Ответ: "1081" (может ошибиться)

С CoT:
Вопрос: "Сколько будет 23 * 47? Подумай пошагово."
Ответ: 
"Давайте решим это пошагово:
1. 23 * 40 = 920
2. 23 * 7 = 161
3. 920 + 161 = 1081
Ответ: 1081" (выше точность)

Типы Chain-of-Thought

1. Zero-Shot CoT

Самый простой: Просто добавить "Подумай пошагово"

Промпт:
"Вопрос: {вопрос}
Подумай пошагово и объясни свои рассуждения."

Пример:

Вопрос: Если N8N workflow выполняется 100 раз в день, 
и каждый раз вызывает GPT-4 (стоимость $0.03/1K токенов), 
и в среднем используется 500 токенов, 
сколько это стоит в месяц?

Подумай пошагово.

Ответ модели:
1. Токены на один вызов: 500
2. Вызовов в день: 100
3. Токенов в день: 500 * 100 = 50,000
4. Дней в месяце: 30
5. Токенов в месяц: 50,000 * 30 = 1,500,000
6. Стоимость за 1K токенов: $0.03
7. Стоимость в месяц: (1,500,000 / 1,000) * $0.03 = $45

Ответ: $45 в месяц

2. Few-Shot CoT

Даем примеры с рассуждениями:

Вот примеры правильного анализа:

Пример 1:
Отзыв: "N8N отличная платформа!"
Рассуждение:
- Слово "отличная" — позитивное
- Восклицательный знак — усиление эмоции
- Нет негативных слов
Тональность: POSITIVE

Пример 2:
Отзыв: "Не работает, ужасно"
Рассуждение:
- "Не работает" — проблема
- "Ужасно" — сильно негативное
- Общая тональность — недовольство
Тональность: NEGATIVE

Теперь проанализируй:
Отзыв: "{{user_review}}"

3. Manual CoT

Прописываем конкретные шаги:

Проанализируй следующий текст, выполняя шаги по порядку:

Шаг 1: Определи тему текста
Шаг 2: Извлеки ключевые сущности (люди, места, даты)
Шаг 3: Определи тональность
Шаг 4: Сформулируй краткое резюме (макс 50 слов)

Текст: {{text}}

Выполни каждый шаг явно, показав результат.

Когда использовать CoT

Задача CoT нужен? Причина
Математика, расчеты ✅ Да Снижает ошибки на 50%+
Логические задачи ✅ Да Показывает ход мысли
Классификация ⚠️ Опционально Если категорий много
Простые вопросы ❌ Нет Излишне
Творчество ❌ Нет Может ограничить

CoT в N8N

Узел OpenAI:

{
  "messages": [
    {
      "role": "system",
      "content": "Ты аналитик данных. Всегда показывай свои рассуждения пошагово."
    },
    {
      "role": "user",
      "content": "Вопрос: {{$json.question}}\n\nПодумай пошагово:"
    }
  ],
  "temperature": 0.3
}

Few-Shot и Zero-Shot Learning

Zero-Shot Learning

Определение: Модель выполняет задачу без примеров, только на основе инструкции.

Пример:

Классифицируй тональность следующего отзыва как POSITIVE, NEGATIVE или NEUTRAL:

Отзыв: "{{text}}"
Тональность:

Когда использовать: - ✅ Простые задачи - ✅ Модель уже обучена на похожих данных - ✅ Нужна быстрота (меньше токенов)

One-Shot Learning

Определение: Даем один пример выполнения задачи.

Пример:

Извлеки структурированную информацию из текста.

Пример:
Текст: "Иван Петров работает в Google с 2020 года"
Результат: {"name": "Иван Петров", "company": "Google", "year": 2020}

Теперь твой текст:
Текст: "{{input_text}}"
Результат:

Few-Shot Learning

Определение: Даем несколько (2-5) примеров для обучения в контексте.

Пример:

Классифицируй запросы пользователей по категориям.

Примеры:
"Как подключить API?" → TECHNICAL
"Сколько стоит?" → BILLING
"Не работает workflow" → SUPPORT
"Хочу отменить подписку" → BILLING
"Где документация?" → TECHNICAL

Теперь классифицируй:
"{{user_query}}" →

Сравнение подходов

Характеристика Zero-Shot One-Shot Few-Shot (3-5)
Точность ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
Токены 50-100 150-200 300-500
Стоимость $ $$ $$$
Консистентность ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
Применение Простые задачи Средние задачи Сложные задачи

Few-Shot в N8N

Function Node (подготовка промпта):

const examples = [
  { input: "Как подключить API?", output: "TECHNICAL" },
  { input: "Сколько стоит?", output: "BILLING" },
  { input: "Не работает workflow", output: "SUPPORT" }
];

const examplesText = examples
  .map(ex => \`"\${ex.input}" → \${ex.output}\`)
  .join('\n');

const prompt = \`Классифицируй запросы по категориям.

Примеры:
\${examplesText}

Теперь классифицируй:
"\${$json.user_query}" →\`;

return { prompt };

Self-Consistency

Что такое Self-Consistency?

Определение: Техника, при которой модель генерирует несколько ответов с рассуждениями, затем выбирается наиболее частый результат.

Процесс:

1. Задать вопрос с CoT
2. Сгенерировать N ответов (обычно 5-10) с разной temperature
3. Извлечь финальные ответы
4. Выбрать наиболее частый (majority voting)

Пример:

Вопрос: "Джон старше Марии на 5 лет. Вместе им 45 лет. Сколько лет Марии?"

Генерация 1 (temp=0.7):
"Пусть возраст Марии = x, тогда Джона = x+5
x + (x+5) = 45
2x + 5 = 45
2x = 40
x = 20
Марии 20 лет" ✅

Генерация 2 (temp=0.9):
"Марии x, Джону x+5
x + x + 5 = 45
2x = 40
x = 20" ✅

Генерация 3 (temp=0.8):
"45 / 2 = 22.5
22.5 - 2.5 = 20" ✅

Генерация 4 (temp=1.0):
"Вычтем 5: 45 - 5 = 40
Разделим: 40 / 2 = 20" ✅

Генерация 5 (temp=0.6):
"Если вместе 45, и разница 5
(45 - 5) / 2 = 20" ✅

Результат: 5 из 5 → Марии 20 лет (высокая уверенность)

Когда использовать Self-Consistency

Сценарий Рекомендация Причина
Критичные решения ✅ Да Снижает риск ошибок
Математика, логика ✅ Да Повышает точность на 20-30%
Классификация ⚠️ Иногда Если высокая цена ошибки
Генерация текста ❌ Нет Избыточно и дорого
Production с бюджетом ❌ Нет Слишком много вызовов API

Self-Consistency в N8N

Workflow:

[Webhook с вопросом]
    
[Function → Создать 5 вариантов промпта]
    
[Loop → 5 итераций]
    
[OpenAI Chat (temperature разная)]
    
[Function → Извлечь финальные ответы]
    
[Function → Majority voting]
    
[HTTP Response]

Function Node (Majority Voting):

const answers = $input.all().map(item => {
  // Извлекаем ответ из текста
  const text = item.json.choices[0].message.content;
  const match = text.match(/Ответ: (\d+)/);
  return match ? parseInt(match[1]) : null;
}).filter(x => x !== null);

// Подсчет частоты
const frequency = {};
answers.forEach(ans => {
  frequency[ans] = (frequency[ans] || 0) + 1;
});

// Выбор самого частого
const mostCommon = Object.entries(frequency)
  .sort((a, b) => b[1] - a[1])[0];

return {
  answer: mostCommon[0],
  confidence: mostCommon[1] / answers.length,
  allAnswers: answers
};

Tree of Thoughts (ToT)

Что такое Tree of Thoughts?

Определение: Расширение CoT, где модель исследует несколько путей рассуждения параллельно, оценивает их и выбирает лучший.

Отличие от CoT:

Chain-of-Thought (линейный):
Шаг 1 → Шаг 2 → Шаг 3 → Ответ

Tree of Thoughts (древовидный):
        Шаг 1
       /  |  \
      2a 2b 2c
     / \  |  / \
    3a 3b 3c 3d 3e
         ↓
    Оценка каждого пути
         ↓
    Выбор лучшего

Процесс ToT

Шаги: 1. Decomposition — разбить задачу на подзадачи 2. Generation — сгенерировать варианты решения каждой подзадачи 3. Evaluation — оценить каждый вариант (scoring) 4. Selection — выбрать лучшие ветки 5. Iteration — повторить для следующего уровня 6. Synthesis — собрать финальное решение

Пример промпта:

Задача: Разработать архитектуру RAG системы для документации.

Шаг 1: Предложи 3 разных подхода к чанкированию:
[Модель генерирует 3 варианта]

Шаг 2: Оцени каждый подход по критериям (1-10):
- Качество поиска
- Скорость
- Простота реализации
[Модель оценивает]

Шаг 3: Выбери лучший подход
[Модель выбирает]

Шаг 4: Для выбранного подхода, предложи 3 варианта векторной БД
[Повторяем процесс]

ToT в N8N (упрощенная версия)

Workflow:

[Input: Сложная задача]
    
[LLM → Декомпозиция на подзадачи]
    
[Loop по каждой подзадаче]
    
[LLM → Генерация 3 вариантов решения]
    
[LLM → Оценка каждого варианта]
    
[Function → Выбор лучшего]
    
[Merge → Сборка финального решения]

ReAct Prompting

Что такое ReAct?

Определение: ReAct (Reasoning + Acting) — паттерн, где модель чередует рассуждения (Thought) и действия (Action), наблюдая результаты.

Цикл ReAct:

Thought → Action → Observation → Thought → Action → ...

Пример:

Вопрос: "Какая погода в Москве сейчас?"

Thought 1: Мне нужно узнать текущую погоду в Москве. 
           Для этого есть weather API.
Action 1: Call weather_api(city="Moscow")
Observation 1: {"temp": -5, "condition": "snow"}

Thought 2: Получил данные. Температура -5°C, снег.
           Могу сформулировать ответ.
Action 2: Finish
Answer: "В Москве сейчас -5°C, идет снег"

Структура ReAct промпта

You are an AI assistant that can use tools.

Available tools:
- search(query): Search the internet
- calculator(expression): Calculate math
- weather(city): Get current weather

For each task, follow this format:
Thought: [your reasoning]
Action: [tool_name(parameters)]
Observation: [tool result]
... (repeat Thought/Action/Observation as needed)
Thought: I now know the final answer
Final Answer: [your answer]

Question: {{user_question}}

Пример ReAct в действии

Вопрос: "Сколько стоит 100 вызовов GPT-4 с 500 токенами каждый по цене $0.03 за 1K токенов?"

Thought: Это математическая задача. Нужно посчитать:
         (количество_вызовов * токены_на_вызов / 1000) * цена_за_1K
Action: calculator(100 * 500 / 1000 * 0.03)
Observation: 1.5

Thought: Получил результат 1.5. Это означает $1.50
Action: finish()
Final Answer: Стоимость составит $1.50

ReAct в N8N

Базовая реализация:

[Webhook с вопросом]
    
[Loop: до 5 итераций]
    
[LLM → Генерация Thought + Action]
    
[Function → Парсинг действия]
    
[Switch по типу действия]
    ├─ [HTTP Request → API call]
    ├─ [Code → Calculator]
    └─ [Finish → Exit loop]
    
[Function → Форматирование Observation]
    
[Добавить в историю]
    
[Повторить loop или вернуть ответ]

Function Node (Parsing Action):

const response = $json.choices[0].message.content;

// Извлекаем Action
const actionMatch = response.match(/Action: (\w+)\((.*?)\)/);

if (!actionMatch) {
  return { action: 'finish', done: true };
}

const [, toolName, params] = actionMatch;

return {
  tool: toolName,
  params: params,
  fullResponse: response,
  done: false
};

Prompt Templates и управление

Что такое Prompt Template?

Определение: Переиспользуемая структура промпта с плейсхолдерами для динамических значений.

Пример:

const SENTIMENT_TEMPLATE = \`
Analyze the sentiment of the following review.
Respond with only: POSITIVE, NEGATIVE, or NEUTRAL

Review: {{review}}
Sentiment:\`;

Система управления промптами

Компоненты: 1. Template Store — хранилище шаблонов 2. Versioning — версионирование промптов 3. Variables — переменные и подстановки 4. Evaluation — оценка качества 5. A/B Testing — тестирование вариантов

Версионирование промптов

sentiment_analysis/
├─ v1.0.txt (baseline)
├─ v1.1.txt (добавлен CoT)
├─ v2.0.txt (few-shot examples)
└─ v2.1.txt (structured output)

Метаданные версии:

{
  "version": "2.1",
  "created": "2025-11-26",
  "author": "Pavel",
  "changes": "Добавлен structured output для JSON",
  "performance": {
    "accuracy": 0.92,
    "avg_tokens": 150,
    "avg_cost": 0.005
  },
  "deprecated": false
}

Prompt Templates в N8N

Способ 1: Function Node

const templates = {
  sentiment: \`Analyze sentiment: {{text}}\nSentiment:\`,

  summary: \`Summarize in {{max_words}} words:\n{{text}}\nSummary:\`,

  extraction: \`Extract {{entity_type}} from:\n{{text}}\nResult:\`
};

const prompt = templates[$json.templateName]
  .replace('{{text}}', $json.text)
  .replace('{{max_words}}', $json.maxWords || 50);

return { prompt };

Способ 2: Отдельный файл (JSON)

{
  "templates": {
    "qa": {
      "system": "You are a helpful assistant for {{domain}}.",
      "user": "Question: {{question}}\nContext: {{context}}\nAnswer:"
    },
    "classification": {
      "system": "Classify text into: {{categories}}",
      "user": "Text: {{text}}\nCategory:"
    }
  }
}

Structured Output

Что такое Structured Output?

Определение: Принуждение модели возвращать ответ в строго определенном формате (JSON, XML, YAML).

Зачем нужно: - ✅ Программная обработка результатов - ✅ Валидация ответов - ✅ Интеграция с другими системами - ✅ Снижение ошибок парсинга

JSON Mode (OpenAI)

Активация:

{
  "model": "gpt-4-turbo",
  "response_format": { "type": "json_object" },
  "messages": [
    {
      "role": "user",
      "content": "Extract person info as JSON: 'Иван работает в Google'"
    }
  ]
}

Результат:

{
  "name": "Иван",
  "company": "Google"
}

Промпт для Structured Output

Без JSON mode (универсальный):

Extract the following information and return ONLY valid JSON:

{
  "name": "full name",
  "email": "email address or null",
  "phone": "phone number or null",
  "company": "company name or null"
}

Text: "{{input_text}}"

JSON:

С JSON Schema:

Extract information according to this schema:

{
  "type": "object",
  "properties": {
    "title": {"type": "string"},
    "date": {"type": "string", "format": "date"},
    "tags": {"type": "array", "items": {"type": "string"}},
    "priority": {"type": "integer", "minimum": 1, "maximum": 5}
  },
  "required": ["title", "priority"]
}

Text: {{input}}

Structured Output в N8N

OpenAI Node с JSON mode:

{
  "model": "gpt-4-turbo",
  "response_format": { "type": "json_object" },
  "messages": [
    {
      "role": "system",
      "content": "Extract entities as JSON: {name, company, date}"
    },
    {
      "role": "user",
      "content": "Text: {{$json.text}}"
    }
  ]
}

Валидация в Function Node:

const response = $json.choices[0].message.content;
let parsed;

try {
  parsed = JSON.parse(response);
} catch (e) {
  throw new Error("Invalid JSON from LLM");
}

// Валидация структуры
if (!parsed.name || !parsed.company) {
  throw new Error("Missing required fields");
}

return parsed;

Prompt Optimization

Метрики качества промпта

Метрика Описание Цель
Accuracy Процент правильных ответов Максимизировать (>90%)
Consistency Одинаковые ответы на один запрос Максимизировать (>95%)
Avg Tokens Среднее количество токенов Минимизировать
Latency Время ответа Минимизировать (<2s)
Cost Стоимость на запрос Минимизировать
Hallucination Rate Процент выдуманных фактов Минимизировать (<5%)

Процесс оптимизации

1. Baseline (начальный промпт)
    
2. Evaluation (измерить метрики)
    
3. Hypothesis (что изменить)
    
4. Experiment (A/B тест)
    
5. Analysis (сравнить результаты)
    
6. Decision (принять или откатить)
    
7. Iterate (повторить)

Техники оптимизации

1. Сокращение токенов

❌ БЫЛО (200 токенов):
"Пожалуйста, проанализируй следующий текст и извлеки из него все 
упоминания людей, организаций, мест и дат, которые там встречаются. 
Представь результат в виде структурированного списка..."

✅ СТАЛО (50 токенов):
"Extract: people, organizations, locations, dates.
Format: JSON
Text: {{text}}"

2. Переход от Few-Shot к Zero-Shot

❌ Few-Shot (500 токенов):
"Примеры:
1. ...
2. ...
3. ...
Теперь твой:"

✅ Zero-Shot (100 токенов):
"Classify as SPAM or HAM: {{text}}"

(если точность не падает >5%)

3. Использование меньших моделей

GPT-4 (дорого) → GPT-3.5-turbo (дешево)

Если задача простая (классификация, извлечение)

4. Prompt Compression

Исходный промпт: 500 токенов
    ↓
Удалить избыточность: 350 токенов
    ↓
Заменить длинные фразы: 250 токенов
    ↓
Использовать аббревиатуры: 200 токенов

Evaluation и тестирование

Методы оценки

1. Manual Evaluation

Процесс:

1. Создать test set (50-100 примеров)
2. Для каждого примера:
   - Запустить промпт
   - Оценить результат (1-5)
   - Записать ошибки
3. Посчитать метрики

Критерии: - Правильность - Полнота - Релевантность - Формат

2. Automated Evaluation

LLM-as-a-Judge:

System: You are an evaluator. Rate the answer 1-5.

Criteria:
- Correctness (факты верны?)
- Completeness (всё учтено?)
- Clarity (понятно?)

Question: {{question}}
Answer: {{llm_answer}}
Rating:

3. Метрики для разных задач

Задача Метрики
Классификация Accuracy, Precision, Recall, F1
Извлечение сущностей Exact Match, Partial Match
Генерация текста BLEU, ROUGE, Human eval
QA Exact Match, F1, Similarity
Summarization ROUGE-L, Human preference

Test Set для промптов

Пример:

[
  {
    "id": 1,
    "input": "Иван работает в Google с 2020",
    "expected": {
      "name": "Иван",
      "company": "Google",
      "year": 2020
    }
  },
  {
    "id": 2,
    "input": "Мария основала стартап в 2019",
    "expected": {
      "name": "Мария",
      "company": null,
      "year": 2019
    }
  }
]

A/B Testing промптов в N8N

Workflow:

[Webhook]
    
[Function → Random split 50/50]
    
[IF: group A]
    ├─ [OpenAI с промптом v1]
    └─ [Tag: "prompt_v1"]
    
[ELSE: group B]
    ├─ [OpenAI с промптом v2]
    └─ [Tag: "prompt_v2"]
    
[Log результат в БД]
    
[Return response]

Анализ:

SELECT 
  prompt_version,
  AVG(accuracy) as avg_accuracy,
  AVG(tokens_used) as avg_tokens,
  AVG(latency_ms) as avg_latency,
  COUNT(*) as sample_size
FROM prompt_logs
WHERE date >= '2025-11-01'
GROUP BY prompt_version;

Практические примеры в N8N

Пример 1: Email Classifier с CoT

Задача: Классифицировать входящие emails по категориям

Промпт:

Classify this email into ONE category. Think step by step.

Categories: SUPPORT, SALES, BILLING, SPAM

Email:
From: {{$json.from}}
Subject: {{$json.subject}}
Body: {{$json.body}}

Reasoning:
1. Analyze subject keywords
2. Check body content
3. Determine intent

Category:

N8N Workflow:

[Gmail Trigger: New Email]
    
[OpenAI Chat]
    temperature: 0.2
    system: "You are an email classifier"
    user: [промпт выше]
    
[Function → Extract category]
    
[Switch по категории]
    ├─ SUPPORT → Create Zendesk ticket
    ├─ SALES → Add to CRM
    ├─ BILLING → Forward to accounting
    └─ SPAM → Move to spam folder

Пример 2: Document Summarizer с Few-Shot

Задача: Резюмировать документы в 3 предложения

Промпт:

Summarize the document in exactly 3 sentences.

Examples:
Document: [500 words about N8N]
Summary: N8N is an automation platform. It connects various services. Users can create workflows visually.

Document: [400 words about AI]
Summary: AI transforms industries. Machine learning enables predictions. Deep learning powers modern AI.

Now summarize:
Document: {{$json.document}}
Summary:

N8N Workflow:

[Google Drive: New File]
    
[PDF Parser]
    
[Function → Chunk if > 10K chars]
    
[Loop по чанкам]
    
[OpenAI Chat с промптом]
    
[Function → Combine summaries]
    
[Save to Database]

Пример 3: Data Extraction с Structured Output

Задача: Извлечь структурированные данные из текста

Промпт:

{
  "messages": [
    {
      "role": "system",
      "content": "Extract contact information as JSON"
    },
    {
      "role": "user",
      "content": "Text: {{$json.text}}\n\nReturn JSON with: name, email, phone, company"
    }
  ],
  "response_format": { "type": "json_object" }
}

Validation Function:

const result = JSON.parse($json.choices[0].message.content);

// Валидация email
if (result.email && !/\S+@\S+\.\S+/.test(result.email)) {
  result.email = null;
}

// Валидация phone
if (result.phone && !/^\+?\d{10,15}$/.test(result.phone.replace(/\s/g, ''))) {
  result.phone = null;
}

return result;

Лучшие практики

Do's ✅

  1. Будьте конкретны ❌ "Проанализируй" ✅ "Извлеки имена, даты и компании в JSON"

  2. Используйте примеры для сложных задач Few-shot > Zero-shot (для точности)

  3. Добавляйте CoT для логических задач "Подумай пошагово" повышает точность на 30%+

  4. Валидируйте структуру ответов javascript if (!response.required_field) throw Error();

  5. Версионируйте промпты v1.0, v1.1, v2.0 с логом изменений

  6. Тестируйте на реальных данных Минимум 50 примеров для оценки

  7. Мониторьте стоимость Логируйте токены каждого запроса

  8. Используйте temperature по задаче Факты: 0.0-0.3 Творчество: 0.7-1.5

Don'ts ❌

  1. Не делайте промпты слишком длинными ```

    1000 слов = медленно и дорого ```

  2. Не используйте сложные техники для простых задач Zero-shot достаточно для "classify: spam/ham"

  3. Не игнорируйте контекст ❌ "Переведи это" ✅ "Переведи email от клиента на английский"

  4. Не полагайтесь на одну попытку для критичных задач Используйте Self-Consistency или валидацию

  5. Не забывайте об edge cases Тестируйте на пустых, очень длинных, некорректных входах

  6. Не используйте Few-Shot без необходимости Если Zero-Shot работает хорошо, экономьте токены

Чек-лист оптимального промпта

☑️ Роль четко определена
☑️ Задача конкретна и измерима
☑️ Формат вывода указан
☑️ Примеры даны (если нужны)
☑️ Ограничения перечислены
☑️ Temperature соответствует задаче
☑️ Есть валидация ответа
☑️ Промпт версионирован
☑️ Протестирован на 10+ примерах
☑️ Стоимость приемлема

Дата создания: December 2025
Версия: 1.0
Автор: Pavel
Применение: N8N, LLM автоматизация, Production AI

Комментарии (0)

Для добавления комментария необходимо войти в аккаунт

Войти / Зарегистрироваться