AI Prompt Engineering · Lekcja

Tworzenie wzorców z miejscami do uzupełnienia

Używaj symboli zastępczych {{variable}} i podstawiania ciągów znaków w Pythonie.

Lekcja 2 z 413 kroki

Tworzenie wzorców z miejscami do uzupełnienia 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.

Konwencja placeholderów

Wzorzec promptu z polami do uzupełnienia wykorzystuje placeholdery do oznaczenia części promptu, które przed wysłaniem go do modelu zostaną zastąpione rzeczywistymi wartościami.

Najczęściej stosowaną konwencją placeholderów są podwójne nawiasy klamrowe: {{variable_name}}. Ta konwencja jest czytelna, przypadkowo rzadko pojawia się w zwykłym tekście i jest szeroko obsługiwana przez biblioteki szablonów.

Inne spotykane konwencje to: pojedyncze nawiasy klamrowe {variable}, nawiasy ostrokątne <variable> oraz zmienne zapisane wielkimi literami. Należy wybrać jedną konwencję i stosować ją konsekwentnie.

Podstawianie podstawowych placeholderów

Najprostszy wzorzec uzupełniania luk polega na bezpośrednim podstawianiu ciągów znaków:

Szablon: "Napisz {{word_count}}-wordowy opis {{product}} dla grupy docelowej {{audience}}."

Podstawianie odbywa się przed wysłaniem ciągu znaków do modelu — model otrzymuje czysty, kompletny prompt bez znaczników placeholderów. Placeholdery są etapem wstępnego przetwarzania, a nie czymś, czym zajmuje się sam model.

Typowe kategorie placeholderów

Szablony należy budować z użyciem standardowych kategorii placeholderów, które obejmują większość przypadków użycia:

  • {{customer_name}} — imię i nazwisko odbiorcy lub nazwa przedmiotu
  • {{product}} — produkt, usługa lub temat, o którym powstaje tekst
  • {{tone}} — np. profesjonalny, swobodny, pilny, entuzjastyczny
  • {{audience}} — odbiorcy treści
  • {{word_count}} — docelowa długość
  • {{format}} — punkty, akapity, lista numerowana
  • {{context}} — informacje kontekstowe charakterystyczne dla danego przypadku

Spójne nazewnictwo w różnych szablonach ułatwia poruszanie się po bibliotece i ogranicza liczbę błędów.

Podstawianie za pomocą formatowania ciągów znaków w Pythonie

Wbudowana w Pythonie metoda ciągów znaków .format() to prosty sposób na uzupełnianie placeholderów przy użyciu składni {variable}:

import openai

client = openai.OpenAI(api_key='sk-...')

EMAIL_TEMPLATE = '''Write a follow-up email from {sender_name} to {recipient_name}.
Context: {context}
Tone: {tone}
Length: {word_count} words.
Include a clear call to action: {cta}.
Do not mention competitors. Active voice. No bullet points.'''

def generate_email(sender, recipient, context, tone, word_count, cta):
    prompt = EMAIL_TEMPLATE.format(
        sender_name=sender,
        recipient_name=recipient,
        context=context,
        tone=tone,
        word_count=word_count,
        cta=cta
    )

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

result = generate_email(
    sender='Sarah Chen',
    recipient='Mr. Patel',
    context='We met at the DevConf conference last week and discussed API integration.',
    tone='warm and professional',
    word_count=120,
    cta='Schedule a 20-minute demo call'
)
print(result)

Podejście z użyciem f-stringów

F-stringi w Pythonie zapewniają składnię podstawiania umieszczaną bezpośrednio w tekście, którą niektórzy deweloperzy preferują ze względu na czytelność:

import openai

client = openai.OpenAI(api_key='sk-...')

def generate_product_description(product, audience, tone, word_count, key_benefit):
    prompt = (
        f'Write a product description for {product}, designed for {audience}. '
        f'Tone: {tone}. '
        f'Length: {word_count} words. '
        f'Lead with this key benefit: {key_benefit}. '
        'Active voice. No bullet points. No pricing mentions.'
    )

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

