0Pricing
AI Engineering Academy · Lekcja

Framework ReAct: myślenie, działanie, obserwacja

Uczestnicy poznają pętlę ReAct, w której model generuje Thought, wybiera Action, otrzymuje Observation i powtarza ten cykl aż do uzyskania Final Answer.

Framework ReAct: myślenie, działanie, obserwacja to bezpłatna lekcja AI Engineering Academy na CoddyKit. To lekcja 1 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 Engineering Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.

Czym jest framework ReAct?

ReAct (Reasoning + Acting, rozumowanie + działanie) to framework promptowania, który przeplata wewnętrzne rozumowanie modelu z działaniami zewnętrznymi. Zamiast od razu generować ostateczną odpowiedź, model tworzy element Thought, wybiera element Action, otrzymuje element Observation po wykonaniu tego działania i powtarza cykl, aż będzie mógł podać element Final Answer.

Pętla myślenie–działanie–obserwacja

Każda iteracja pętli ReAct ma trzy fazy:

  • Thought: model rozumuje, co wie i czego musi dowiedzieć się w następnej kolejności.
  • Action: model wywołuje narzędzie, takie jak wyszukiwarka internetowa, kalkulator lub zapytanie do bazy danych.
  • Observation: wynik wywołania narzędzia jest zwracany i dołączany do kontekstu modelu.

Pętla trwa, aż model wygeneruje Final Answer: wraz ze swoim wnioskiem.

Przykład śladu ReAct

Oto konkretny ślad działania agenta ReAct odpowiadającego na pytanie „Jaka jest populacja Tokio?” za pomocą narzędzia wyszukiwania. Proszę zauważyć, jak każdy krok opiera się na poprzedniej obserwacji.

# ReAct trace (pseudocode showing the reasoning loop)

# Iteration 1
Thought_1 = 'I need to find the current population of Tokyo. I will search for it.'
Action_1 = 'search("Tokyo population 2024")'
Observation_1 = 'According to the 2023 census, Tokyo has approximately 13.96 million people in the city proper.'

# Iteration 2
Thought_2 = 'I have the population. I can now give a final answer.'
Final_Answer = 'The population of Tokyo is approximately 13.96 million people.'

Dlaczego ReAct przewyższa bezpośrednie promptowanie

Bezpośrednie promptowanie wymaga od modelu udzielenia odpowiedzi na podstawie pamięci, co prowadzi do halucynacji w przypadku pytań faktograficznych. Promptowanie chain-of-thought poprawia rozumowanie, ale nadal nie zapewnia dostępu do informacji zewnętrznych. ReAct łączy oba podejścia: jawne ślady rozumowania, takie jak chain-of-thought, z możliwością zbierania aktualnych informacji za pomocą wywołań narzędzi.

Struktura promptu ReAct

Prompt systemowy ReAct uczy model dokładnego formatu, którego ma używać. Zawiera listę dostępnych narzędzi wraz z ich opisami oraz przykłady schematu Thought/Action/Observation/Final Answer. Dzięki promptowi model uczy się precyzyjnie przestrzegać tego formatu.

REACT_SYSTEM_PROMPT = '''You are an AI assistant with access to these tools:

- search(query: str): Search the web for up-to-date information.
- calculator(expression: str): Evaluate a mathematical expression.
- lookup(topic: str): Look up a topic in the knowledge base.

Always follow this exact format:
Thought: [your reasoning about what to do next]
Action: tool_name(arguments)
Observation: [result of the action, provided by the system]
... (repeat as needed)
Final Answer: [your final response to the user]

Begin!'''

Analizowanie elementów Thought, Action i Observation

Kod aplikacji pełni funkcję runtime pętli ReAct. Po każdej odpowiedzi modelu należy przeanalizować dane wyjściowe, aby wyodrębnić nazwę i argumenty działania, wykonać odpowiednią funkcję Python, sformatować wynik jako obserwację, dołączyć ją do historii wiadomości i ponownie wywołać model.

import re

def parse_react_output(text: str):
    '''Extract action name and argument from a ReAct model output.'''
    action_match = re.search(r'Action:\s*(\w+)\((.*)\)', text)
    if action_match:
        tool_name = action_match.group(1)
        tool_input = action_match.group(2).strip('\"\' ')
        return tool_name, tool_input
    if 'Final Answer:' in text:
        answer = text.split('Final Answer:')[-1].strip()
        return 'final', answer
    return None, None

Pętla wykonywania agenta

Pętla wykonywania wywołuje LLM, analizuje jego dane wyjściowe, przekazuje zadanie narzędziu, dołącza obserwację i powtarza te kroki. Ograniczenie max_iterations zapobiega nieskończonym pętlom, gdy model nie potrafi rozwiązać zadania.

from openai import OpenAI

client = OpenAI()

