AI Prompt Engineering · Урок

Устранение неоднозначности в запросах

Освойте приёмы, которые исключают разные толкования Ваших инструкций

Урок 2 из 413 шагов

«Устранение неоднозначности в запросах» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Как неоднозначность влияет на ИИ

Неоднозначные запросы заставляют модель выбирать между несколькими допустимыми трактовками. Она выбирает одну — обычно самую распространённую — и уверенно действует исходя из неё, не сообщая, что сделала выбор.

В результате вы получаете безупречно составленный ответ не на тот вопрос. Распознать и устранить неоднозначность до отправки быстрее, чем потом переписывать вывод.

Классический пример: «Сделайте лучше»

«Сделайте лучше» — пожалуй, самый неоднозначный запрос из всех возможных. Что именно сделать лучше?

  • Сделать короче? Длиннее?
  • Более официальным? Более неформальным?
  • Добавить примеры? Убрать их?
  • Изменить тон? Изменить структуру?
  • Исправить грамматику? Изменить словарный запас?

Модель выбирает один аспект и изменяет его. Если это не тот аспект, который вы имели в виду, вы попадаете в цикл переписываний.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

original_text = (
    'Our software helps companies manage their data. '
    'It has many features. Customers like it a lot.'
)

# Ambiguous improvement request
vague = f'Make this better:\n\n{original_text}'

# Unambiguous improvement request
specific = (
    f'Rewrite this product description to be exactly 50% shorter, '
    f'more confident in tone, and replace vague phrases like "many features" '
    f'and "a lot" with specific claims. Do not add new features I have not mentioned.\n\n'
    f'{original_text}'
)

for label, prompt in [('VAGUE', vague), ('SPECIFIC', specific)]:
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': prompt}]
    )
    print(f'--- {label} ---')
    print(response.content[0].text)
    print()

Несколько трактовок: практические примеры

Любой запрос с неопределённым местоимением, относительным прилагательным или пропущенным подлежащим потенциально неоднозначен. Примеры:

  • «Улучшите производительность» — чего именно? Скорость, точность, вовлечённость пользователей?
  • «Напишите о влиянии» — положительном, отрицательном, экономическом, социальном?
  • «Исправьте это» — логику, стиль, форматирование или грамматику?
  • «Сделайте это профессиональным» — использовать официальную лексику? Структурировать абзацы? Удалить эмодзи?
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Disambiguating 'fix this code'
buggy_code = 'def divide(a, b): return a / b'

ambiguous = f'Fix this:\n{buggy_code}'

unambiguous = (
    f'Fix only the division-by-zero bug in this function. '
    f'Add a guard that raises a ValueError with message "b cannot be zero" when b=0. '
    f'Do not change anything else — keep the function signature and return type identical.\n\n'
    f'{buggy_code}'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': unambiguous}]
)
print(response.choices[0].message.content)

Приём устранения неоднозначности: сформулируйте трактовку

Если вы знаете, что ваш запрос можно трактовать по-разному, явно укажите нужную трактовку.

Шаблон: «Когда я говорю [неоднозначный термин], я имею в виду [конкретное определение]».

Примеры:

  • «Когда я говорю „редактировать“, я имею в виду только исправление грамматики и орфографии — не изменяйте содержание».
  • «Когда я говорю „краткий“, я имею в виду не более 3 предложений».
  • «Когда я говорю „профессиональный“, я имею в виду отсутствие местоимений первого лица и сокращений».
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=256,
    messages=[{
        'role': 'user',
        'content': (
            'Edit the following paragraph. '
            'When I say "edit", I mean: fix grammar and punctuation only. '
            'Do NOT change vocabulary, sentence structure, or content. '
            'When done, list each change you made in a numbered list below the edited text.\n\n'
            'The team have went to the meeting early, but the manager '
            'werent there so they waited for alot of time before leaving.'
        )
    }]
)
print(response.content[0].text)

Приём устранения неоднозначности: определите область действия

Неоднозначность области действия часто возникает при запросах на улучшение или расширение. Устраните её, точно определив, что входит в область действия, а что — нет.

Входит в область действия: что модели разрешено изменять
Не входит в область действия: что должно остаться неизменным

