Strategie projektowania promptów

Na tej stronie omawiamy ogólne strategie projektowania promptów, które możesz zastosować.

Duże modele językowe (LLM) są trenowane na ogromnych ilościach danych tekstowych, aby poznawać wzorce i zależności między językami. Gdy otrzymają jakiś tekst (prompt), modele językowe mogą przewidywać, co może się pojawić dalej, tak jak zaawansowane narzędzie do autouzupełniania.

Google AI Studio hostuje prostą galerię promptów, która służy do interaktywnego prezentowania wielu koncepcji omawianych w tym przewodniku. Z pozostałych części tego przewodnika dowiesz się o tych strategiach projektowania promptów:

Udzielanie jasnych i konkretnych instrukcji

Przekazywanie modelowi instrukcji dotyczących działań jest skutecznym i skutecznym sposobem dostosowywania działania modelu. Upewnij się, że instrukcje są jasne i konkretne. Instrukcje mogą być proste, np. lista instrukcji krok po kroku, lub złożone, np. opis sposobu działania i przemyślenia użytkownika.

Zdefiniuj zadanie do wykonania

Opisz szczegółowo zadanie, które model ma wykonać. Może to być proste zadanie polegające na podaniu listy instrukcji lub skomplikowane mapowanie wrażeń i przemyśleń użytkownika. Poniższy prompt prosi model o streszczenie bloku tekstu:

Summarize this text:
Text: A quantum computer exploits quantum mechanical phenomena to perform calculations exponentially
faster than any modern traditional computer. At very tiny scales, physical matter acts as both
particles and as waves, and quantum computing uses specialized hardware to leverage this behavior.
The operating principles of quantum devices is beyond the scope of classical physics. When deployed
at scale, quantum computers could be used in a wide variety of applications such as: in
cybersecurity to break existing encryption methods while helping researchers create new ones, in
meteorology to develop better weather forecasting etc. However, the current state of the art quantum
computers are still largely experimental and impractical.
  
    Quantum computers leverage the wave-particle duality of matter at tiny scales to perform
    calculations exponentially faster than traditional computers. They harness quantum phenomena,
    which are beyond the scope of classical physics, to achieve this speed advantage. While
    promising for applications like cybersecurity, weather forecasting, and beyond, current
    quantum computers are still experimental and not yet practical for widespread use.
  

Określ ograniczenia

Określ ograniczenia dotyczące odczytywania promptu lub generowania odpowiedzi. Możesz określić, co model ma robić, a czego nie. W poprzednim przykładzie podsumowanie jest krótsze niż oryginalny tekst, ale może chcesz, aby było jeszcze krótsze. W takim przypadku możesz w prompcie określić limit długości podsumowania:

Summarize this text in two sentences:
Text: A quantum computer exploits quantum mechanical phenomena to perform calculations exponentially
faster than any modern traditional computer. At very tiny scales, physical matter acts as both
particles and as waves, and quantum computing uses specialized hardware to leverage this behavior.
The operating principles of quantum devices is beyond the scope of classical physics. When deployed
at scale, quantum computers could be used in a wide variety of applications such as: in
cybersecurity to break existing encryption methods while helping researchers create new ones, in
meteorology to develop better weather forecasting etc. However, the current state of the art quantum
computers are still largely experimental and impractical.
    

      Quantum computers harness the wave-particle duality of matter at the quantum level to perform
      computations exponentially faster than traditional computers. While these machines hold
      immense potential for fields like cybersecurity and weather forecasting, they are currently
      in their early stages of development and not yet practical for widespread use.
    

Zdefiniuj format odpowiedzi

Możesz też podać instrukcje określające format odpowiedzi. Możesz na przykład poprosić o odpowiedź w formie tabeli, listy wypunktowanej, zwięzłej prezentacji, słów kluczowych, zdania lub akapitu. Ten komunikat systemowy instruuje model w swojej odpowiedzi, aby był bardziej konwersacyjny:

    All questions should be answered comprehensively with details, unless the user requests a
    concise response specifically. Respond in the same language as the query.
  
    What is a smart way to create a lemonade business?
  
Launching a Successful Lemonade Stand: A Smart Approach
Creating a lemonade business, whether a simple stand or a larger operation, requires strategic thinking. Here's a breakdown of how to approach it smartly:

