Анализ первопричин запросов
Определяйте, вызвана ли проблема контекстом, инструкцией, форматом или возможностями модели
«Анализ первопричин запросов» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Почему важен анализ первопричин
Когда запрос даёт сбой, возможны несколько причин. Случайное изменение формулировок отнимает время и может устранить симптом, но не первопричину, из-за чего тот же сбой возникает на немного отличающихся входных данных.
Анализ первопричин (RCA) — это систематический процесс выявления конкретной причины сбоя запроса, позволяющий устранить саму проблему.
Четыре категории первопричин
Каждый сбой запроса сводится к одной из четырёх первопричин:
- Проблема контекста: модели не хватает информации, необходимой для правильного ответа
- Неоднозначность инструкции: инструкция допускает несколько обоснованных толкований, и модель выбрала неправильное
- Конфликт форматов: две части запроса содержат противоречивые указания по форматированию
- Ограничение возможностей модели: задача требует рассуждений или знаний, выходящих за пределы того, с чем эта модель может надёжно справиться
Первопричина 1: проблема контекста
Проблема контекста возникает, когда модель отвечает неправильно, потому что в запросе нет необходимой информации. Модель заполняет пробел обучающими данными, которые могут быть устаревшими, неверными или вымышленными.
Проверка: добавьте недостающую информацию непосредственно в запрос и посмотрите, улучшится ли ответ. Если да, исправление заключается в добавлении контекста, например с помощью поиска RAG.
# Failing prompt — no context
prompt_v1 = 'What is the current price of our Pro plan?'
# Context problem test: inject the information
prompt_v2 = '''
Our pricing (as of today):
- Free: $0/month
- Pro: $19/month
- Enterprise: $99/month
Question: What is the current price of our Pro plan?
'''
# If v2 succeeds and v1 fails -> root cause is context problemПервопричина 2: неоднозначность инструкции
Неоднозначность инструкции возникает, когда запрос можно обоснованно истолковать несколькими способами, а модель выбирает неправильное толкование.
Пример: «Кратко изложите» — означает ли «кратко» одно предложение, один абзац или три пункта? Модель угадывает. Проверка: замените неоднозначную фразу точной спецификацией и проверьте, исчез ли сбой.
# Ambiguous
prompt_ambiguous = 'Summarize the following article briefly.'
# Precise — ambiguity removed
prompt_precise = (
'Summarize the following article in exactly 2 sentences. '
'Do not exceed 50 words. Output only the summary, nothing else.'
)
# Test: if precise version succeeds, root cause was ambiguity
# Fix: replace vague qualifiers with exact specificationsПервопричина 3: конфликт форматов
Конфликт форматов возникает, когда две части запроса содержат противоречивые указания. Модель должна выбрать одно из них и проигнорировать другое — обычно она выбирает более позднее или более заметное указание.
Пример: системный запрос говорит «отвечайте обычным текстом», а сообщение пользователя — «используйте Markdown». Модель может непоследовательно следовать любому из этих указаний.
# Format conflict example
system_prompt = 'You are a helpful assistant. Always respond in plain text without any formatting.'
user_message = 'List the top 5 benefits of exercise. Use markdown bullet points.'
# The model faces a conflict: plain text vs markdown.
# Detection: if output format is inconsistent across runs, look for conflicting instructions.
# Fix: ensure all format instructions agree. Move format to system prompt only.
system_prompt_fixed = (
'You are a helpful assistant. '
'Always respond using markdown bullet points for lists.'
)Первопричина 4: ограничение возможностей модели
Сбой из-за ограничения возможностей происходит, когда задача действительно превышает то, что модель может надёжно выполнить. Это отличается от трёх других причин — никакое изменение запроса не устранит его полностью.
Признаки: доля сбоев остаётся высокой даже при ясных инструкциях и полном контексте. Решения: использовать более мощную модель, разбить задачу на более простые шаги или добавить этап проверки.
# Capability limit test: try the same task on different models
models = ['gpt-4o-mini', 'gpt-4o', 'gpt-4o-2024-11-20']
results = {}
for model in models:
resp = client.chat.completions.create(
model=model,
messages=[{'role': 'user', 'content': complex_reasoning_prompt}]
)
results[model] = evaluate(resp.choices[0].message.content)
# If accuracy improves with more capable models -> capability limit
for model, score in results.items():
print(f'{model}: {score:.0%} accuracy')Метод изоляции
Чтобы определить, какая первопричина действует, используйте систематическую изоляцию:
- Запустите запрос, который приводит к сбою, и классифицируйте тип сбоя (неверный ответ, формат и т. д.)
- Добавьте информацию → если проблема устранена: проблема контекста
- Уточните инструкции → если проблема устранена: неоднозначность
- Проверьте наличие противоречий → если проблема устранена: конфликт формата
- Обновите модель → если проблема устранена: ограничение возможностей
Требоваться должно только одно исправление. Если требуются несколько исправлений, существовало несколько первопричин.
def rca_test(base_prompt, test_input, expected_output):
results = {}
# Test 1: base (failing) prompt
results['base'] = run_and_evaluate(base_prompt, test_input, expected_output)
# Test 2: add context
results['with_context'] = run_and_evaluate(
base_prompt + '\nContext: ' + get_context(test_input),
test_input, expected_output
)
# Test 3: clarify instructions
results['clarified'] = run_and_evaluate(
clarify(base_prompt), test_input, expected_output
)
for name, passed in results.items():
print(f'{name}: {"PASS" if passed else "FAIL"}')Исключение и подтверждение
RCA включает два режима:
- Исключение: отсеять причины, которые NOT отвечают за сбой (проверить каждую гипотезу и определить, какая из них NOT меняет выходные данные)
- Подтверждение: выявить причину, устранение которой стабильно устраняет сбой на нескольких входных данных для проверки
Для подтверждения требуются как минимум 3 входных данных для проверки. Исправление, работающее на одних входных данных, но не на других, не устранило первопричину — возможно, оно устранило только симптом.
def confirm_root_cause(fix_fn, test_cases, threshold=0.9):
'''fix_fn: a function that takes a prompt and returns a fixed prompt'''
passed = 0
for case in test_cases:
fixed_prompt = fix_fn(case['prompt'])
result = run_and_evaluate(fixed_prompt, case['input'], case['expected'])
if result:
passed += 1
pass_rate = passed / len(test_cases)
print(f'Fix pass rate: {pass_rate:.0%}')
if pass_rate >= threshold:
print('Root cause CONFIRMED — fix is reliable.')
else:
print('Root cause NOT confirmed — failure has multiple causes.')Документирование первопричины
После выявления первопричины задокументируйте её в журнале изменений запроса. Включите:
- Наблюдаемый тип сбоя
- Категорию первопричины
- Проверенную гипотезу
- Доказательства (какая проверка прошла после исправления)
- Конкретное изменение, внесённое в запрос
Это не позволит будущим разработчикам повторно исследовать тот же сбой и поможет выявлять закономерности в разных запросах.
rca_record = {
'prompt_id': 'summarize_v3',
'failure_type': 'wrong_format',
'root_cause': 'format_conflict',
'hypothesis': 'System prompt said plain text, user message asked for markdown',
'evidence': 'Removing markdown instruction from user message resolved failure on 8/8 test cases',
'fix_applied': 'Moved all format instructions to system prompt; removed format instructions from user template',
'fix_date': '2024-11-15'
}Распространённая ошибка: исправление не той причины
Самая распространённая ошибка при RCA — исправление симптома, а не причины. Пример:
- Симптом: модель возвращает JSON с дополнительным текстовым префиксом
- Неверное исправление: добавить последующую обработку, удаляющую текст из выходных данных
- Фактическая первопричина: в запросе нет инструкции по формату + модель по умолчанию использует разговорный стиль
- Правильное исправление: добавить явную инструкцию «Возвращайте только корректный JSON. Никакого другого текста.»
Уловки с последующей обработкой накапливают технический долг. Исправления первопричины долговечны.
RCA для периодических сбоев
Некоторые сбои происходят периодически: запрос работает в 80% случаев, но даёт сбой в 20%. Их сложнее диагностировать, поскольку однократный запуск запроса даёт корректный результат.
Подход: запустите запрос 10–20 раз на одних и тех же входных данных. Если доля сбоев ненулевая, у запроса есть вероятностная первопричина — обычно неоднозначность инструкции или высокая температура. Исправление: сделайте инструкцию более конкретной или уменьшите температуру.
def measure_failure_rate(prompt, test_input, expected, runs=20):
failures = 0
for _ in range(runs):
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt + '\n' + test_input}],
temperature=0.7
)
if not evaluate(resp.choices[0].message.content, expected):
failures += 1
print(f'Failure rate: {failures}/{runs} = {failures/runs:.0%}')Проверка знаний
Запрос просит вернуть ответ в формате JSON, но иногда возвращает JSON с разговорным префиксом вроде «Конечно! Вот JSON:». После добавления фразы «Возвращайте только корректный JSON. Никакого другого текста.» сбои прекращаются. Какова была первопричина?
Повторение: анализ первопричины
Четыре категории первопричин сбоев запросов:
- Проблема контекста: модели не хватает необходимой информации — исправление: добавить контекст с помощью RAG или прямой передачи
- Неоднозначность инструкции: расплывчатая инструкция допускает несколько толкований — исправление: повысить точность
- Конфликт формата: противоречивые инструкции по форматированию — исправление: объединить их в системной инструкции
- Ограничение возможностей модели: задача превышает возможности модели — исправление: обновить модель или разложить задачу на части
Используйте систематическую изоляцию для проверки каждой гипотезы. Подтверждайте исправление на нескольких случаях для проверки. Документируйте результаты. Следующий урок: систематическая отладка с помощью двоичного поиска.
Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 53
- Уроки
- 199
Часто задаваемые вопросы
Урок «Анализ первопричин запросов» бесплатный?
Да — полный текст урока «Анализ первопричин запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Анализ первопричин запросов»?
Определяйте, вызвана ли проблема контекстом, инструкцией, форматом или возможностями модели Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Prompt Engineering?
Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Анализ первопричин запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Prompt Engineering?
Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Диагностика неожиданных результатов
- Анализ первопричин запросов
- Системный подход к отладке
- Стратегии журналирования и документирования