0Pricing
AI Prompt Engineering · Lekcja

Usuwanie niejednoznaczności z promptów

Poznaj techniki eliminowania wielu możliwych interpretacji instrukcji.

Usuwanie niejednoznaczności z promptów to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.

Wpływ niejednoznaczności na AI

Niejednoznaczne prompty zmuszają model do wyboru spośród wielu prawidłowych interpretacji. Model wybiera jedną — zazwyczaj najczęstszą — i konsekwentnie się jej trzyma, nie sygnalizując, że dokonał wyboru.

W rezultacie otrzymuje się doskonale sformułowaną odpowiedź na niewłaściwe pytanie. Rozpoznanie i usunięcie niejednoznaczności przed wysłaniem promptu jest szybsze niż późniejsze przeredagowywanie wyniku.

Klasyk: „Ulepsz to”

„Ulepsz to” to prawdopodobnie najbardziej niejednoznaczny prompt, jaki istnieje. W jaki sposób ma być lepiej?

  • Krócej? Dłużej?
  • Bardziej formalnie? Swobodniej?
  • Więcej przykładów? Mniej?
  • Inny ton? Inna struktura?
  • Poprawiona gramatyka? Inne słownictwo?

Model wybiera jeden wymiar i go zmienia. Jeśli nie jest to wymiar, o który chodziło, pozostaje przeredagowywanie tekstu w nieskończonej pętli.

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()

Wiele interpretacji: przykłady praktyczne

Każdy prompt zawierający nieokreślony zaimek, względny przymiotnik lub brakujący podmiot może być niejednoznaczny. Przykłady:

  • „Ulepsz wydajność” — czego? Szybkości, dokładności, zaangażowania użytkowników?
  • „Napisz o wpływie” — pozytywnym, negatywnym, gospodarczym, społecznym?
  • „Napraw to” — logikę, styl, formatowanie czy gramatykę?
  • „Nadaj temu profesjonalny charakter” — formalne słownictwo? Uporządkowane akapity? Usunięcie emoji?
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)

Technika usuwania niejednoznaczności: określenie interpretacji

Jeśli wiadomo, że prompt można zinterpretować na kilka sposobów, należy wyraźnie określić oczekiwaną interpretację.

Szablon: „Kiedy mówię [niejednoznaczny termin], mam na myśli [konkretna definicja]”.

Przykłady:

  • „Kiedy mówię «edytuj», mam na myśli wyłącznie poprawę gramatyki i pisowni — treści nie należy zmieniać”.
  • „Kiedy mówię «zwięźle», mam na myśli maksymalnie 3 zdania”.
  • „Kiedy mówię «profesjonalnie», mam na myśli brak zaimków pierwszej osoby i brak form skróconych”.
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)

Technika usuwania niejednoznaczności: definiowanie zakresu

Niejednoznaczność zakresu często pojawia się przy prośbach o ulepszenie lub rozszerzenie treści. Można ją usunąć, dokładnie określając, co wchodzi w zakres, a co pozostaje poza nim.

W zakresie: co model może zmienić
Poza zakresem: co musi pozostać bez zmian

Jest to szczególnie ważne podczas edytowania kodu, redagowania dokumentów i przetwarzania zbiorów danych, ponieważ niezamierzone zmiany mogą powodować poważne problemy.

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)

Technika usuwania niejednoznaczności: określenie formatu wyniku

Niejednoznaczność formatu wyniku pojawia się wtedy, gdy oczekuje się konkretnego formatu, ale nie zostanie on określony. „Proszę podać dane” — w akapicie? W formie listy? Tabeli? Obiektu JSON?

Zawsze należy wskazać dokładny oczekiwany format wyniku. Gdy zostanie on wyraźnie określony, model precyzyjnie się do niego dopasuje.

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)

Technika usuwania niejednoznaczności: poproszenie modelu o doprecyzowanie

Podczas tworzenia złożonego i niejednoznacznego promptu można polecić modelowi zadawanie pytań doprecyzowujących przed podjęciem próby wykonania zadania.

Jest to szczególnie przydatne podczas tworzenia asystentów AI — model powinien gromadzić informacje zamiast snuć założenia, tak jak zrobiłby to dobry ludzki konsultant.

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)

Określenia względne wymagające doprecyzowania