print(generate_product_description(
    product='FocusFlow, a time-blocking productivity app',
    audience='freelancers and independent consultants',
    tone='energetic and practical',
    word_count=150,
    key_benefit='Reclaim two hours every day by blocking distractions automatically'
))

Obsługa znaków specjalnych w placeholderach

Częsty błąd: wartości podane przez użytkownika, zawierające nawiasy klamrowe, cudzysłowy lub znaki nowego wiersza, mogą zakłócić podstawianie ciągów znaków.

Metody ochrony:

  • Sanityzuj dane wejściowe przed podstawieniem — w razie potrzeby usuwaj lub koduj znaki specjalne
  • W przypadku szablonów wielowierszowych używaj ciągów znaków w potrójnych cudzysłowach, aby bezpiecznie obsługiwać znaki nowego wiersza
  • Gdy sama wartość zmiennej zawiera nawiasy klamrowe (np. kod), używaj podejścia, które traktuje wartość zmiennej jako dosłowny tekst (Jinja2 dobrze sobie z tym radzi)

Zawsze należy testować szablon z danymi wejściowymi obejmującymi przypadki brzegowe: puste ciągi znaków, ciągi zawierające cudzysłowy, ciągi ze znakami nowego wiersza oraz bardzo długie ciągi.

Wartości domyślne w szablonach

Nie wszystkie zmienne muszą być wymagane. Wartości domyślne parametrów opcjonalnych zwiększają elastyczność szablonów:

def build_prompt(product, audience, tone='professional and friendly', word_count=200, format_style='prose'):
    format_instruction = {
        'prose': 'Write in continuous paragraphs. No bullet points.',
        'bullets': 'Use bullet points. Each point is one sentence.',
        'numbered': 'Use a numbered list. Each item is one sentence.'
    }.get(format_style, 'Write in continuous paragraphs.')

    return (
        f'Write a description of {product} for {audience}. '
        f'Tone: {tone}. '
        f'Length: {word_count} words. '
        f'{format_instruction} '
        'Active voice. No competitor mentions.'
    )

# Minimal call — uses all defaults
print(build_prompt('Notion', 'students'))

# Full call — overrides defaults
print(build_prompt('Notion', 'students', tone='casual', word_count=100, format_style='bullets'))

Szablony wieloblokowe

Złożone prompty mogą zawierać wiele bloków zmiennych — blok promptu systemowego i blok wiadomości użytkownika, z których każdy ma własne placeholdery:

SYSTEM_TEMPLATE = 'You are a {role} writing for {company}. Your audience is {audience}. Style: {style}.'

USER_TEMPLATE = 'Write a {content_type} about {topic}. Length: {word_count} words. Deadline tone: {urgency}.'

import openai

client = openai.OpenAI(api_key='sk-...')

def generate(role, company, audience, style, content_type, topic, word_count, urgency):
    system_msg = SYSTEM_TEMPLATE.format(
        role=role, company=company, audience=audience, style=style
    )
    user_msg = USER_TEMPLATE.format(
        content_type=content_type, topic=topic,
        word_count=word_count, urgency=urgency
    )

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

Walidowanie placeholderów przed renderowaniem

Zawsze należy sprawdzić, czy wszystkie wymagane placeholdery zostały uzupełnione przed wysłaniem promptu. Brak placeholdera oznacza, że model otrzyma dosłowny tekst, taki jak {{product}}, i może wygenerować absurdalny wynik:

import re

def validate_template(template_str, provided_vars):
    required = set(re.findall(r'\{\{(\w+)\}\}', template_str))
    missing = required - set(provided_vars.keys())

    if missing:
        raise ValueError(f'Missing required template variables: {missing}')

    return True

template = 'Write a {{word_count}}-word {{tone}} description of {{product}} for {{audience}}.'
vars_provided = {'word_count': 150, 'tone': 'friendly', 'product': 'TaskFlow'}

try:
    validate_template(template, vars_provided)
except ValueError as e:
    print(f'Template error: {e}')
    # Output: Template error: Missing required template variables: {{'audience'}}

