Strona główna / Artykuły / Inżynieria kontekstu dla agentów AI: dobór tego, co widzi model

Inżynieria kontekstu dla agentów AI: dobór tego, co widzi model

Dlaczego agenci tracą jakość w miarę wzrostu ilości kontekstu, czym różni się projektowanie kontekstu od sformułowania promptu oraz prosty proces wyboru tego, co zostanie pokazane podczas wezwania modelu.

1782 słów

Agent sztucznej inteligencji, który dobrze radzi sobie w pierwszych krokach, a potem zaczyna ignorować instrukcje, powtarzać zadania lub polegać na przestarzałych faktach, zazwyczaj nie ma problemu ze sformułowaniem poleceń. Ma problem z kontekstem: model widzi zbyt wiele, niewłaściwe rzeczy lub właściwe rzeczy w niewłaściwym miejscu. Inżynieria kontekstu to dziedzina zajmująca się precyzyjnym określaniem tego, co model otrzymuje tuż przed rozpoczęciem rozumowania – chodzi nie tylko o prompt, ale o cały zestaw instrukcji, historii, pobranych danych oraz definicji narzędzi. Ten przewodnik wyjaśnia, dlaczego ten zestaw staje się coraz ważniejszy w miarę rozwoju agentów, cztery komponenty, które możesz kontrolować, minimalny proces montażowy oraz wzorce awarii, na które należy zwracać uwagę.

Główna idea: mała, istotna część

Celem nie jest nigdy dostarczenie modelowi wszystkiego, co mogłoby mu w jakikolwiek sposób pomóc. Chodzi o dostarczenie mu wąskiego fragmentu informacji, który faktycznie pozwala mu udzielić poprawnej odpowiedzi, a resztę pominąć.

Analogia z życiem codziennym dobrze to ilustruje. Poproś nowego inżyniera o naprawienie błędu w kodzie składającym się z miliona linii, mówiąc mu „przeczytaj kod i znajdź go”, a będzie przytłoczony – ten jeden istotny plik ginie wśród tysięcy innych. Powiedz temu samemu inżynierowi „problem najprawdopodobniej leży w module płatności, te trzy pliki zostały zmienione w zeszłym tygodniu, a oto co próbował wcześniejszy użytkownik”, i naprawa może zająć zaledwie kilka minut. Nic u inżyniera się nie zmieniło – tylko informacje, od których zaczynał.

Modele zachowują się w ten sam sposób. Inżynieria kontekstu polega na przekazaniu właśnie tych trzech plików zamiast całego repozytorium.

Dlaczego sama sformułowanie już nie wystarcza

Pierwotne porady dotyczące pracy z modelami językowymi koncentrowały się na sformułowaniach: jak formułować instrukcje i które wersje przynoszą lepsze odpowiedzi. To właśnie jest inżynieria promptów, i przy pojedynczym pytaniu nadal ma to znaczenie.

Agent natomiast nie odpowiada na pojedyncze pytanie. Działa w pętli: czyta coś, wywołuje narzędzie, otrzymuje wynik, wybiera następną akcję i powtarza to, czasem dziesiątki razy. Każda iteracja dodaje kolejne informacje do tego, co model posiada. W końcu zgromadzony kontekst staje się tak obszerny, że ważne szczegóły zostają przeoczone, podobnie jak u osoby, która cały dzień uczestniczyła w spotkaniach i nie może już przypomnieć sobie, co postanowiono na pierwszym z nich.

Anthropic postrzega inżynierię kontekstu jako problem znalezienia najlepszego możliwego zestawu informacji dla modelu w każdej konkretnej chwili, zamiast raz przygotować dobrą instrukcję. To oddaje zmianę: inżynieria promptów dotyczy słów, natomiast inżynieria kontekstu obejmuje wszystko, co jest obecne w momencie odpowiedzi modelu.

Inżynieria promptów kontra inżynieria kontekstu