1. Define Your Business:
Scope: Are you aiming for a small, seasonal lemonade stand, a food truck, a delivery service, or something else entirely?
Target Audience: Who are you selling to? Families, office workers, tourists?
Unique Selling Proposition: What sets your lemonade apart? Special flavors, organic ingredients, a unique recipe?

Pricing: Research competitor prices and determine a profitable pricing structure.
Location: Consider foot traffic, accessibility, and regulations for your chosen location.
.....
  

Podsumowanie

  • Podawaj modelowi instrukcje dotyczące tego, co ma robić.
  • Instrukcje powinny być jasne i konkretne.
  • Określ ograniczenia i wymagania dotyczące formatowania danych wyjściowych.

Uwzględnij przykłady z niewielką ilością danych

W prompcie możesz podać przykłady, które pokazują, jak wygląda poprawna konfiguracja. Model próbuje wykrywać wzorce i zależności na podstawie przykładów, a potem stosuje je podczas generowania odpowiedzi. Prompty zawierające kilka przykładów są nazywane promptami few-shot, a te, które nie zawierają przykładów, są nazywane promptami typu zero-shot. Prompty typu few-shot są często używane do regulowania formatowania, formułowania, zakresu lub ogólnego wzoru odpowiedzi modelu. Używaj konkretnych i zróżnicowanych przykładów, aby model mógł zawęzić zakres i uzyskać dokładniejsze wyniki.

Zalecamy, aby zawsze uwzględniać w promptach przykłady krótkich wypowiedzi. Prośby bez przykładów „few-shot” mogą być mniej skuteczne. Możesz usunąć instrukcje z promptu, jeśli przykłady jasno pokazują wykonywane przez Ciebie zadanie.

Prompty typu „zero-shot” i „few-shot”

Ten prompt typu „zero-shot” proponuje modelowi wybranie najlepszego wyjaśnienia.

Please choose the best explanation to the question:

Question: How is snow formed?
Explanation1: Snow is formed when water vapor in the air freezes into ice crystals in the
atmosphere, which can combine and grow into snowflakes as they fall through the atmosphere and
accumulate on the ground.
Explanation2: Water vapor freezes into ice crystals forming snow.
Answer:
  
Explanation 1 is the best explanation.
  

Jeśli Twój przypadek użycia wymaga, aby model generował zwięzłe odpowiedzi, możesz uwzględnić w prompcie przykłady, które preferują zwięzłe odpowiedzi.

Poniższy prompt zawiera 2 przykłady, które pokazują, że krótsze wyjaśnienia są lepsze. W odpowiedzi widać, że przykłady skłoniły model do wybrania krótszego wyjaśnienia (Wyjaśnienie 2), a nie dłuższego wyjaśnienia (Wyjaśnienie1).

Below are some examples showing a question, explanation, and answer format:

Question: Why is sky blue?
Explanation1: The sky appears blue because of Rayleigh scattering, which causes shorter blue
wavelengths of light to be scattered more easily than longer red wavelengths, making the sky look
blue.
Explanation2: Due to Rayleigh scattering effect.
Answer: Explanation2

Question: What is the cause of earthquakes?
Explanation1: Sudden release of energy in the Earth's crust.
Explanation2: Earthquakes happen when tectonic plates suddenly slip or break apart, causing a
release of energy that creates seismic waves that can shake the ground and cause damage.
Answer: Explanation1

Now, Answer the following question given the example formats above:

Question: How is snow formed?
Explanation1: Snow is formed when water vapor in the air freezes into ice crystals in the
atmosphere, which can combine and grow into snowflakes as they fall through the atmosphere and
accumulate on the ground.
Explanation2: Water vapor freezes into ice crystals forming snow.
Answer:
  
Answer: Explanation2
  

Znajdź optymalną liczbę przykładów

Aby uzyskać najlepsze wyniki, możesz eksperymentować z liczbą przykładów w promptach. Modele takie jak Gemini często wykrywają wzorce na podstawie kilku przykładów, ale może być konieczne wypróbowanie różnych liczb przykładów, aby uzyskać pożądane wyniki. Jednocześnie, jeśli podasz zbyt wiele przykładów, model może przesadzić z reakcją na przykłady.

Używaj przykładów, aby pokazywać wzorce zamiast antywzorców