def run_react_agent(user_query: str, tools: dict, max_iterations: int = 10) -> str:
    messages = [
        {'role': 'system', 'content': REACT_SYSTEM_PROMPT},
        {'role': 'user', 'content': user_query}
    ]

    for i in range(max_iterations):
        resp = client.chat.completions.create(model='gpt-4o', messages=messages)
        output = resp.choices[0].message.content
        messages.append({'role': 'assistant', 'content': output})

        tool_name, tool_input = parse_react_output(output)

        if tool_name == 'final':
            return tool_input

        if tool_name and tool_name in tools:
            observation = tools[tool_name](tool_input)
            messages.append({'role': 'user', 'content': f'Observation: {observation}'})
        else:
            messages.append({'role': 'user', 'content': 'Observation: Tool not found.'})

    return 'Max iterations reached without a final answer.'

Rejestrowanie prostych narzędzi

Narzędzia to po prostu funkcje Python. Rejestruje się je w słowniku mapującym nazwę narzędzia na funkcję. Funkcje przyjmują argument tekstowy i zwracają wynik tekstowy, co zapewnia prosty i spójny interfejs zgodny z formatem obserwacji oczekiwanym przez model.

import math

def calculator_tool(expression: str) -> str:
    try:
        # Restrict to safe math expressions
        allowed_names = {k: v for k, v in math.__dict__.items() if not k.startswith('_')}
        result = eval(expression, {'__builtins__': {}}, allowed_names)
        return str(result)
    except Exception as e:
        return f'Error: {e}'

def search_tool(query: str) -> str:
    # Stub — replace with real web search API
    return f'Top result for "{query}": [placeholder result]'

# Register tools
tools = {
    'calculator': calculator_tool,
    'search': search_tool
}

Rozumowanie wieloetapowe z ReAct

ReAct świetnie sprawdza się w przypadku pytań wieloetapowych, które wymagają połączenia wielu informacji. Na przykład: „Kto jest dyrektorem generalnym firmy tworzącej GPT-4 i w którym roku ta firma została założona?”. Agent najpierw wyszukuje dyrektora generalnego, a następnie wykorzystuje ten wynik do znalezienia roku założenia firmy — są to dwa osobne wywołania narzędzi połączone rozumowaniem.

ReAct a czysty Chain-of-Thought

Chain-of-Thought (CoT) poprawia rozumowanie, skłaniając model do myślenia krok po kroku, ale nie zapewnia mu dostępu do informacji zewnętrznych. ReAct dodaje działania do CoT, umożliwiając modelowi pobieranie rzeczywistych danych, wykonywanie obliczeń i weryfikowanie faktów. Wadą jest mniejsza szybkość ReAct (wiele wywołań API), ale w zadaniach wymagających aktualnej lub specjalistycznej wiedzy zapewnia on znacznie większą dokładność.

Debugowanie ReAct za pomocą śladów

Gdy agent ReAct generuje błędną odpowiedź, proszę sprawdzić pełny ślad Thought/Action/Observation. Typowe wzorce błędów to: wymyślenie przez model obserwacji zamiast wywołania narzędzia, błędy analizy pomijające wykonanie narzędzia oraz nieprawidłowe rozumowanie w kroku Thought prowadzące do wyboru błędnego działania.

  • Proszę rejestrować każdą wiadomość dołączaną do kontekstu
  • Proszę sprawdzić, czy wynik narzędzia został rzeczywiście dołączony przed kolejnym wywołaniem modelu
  • Proszę zweryfikować, czy wyrażenie regularne działania pasuje do formatu danych wyjściowych modelu

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę na temat frameworka ReAct.

Podsumowanie lekcji

W tej lekcji dowiedzieli się Państwo, że: ReAct przeplata elementy Thought, Action i Observation w pętli, kod aplikacji pełni funkcję runtime wykonującego narzędzia i dołączającego obserwacje, a ograniczenia max_iterations zapobiegają nieskończonym pętlom agenta. Następnie nauczymy się definiować niestandardowe narzędzia, aby agent mógł wykonywać dokładnie te działania, których wymaga aplikacja.

Często zadawane pytania

Czy lekcja „Framework ReAct: myślenie, działanie, obserwacja” jest bezpłatna?

Tak — pełny tekst „Framework ReAct: myślenie, działanie, obserwacja” 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 Engineering Academy, przejdź na CoddyKit PRO. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Framework ReAct: myślenie, działanie, obserwacja”?

Uczestnicy poznają pętlę ReAct, w której model generuje Thought, wybiera Action, otrzymuje Observation i powtarza ten cykl aż do uzyskania Final Answer. Ćwiczysz AI Engineering Academy 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 Engineering Academy?

Nie wymagamy żadnego doświadczenia. AI Engineering Academy 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 1 z 4.

Ile czasu zajmuje lekcja „Framework ReAct: myślenie, działanie, obserwacja”?

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 Engineering Academy?

Tak. Każda lekcja AI Engineering Academy 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. Framework ReAct: myślenie, działanie, obserwacja
  2. Definiowanie narzędzi dla agenta
  3. Tworzenie agenta ReAct za pomocą LangChain
  4. Obsługa awarii i pętli agentów
← Powrót do AI Engineering Academy