Określenia względne nie mają stałego znaczenia — różne osoby rozumieją je inaczej:

  • „Zwięzłe” — 1 zdanie? 3 zdania? 1 akapit?
  • „Formalne” — bez form skróconych? Akademicki styl cytowania? Język prawniczy?
  • „Proste” — poziom czytania odpowiedni dla ucznia piątej klasy? Bez terminów technicznych? Tylko krótkie zdania?
  • „Wyczerpujące” — uwzględniające wszystkie najważniejsze przypadki? Także przypadki brzegowe? Z przykładami?

Każde określenie względne należy zastąpić konkretnym, mierzalnym odpowiednikiem.

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()

Niejednoznaczność podmiotu: kto wykonuje działanie?

Niejednoznaczność podmiotu pojawia się wtedy, gdy nie wiadomo, do kogo lub czego odnosi się instrukcja.

„Przeredaguj wstęp” — czego? Wklejonego dokumentu? Dokumentu, o którym rozmawialiśmy 5 wypowiedzi wcześniej? Nowego dokumentu?

„Przetłumacz to” — którą część? Całą odpowiedź? Tylko sekcję z podsumowaniem? Komentarze w kodzie?

Zawsze należy wskazać konkretny obiekt lub sekcję, o które chodzi, szczególnie w rozmowach wieloetapowych.

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)

Niejednoznaczność czasowa: kiedy?

Określenia czasu w promptach mogą być niejednoznaczne: „niedawny”, „obecny”, „najnowszy”, „teraz”.

Dane treningowe modelu mają określoną datę odcięcia — model nie wie, co oznacza „teraz”, jeśli nie zostanie mu to wyjaśnione. W zadaniach zależnych od czasu zawsze należy podawać konkretne daty.

  • „Najnowsze badania” → „Badania opublikowane w 2024 lub 2025 roku”
  • „Obecne najlepsze praktyki” → „Najlepsze praktyki aktualne na styczeń 2025 roku”
  • „Najnowsza wersja” → „Wersja 3.12 (wydana w październiku 2024 roku)”
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)

Tworzenie radaru niejednoznaczności

Przed wysłaniem dowolnego promptu należy sprawdzić, czy występują w nim następujące sygnały niejednoznaczności:

  • Zaimek bez jasnego odniesienia: to, ten, tamto, oni
  • Względne przymiotniki: lepszy, krótszy, formalny, prosty, wyczerpujący, niedawny
  • Nieprecyzyjne czasowniki: napraw, ulepsz, zaktualizuj, zrób, coś z tym zrób
  • Brak określonego zakresu: brak informacji o tym, co wchodzi w zakres, a co pozostaje poza nim
  • Brak formatu: nie określono formatu wyniku
  • Brak kontekstu: nie określono, kim są odbiorcy ani do czego służy wynik
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)

Sprawdzenie wiedzy

Deweloper wysyła następujący prompt: „Uprość kod”. AI skraca kod, ale deweloper chciał zastosowania bardziej czytelnych nazw zmiennych, a nie skrócenia kodu. Na czym polegał główny problem?

Usuwanie niejednoznaczności — podsumowanie

Niejednoznaczność zmusza model do zgadywania — jego domysł jest najbardziej przeciętną interpretacją, a nie interpretacją użytkownika. Najważniejsze techniki usuwania niejednoznaczności:

  • Określenie interpretacji: „Kiedy mówię X, mam na myśli Y”
  • Zdefiniowanie zakresu: wymienienie elementów wchodzących w zakres i pozostających poza nim
  • Wskazanie formatu wyniku: JSON / tabela / akapit / liczba zdań
  • Doprecyzowanie określeń względnych: „zwięzłe” → „2 zdania”, „formalne” → „bez form skróconych”
  • Wskazanie podmiotu: „Sekcja 2”, a nie „ta część”
  • Poproszenie o doprecyzowanie: polecenie modelowi zadawania pytań przed rozpoczęciem pracy

Często zadawane pytania

Czy lekcja „Usuwanie niejednoznaczności z promptów” jest bezpłatna?

Tak — pełny tekst „Usuwanie niejednoznaczności z promptów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.

Co nauczysz się w „Usuwanie niejednoznaczności z promptów”?

Poznaj techniki eliminowania wielu możliwych interpretacji instrukcji. Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?

Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Usuwanie niejednoznaczności z promptów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?

Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego precyzja ma znaczenie
  2. Usuwanie niejednoznaczności z promptów
  3. Dodawanie konkretnych szczegółów
  4. Porównanie nieprecyzyjnych i precyzyjnych promptów
← Powrót do AI Prompt Engineering