Używanie przykładów, aby pokazać modelowi wzór do naśladowania, jest skuteczniejsze niż używanie przykładów, aby pokazać modelowi wzór do unikania.

Wzorzec negatywny:

Don't end haikus with a question:
Haiku are fun
A short and simple poem
Don't you enjoy them?
  

Wzór dodatni:

Always end haikus with an assertion:
Haiku are fun
A short and simple poem
A joy to write
  

Używaj spójnego formatowania w przykładach

Aby uniknąć odpowiedzi w niepożądanym formacie, upewnij się, że struktura i formatowanie przykładów z niewielką ilością danych są takie same. Jednym z głównych celów dodawania krótkich filmów w promptach jest pokazanie modelowi formatu odpowiedzi. Dlatego konieczne jest zadbanie o spójny format wszystkich przykładów. Zwróć szczególną uwagę na tagi XML, odstępy, znaki nowego wiersza i przykładowe fragmenty kodu.

Podsumowanie

  • Uwzględnienie w promptach przykładów odpowiedzi pomaga modelowi nauczyć się, jak odpowiadać.
  • Podaj przykłady wzorców, których należy przestrzegać, zamiast przykładów wzorców, których należy unikać.
  • Eksperymentuj z liczbą promptów do uwzględnienia. W zależności od modelu zbyt mało przykładów jest nieskutecznych przy zmianie działania modelu. Zbyt wiele przykładów powoduje nadmierne dopasowanie modelu.
  • Używaj spójnego formatowania w przykładach

Dodaj informacje kontekstowe

Zamiast zakładać, że model ma wszystkie wymagane informacje, możesz dołączyć do promptu instrukcje i informacje, których potrzebuje do rozwiązania problemu. Te informacje kontekstowe pomagają modelowi zrozumieć ograniczenia i szczegóły dotyczące tego, czego oczekujesz.

W tym przykładzie model prosi o wskazanie sposobu rozwiązania problemu z routerem:

What should I do to fix my disconnected wifi? The light on my Google Wifi router is yellow and
blinking slowly.
  
  A yellow blinking light on your Google Wifi router usually indicates a problem with the internet connection. Here are some steps to troubleshoot and fix the issue:
  1. Restart your router and modem:
    - Unplug your modem from the power outlet and wait for 30 seconds.
    - Plug your modem back in and wait for it to fully boot up.
    - Unplug your Google Wifi router and wait for 30 seconds.
    - Plug your Google Wifi router back in and wait for it to fully boot up.
.....
  

Odpowiedź wygląda jak ogólne informacje dotyczące rozwiązywania problemów, które nie dotyczą routera ani stanu diod LED.

Aby dostosować odpowiedź do konkretnego routera, możesz do promptu dodać przewodnik rozwiązywania problemów z routerem, który posłuży jako kontekst podczas udzielania odpowiedzi.

Answer the question using the text below. Respond with only the text provided.
Question: What should I do to fix my disconnected wifi? The light on my Google Wifi router is yellow and blinking slowly.

Text:
Color: Slowly pulsing yellow
What it means: There is a network error.
What to do:
Check that the Ethernet cable is connected to both your router and your modem and both devices are turned on. You might need to unplug and plug in each device again.

Color: Fast blinking yellow
What it means: You are holding down the reset button and are factory resetting this device.
What to do:
If you keep holding down the reset button, after about 12 seconds, the light will turn solid yellow. Once it is solid yellow, let go of the factory reset button.

Color: Solid yellow
What it means: Router is factory resetting.
What to do:
This can take up to 10 minutes. When it's done, the device will reset itself and start pulsing white, letting you know it's ready for setup.

Color: Solid red
What it means: Something is wrong.
What to do:
Critical failure. Factory reset the router. If the light stays red, contact Wifi customer support.
  
Check that the Ethernet cable is connected to both your router and your modem and both devices are turned on. You might need to unplug and plug in each device again.
  

Podsumowanie

  • W promptach należy uwzględnić informacje (kontekst), których model ma używać podczas generowania odpowiedzi.
  • Przekaż modelowi instrukcje korzystania z informacji kontekstowych.

Dodaj prefiksy

