Tree of thought prompting (drzewo myśli) sprawia, że model językowy pracuje nad problemem tak, jak rozwiązuje się zadanie na kartce: zapisuje kilka możliwych kolejnych kroków, ocenia, które wyglądają obiecująco, kontynuuje je i porzuca gałąź, gdy prowadzi donikąd. Pomysł pochodzi z pracy Yao i in. z 2023 roku, "Tree of Thoughts: Deliberate Problem Solving with Large Language Models". Rozszerza chain of thought prompting, który podąża jedną linią rozumowania, do przeszukiwania wielu linii.
Ta strona wyjaśnia, jak działa oryginalna metoda, daje ci wersję w jednym prompcie do wypróbowania w ChatGPT, Claude albo Gemini i pokazuje pętlę w kodzie na wypadek, gdy jeden prompt nie wystarcza.
Jak działa tree of thoughts
Praca rozkłada metodę na cztery decyzje.
- Co liczy się jako myśl. Myśl to jeden krok pośredni, na tyle mały, żeby model dobrze go wygenerował, i na tyle duży, żeby dało się go ocenić. W łamigłówce matematycznej to jedno równanie; w zadaniu pisarskim krótki plan.
- Jak generować myśli. Na podstawie bieżącego częściowego rozwiązania model proponuje kilku kandydatów na kolejny krok, albo próbkując niezależnie, albo wypisując ich w jednej odpowiedzi.
- Jak je oceniać. Model dostaje prośbę o ocenę każdego częściowego rozwiązania. Praca używała dwóch stylów: oceny każdego stanu osobno (na przykład jako "pewne", "prawdopodobne" albo "niemożliwe") albo pokazania modelowi kilku stanów i głosowania na najlepszy.
- Jak przeszukiwać. Program zachowuje kilka najlepszych stanów na każdym poziomie (przeszukiwanie wszerz) albo idzie jedną gałęzią w głąb i cofa się, gdy ocena mówi, że nie ma szans (przeszukiwanie w głąb).
Weźmy z pracy zadanie Gra w 24: użyj liczb 4, 9, 10 i 13, każdej raz, oraz czterech podstawowych działań, żeby otrzymać 24. Chain of thought wiąże się ze swoim pierwszym równaniem i musi z nim żyć. Tree of thoughts może spróbować 13 - 9 = 4, 10 - 4 = 6 i 4 + 9 = 13 jako pierwszych kroków, zapytać model, z których pozostałych liczb da się jeszcze uzyskać 24, odrzucić ślepy zaułek (z 10, 13 i 13 nie da się uzyskać 24) i dojść do (10 - 4) * (13 - 9) = 24.
Co pokazała praca
Autorzy wybrali trzy zadania, które sprawiały GPT-4 trudność nawet z chain of thought, bo każde wymaga planowania albo przeszukiwania: Grę w 24, zadanie z pisania twórczego ze stałymi zdaniami końcowymi i minikrzyżówki 5x5. Z GPT-4 przeszukiwanie drzewa rozwiązało znacznie więcej łamigłówek z Gry w 24 niż prompting z chain of thought albo próbkowanie kilku łańcuchów i wybór odpowiedzi większości, a w dwóch pozostałych zadaniach również wypadło lepiej.
Ceną są wywołania. Każdy kandydat na krok i każda ocena to osobne żądanie, więc jeden rozwiązany problem może wymagać dziesiątek wywołań modelu tam, gdzie chain of thought kosztuje jedno. Taka wymiana ma sens przy trudnych problemach, a przy prostych żadnego.
Tree of thought w jednym prompcie
Tę ideę można przybliżyć w jednej wiadomości: poproś o kilka wyraźnie różnych podejść, werdykt dla każdego w świetle podanych faktów i rozwinięcie tylko tego, które przetrwa. Poniższe zakładki wysyłają ten sam problem na oba sposoby.
Główną przyczyną jest fizyczna odległość między Australią a waszym serwerem we Frankfurcie. Każde żądanie musi dotrzeć do Europy i wrócić, a przy 40 żądaniach przy każdym ładowaniu strony to opóźnienie się sumuje.
Standardowym rozwiązaniem jest CDN (content delivery network, sieć dostarczania treści). CDN przechowuje kopie waszej strony na serwerach na całym świecie, więc użytkownicy z Australii pobierają dane z pobliskiej lokalizacji, a nie z Frankfurtu. Większość dostawców pozwala postawić CDN przed istniejącą stroną bez zmian w kodzie.
Możecie też kompresować obrazy i włączyć cache przeglądarki, żeby jeszcze bardziej skrócić czas ładowania.
Bezpośrednia odpowiedź nie jest absurdalna; uwzględnia nawet 40 żądań, ale wzięła pierwsze pasujące wyjaśnienie ("odległość") i poszła z nim dalej. Rozgałęziona odpowiedź porównała każde wyjaśnienie ze szczegółami z promptu i dzięki temu zauważyła, że "jedno po drugim" ma większe znaczenie niż "Australia" i że CDN nie ruszyłby wywołań API.
Szablon wielokrotnego użytku
Ta sama struktura działa przy decyzjach projektowych i planach. Wpisz problem i kryteria, na których ci zależy; odpowiedź pokazuje wypełnioną wartość domyślną.
Platforma jako usługa (zarządzany hosting aplikacji) Koszt: umiarkowany, rośnie z ruchem. Konfiguracja: poniżej godziny z repozytorium Git. Utrzymanie: niskie, dostawca łata system operacyjny. Zostaw.
Własny serwer wirtualny Koszt: najniższy. Konfiguracja: dzień na serwer, TLS i menedżer procesów. Utrzymanie: wysokie, aktualizacje i restarty są po waszej stronie. Odrzuć przy trzyosobowym zespole.
Funkcje serverless Koszt: bardzo niski przy małej skali. Konfiguracja: umiarkowana, istniejącą aplikację serwerową może trzeba będzie przebudować. Utrzymanie: niskie, ale zimne starty dodają opóźnienie. Zostaw jako drugą opcję.
Najlepsze: platforma jako usługa. Pierwsze kroki:
- Dodaj skrypt startowy i odczytuj port ze zmiennej środowiskowej.
- Przenieś sekrety do ustawień środowiska u dostawcy.
- Podłącz repozytorium i wdróż gałąź główną.
- Dodaj endpoint health check.
- Ustaw alert wydatków.
Gdzie pojedynczy prompt zawodzi
Wersja w jednym prompcie zachowuje słownictwo metody, ale traci większość jej mechanizmu.
- Brak prawdziwego cofania się. Model pisze wszystkie gałęzie i werdykty w jednym przebiegu. Jeśli krok 3 wybranej gałęzi zawiedzie, nic nie odeśle go z powrotem do kroku 1.
- Sędzia jest autorem. Ta sama odpowiedź, która zaproponowała pomysł, także go ocenia, więc ma skłonność do faworyzowania gałęzi, którą od początku miała na myśli. W pracy ocena to osobne wywołanie, wykonywane dopiero wtedy, gdy kandydaci już istnieją.
- Gałęzie nie są niezależne. Pomysły wypisane w jednej odpowiedzi wpływają na siebie i często kończą jako warianty jednego motywu. Prośba o "naprawdę różne" podejścia, jak w szablonie, temu przeciwdziała, ale tego nie usuwa.
- Modele rozumujące już się rozgałęziają. Modele, które myślą przed odpowiedzią, wewnętrznie próbują i odrzucają podejścia. Przy nich prompt dodaje mniej trafności; jego pozostała wartość polega na tym, że widzisz odrzucone opcje i możesz nie zgodzić się z rozumowaniem.
Prawdziwe przeszukiwanie drzewa w kodzie
Pełna metoda to pętla w twoim programie: generuj kandydatów na kolejne kroki, oceniaj każde częściowe rozwiązanie w osobnym wywołaniu, zachowaj kilka najlepszych i powtarzaj. To minimalna wersja przeszukiwania wszerz z SDK OpenAI dla Pythona; ten sam schemat działa z każdym dostawcą.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt, temperature=0.7):
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response.choices[0].message.content.strip()
def propose(problem, path, k=3):
steps = "\n".join(path) or "(none yet)"
prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
return [ask(prompt) for _ in range(k)]
def score(problem, path):
steps = "\n".join(path)
prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
"How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
try:
return float(ask(prompt, temperature=0))
except ValueError:
return 0.0
def tree_of_thought(problem, depth=3, keep=2):
frontier = [[]]
for _ in range(depth):
candidates = [path + [step] for path in frontier for step in propose(problem, path)]
candidates.sort(key=lambda p: score(problem, p), reverse=True)
frontier = candidates[:keep]
return frontier[0]
Przy depth=3, keep=2 i trzech propozycjach na stan jeden przebieg wykonuje około trzydziestu wywołań. W wielu zadaniach self-consistency prompting (kilka pełnych odpowiedzi i głosowanie większością) albo stała sekwencja kroków z prompt chaining daje większość korzyści mniejszą liczbą wywołań. Po drzewo sięgaj, gdy zadanie wymaga przeszukiwania: wielu możliwych pierwszych ruchów i sposobu, żeby wcześnie rozpoznać ślepy zaułek.
Najczęściej zadawane pytania
Czym jest tree of thought prompting?
Tree of thought prompting to sposób rozwiązywania problemów, w którym model proponuje kilka możliwych kolejnych kroków, ocenia, jak obiecujący jest każdy z nich, i kontynuuje tylko najlepsze gałęzie, cofając się, gdy któraś zawiedzie. Pochodzi z pracy z 2023 roku "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" autorstwa Yao i in. W tej pracy rozgałęzianiem i ocenianiem steruje program, który wiele razy wywołuje model.
Czym tree of thoughts różni się od chain of thought?
Chain of thought podąża jedną linią rozumowania od początku do końca, więc wczesny błąd przechodzi aż do odpowiedzi. Tree of thoughts utrzymuje naraz kilka częściowych rozwiązań, ocenia je i odrzuca słabe, więc potrafi się podnieść po złym pierwszym kroku. Ceną jest znacznie więcej wywołań modelu.
Czy mogę używać tree of thoughts w ChatGPT albo Claude?
Możesz użyć przybliżenia: jednego promptu, który prosi model o wypisanie kilku podejść, ocenę każdego według twoich kryteriów, odrzucenie słabych i rozwinięcie najlepszego. Działa w każdej aplikacji czatowej. To nie jest pełna metoda, bo wszystko dzieje się w jednej odpowiedzi, a model ocenia własne pomysły w tym samym przebiegu, w którym je napisał.
Czy tree of thought prompting ma jeszcze sens przy modelach rozumujących?
Mniejszy niż kiedyś. Modele, które myślą przed odpowiedzią, już same wewnętrznie próbują i odrzucają podejścia, więc prośba o rozgałęzienie niewiele dodaje. Wersja w jednym prompcie nadal się przydaje, gdy chcesz zobaczyć opcje i powody ich odrzucenia, żeby samodzielnie sprawdzić tę ocenę.
Kiedy używać tree of thought prompting?
Przy problemach z kilkoma wiarygodnymi podejściami, w których pierwszy pomysł często jest błędny: planowaniu, decyzjach projektowych, diagnozowaniu problemu na podstawie objawów i łamigłówkach wymagających przeszukiwania. Przy pytaniu z jedną oczywistą drogą zwykły chain of thought jest tańszy i równie dobry.