Года полтора назад я работал с одной крупной e-commerce компанией. У них был отличный чат-бот, который помогал клиентам с заказами. И всё шло прекрасно ровно до того момента, пока однажды утром бот не начал обещать всем покупателям бесплатную доставку на любые заказы. Навсегда. Без ограничений.
Оказалось, что кто-то из маркетологов "немного подправил" промпт перед акцией, а потом забыл вернуть обратно. Найти виновного удалось только через три дня — версия хранилась в личном Notion, история изменений отсутствовала, а сам маркетолог был в отпуске. Компания потеряла приличную сумму на возвратах и компенсациях.
Промпты сегодня — это, по сути, новый исходный код. Только пишутся они на естественном языке, а не на C# или Python. И точно так же, как и обычный код, они управляют поведением системы: задают тон общения, оперируют фактами, обеспечивают безопасность. От них напрямую зависит, останется ли клиент доволен или уйдет к конкурентам, и не "нагаллюцинирует" ли бот лишнего, создав вам юридические проблемы.
Если ваши промпты до сих пор живут в хаосе — кто-то хранит их в Notion, кто-то пересылает в мессенджерах, а кто-то вообще держит "в голове", — у меня для вас плохие новости. Вы теряете контроль. Вы не знаете, какая версия работает прямо сейчас, кто и зачем её поменял, и почему вчера бот отвечал вежливо, а сегодня грубит. Ниже — практический гайд для CTO и COO: как превратить "зоопарк" промптов в строгую инженерную дисциплину. Мы построим «Prompt Library» как корпоративный продукт: с репозиторием, код-ревью, автотестами и удобным каталогом для бизнеса.
Когда я впервые предложил одному CTO завести Git-репозиторий для промптов, он посмотрел на меня как на сумасшедшего. "Серьёзно? Репозиторий для текста? Это же не код!" Через два месяца он сам звонил мне с благодарностью — после того как смог за 30 секунд откатить неудачное изменение, которое чуть не сорвало крупную сделку.
Кажется, что завести репозиторий для текста — это оверкилл. Но давайте посмотрим, что это даёт бизнесу на практике:
Особенно последний пункт часто недооценивают. В одной компании мы обнаружили, что три разных отдела независимо друг от друга написали практически идентичные промпты для обработки жалоб. Каждый тратил время на отладку, каждый наступал на одни и те же грабли. Единая библиотека решила бы эту проблему в зародыше.
Не пугайтесь, это просто папки с файлами. Но порядок в них — залог здоровья системы. Я видел репозитории, где промпты лежали в одной папке без всякой системы: prompt_v2_final_FINAL.txt, prompt_new_test_working.md. Через месяц даже автор не мог разобраться, какой файл актуальный.
Примерно так может выглядеть наш идеальный prompt-library:
prompt-library/
├─ README.md (Ваша библия: правила игры, кто за что отвечает, SLA)
├─ policies/ (Правила безопасности: стоп-слова, DLP, запрещенные темы)
├─ shared/ (То, что нужно всем)
│ ├─ system/ (Общие системные настройки: "Ты - полезный ассистент...")
│ └─ tools/ (Макросы, шаблоны функций)
├─ domains/ (Разделение по отделам - чтобы не мешать друг другу)
│ ├─ sales/
│ │ ├─ intents/qualify_lead/
│ │ │ ├─ prompt.md (Сам текст промпта)
│ │ │ ├─ evals.yaml (Как мы проверяем качество: метрики)
│ │ │ ├─ tests/smoke.jsonl (5–10 быстрых тестов "чтобы не упало")
│ │ │ └─ rollout.json (Настройки раскатки: на кого и сколько %)
│ ├─ service/
│ └─ operations/
└─ scripts/ (Роботы-помощники: линтеры, генераторы отчетов)
Обратите внимание на папку shared. Это место для всего, что используется в нескольких отделах. Например, базовая системная инструкция "Ты — вежливый помощник компании X, не обсуждай конкурентов, не давай юридических советов" — она нужна везде. Вместо того чтобы копировать её в каждый промпт, мы храним её в одном месте и подключаем при необходимости.
Золотое правило: Просто так зайти и поправить файл в domains/*/intents/* нельзя. Только через Pull Request (запрос на изменение). Это гарантирует, что владелец домена и безопасник посмотрят на ваши правки до того, как они попадут к клиентам. Звучит как бюрократия? Возможно. Но эта "бюрократия" однажды спасёт вас от публичного скандала.
Как это выглядит в реальности? Давайте разберём на конкретном примере. Допустим, отдел продаж приходит с жалобой: "Наш бот слишком формален, клиенты пугаются и уходят". Знакомая ситуация, правда?
feature/sales-friendlier-tone) и правит prompt.md. Добавляет пару неформальных фраз, убирает канцеляризмы.v1.2-prev нас спасут). Это занимает секунды.Весь этот цикл в хорошо настроенной системе занимает от пары часов до одного дня. Сравните с классическим подходом, когда нужно ждать релиза бэкенда, согласовывать с DevOps, выделять окно для деплоя... Промпты — это текст. Их можно менять быстро и безопасно, если выстроен правильный процесс.
Здесь немного техники, но она важна для порядка. Я знаю, что у многих глаза стекленеют, когда начинается разговор про "семантическое версионирование" и "ролевую модель доступа". Но поверьте, это те вещи, которые спасают в критический момент.
Представьте: пятница, вечер, вы уже собираетесь домой. И тут прилетает алерт — бот начал отвечать на китайском языке. Кто виноват? Что менялось? Без нормального версионирования вы будете разбираться до ночи. С ним — откроете историю, увидите последний коммит, откатите и разберётесь в понедельник.
Отдельно хочу сказать про роли. Соблазн дать всем права "Owner" очень велик — меньше бюрократии, быстрее работа. Не делайте этого. Я видел, как стажёр случайно задеплоил тестовый промпт на прод. Ничего страшного не случилось (откатили за минуту), но осадочек остался. Ограничение прав — это не про недоверие, это про защиту от человеческих ошибок.
Вот мы настроили репозиторий, написали README, разграничили права. Всё работает. Но тут приходит руководитель отдела продаж и говорит: "А где я могу посмотреть, какие промпты у нас вообще есть?"
И вы понимаете, что заставить бизнес-пользователей ходить в GitHub — это утопия. Им нужна витрина. Понятная, красивая, с поиском и фильтрами. Это может быть внутренний портал, страница в Confluence или даже простой сайт, который автоматически генерируется из репозитория.
Главное в каталоге — не красота, а полезность. Каждый промпт должен иметь понятное описание: что он делает, для каких сценариев подходит, какие есть ограничения. Идеально, если рядом есть примеры использования. Это экономит время на онбординг новых сотрудников и снижает количество вопросов вида "А есть у нас что-то для...".
Тестирование промптов — это искусство. Причём искусство относительно новое, и единых стандартов пока не существует. Нельзя просто сделать assert response == "Hello", потому что LLM каждый раз отвечает чуть иначе. Один раз скажет "Привет!", другой — "Здравствуйте", третий — "Рад вас видеть". И все три ответа могут быть правильными.
За последний год мы перепробовали кучу подходов и остановились на комбинации нескольких методов:
Важный момент: тесты — это не разовая настройка. Они должны расти вместе с системой. Каждый раз, когда вы находите новый edge case (клиент спросил что-то неожиданное, а бот ответил странно), добавляйте его в тестовый набор. Через полгода у вас будет отличная коллекция реальных сценариев, которая защитит от регрессий.
Любая система когда-нибудь ломается. Это не вопрос "если", а вопрос "когда". Я видел, как падали системы из-за обновления модели на стороне OpenAI, из-за случайного удаления файла, из-за неудачного merge-конфликта. Главное — не предотвратить все проблемы (это невозможно), а быстро их исправить.
У нас в команде есть правило: время от обнаружения проблемы до её исправления не должно превышать 5 минут. Это возможно только при правильной подготовке:
Кстати, про post-mortem. Это не формальность и не бюрократия. Мы однажды три раза наступили на одни и те же грабли, прежде чем завели нормальную документацию инцидентов. Оказалось, что каждый раз проблему решал разный человек, и никто не знал, что это уже было. Теперь после каждого инцидента пишем короткий отчёт: что случилось, почему, как исправили, как предотвратить в будущем.
За время работы с разными командами я насмотрелся на такое количество антипаттернов, что можно написать отдельную книгу. Вот самые "любимые" — если хотите проблем, просто следуйте этим пунктам:
Особенно часто встречается "мега-промпт". Кажется логичным: написал один раз — и работает везде. На практике это превращается в нечитаемую простыню, которую боятся трогать, потому что "вдруг что-то сломается". А когда всё-таки ломается — никто не понимает, где именно проблема.
Прежде чем объявить победу и пойти праздновать, пройдитесь по этому списку. Это минимум, без которого лучше не запускаться:
Если хотя бы один пункт не выполнен — не торопитесь. Лучше потратить ещё день на подготовку, чем неделю на разгребание последствий неудачного запуска. Поверьте, я знаю, о чём говорю.
Собрал самые частые вопросы, которые мне задают на консультациях и в переписке:
Сколько людей нужно для старта?
Минимум трое ролей (можно совмещать): Владелец продукта (заказчик), Промпт-инженер (исполнитель) и Ревьюер (контроль качества/безопасности). В маленьких командах один человек может совмещать две роли, но важно, чтобы автор промпта и тот, кто его проверяет, были разными людьми. Свои ошибки найти сложнее всего.
Где хранить секреты и конфиденциальные данные?
В политиках (policies). Они подтягиваются в промпт при сборке, но не хранятся в открытом виде в коде. Никаких API-ключей, паролей или персональных данных в самих промптах быть не должно.
Нужен ли специальный софт типа LangSmith или PromptLayer?
Для начала хватит Git и CI/CD. Платформы удобны, но можно стартовать и без них, чтобы не усложнять. Когда почувствуете, что упираетесь в ограничения — тогда и смотрите на специализированные решения. Не нужно покупать трактор, чтобы вскопать грядку.
Как продать это руководству?
Покажите им риски. "Что будет, если бот пообещает скидку 100%? Что будет, если сольёт персональные данные клиента? Сколько будет стоить судебный иск?". Контролируемый процесс разработки — это страховка для бизнеса. Обычно после такого разговора бюджет на Prompt Library находится довольно быстро.
Управление промптами как кодом — это не rocket science. Это набор простых практик, которые давно используются в разработке ПО. Единственная разница в том, что вместо Python или JavaScript мы работаем с естественным языком. Но принципы остаются те же: версионирование, ревью, тестирование, контролируемый деплой.
Самое сложное — начать. Первые две недели будет непривычно, коллеги будут ворчать про "лишнюю бюрократию". Но когда случится первый инцидент и вы откатитесь за 30 секунд вместо двух часов — все поймут, зачем это было нужно. А когда новый сотрудник за полдня разберётся во всех промптах вместо двух недель — скажут спасибо ещё раз.
Поможем собрать репозиторий, настроить CI/канареечные выкаты, подключить мониторинг и обучить команду писать и ревьюить промпты как код. Без лишней теории — только практика и работающие решения.
Запросить консультацию