Prefiks to słowo lub wyrażenie, które dodajesz do treści promptu. Może ono służyć do różnych celów w zależności od tego, gdzie je umieścisz:

  • Prefiks danych wejściowych: dodanie prefiksu do sygnałów wejściowych o znaczeniu semantycznym do części danych wejściowych do modelu. Na przykład prefiksy „English:” i „Francuski:” rozdzielają 2 różne języki.
  • Prefiks danych wyjściowych: mimo że dane wyjściowe są generowane przez model, możesz dodać prefiks dla tych danych w prompcie. W przypadku prefiksu danych wyjściowych model otrzymuje informacje o tym, czego oczekuje w odpowiedzi. Na przykład prefiks danych wyjściowych „JSON:” sygnalizuje modelowi, że dane wyjściowe powinny być w formacie JSON.
  • Przykładowy prefiks: w promptach krótkotrwałych dodanie prefiksów do przykładów zapewnia etykiety, których model może użyć podczas generowania danych wyjściowych, co ułatwia analizowanie treści wyjściowej.

W tym przykładzie „Text:” jest preiksem wejściowym, a „The answer is:” jest preiksem wyjściowym.

Classify the text as one of the following categories.
- large
- small
Text: Rhino
The answer is: large
Text: Mouse
The answer is: small
Text: Snail
The answer is: small
Text: Elephant
The answer is:
  
The answer is: large
  

Pozwól modelowi na częściowe wprowadzanie danych

Generatywne modele językowe działają jak zaawansowane narzędzie autouzupełniania. Gdy podasz część treści, model może dostarczyć resztę treści lub to, co według niego jest kontynuacją tych treści, jako odpowiedź. Jeśli dodasz przykłady lub kontekst, model może je uwzględnić.

Ten przykład zawiera prompt z instrukcją i danymi wejściowymi:

For the given order, return a JSON object that has the fields cheeseburger, hamburger, fries, or
drink, with the value being the quantity.

Order: A burger and a drink.
  
```
{
  "hamburger": 1,
  "drink": 1
}
```
  

Model wykonał polecenie, ale zapisywanie instrukcji w języku naturalnym może być czasami trudne i zostawia wiele pola do interpretacji. Na przykład menu restauracji może zawierać wiele pozycji. Aby zmniejszyć rozmiar odpowiedzi JSON, prawdopodobnie warto pominąć produkty, które nie zostały zamówione. W takim przypadku możesz podać przykład i prefiks odpowiedzi, a model go wykona:

Valid fields are cheeseburger, hamburger, fries, and drink.
Order: Give me a cheeseburger and fries
Output:
```
{
  "cheeseburger": 1,
  "fries": 1
}
```
Order: I want two burgers, a drink, and fries.
Output:
  
```
{
  "hamburger": 2,
  "drink": 1,
  "fries": 1
}
```
  

Zwróć uwagę, że słowo „cheeseburger” zostało wykluczone z danych wyjściowych, ponieważ nie było ono częścią zamówienia.

Poproś model o sformatowanie odpowiedzi

Strategia zakończenia może też pomóc w sformatowaniu odpowiedzi. W tym przykładzie model tworzy plan eseju:

Create an outline for an essay about hummingbirds.
  
  Hummingbirds: A Symphony of Speed and Color
    I. Introduction
    A. Hummingbirds are fascinating creatures known for their dazzling colors, lightning-fast flight, and unique feeding habits.
    B. Brief overview of the diversity of hummingbird species and their geographic distribution.
    C. Thesis statement: Hummingbirds are an embodiment of resilience, adaptation, and the wonders of the natural world.
.....
  

Prompt nie określał formatu konspektu, a model wybrał format za Ciebie. Aby model zwrócił streszczenie w określonym formacie, możesz dodać tekst, który stanowi początek streszczenia, a model uzupełni go na podstawie wstępnego wzorca.

Create an outline for an essay about hummingbirds.
I. Introduction
   *
  
  Hummingbirds: Jewels of the Air
    **I. Introduction**
       * **Hook:** Begin with a captivating image or anecdote about hummingbirds, emphasizing their vibrant colors, rapid flight, and unique feeding habits.
       * **Background:** Briefly introduce hummingbirds as the smallest birds in the world and their fascinating adaptations for a nectar-rich diet.
       * **Thesis:** State the main argument or focus of the essay. Examples: 
            * **The incredible adaptations of hummingbirds enable them to thrive in diverse ecosystems.**
            * **Hummingbirds play a crucial role in pollination and biodiversity.**
            * **The beauty and grace of hummingbirds make them captivating subjects for both scientific study and artistic appreciation.**
  