Это особенно важно при редактировании кода, пересмотре документов и обработке наборов данных, где непреднамеренные изменения могут привести к серьёзным проблемам.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

code_block = '''
def calculate_tax(income, rate):
    return income * rate

def calculate_net(income, tax):
    return income - tax
'''

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': (
            'Add Python type hints to the following code.\n'
            'IN SCOPE: adding type hints to parameters and return values only.\n'
            'OUT OF SCOPE: changing function names, logic, docstrings, or formatting.\n'
            'Do not add any comments or docstrings.\n\n'
            + code_block
        )
    }]
)
print(response.choices[0].message.content)

Приём устранения неоднозначности: укажите форму вывода

Неоднозначность вывода возникает, когда вам нужен определённый формат, но вы об этом не говорите. «Предоставьте мне данные» — в виде абзаца? Списка? Таблицы? Объекта JSON?

Всегда называйте точную форму ожидаемого вывода. Если явно сообщить о ней, модель точно ей будет соответствовать.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

candidates_text = (
    'Alice: 5 years Python, worked at Stripe, has a CS degree.\n'
    'Bob: 3 years JavaScript, worked at a startup, self-taught.\n'
    'Carol: 8 years Java, worked at Google, has an MS in CS.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=300,
    messages=[{
        'role': 'user',
        'content': (
            'Extract the candidate data below into a JSON array. '
            'Each object must have exactly these keys: name, years_experience, primary_language, '
            'previous_employer, education_level. '
            'education_level values: DEGREE, MASTERS, SELF_TAUGHT.\n\n'
            + candidates_text
        )
    }]
)
print(response.content[0].text)

Приём устранения неоднозначности: попросите модель уточнить

Составляя сложный и заведомо неоднозначный запрос, вы можете попросить модель задать уточняющие вопросы до выполнения задания.

Это особенно полезно при создании ИИ-помощников: вы хотите, чтобы модель собирала информацию, а не делала предположения, как поступил бы хороший консультант-человек.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'system',
            'content': (
                'You are a professional copywriter. '
                'Before starting any writing task, ask exactly 3 clarifying questions '
                'that would most improve the output quality. '
                'Only proceed to write after the user answers those questions.'
            )
        },
        {
            'role': 'user',
            'content': 'Write a landing page headline for my business.'
        }
    ]
)
print(response.choices[0].message.content)

Относительные термины, требующие привязки

Относительные термины не имеют фиксированного значения — для разных людей они означают разное:

  • «Краткий» — 1 предложение? 3 предложения? 1 абзац?
  • «Официальный» — без сокращений? Академический стиль цитирования? Юридическая лексика?
  • «Простой» — уровень чтения пятиклассника? Без технических терминов? Только короткие предложения?
  • «Исчерпывающий» — охватить все основные случаи? Включить пограничные случаи? Добавить примеры?

Заменяйте каждый относительный термин конкретным измеримым эквивалентом.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Relative terms mapped to concrete equivalents
mapping = [
    ('Give me a brief summary',   'Summarize in exactly 2 sentences'),
    ('Write something formal',    'Write using no contractions, no first person, and Flesch-Kincaid grade 12+'),
    ('Make it simple',            'Use only words a 10-year-old would know; max 15 words per sentence'),
    ('Be comprehensive',          'Cover at least 5 distinct subtopics with one example each'),
]

for vague, concrete in mapping:
    print(f'Vague:    "{vague}"')
    print(f'Concrete: "{concrete}"')
    print()

Неоднозначность субъекта: кто выполняет действие?

Неоднозначность субъекта возникает, когда непонятно, к кому или к чему относится инструкция.

«Перепишите введение» — чего именно? Документа, который вы вставили? Того, который мы обсуждали 5 сообщений назад? Нового документа?

«Переведите это» — какую часть? Весь ответ? Только раздел с кратким изложением? Комментарии к коду?

