Kiedy AI przestaje pisać kod – jak lepiej promptować i projektować system
Kiedy AI Coding Assistants utykają: lepsze promptowanie i architektura
Zdarza się moment, w którym współpraca z AI nagle przestaje działać. Zamiast szybkich poprawek i sensownych sugestii dostajesz wolne, niejasne odpowiedzi. Tokeny lecą w górę, a agent wydaje się coraz bardziej zagubiony.
Problem rzadko leży w modelu. Zwykle chodzi o to, że zadajesz mu pytanie, do którego nie został dobrze przygotowany.
Faza entuzjazmu i moment ściany
Narzędzia takie jak Claude czy GPT-4 świetnie radzą sobie z precyzyjnymi zmianami. Potrafią czytać kod, rozumieć styl projektu i wprowadzać małe poprawki, nie psując istniejących testów. Kiedy architektura jest stabilna i prosisz o kolejne drobne funkcje – działa to świetnie.
Sytuacja zmienia się, gdy chcesz przeprowadzić większą zmianę. Wtedy te same cechy, które wcześniej pomagały, zaczynają przeszkadzać. Agent trzyma się testów jak świętości. Szanuje istniejący styl kodu. Robi jak najmniej, żeby nie naruszyć struktury. To cechy pożądane przy utrzymaniu, ale blokujące przy większych zmianach.
Wtedy pojawia się coś, co można nazwać test hell – sytuacja, w której testy zamiast chronić, zaczynają blokować rozwój.
Rosnące zużycie tokenów
W praktyce wygląda to tak:
- Prosisz o refaktoryzację modułu
- Agent próbuje zachować wszystkie istniejące testy
- Nowa architektura nie pasuje do starej struktury testów
- Zmiany są minimalne i nie rozwiązują problemu
- Ty prosisz jeszcze raz, bardziej szczegółowo
- Zużycie tokenów rośnie lawinowo
- Odpowiedzi stają się coraz bardziej chaotyczne
Agent nie „szaleje”. Po prostu próbuje pogodzić sprzeczne cele: zmienić wszystko, niczego nie zepsuć i jednocześnie nie naruszyć testów.
Dlaczego tak się dzieje
AI coding assistants są trenowane głównie na przykładach incremental development – małych, kontrolowanych zmianach w stabilnym kodzie. To odpowiada rzeczywistości produkcyjnej i jest wartościowe. Ale gdy projekt wymaga większej przebudowy, te same zasady zaczynają działać przeciwko ty.
Zbyt często trzymamy się testów i struktur, które powstały jako tymczasowe. AI nie potrafi wyczuć, czy coś jest „tymczasowe” – widząc testy, traktuje ich jako obowiązujące.
Jak sobie z tym radzić
Bądź jawny co do ograniczeń
Zamiast pisać „refaktoryzuj, zachowując zielone testy”, wyjaśnij: „To jest zmiana architektury. Część testów odchodzimy. Oto nowa specyfikacja. Te testy akceptacyjne są nowym contractem.”Oddziel eksplorację od wdrażania
Użyj AI na małych, tymczasowych branchach do testowania idei. Potem już tylko na stabilnej architekturze. Nie mieszaj dwóch faz – eksploracji i implementacji.Zmień podejście do testów
Testy chronią istniejący kod. Nie są idealnym narzędziem do budowania nowej architektury. Kiedy zmienia się struktura, musisz jednocześnie zmienić testy. AI potrzebuje wyraźnego pozwolenia na ich refaktoryzację.Przygotuj dokumentację projektową
Zanim poprosisz AI o duże zmiany, napisz krótki opis – co ma się zmienić i dlaczego. Ta dodatkowa kontekst daje agentowi kierunek poza zwykłym „zachowaj testy”.
Wniosek
AI nie jest zepsute. Po prostu wykonuje dokładnie to, co zostało wytrenowane – precyzyjne, bezpieczne, małe zmiany. Gdy chcesz coś innego, musisz to jasno przekazać.
Podejście „vibe coding” działa najlepiej, gdy człowiek nadaje kierunek,而AI执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行executing执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行执行