Podsumowanie

  • Jeśli podasz modelowi częściowe dane wejściowe, model uzupełni te dane na podstawie wszystkich dostępnych przykładów lub kontekstu w prompcie.
  • Czasami może być łatwiej, gdy model samodzielnie wypełni pole, niż opisywać zadanie w języku naturalnym.
  • Dodanie częściowej odpowiedzi do promptu może pomóc modelowi zachować zgodność z określonym wzorcem lub formatem.

dzielić prompty na proste komponenty,

W przypadku zastosowań wymagających złożonych promptów możesz pomóc modelowi w uporaniu się z tą złożonością, dzieląc dane na prostsze komponenty.

Podziel instrukcje

Zamiast wielu instrukcji w jednym promptie, utwórz po 1 prompcie dla każdej z nich. Na podstawie danych wejściowych użytkownika możesz wybrać, który z nich ma być przetwarzany.

Prompty łańcucha

W przypadku złożonych zadań, które wymagają wykonania wielu sekwencyjnych kroków, utwórz prompt dla każdego takiego etapu, a potem powiąż prompty w sekwencję. W tym sekwencyjnym łańcuchu promptów dane wyjściowe jednego promptu stają się danymi wejściowymi następnego. Dane wyjściowe ostatniego prompta w sekwencji są ostatecznym wynikiem.

Zbiorcze odpowiedzi

Agregacja ma miejsce, gdy chcesz wykonać różne równoległe zadania na różnych częściach danych i agregować wyniki w celu uzyskania ostatecznej wartości wyjściowej. Możesz na przykład nakazać modelowi wykonanie jednej operacji na pierwszej części danych, wykonanie innej na pozostałych danych i zagregowanie wyników.

Podsumowanie

  • Podziel złożone instrukcje na prompty dla każdej z nich i na podstawie danych wejściowych użytkownika zdecyduj, który z nich chcesz zastosować.
  • Podziel kilka kolejnych kroków na osobne prompty i ułóż je w łańcuch, tak aby dane wyjściowe z poprzedniego promptu stały się danymi wejściowymi kolejnego promptu.
  • Podziel zadania równoległe i agreguj odpowiedzi, aby otrzymać ostateczne wyniki.

Eksperymentowanie z różnymi wartościami parametrów

Każde wywołanie wysłane do modelu zawiera wartości parametrów, które określają, jak model wygeneruje odpowiedź. Model może generować różne wyniki zależnie od wartości parametrów. Eksperymentuj z różnymi wartościami parametrów, aby uzyskać najlepsze wartości do danego zadania. Dostępne parametry mogą się różnić w zależności od modelu. Najczęstsze parametry to:

  • Maksymalna liczba tokenów wyjściowych
  • Temperatura
  • Top-K
  • Top-P

Maksymalna liczba tokenów wyjściowych

Maksymalna liczba tokenów, które można wygenerować w odpowiedzi. Token ma około 4 znaków. 100 tokenów odpowiada około 20 słowom.

Jeśli chcesz uzyskiwać krótsze odpowiedzi, podaj niższą wartość, a jeśli dłuższe – wyższą.

Temperatura

Temperatura jest używana do próbkowania podczas generowania odpowiedzi, co ma miejsce, gdy są stosowane topPtopK. Temperatura decyduje o stopniu losowości wyboru tokenów. Niższe temperatury są przydatne w przypadku promptów, na które oczekuje się bardziej deterministycznej i mniej otwartej lub kreatywnej odpowiedzi, a wyższe mogą prowadzić do bardziej różnorodnych lub kreatywnych wyników. Temperatura 0 jest deterministyczna, co oznacza, że zawsze jest wybierana najbardziej prawdopodobna odpowiedź.

W większości przypadków dobrze jest zacząć od temperatury 0.2. Jeśli model zwróci zbyt ogólną lub krótką odpowiedź, albo odpowiedź zastępczą, spróbuj zwiększyć temperaturę.

Top-K

Parametr Top-K zmienia sposób, w jaki model wybiera tokeny w celu wygenerowania odpowiedzi. Top-K o wartości 1 oznacza, że wybierany jest najbardziej prawdopodobny token spośród wszystkich tokenów w słowniku modelu (jest to też nazywane dekodowaniem zachłannym), natomiast Top-K o wartości 3 oznacza, że następny token jest wybierany z użyciem temperatury spośród 3 najbardziej prawdopodobnych.

