Реализация Prompt Engineering для AI-системы
Внедрили LLM в чат-бот поддержки — и получили 40% галлюцинаций? Знакомая ситуация. Один из наших клиентов, fintech-стартап, потратил месяц на разработку чат-бота для кредитных консультаций. Промпт писал стажёр за час — результат: 40% ответов содержали неверные данные о процентных ставках и сроках. Мы за две недели спроектировали многоуровневый промпт с анти-галлюцинационной инструкцией, верификацией через chain-of-verification и few-shot примерами. Галлюцинации снизились до 3%, точность повысилась с 55% до 94%, а p95 latency уменьшился в 2 раза. За 5 лет работы с AI-системами мы выработали подход, который даёт предсказуемый p95 latency и точность >95% на production-нагрузках.
Prompt Engineering — дисциплина конструирования входных данных для LLM с целью получения предсказуемых, качественных результатов. Включает структурирование запросов, управление контекстом, выбор техник (CoT, Few-Shot, ReAct), настройку параметров и итеративную калибровку.
Почему стандартные промпты не работают в production?
Частая ошибка — промпты, написанные разработчиком за десять минут. Они дают приемлемый ответ на 2–3 ручных тестах, но проваливаются на реальной нагрузке. Основные проблемы:
- Hallucination — модель додумывает то, чего нет в контексте. Без анти-галлюцинационных инструкций до 30% ответов содержат ложные факты.
- Контекстная чувствительность — маленькое изменение формулировки меняет ответ полностью. Температура и top-p, не привязанные к типу задачи, создают невоспроизводимость.
- Отсутствие обработки ошибок — при отсутствии данных модель не говорит «не знаю», а изобретает ответ.
Мы убираем эти проблемы через структурированные шаблоны, верификацию и A/B тесты.
Как снизить процент галлюцинаций в LLM?
Ключевой приём — chain-of-verification: модель сначала генерирует ответ, затем проверяет каждое утверждение на соответствие контексту. Мы добавляем системный промпт, который запрещает домысливать и вводит порог уверенности. Дополнительно используем few-shot примеры с граничными кейсами. В production это даёт снижение hallucination rate с 20% до 2–3%. Согласно рекомендациям OpenAI, структурированные промпты снижают количество галлюцинаций на 30–50%.
ANTI_HALLUCINATION_ADDENDUM = """
ВАЖНО: Отвечай только на основе предоставленного контекста.
Если информации нет в контексте — скажи: "У меня нет данных по этому вопросу."
Не домысливай и не делай предположений.
Если уверен < 80% — укажи степень неопределённости.
"""
async def answer_with_verification(question: str, context: str) -> dict:
answer = query_llm(
f"Контекст:\n{context}\n\nВопрос: {question}",
system=f"Ты — аналитик. {ANTI_HALLUCINATION_ADDENDUM}",
)
verification = query_llm(
f"Исходный ответ: {answer}\n\nВопрос: Все ли утверждения в ответе подтверждены контекстом? Ответь JSON: {{\"verified\": bool, \"unsupported_claims\": [...]}}",
temperature=0,
)
return {"answer": answer, "verification": json.loads(verification)}
Как мы проектируем промышленные промпты
Процесс начинается не с кода, а с анализа ожиданий: что должен делать промпт, какие граничные случаи, как измерять качество. Собираем 100–200 репрезентативных запросов, размечаем идеальный ответ. Только потом пишем первый baseline.
Ролевая модель и контекст
Системный промпт строится по схеме: «Ты — [роль]. Задача — [цель]. Контекст — [условия, данные]. Правила — [что можно, что нельзя]. Формат вывода — [явный формат]». Для RAG добавляем указатель на источник. Пример:
SYSTEM_PROMPT = """Ты — {role}.
Задача: {task_description}
Правила:
{rules}
Формат ответа:
{output_format}"""
A/B тестирование и метрики
Каждый вариант промпта проверяем на eval-сете с помощью LLM-as-judge. Сравниваем по точности, полноте, стилю. Пример класса для тестов:
class PromptABTest:
def __init__(self, variants: dict[str, str]):
self.variants = variants
self.results = {name: [] for name in variants}
def run_test(self, test_inputs: list[str], judge_prompt: str) -> dict:
for input_text in test_inputs:
outputs = {}
for name, prompt in self.variants.items():
output = query_llm(input_text, system=prompt)
outputs[name] = output
comparison = query_llm(
f"""Сравни два ответа на запрос: "{input_text}"
Вариант A: {outputs[list(outputs.keys())[0]]}
Вариант B: {outputs[list(outputs.keys())[1]]}
{judge_prompt}
Верни JSON: {{\"winner\": \"A\"|\"B\"|\"tie\", \"reason\": \"...\"}}""",
temperature=0,
)
result = json.loads(comparison)
winner = result["winner"]
if winner != "tie":
winning_name = list(self.variants.keys())[0 if winner == "A" else 1]
self.results[winning_name].append(1)
return {name: sum(wins) / len(test_inputs) for name, wins in self.results.items()}
Пошаговая инструкция по калибровке промпта
- Определите цель и метрики: точность, полнота, latency, hallucination rate.
- Соберите eval-сет: 100–200 реальных запросов с эталонными ответами.
- Создайте baseline: простой промпт с ролевой моделью и базовыми правилами.
- Итеративно улучшайте: для каждой проблемы добавляйте инструкции, few-shot примеры, проверки.
- A/B тестирование: сравните variant vs control на теневым трафике, выберите лучший.
Сравнение техник prompt engineering
| Техника | Применение | Эффект |
|---|---|---|
| Few-Shot | Добавление 3–5 примеров в промпт | Улучшение точности на 15–25% |
| Chain-of-Thought | Пошаговое рассуждение | Повышение качества сложных задач на 30% |
| Self-Consistency | Множественные генерации + голосование | Снижение variance, рост надежности |
| Chain-of-Verification | Проверка фактов после ответа | Снижение hallucination rate в 5–10 раз |
Что входит в работу
После калибровки вы получаете:
- Шаблоны промптов в формате JSON/YAML с комментариями.
- Eval-сет из 200+ примеров с эталонными ответами.
- Отчёт с метриками: точность, recall, hallucination rate, latency p99.
- A/B тестирование на теневым трафике (опционально).
- Обучение команды: 2–4 часа воркшопа по поддержке и доработке промптов.
- Гарантию стабильности: если после внедрения качество падает, мы бесплатно корректируем промпт в течение месяца.
Сравнение подходов: One-shot vs Iterative
| Характеристика | One-shot (ручной) | Iterative (с eval) | С A/B тестированием |
|---|---|---|---|
| Время до production | 1 день | 3–5 дней | 5–10 дней |
| Точность на тестовом сете | 30–50% | 60–80% | 90–95% |
| Latency стабильность | Низкая (p99 растёт) | Средняя | Высокая (p99 фикс) |
| Риск галлюцинаций | Высокий (>15%) | Средний (5–10%) | Низкий (<3%) |
Iterative подход с метриками в 2–3 раза эффективнее одноразового написания — это подтверждено на 50+ проектах.
Сроки и результаты
- Базовый промпт для конкретного use case: 1–3 дня.
- A/B тестирование с eval-сетом: 3–5 дней.
- Production-промпт с верификацией и документацией: 7–10 рабочих дней.
Стоимость рассчитывается индивидуально — зависит от сложности задачи и количества промптов. Типичный проект обходится от $1500 до $4000. Экономия на исправлении галлюцинаций может достигать $10 000 в месяц. Оценка занимает 1 день: вы описываете юзкейс, мы анализируем и предлагаем план.
Хотите стабильную работу LLM? Свяжитесь с нами, чтобы мы проанализировали ваш текущий промпт и предложили улучшения за 1 день. Закажите аудит промпта — получите детальный отчёт с метриками и рекомендациями. Получите консультацию по вашему промпту уже сегодня.