Warunkowe bloki szablonów

Czasami sekcja szablonu powinna pojawić się tylko wtedy, gdy podano daną zmienną. Można to zaimplementować w Pythonie, warunkowo budując ciąg znaków:

def build_report_prompt(topic, audience, word_count, include_recommendations=False, cta=None):
    prompt = f'Write a report on {topic} for {audience}. Length: {word_count} words. Active voice.'

    if include_recommendations:
        prompt += ' End with a numbered list of 3 specific recommendations.'

    if cta:
        prompt += f' Close with this call to action: {cta}'

    return prompt

# Without optional sections
print(build_report_prompt('cloud cost optimization', 'engineering managers', 400))

# With optional sections
print(build_report_prompt(
    topic='cloud cost optimization',
    audience='engineering managers',
    word_count=600,
    include_recommendations=True,
    cta='Book a cost audit with our team at cloudcost.io'
))

Zmienne wyboru o wartościach wyliczeniowych

Niektóre zmienne szablonu powinny być ograniczone do ustalonego zbioru dozwolonych opcji. Należy wymusić to za pomocą walidacji w stylu enum:

VALID_TONES = ['professional', 'casual', 'urgent', 'empathetic', 'enthusiastic']
VALID_FORMATS = ['prose', 'bullets', 'numbered', 'table']

def generate_content(topic, tone, format_style, word_count):
    if tone not in VALID_TONES:
        raise ValueError(f'Invalid tone: {tone}. Choose from: {VALID_TONES}')
    if format_style not in VALID_FORMATS:
        raise ValueError(f'Invalid format: {format_style}. Choose from: {VALID_FORMATS}')

    format_map = {
        'prose': 'continuous paragraphs, no lists',
        'bullets': 'bullet points',
        'numbered': 'numbered list',
        'table': 'a markdown table'
    }

    prompt = (f'Write about {topic} in {tone} tone. '
              f'Format: {format_map[format_style]}. '
              f'Length: {word_count} words. Active voice.')

    return prompt

Sprawdzenie wiedzy: wzorce z uzupełnianiem luk

Masz następujący szablon: 'Write a {tone} email to {recipient} about {topic}. Length: {word_count} words.'

Wywołujesz go za pomocą: tone='formal', recipient='the team', word_count=100 — ale zapominasz o parametrze topic.

Co się stanie?

Podsumowanie: tworzenie wzorców z uzupełnianiem luk

Wzorce promptów z uzupełnianiem luk używają placeholderów ({{variable}}, {variable} lub podobnych), aby oznaczyć zmienne części wielokrotnego użytku szablonu. Najczęściej stosowanymi mechanizmami podstawiania w Pythonie są .format() i f-stringi.

Najlepsze praktyki: walidowanie wszystkich wymaganych placeholderów przed renderowaniem, używanie wartości domyślnych dla zmiennych opcjonalnych, ograniczanie zmiennych wyliczeniowych oraz ostrożna obsługa danych wejściowych z przypadków brzegowych (pustych ciągów znaków i znaków specjalnych).

W następnej lekcji poznasz Jinja2 oraz string.Template w Pythonie — narzędzia zapewniające bardziej zaawansowane możliwości podstawiania zmiennych.

Bezpłatny start

Ucz się AI Prompt Engineering dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
53
Lekcje
199

Często zadawane pytania

Czy lekcja „Tworzenie wzorców z miejscami do uzupełnienia” jest bezpłatna?

Tak — pełny tekst „Tworzenie wzorców z miejscami do uzupełnienia” 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 „Tworzenie wzorców z miejscami do uzupełnienia”?

Używaj symboli zastępczych {{variable}} i podstawiania ciągów znaków w Pythonie. Ć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 „Tworzenie wzorców z miejscami do uzupełnienia”?

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. Czym jest szablon promptu?
  2. Tworzenie wzorców z miejscami do uzupełnienia
  3. Techniki podstawiania zmiennych
  4. Ponowne używanie szablonów w różnych zadaniach
← Powrót do AI Prompt Engineering