Na każdym etapie wyboru tokena próbkowane są tokeny Top-K o najwyższym prawdopodobieństwie. Tokeny są następnie filtrowane na podstawie górnego P, a ostateczny wybór tokena dokonywany jest przy użyciu próbkowania z użyciem temperatury.

Jeśli chcesz uzyskiwać mniej losowe odpowiedzi, podaj niższą wartość, a jeśli bardziej – wyższą. Wartość domyślna parametru górnego K to 40.

Top-P

Parametr Top-P również zmienia sposób, w jaki model wybiera tokeny w celu wygenerowania odpowiedzi. Tokeny są wybierane od najbardziej (patrz górne K) do najmniej prawdopodobnych, aż suma ich prawdopodobieństw będzie równa wartości górnego P. Jeśli na przykład tokeny A, B i C mają prawdopodobieństwo 0,3, 0,2 i 0,1, a wartością górnego P jest 0.5, jako kolejny token model wybierze A lub B, używając temperatury, a jako kandydata wykluczy C.

Jeśli chcesz uzyskiwać mniej losowe odpowiedzi, podaj niższą wartość, a jeśli bardziej – wyższą. Wartość domyślna parametru górnego P to 0.95.

strategie iteracji promptów;

Projektowanie promptów to proces iteracyjny, który często wymaga kilku iteracji, zanim otrzymasz pożądaną odpowiedź. W tej sekcji znajdziesz wskazówki na temat niektórych rzeczy, które możesz wypróbować podczas powtarzania promptów.

Użyj innego sformułowania

Użycie różnych słów lub sformułowań w promptach często daje różne odpowiedzi modelu, mimo że wszystkie oznaczają to samo. Jeśli prompt nie przynosi oczekiwanych rezultatów, spróbuj go przeformułować.

Version 1:
How do I bake a pie?

Version 2:
Suggest a recipe for a pie.

Version 3:
What's a good pie recipe?
  

Przełącz na zadanie analogiczne

Jeśli model nie będzie wykonywał instrukcji dotyczących zadania, spróbuj podać mu instrukcje dotyczące analogicznych zadań, które dają ten sam wynik.

Ten prompt informuje model, aby kategoryzował książkę przy użyciu zdefiniowanych wstępnie kategorii.

Which category does The Odyssey belong to:
thriller
sci-fi
mythology
biography
  
    The Odyssey belongs to the category of **mythology**. 

    Here's why:
    
    * **Mythology:** The Odyssey tells the story of Odysseus, a hero from Greek mythology, and his
    journey home after the Trojan War. It features gods, monsters, and supernatural events common to
    Greek mythology.
.....
  

Odpowiedź jest poprawna, ale model nie mieści się w granicach opcji. Chcesz też modelować odpowiedź, używając jednej z opcji zamiast całego zdania. W takiej sytuacji możesz przeformułować instrukcje jako pytanie jednokrotnego wyboru i poprosić model, aby wybrał jedną z opcji.

Multiple choice problem: Which of the following options describes the book The Odyssey?
Options:
- thriller
- sci-fi
- mythology
- biography
  
The correct answer is **mythology**. 
  

Zmienianie kolejności treści promptu

Kolejność treści w prośbie może czasami wpływać na odpowiedź. Spróbuj zmienić kolejność treści i zobacz, jak wpłynie to na odpowiedź.

Version 1:
[examples]
[context]
[input]

Version 2:
[input]
[examples]
[context]

Version 3:
[examples]
[input]
[context]

Odpowiedzi zastępcze

Odpowiedź zastępcza to odpowiedź zwracana przez model, gdy prompt lub odpowiedź aktywuje filtr bezpieczeństwa. Przykład odpowiedzi zastępczej: „Nie mogę w tym pomóc, ponieważ jestem tylko modelem językowym”.

Jeśli model zareaguje w odpowiedzi zastępczej, spróbuj zwiększyć temperaturę.

Czego warto unikać

  • Unikaj używania modeli do generowania informacji opartych na faktach.
  • Korzystaj z rozwagów podczas rozwiązywania zadań matematycznych i logicznych.

Dalsze kroki