Oba podejścia się pokrywają, ale różnią się zakresem, typowym zastosowaniem oraz sposobem awarii:

  • Zakres. Inżynieria promptów kształtuje sformułowanie jednej instrukcji. Inżynieria kontekstu reguluje cały wprowadzony materiał: instrukcje, wcześniejszą rozmowę, pozyskane fakty oraz dostępne narzędzia.
  • Gdzie pokazuje swoje zalety. Inżynieria promptów nadaje się do jednorazowych pytań i zadań. Inżynieria kontekstu jest najważniejsza w przypadku agentów wieloetapowych, gdzie informacje przekazywane pomiędzy etapami są równie istotne jak aktualna prośba.
  • Typowy błąd. W inżynierii promptów chodzi o niejednoznaczne lub niejasne instrukcje. W inżynierii kontekstu problemem jest dostarczanie zbyt wielu lub niewłaściwych informacji, mimo że instrukcje są doskonale jasne.
  • Typowe rozwiązanie. Słaby prompt można poprawić poprzez przepisanie go. Problem z kontekstem w ogóle nie da się rozwiązać poprzez przepisanie; trzeba zmienić to, co jest pobierane, co zachowywane i co odrzucane.
  • Szybka diagnoza: jeśli twoje rozwiązanie polega na zmianie słów, zajmujesz się inżynierią promptów. Jeśli twoje rozwiązanie zmienia informacje, które model otrzymuje na początku, zajmujesz się inżynierią kontekstu. Aby dowiedzieć się, jak w uporządkowany sposób określić, do której warstwy należy awaria agenta, zapoznaj się z debugging AI agents by layer.

    Cztery komponenty, którymi zarządzasz

    Kontekst każdego agenta jest tworzony z czterech źródeł. Każde z nich ma swój własny sposób powstawania błędów.

    Instrukcje: opis zadań

    To jest prompt systemowy, który opisuje, co agent powinien robić i w jaki sposób. Jeśli będzie zbyt sztywny, agent nie będzie mógł poradzić sobie z niczym poza scenariuszem. Jeśli będzie zbyt swobodny, agent będzie improwizował. Staraj się stworzyć instrukcje na tyle konkretne, by kształtować zachowanie agenta, bez próby uprzedniego wymienienia wszystkich sytuacji.

    Pobieranie informacji: asystent badawczy

    Pobieranie informacji polega na zdobywaniu danych z zewnątrz poprzez przeszukiwanie dokumentów, wysyłanie zapytań do bazy danych lub czytanie plików. Słabe pobieranie informacji jest główną przyczyną, dla której systemy AI z pewnością siebie podają błędne informacje. Często model niczego nie wymyśla – otrzymał błędne lub nierelacyjne fakty i uzasadnionie na nich polegał. Poprawa tego, co jest pobierane, często przynosi większy efekt w zakresie dokładności niż jakakolwiek zmiana w instrukcjach.

    Pamięć: notatnik

    Pamięć obejmuje to, co agent zachowuje, zarówno w ramach jednej rozmowy, jak i pomiędzy sesjami. Bez mechanizmu podsumowywania i usuwania starszych danych pamięć traci swoją użyteczność. Rosnąca stopniowo, w końcu zawiera głównie niepotrzebne informacje, które konkurują z tymi istotnymi w danym momencie.

    Narzędzia: zestaw narzędzi

    Narzędzia określają działania, które agent może wykonać, takie jak wyszukiwanie w sieci, wykonywanie kodu lub wysyłanie e-maili. Nazwa i opis każdego narzędzia również wpływają na kontekst. Zestaw dziesięciu nakładających się, niemal identycznych narzędzi dezorientuje model w taki sam sposób, w jaki dziesięć nierozróżnialnych śrubokrętów mogłoby dezorientować nowego pracownika. Mniej narzędzi o wyraźnie określonych zadaniach ułatwia i obniża koszty wyboru.

    Minimalny proces budowania kontekstu

    Poniższy pseudokod pokazuje, jak te cztery komponenty łączą się przy jednej próbie uruchomienia modelu. Funkcje pomocnicze są zastępnikami dla dowolnych metod wyszukiwania, sortowania i podsumowywania, które się używa, ale struktura odzwierciedla sposób, w jaki rzeczywiste systemy podchodzą do tego problemu.

    Działa w czterech etapach. Najpierw przeprowadza szerokie wyszukiwanie, akceptując pewne błędy, z hojnym limitem 50 kandydatów. Następnie sortuje te kandydaty i zachowuje tylko pięć najlepszych. Potem kompresuje historię rozmowy do streszczenia ograniczonego do 500 jednostek, zamiast odtwarzać ją w całości. Na koniec uporządkowuje elementy celowo – najpierw instrukcje, a na końcu aktualne pytanie – i dostosowuje wynik do dostępnego budżetu tokenów.

    def get_context_for_the_model(question, past_conversation, budget):
        # Step 1: Cast a wide net — search broadly, don't worry about noise yet
        possible_facts = search_everywhere(question, limit=50)
        # Step 2: Narrow it down - keep only the genuinely relevant ones
        best_facts = keep_most_relevant(possible_facts, top=5)
        # Step 3: Summarize old conversation instead of keeping all of it
        short_memory = summarize(past_conversation, max_length=500)
        # Step 4: Put the most important things first and last, not buried in the middle
        final_context = [
            job_description,      # instructions
            short_memory,         # memory
            *best_facts,          # retrieval
            question,             # what's being asked right now, last
        ]
        return trim_to_fit(final_context, budget)
    

    Dwa nawyki z tego przykładu warto przejąć.

    Najpierw szukaj szeroko, potem filtrowaj dokładnie. Szerokie wyszukiwanie zmniejsza szansę przeoczenia istotnego dokumentu; agresywny ranking sprawia, że końcowy kontekst pozostaje niewielki. Wykonanie tylko pierwszego kroku przepełnia model, natomiast wykonywanie tylko drugiego niesie ryzyko nieznalezienia odpowiedniego materiału.

    Umieść to, co ważne, na brzegach. Najważniejszy treść powinna znajdować się na początku lub na końcu tekstu, a nie pośrodku. Nie chodzi tu o preferencje stylistyczne. Badania nad długimi tekstami wielokrotnie wykazały, że modele mniej skutecznie reagują na informacje ukryte w środku długiego kontekstu – zjawisko to często nazywane jest „zagubieniem w środku”. Intensywność tego efektu różni się w zależności od modelu, więc warto przeprowadzić testy ze swoją konfiguracją, ale uporządkowanie treści jest w każdym przypadku prostym sposobem na poprawę efektywności.

    Kilka praktycznych ulepszeń wynika z tej samej logiki. Zdecyduj z góry, jak budżet zostanie rozdzielony pomiędzy poszczególne elementy, aby duże liczby wyników wyszukiwania nie mogły po cichu wypierać instrukcji. Podczas redukcji usuwaj najmniej istotne elementy znalezione, zanim przejdziesz do instrukcji lub aktualnego pytania. Zapisuj również ostateczny, złożony kontekst dla każdego wezwania; gdy agent zachowuje się niewłaściwie, ten zapis zazwyczaj pokazuje dlaczego.

    Co idzie nie tak, gdy kontekst nie jest starannie dobierany

    Włączanie wszystkiego dla pewności

    Dodawanie każdego możliwie istotnego elementu wydaje się odpowiedzialne, ale zwykle przynosi odwrotne skutki. Im więcej niepowiązanego materiału musi przeglądać model, tym gorzej radzi sobie z odnalezieniem tej jednej istotnej informacji. To równoznaczne z czytaniem stustronicowego raportu przed podjęciem decyzji trwającej pięć minut.

    Zastarzałe informacje

    Jeśli nic nie sprawdza, czy pobraany treść jest nadal dokładny, model stworzy pewną odpowiedź na podstawie informacji, które przestały być prawdziwe już kilka miesięcy temu. Metadane dotyczące aktualności, zasady wygaśnięcia lub ponowna weryfikacja źródeł wymagających aktualności przyczyniają się do rozwiązania tego problemu.

    Pochowywanie kluczowego faktu

    Nawet gdy system znajdzie dokładnie ten właściwy fakt, umieszczenie go pośrodku długiego tekstu zwiększa statystycznie szanse na jego przeoczenie. Fakt pozostaje taki sam; zmieniła się tylko jego pozycja, a efekt jest gorszy.

    Zbyt wiele podobnych opcji

    Jeśli osoba w twoim zespole nie jest w stanie z pewnością określić, który narzędzie lub dokument pasuje do danej sytuacji, model nie będzie radził sobie lepiej. Zintegruj nakładające się na siebie narzędzia i usuń duplikaty niemal identycznych dokumentów, zanim dotrą one do kontekstu.

    Częste pytania

    Czy inżynieria kontekstu zastępuje inżynierię promptów?

    Nie. Jasne instrukcje wciąż stanowią część zadania. Inżynieria kontekstu to szersze zadanie, które je otacza: decydowanie o tym, co jeszcze model widzi oprócz samej instrukcji.

    Dlaczego więcej informacji może pogorszyć wyniki?

    Uwaga jest zasobem ograniczonym, zarówno dla modeli, jak i dla ludzi. Im więcej materiału musi przetworzyć model, tym większe jest ryzyko przeoczenia tego jednego istotnego szczegółu, podobnie jak człowiek ma trudności z znalezieniem jednej ważnej linijki w długim dokumencie.

    Czy większe okno kontekstowe rozwiązuje problem?

    Pomaga, zapewniając więcej miejsca, ale nie eliminuje podstawowego problemu. Informacje znajdujące się w środku długich danych są nadal wykorzystywane mniej niezawodnie, a opóźnienia i koszty rosną wraz ze wzrostem rozmiaru danych wejściowych. Dobór tego, co trafia do modelu, pozostaje istotny nawet przy bardzo dużych oknach kontekstowych.

    Główne wnioski

    • Traktuj dane wejściowe modelu jako specjalnie przygotowany element tworzony na każde wezwanie, a nie jako zapis tylko do dodawania nowych informacji.
    • Zadbaj świadomie o wszystkie cztery komponenty: instrukcje, pozyskiwanie informacji, pamięć oraz narzędzia – każdy z nich może zawieść na swój sposób.
    • Pozyskuj szeroki zakres informacji, stosuj intensywne sortowanie, podsumowuj historię i umieszczaj najważniejsze treści na początku lub na końcu.
    • Gdy agent traci efektywność w trakcie wielu kroków, sprawdź, co otrzymał wcześniej, zanim przepiszesz to, co mu powiedziano.
    • Większy zakres danych daje więcej możliwości, ale nie zapewnia odporności; kluczowe jest nadal przekazanie właściwych trzech plików zamiast całego kodu.

    Literatura pokrewna