Menu

Chain of thought: pomyślmy krok po kroku

Chain of thought prompting (łańcuch myśli) to prośba, żeby model rozpisał swoje rozumowanie, zanim poda odpowiedź. Najbardziej pomaga przy wieloetapowych zadaniach z matematyki i logiki, a mniej znaczy dla modeli rozumujących, które i tak myślą przed odpowiedzią.

Każdy prompt poniżej możesz edytować: zmień go, a potem otwórz w ChatGPT, Claude lub innej aplikacji AI.

Chain of thought prompting to prośba, żeby model językowy rozpisał pośrednie kroki rozwiązania, zanim poda odpowiedź końcową. Przy zadaniach wymagających kilku kroków, takich jak zadania z treścią, łamigłówki logiczne czy harmonogramy, praca na widoku zwykle daje więcej poprawnych odpowiedzi niż odpowiedź od razu i zostawia ci kroki, które możesz sprawdzić. Najkrótsza wersja to jedno zdanie dopisane do promptu: "Pomyślmy krok po kroku."

Dlaczego rozpisywanie kroków pomaga

Model tworzy odpowiedź po jednym tokenie, a wszystko, co już napisał, staje się wejściem dla następnego tokenu. Jeśli prompt żąda odpowiedzi natychmiast, model musi ją podać, zanim na stronie pojawi się jakikolwiek wynik pośredni. Jeśli najpierw napisze "Sprzedaż kawy w poniedziałek wyniosła $168", ta liczba jest już w kontekście i następny krok może się na niej oprzeć, zamiast trzymać ją w domyśle.

Tyle intuicji. Dowody przyniosły dwie prace z 2022 roku. Wei i współautorzy w "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" pokazali, że rozwiązane przykłady z rozpisanym rozumowaniem poprawiają wyniki dużych modeli w zadaniach arytmetycznych, zdroworozsądkowych i symbolicznych. Odkryli też, że korzyść zależy od skali: mniejsze modele nie zyskiwały i często pisały płynne rozumowanie prowadzące do błędnych odpowiedzi. Kojima i współautorzy w "Large Language Models are Zero-Shot Reasoners" pokazali następnie, że jedno zdanie bez przykładów, "Let's think step by step" (pomyślmy krok po kroku), również wyraźnie poprawia wyniki, choć zwykle mniej niż rozwiązane przykłady.

Odpowiedź od razu a chain of thought

Obie zakładki zadają to samo pytanie. Pierwsza żąda tylko kwoty; druga prosi o obliczenia i umieszcza odpowiedź w stałej ostatniej linii.

Kawiarnia sprzedaje kawę po $3.50 i muffinki po $2.25. W poniedziałek sprzedała 48 kaw i trochę muffinek, a utarg wyniósł łącznie $213. We wtorek sprzedała o 10 kaw mniej niż w poniedziałek i dwa razy więcej muffinek. Ile utargowała we wtorek? Podaj tylko kwotę.
Try it
Example replyReplies vary between models and runs.

$258

Odpowiedź od razu pokazuje typową pomyłkę: 258toponiedziałkowe258 to poniedziałkowe 168 za kawę plus wtorkowe $90 za muffinki, czyli model zapomniał, że we wtorek sprzedano o 10 kaw mniej. Odpowiedź krok po kroku daje wtorkowej liczbie kaw osobną linię, więc tego kroku nie da się po cichu pominąć. Obecny model może dobrze rozwiązać także wersję bez kroków; różnica rośnie, gdy zadania są dłuższe, a kroki bardziej od siebie zależą.

Zapisane kroki mają drugą zaletę: gdy odpowiedź jest błędna, widać, który krok zawiódł, i możesz poprawić prompt albo dane wejściowe właśnie w tym miejscu.

Few-shot chain of thought

Oryginalna technika Wei i współautorów umieszcza w prompcie rozwiązane przykłady, których odpowiedzi pokazują rozumowanie, a model odpowiada na nowe pytanie w ten sam sposób. Poniższy przykład jest zaczerpnięty z pierwszego rysunku ich pracy; pytanie po nim jest nowe. Zmień pytanie, żeby wypróbować własne.

Few-shot chain of thought
Fill in
Parts
P: Roger ma 5 piłek tenisowych. Kupuje jeszcze 2 puszki piłek. W każdej puszce są 3 piłki. Ile piłek ma teraz? O: Roger miał na początku 5 piłek. 2 puszki po 3 piłki to 6 piłek. 5 + 6 = 11. Odpowiedź to 11.
P: Biblioteka miała na półkach 120 książek. Wypożyczyła 45, dostała z powrotem 18 i otrzymała w darze 30. Ile książek jest teraz na półkach? O:
Try it
Example replyReplies vary between models and runs.

Biblioteka miała na początku 120 książek. Po wypożyczeniu 45 na półkach zostało 75. Zwrot 18 dał 93. Dar 30 książek podniósł liczbę do 123. Odpowiedź to 123.

Few-shot CoT daje ci kontrolę nad kształtem rozumowania: jego długością, tym, co jest rozpisane, i sposobem podania odpowiedzi. "Odpowiedź to 11" w przykładzie to stałe zakończenie i odpowiedź modelu je skopiowała. Zero-shot CoT szybciej się pisze, ale zostawia te decyzje modelowi. Więcej o budowaniu zestawów przykładów znajdziesz w few-shot prompting, a o wersji z samym poleceniem w zero-shot prompting.

