English translation is not available yet. Showing Russian content.
Написать документацию промпта
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Написать документацию промпта
1. Цель задачи
Научиться документировать промпт так, чтобы любой разработчик, data scientist или нетехнический участник команды мог за 5 минут понять его назначение, входные данные, ожидаемый вывод и известные ограничения. Создать единый стандарт описания промптов в проекте, который снизит время онбординга и поможет отлавливать регрессии при изменениях.
Ключевой результат Файл документации промпта в формате Markdown (или в Wiki компании), содержащий: заголовок, версию, описание, шаблон промпта, примеры input/output и раздел known issues, достаточный для самостоятельного использования новичком.
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| Production-промпт (или его черновик) | Существующий код / конфигурация проекта |
| Примеры запросов (input) | Реальные или сгенерированные диалоги / тексты |
| Примеры ожидаемых ответов (output) | База тестов, ручная разметка, образцовые ответы |
| Шаблон документации (опционально) | Прилагается ниже, или взять из Obsidian template |
| Контекст использования промпта | Product owner / описание задачи |
Если нет реального промпта — симулируем:
- Возьмите следующий промпт для примера (системный для суммаризации диалога поддержки):
Ты — ассистент службы поддержки. Пользователь написал обращение. Извлеки из обращения: (1) тему, (2) эмоциональную тональность (positive/neutral/negative), (3) срочность (low/medium/high), (4) краткую суть в одном предложении. Обращение: {dialog_text} Ответь строго в формате JSON: { "topic": "...", "sentiment": "...", "urgency": "...", "summary": "..." } - Подготовьте 3–4 примера обращений с разной тональностью и срочностью.
- Создайте пустой файл
prompt_doc_template.mdпо образцу раздела 4.
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Редактор Markdown | Obsidian / VS Code / Notion | Написание документации |
| Система контроля версий | Git + GitHub / GitLab | Хранение и ревью документа |
| Шаблоны документов | Obsidian Templates / Notion DB | Стандартизация формата |
| Сборка документации | MkDocs / Docusaurus (опционально) | Публикация в единую Wiki |
| Тестирование промпта | LangSmith / promptfoo (опционально) | Верификация примеров |
4. Этапы выполнения
Этап 1: Анализ промпта и сбор контекста (30 минут)
Действия
-
Определите имя и версию промпта
Например:summary-assistant-v1.2 -
Выясните бизнес-контекст
-
Запишите все переменные (placeholders), которые динамически подставляются в промпт.
Для примера:{dialog_text} -
Соберите минимум 3 успешных примера input + output (реальных или искусственных).
- Пример 1: обычный запрос, нейтральный, средняя срочность.
- Пример 2: негативная тональность, высокая срочность.
- Пример 3: позитивная, низкая срочность.
-
Проверьте поведение на граничных случаях
- Пустой
{dialog_text}(или очень короткое сообщение) - Очень длинный диалог (превышение лимита контекстного окна)
- Неанглийский язык (если модель только для английского)
- Пустой
Ожидаемый результат этапа Заполненный черновик разделов «Имя», «Версия», «Описание», «Входные переменные», «Примеры».
Этап 2: Написание раздела «Шаблон промпта» и «Параметры» (20 минут)
Действия
-
Вставьте точную копию промпта в блок кода (с плейсхолдерами как в production).
Можно использовать{% raw %}...{% endraw %}в Jekyll/MkDocs, если нужно экранировать фигурные скобки. -
Опишите каждый плейсхолдер в таблице:
Параметр Тип Описание Пример {dialog_text}string Текст обращения пользователя (не более 2000 токенов) "Здравствуйте, не могу войти в личный кабинет, пишет ошибку 401." -
Добавьте параметры вызова LLM (если они не зашиты в код):
- model: gpt-4o
- temperature:
0.0 - max_tokens:
150 - response_format:
json_object
Ожидаемый результат этапа Полный раздел «Шаблон промпта» с пояснениями.
Этап 3: Написание раздела «Ожидаемый вывод» и «Примеры» (30 минут)
Действия
-
Опишите структуру ответа (JSON схема для наглядности):
{ "type": "object", "properties": { "topic": {"type": "string", "description": "Тема обращения на русском, не более 10 слов"}, "sentiment": {"type": "string", "enum": ["positive", "neutral", "negative"]}, "urgency": {"type": "string", "enum": ["low", "medium", "high"]}, "summary": {"type": "string", "description": "Суть одним предложением до 20 слов"} }, "required": ["topic", "sentiment", "urgency", "summary"] } -
Приведите 3 примера в форме таблицы:
Input (dialog_text) Output (ожидаемый JSON) "Спасибо за быстрый ответ, всё заработало!"{"topic": "Благодарность", "sentiment": "positive", "urgency": "low", "summary": "Пользователь благодарит за помощь, проблема решена."}"Уже час не могу оплатить заказ. Код ошибки 500. Срочно!"{"topic": "Ошибка оплаты", "sentiment": "negative", "urgency": "high", "summary": "Пользователь не может оплатить заказ из-за ошибки 500, требуется срочное вмешательство."}"Подскажите, работает ли доставка в выходные?"{"topic": "Условия доставки", "sentiment": "neutral", "urgency": "low", "summary": "Пользователь интересуется возможностью доставки в выходные дни."}
Ожидаемый результат этапа Раздел «Ожидаемый вывод» с JSON-схемой и таблица примеров.
Этап 4: Раздел «Известные проблемы (Known Issues)» и «Правила обновления» (20 минут)
Действия
-
Перечислите все известные баги и ограничения, которые вы обнаружили при тестировании.
Для примера:- Если
{dialog_text}короче 5 символов, модель может вернуть"topic": "Неизвестно". - При очень длинном диалоге (> 1500 токенов) модель иногда обрезает
summary. - Неанглийские эмоции (например, «отлично») могут не попасть в
sentiment.
- Если
-
Опишите, как вносить изменения в промпт:
- Версионирование через Git tag (например,
prompt/summary-assistant/v1.3). - Перед изменением обязательно обновить документацию.
- Добавить changelog в начало файла.
- Версионирование через Git tag (например,
-
Добавьте секцию «Changelog» с последними тремя изменениями:
Версия Дата Изменение v1.2 2025-02-10 Добавлен параметр urgencyv1.1 2025-01-15 Исправлен баг: при пустом input возвращается fallback JSON
Ожидаемый результат этапа Раздел известных проблем и правила обновления.
Этап 5: Ревью и финализация (30 минут)
Действия
- Прочитайте документацию вслух от лица новичка. Засеките 5 минут – понимает ли он задачу?
- Попросите коллегу (или ChatGPT) проверить на:
- Полноту (все ли входные параметры описаны)
- Понятность (нет ли неоднозначных формулировок)
- Соответствие фактическому поведению промпта (запустите примеры)
- Исправьте замечания и зафиксируйте версию документа (например,
docs/prompts/summary-assistant.md). - Запушьте в репозиторий или опубликуйте в Wiki.
Ожидаемый результат этапа Готовый файл документации, прошедший ревью.
5. Критерии приемки (Definition of Done)
- Файл документации создан в
docs/prompts/или эквивалентном месте. - Содержит YAML frontmatter с полями:
name,version,author,created. - Описана цель промпта (2-3 предложения) и бизнес-контекст.
- Приведён полный шаблон промпта в блоке кода с пояснением плейсхолдеров.
- Указана JSON-схема или структура ответа.
- Есть минимум 3 примера input → output в таблице.
- Есть раздел «Known Issues» с ограничениями.
- Есть changelog с последними изменениями.
- Время на прочтение новичком ≤ 5 минут (проверено по таймеру).
- Документация прошла ревью хотя бы одного разработчика (галочка или комментарий в PR).
6. Ожидаемый результат
Готовый файл документации промпта (например, summary-assistant.md) со следующим содержанием:
- Frontmatter (YAML): имя, версия, автор, дата создания.
- Раздел «Описание»: коротко о том, что делает промпт.
- Раздел «Шаблон промпта»: точный код с плейсхолдерами.
- Раздел «Входные параметры»: таблица с типами и ограничениями.
- Раздел «Параметры модели»: model, temperature, max_tokens.
- Раздел «Ожидаемый вывод»: JSON-схема.
- Раздел «Примеры»: таблица 3+ примеров.
- Раздел «Known Issues»: список ограничений.
- Раздел «Changelog»: история изменений.
- Раздел «Руководство по обновлению»: правила версионирования.
Дополнительные опциональные артефакты
- Автоматизированные тесты (promptfoo) для примеров.
- Интеграция документации в центральную Wiki (MkDocs, Notion).
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Нет готового промпта для документирования | Используйте предложенный пример (суммаризация поддержки) |
| Непонятно, какие параметры модели указывать | Используйте дефолтные из конфига проекта (обычно temperature=0, max_tokens по задаче) |
| Примеры не покрывают граничные случаи | Добавьте хотя бы один граничный случай (пустой ввод, очень длинный ввод) |
| Трудно проверить время чтения | Попросите коллегу прочитать документацию без подготовки — если через 5 минут он может объяснить суть, цель достигнута |
| Документация расходится с реальным поведением промпта | Версионируйте документацию вместе с промптом, обновляйте при каждом изменении |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| Этап 1: Анализ промпта и сбор контекста | 30 мин |
| Этап 2: Шаблон промпта и параметры | 20 мин |
| Этап 3: Ожидаемый вывод и примеры | 30 мин |
| Этап 4: Known Issues и правила обновления | 20 мин |
| Этап 5: Ревью и финализация | 30 мин |
| Итого (при первом выполнении) | ~2 часа |
Примечание При наличии готового шаблона и знакомстве с промптом время сокращается до 1–1,5 часов.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 15 | Как документировать промпт для LLM? |
| 28 | Лучшие практики написания системного промпта |
| 41 | Что такое versioning промптов и зачем он нужен? |
| 67 | Как тестировать промпты перед deployment? |
| 89 | Как описывать expected output в JSON Schema? |
| 112 | Обработка edge cases в промптах |
| 204 | Шаблоны для prompt documentation |
| 315 | Changelog для промптов: что включать? |
| 400 | Интеграция документации промптов в CI/CD |
| 512 | Known issues: как их собирать и описывать? |
10. Чек-лист самопроверки
- Я описал бизнес-цель промпта так, что её поймёт нетехнический коллега.
- Я указал все переменные, которые подставляются в промпт, с примерами.
- Я привёл не менее трёх примеров input → output.
- Я явно перечислил ограничения (known issues) и не замолчал о проблемах.
- Я проверил, что документация читается за 5 минут (или меньше).