Устранение неоднозначности в запросах
Освойте приёмы, которые исключают разные толкования Ваших инструкций
«Устранение неоднозначности в запросах» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Почему важна конкретика
- Устранение неоднозначности в запросах
- Добавление конкретных деталей
- Сравнение расплывчатых и конкретных запросов