Odpowiedź w osobnej linii

Gdy odpowiedź zawiera rozumowanie, sam wynik jest gdzieś w środku akapitu, a to problem, kiedy musi go odczytać program. Poproś o odpowiedź w stałej formie w ostatniej linii, jak prompt z kawiarnią robi to z "Answer: $X" (stałą etykietę warto zostawić bez zmian, bo to jej szuka kod), i odczytaj tę linię w kodzie:

import re

matches = re.findall(r"^Answer:\s*(.+)$", reply, re.MULTILINE)
answer = matches[-1] if matches else None

Branie ostatniego dopasowania ma znaczenie, bo samo rozumowanie może zawierać linię zaczynającą się od "Answer:", zanim model się poprawi. Jeśli użytkownicy mają widzieć tylko odpowiedź, poproś o rozumowanie w jednej parze tagów, a o odpowiedź w drugiej, i pokazuj tylko drugą. Structured output opisuje, jak prosić o JSON, gdy potrzebujesz więcej niż jednego pola.

Modele rozumujące

Niektóre obecne modele są zbudowane tak, żeby myśleć przed odpowiedzią: generują rozumowanie wewnętrznie, często ukryte albo streszczone, zanim pojawi się widoczna odpowiedź. Dla nich "Pomyślmy krok po kroku" ma dużo mniejsze znaczenie, bo kroki i tak się odbywają, niezależnie od prośby. Dopisanie tego zdania zwykle tylko wydłuża widoczną odpowiedź.

W modelu rozumującym nadal pomaga wszystko, co otacza rozumowanie: pełny opis problemu, ograniczenia, które musi spełniać poprawna odpowiedź, i format odpowiedzi końcowej. Opisz, jak wygląda dobra odpowiedź, zamiast rozpisywać każdy krok; sztywny przepis na kroki może odciągnąć model od lepszej drogi, którą znalazłby sam.

Kiedy nie używać chain of thought

Chain of thought kosztuje tokeny i czas, a opłaca się tylko wtedy, gdy zadanie ma zależne od siebie kroki. Przy wyszukiwaniu informacji, tłumaczeniu, przeredagowaniu czy prostej klasyfikacji tylko wydłuża odpowiedź. Model może też napisać rozumowanie, które wygląda rozsądnie, a mimo to dojść do błędnej odpowiedzi, więc sprawdzaj wynik końcowy osobno, a nie tylko kroki, które do niego prowadziły.

Przy trudnych problemach, w których pojedynczy łańcuch może pójść w złą stronę, bazują na nim dwa rozszerzenia. Self-consistency prompting generuje kilka łańcuchów i wybiera odpowiedź, do której dochodzi większość z nich, a tree of thought prompting bada i porównuje kilka częściowych ścieżek rozumowania, zanim wybierze jedną.

Najczęściej zadawane pytania

Czym jest chain of thought prompting?

Chain of thought (CoT) prompting to prośba, żeby model językowy rozpisał pośrednie kroki rozwiązania przed odpowiedzią końcową: albo przez pokazanie rozwiązanych przykładów z rozumowaniem, albo przez dodanie polecenia w rodzaju "Pomyślmy krok po kroku." Przy zadaniach wieloetapowych zwykle daje to więcej poprawnych odpowiedzi i pozwala sprawdzić każdy krok.

Czy "pomyślmy krok po kroku" nadal działa?

W standardowych modelach czatowych nadal pomaga przy zadaniach wymagających kilku kroków, zwłaszcza gdy prompt w przeciwnym razie wymuszałby natychmiastową odpowiedź. Modele rozumujące, które myślą przed odpowiedzią, robią to już wewnętrznie, więc to zdanie daje im niewiele poza dłuższą odpowiedzią. W ich przypadku lepiej jasno opisać problem i format odpowiedzi.

Kiedy chain of thought pomaga, a kiedy nie?

Pomaga przy zadaniach, które wymagają kilku zależnych od siebie kroków: zadaniach z treścią, arytmetyce, łamigłówkach logicznych, układaniu harmonogramów z ograniczeniami i śledzeniu, co robi kod. Niewiele wnosi przy wyszukiwaniu informacji, tłumaczeniu, przeredagowaniu tekstu czy prostej klasyfikacji, gdzie tylko wydłuża i spowalnia odpowiedź.

Czym różni się zero-shot od few-shot chain of thought?

Few-shot CoT, przedstawiony przez Wei i współautorów w 2022 roku, umieszcza w prompcie rozwiązane przykłady z rozumowaniem, a model naśladuje ten styl. Zero-shot CoT, z pracy Kojimy i współautorów z 2022 roku, nie używa przykładów, tylko dodaje polecenie w rodzaju "Pomyślmy krok po kroku." Zero-shot szybciej się pisze; few-shot daje większą kontrolę nad wyglądem kroków.

Czy zapisane rozumowanie pokazuje, jak model naprawdę doszedł do odpowiedzi?

Niekoniecznie. Kroki to tekst generowany przez model i mogą wyglądać rozsądnie, a odpowiedź końcowa i tak wyjdzie błędna, albo zawierać błąd, a odpowiedź przypadkiem będzie dobra. Traktuj rozumowanie jako coś do sprawdzenia, a nie dowód, i weryfikuj odpowiedź końcową osobno.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