Всегда называйте конкретный объект или раздел, который имеете в виду, особенно в диалогах с несколькими обменами сообщениями.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Clear subject reference prevents wrong-section edits
contract_text = (
    '## Section 1: Payment Terms\nPayment is due within 30 days.\n\n'
    '## Section 2: Termination\nEither party may terminate with 30 days notice.'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': (
            'In the contract below, rewrite ONLY Section 2 (Termination). '
            'Change the notice period from 30 days to 90 days. '
            'Do not change Section 1 or any other text.\n\n'
            + contract_text
        )
    }]
)
print(response.choices[0].message.content)

Временная неоднозначность: когда?

Указания времени в запросах могут быть неоднозначными: «недавний», «текущий», «последний», «сейчас».

У обучающих данных модели есть дата отсечения — она не знает, что означает «сейчас», если вы ей этого не сообщите. Для задач, зависящих от времени, всегда указывайте точные даты.

  • «Недавние исследования» → «Исследования, опубликованные в 2024 или 2025 году»
  • «Актуальные передовые методы» → «Передовые методы по состоянию на январь 2025 года»
  • «Последняя версия» → «Версия 3.12 (выпущена в октябре 2024 года)»
import anthropic
from datetime import date

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

today = date.today().isoformat()

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=256,
    system=f'Today is {today}. Use this as the reference for any time-related words.',
    messages=[{
        'role': 'user',
        'content': (
            'Describe the best practices for Python async programming '
            'as of January 2025. If your knowledge does not cover this timeframe, '
            'say so explicitly and share what you know up to your cutoff.'
        )
    }]
)
print(response.content[0].text)

Создание радара неоднозначности

Перед отправкой любого запроса проверьте его на наличие следующих признаков неоднозначности:

  • Местоимения без понятных референтов: оно, это, то, они
  • Относительные прилагательные: лучше, короче, официальным, простым, исчерпывающим, недавним
  • Расплывчатые глаголы: исправить, улучшить, обновить, сделать, что-нибудь предпринять
  • Неуказанная область действия: не сказано, что входит в область действия, а что — нет
  • Неуказанный формат: формат вывода не определён
  • Недостающий контекст: кто аудитория и для чего предназначен вывод
def scan_prompt_for_ambiguity(prompt):
    '''Simple heuristic scanner for common ambiguity patterns.'''
    warnings = []
    vague_verbs = ['fix', 'improve', 'make it', 'update', 'change it', 'redo']
    relative_adj = ['better', 'shorter', 'longer', 'formal', 'simple', 'recent', 'comprehensive']
    missing_format = ['json', 'table', 'list', 'bullet', 'paragraph', 'word', 'sentence']

    lower = prompt.lower()
    for v in vague_verbs:
        if v in lower:
            warnings.append(f'Vague verb detected: "{v}" — specify what change exactly')
    for a in relative_adj:
        if a in lower:
            warnings.append(f'Relative adjective: "{a}" — anchor with a measurable definition')
    if not any(f in lower for f in missing_format):
        warnings.append('No output format specified — add format, length, or structure')
    return warnings

test = 'Make the report better and more formal.'
print('Prompt:', test)
for w in scan_prompt_for_ambiguity(test):
    print(' WARNING:', w)

Проверка знаний

Разработчик отправляет такой запрос: «Упростите код». ИИ сокращает код, но разработчик хотел, чтобы в нём использовались более понятные имена переменных, а не чтобы код стал короче. В чём заключалась основная проблема?

Устранение неоднозначности — итоги

Неоднозначность заставляет модель угадывать, и её догадка отражает наиболее усреднённую трактовку, а не вашу. Основные приёмы устранения неоднозначности:

  • Сформулируйте трактовку: «Когда я говорю X, я имею в виду Y»
  • Определите область действия: перечислите, что входит в неё, а что — нет
  • Назовите форму вывода: JSON / таблица / абзац / количество предложений
  • Привяжите относительные термины к конкретным значениям: «краткий» → «2 предложения», «официальный» → «без сокращений»
  • Назовите субъект: «Раздел 2», а не «эта часть»
  • Попросите уточнить: поручите модели задать вопросы до продолжения
Можно начать бесплатно

Изучай 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 — локальная установка не требуется.

Все уроки этого курса

  1. Почему важна конкретика
  2. Устранение неоднозначности в запросах
  3. Добавление конкретных деталей
  4. Сравнение расплывчатых и конкретных запросов
← Назад к AI Prompt Engineering