【Tłumaczenie】Inżynieria kontekstowa: nie zapełniaj okna za bardzo! Używaj czterech kroków do zarządzania kontekstem, bądź czujny na zafałszowanie danych i konflikty, a hałas trzymaj na zewnątrz — Uczymy się AI powoli 170
Wprowadzenie
- Limity inteligencji AI nie zależą tylko od wielkości modelu, ale również od umiejętności w zakresie „zarządzania kontekstem”. To tak, jakby prawidłowo skonfigurować pamięć RAM dla CPU — decyduje o głębokości i efektywności myślenia agenta.
- Okno kontekstowe to nie kosz na śmieci: nadmiar informacji może „zatruty”, zakłócać, mylić ocenę AI. Precyzja jest znacznie ważniejsza niż ilość.
- Mistrzowie zarządzają kontekstem AI przy pomocy czterech kroków: „pisz, wybieraj, kompresuj, izoluj”, wykorzystując ograniczoną „pamięć” w najbardziej efektywny sposób, co pozwala na redukcję kosztów i zwiększenie efektywności.
- Przyszła konkurencja to konkurencja wydajności systemów. Używając architektury wieloagentowej do „izolacji” zadań, możemy sprawić, że każdy agent osiągnie doskonałość w swoim małym oknie — to klucz do budowy skomplikowanych systemów zadaniowych.
Kluczowe podsumowanie
Agenci wykonujący zadania potrzebują kontekstu. Tak zwana „inżynieria kontekstowa” to sztuka i nauka precyzyjnego wstrzykiwania odpowiednich informacji do okna kontekstowego agenta na każdym kroku jego działania. W artykule zbiorczo przedstawiam aktualne strategie inżynierii kontekstowej stosowane przez współczesne agenty.
Inżynieria kontekstowa
Jak powiedział Andrej Karpathy, duże modele językowe (LLM) są jak nowoczesny system operacyjny. LLM działa jak CPU, a jego „okno kontekstowe” to RAM, pełniący rolę pamięci roboczej modelu. Podobnie jak RAM ma ograniczoną pojemność, okno kontekstowe LLM napotyka ograniczenia pojemności podczas przetwarzania różnych źródeł kontekstu. Jednym z głównych zadań systemu operacyjnego jest zarządzanie efektywnym wykorzystaniem RAM CPU, a „inżynieria kontekstowa” pełni podobną rolę. Karpathy bardzo trafnie podsumował to stwierdzeniem:
Inżynieria kontekstowa to „…sztuka i nauka precyzyjnego wypełniania kontekstu na następny krok (obliczenie)”.
Jakie typy kontekstu musimy zarządzać podczas budowania aplikacji LLM? Pojęcie inżynierii kontekstowej obejmuje następujące różne typy kontekstu:
- • Instrukcje (Instructions) – podpowiedzi, pamięci, przykłady z ograniczoną próbą, opisy narzędzi itp.
- • Wiedza (Knowledge) – fakty, pamięci itp.
- • Narzędzia (Tools) – informacje zwrotne z użycia narzędzi.
Inżynieria kontekstowa dla agentów
W tym roku, wraz z poprawą zdolności LLM w zakresie rozumowania i używania narzędzi, zainteresowanie agentami rośnie w szybkim tempie. Agenci wykonują zadania, naprzemiennie korzystając z LLM i narzędzi, zwłaszcza w długoterminowych, złożonych zadaniach.
Jednak długoterminowe zadania i ciągle gromadzące się informacje zwrotne z narzędzi oznaczają, że agenci zazwyczaj zużywają dużą ilość tokenów. Może to rodzić różne problemy: przekroczenie limitu pojemności okna kontekstowego, co prowadzi do wzrostu kosztów i opóźnień, a nawet obniżenia wydajności agenta. Drew Breunig wyraźnie wskazał, że zbyt długi kontekst może prowadzić do problemów z wydajnością na kilka sposobów:
- • Zatrucie kontekstu (Context Poisoning): gdy zniekształcone informacje (fałszywe dane) pojawiają się w kontekście.
- • Zakłócenie kontekstu (Context Distraction): gdy nadmiar informacji w kontekście przytłacza oryginalną wiedzę modelu.
- • Mieszanie kontekstu (Context Confusion): gdy nieistotne informacje w kontekście wpływają na odpowiedzi modelu.
- • Konflikt kontekstu (Context Clash): gdy różne części kontekstu są sprzeczne.
Biorąc pod uwagę te problemy, firma Cognition AI podkreśla znaczenie inżynierii kontekstowej:
„Inżynieria kontekstowa”…… faktycznie jest priorytetowym zadaniem inżynierów budujących inteligencję AI.
Firma Anthropic również wyraźnie zauważa:
Agenci często muszą przeprowadzić setki rund dialogów, co wymaga od nas ostrożnych strategii zarządzania kontekstem.
Jak więc obecni deweloperzy radzą sobie z tym wyzwaniem? Podzieliłem obecne metody na cztery główne kategorie — pisanie (Write), selekcja (Select), kompresja (Compress) oraz izolacja (Isolate) — i podam odpowiednie przykłady.
Pisanie kontekstu (Write Context)
Pisanie kontekstu polega na przechowywaniu informacji poza oknem kontekstowym, tak aby mogły być użyte przez agenta w trakcie wykonywania zadania.
Strefa robocza (Scratchpads)
Ludzie podczas rozwiązywania problemów robią notatki i pamiętają pewne rzeczy, aby móc wykorzystać je w przyszłości przy podobnych zadaniach. Agenci również zyskują te umiejętności! Używając „strefy roboczej” do notowania, można trwałe przechowywać informacje w trakcie wykonywania zadania przez agenta. Kluczowa idea polega na przechowywaniu informacji poza oknem kontekstowym, ale z możliwością łatwego ich wykorzystania przez agenta. System badawczy wieloaspektowy firmy Anthropic przedstawia jasny przykład:
„Główny badacz” najpierw myśli o sposobie rozwiązania problemu i zapisuje swoje plany w „pamięci”, aby zachować kontekst. Ponieważ po przekroczeniu 200 000 tokenów okno kontekstowe może zostać obcięte, zachowanie planu jest niezwykle ważne.
Strefy robocze można zaimplementować na różne sposoby. Może to być proste wywołanie narzędzia, na przykład zapisanie informacji do pliku; lub pole w obiekcie stanu podczas uruchomienia, które pozostaje niezmienne przez cały czas trwania sesji. Bez względu na metodę, strefa robocza pozwala agentowi przechowywać przydatne informacje, aby lepiej wykonać zadanie.
Pamięć (Memories)
Strefa robocza pomaga agentom w rozwiązywaniu zadań w pojedynczej sesji, ale czasami agenci muszą zapamiętać rzeczy przez wiele sesji. Model Reflexion wprowadza koncepcję refleksji po każdej akcji agenta i ponownego użycia tych samodzielnie wygenerowanych pamięci. Model Generative Agents potrafi cyklicznie syntetyzować pamięć na podstawie zbioru informacji zwrotnych od przeszłych agentów.
Te koncepcje są już wykorzystywane w popularnych produktach takich jak ChatGPT, Cursor i Windsurf. Wszystkie one mają mechanizm automatycznego generowania pamięci długoterminowej na podstawie interakcji z użytkownikami.
Selekcja kontekstu (Select Context)
Selekcja kontekstu polega na wprowadzaniu potrzebnych informacji do okna kontekstowego, aby pomóc agentowi w wykonywaniu zadania.
Strefa robocza (Scratchpad)
Mechanizm selekcji kontekstu ze strefy roboczej zależy od sposobu jej wdrożenia. Jeśli jest to narzędzie, to agent po prostu wywołuje to narzędzie, aby uzyskać dostęp do informacji. Jeśli jest to część stanu działania agenta, deweloper może w każdej chwili selektywnie ujawniać pewne części tego stanu agentowi. To zapewnia precyzyjną kontrolę nad kontekstem strefy roboczej dostarczanym do LLM w kolejnych rundach.
Pamięć (Memories)
Jeśli agent potrafi przechowywać pamięć, musi również mieć zdolność do selekcji związanych z aktualnym zadaniem informacji. Jest to bardzo przydatne z kilku powodów: agenci mogą wybierać przykłady z ograniczonej próby (pamięć sytuacyjna), aby nauczyć się oczekiwanego wzoru zachowań; mogą selekcjonować instrukcje (pamięć programu), aby kierować swoim działaniem; lub wybierać fakty (pamięć semantyczna), aby zapewnić kontekst dla zadania.
Dużym wyzwaniem jest zapewnienie, że wyselekcjonowana pamięć jest relewantna. Niektóre popularne agenty korzystają tylko z małego zasobu stałych plików, które zawsze są ładowane do kontekstu. Na przykład wiele agentów programistycznych używa plików do przechowywania instrukcji („pamięć programu”) lub w niektórych przypadkach przykładów („pamięć sytuacyjna”). Claude Code używa CLAUDE.md
, podczas gdy Cursor i Windsurf korzystają z plików reguł.
Jednak, jeśli agent przechowuje dużą ilość faktów lub relacji (na przykład typu „pamięć semantyczna”), selekcja staje się bardziej skomplikowana. ChatGPT jest dobrym przykładem, wykorzystującym i przeprowadzającym selekcję z ogromnych zbiorów pamięci użytkownika.
Techniki indeksowania, takie jak osadzenia wektorowe i/lub grafy wiedzy, są powszechnie stosowane, aby ułatwić proces selekcji. Niemniej jednak, selekcja pamięci pozostaje dużym wyzwaniem. Na targach AIEngineer, Simon Willison podzielił się przykładem błędnej selekcji pamięci: ChatGPT uzyskał jego lokalizację z pamięci i przypadkowo wprowadził ją do obrazka, który zażyczył sobie użytkownik. Tego rodzaju nieoczekiwane lub niepożądane pobrania pamięci mogą sprawić, że użytkownicy poczują się tak, jakby kontekstowe okno „już nie należało do nich”!
Narzędzia (Tools)
Agenci potrzebują korzystać z narzędzi, ale jeśli dostępnych jest zbyt wiele narzędzi, mogą być przytłoczeni. Często wynika to z overlapped opisów narzędzi, co prowadzi do zamieszania w wyborze narzędzia przez model. Jednym ze sposobów jest zastosowanie RAG (retrieval-augmented generation) do opisów narzędzi, aby wybrać najbardziej odpowiednie narzędzie dla zadania na podstawie semantycznego podobieństwa. Ostatnie badania pokazują, że ta metoda może zwiększyć precyzję wyboru narzędzi trzykrotnie.
Wiedza (Knowledge)
Retrieval-augmented generation (RAG) sam w sobie jest szerokim tematem i może stać się kluczowym wyzwaniem w inżynierii kontekstowej. Agenci programistyczni są jednym z najlepszych przykładów RAG w szerokim zastosowaniu. Varun z Windsurf dobrze podsumował niektóre z tych wyzwań:
Indeksowanie kodu ≠ wyszukiwanie w kontekście…… To, co robimy, to analiza kodu za pomocą AST (drzewo składniowe) i segmentacja wzdłuż granic znaczeniowych…… W miarę jak rozrasta się biblioteka kodu, wyszukiwanie oparte na osadzeniach wektorowych staje się niewiarygodne…… Musimy polegać na kombinacji różnych technik, takich jak grep/wyszukiwanie plików, wyszukiwanie oparte na grafach wiedzy oraz…… etap przeszukiwania kontekstu, gdzie konteksty są sortowane w zależności od ich odpowiedniości.
Kompresja kontekstu (Compress Context)
Kompresja kontekstu polega na zachowaniu tylko tych tokenów, które są niezbędne do wykonania zadania.
Podsumowanie kontekstu (Context Summarization)
Interakcje agenta mogą obejmować setki rund i używać narzędzi, które konsumują dużą ilość tokenów. Podsumowywanie to powszechnie stosowana metoda radzenia sobie z tymi wyzwaniami. Jeśli korzystałeś z Claude Code, już widziałeś praktyczne zastosowanie tej zasady. Gdy użycie okna kontekstowego przekracza 95%, Claude Code uruchamia „automatyczną kompresję”, podsumowując pełną interakcję pomiędzy użytkownikiem a agentem. Kompresja trajektorii agenta może przybierać różne formy, takie jak podsumowywanie rekurencyjne lub wielopoziomowe podsumowanie.
W projektowaniu agenta pomocne jest wprowadzenia kroków podsumowania w odpowiednich momentach. Na przykład, może to być użyte przy przetwarzaniu pewnych wywołań narzędzi (szczególnie takich, które zużywają dużą ilość tokenów, jak narzędzia wyszukujące). Na przykład, firma Cognition wspomniała o zastosowaniu podsumowania na granicy przejścia pomiędzy agentami, aby zmniejszyć zużycie tokenów w procesie przekazywania wiedzy. Chociaż podsumowywanie może być wyzwaniem, gdy trzeba uchwycić konkretne zdarzenia lub decyzje, Cognition korzysta ze specyficznego modelu jak fine-tune, co podkreśla, jak wiele pracy może wymagać ten krok.
Przycinanie kontekstu (Context Trimming)
Podsumowanie zwykle wykorzystuje LLM do wyodrębnienia najbardziej istotnych fragmentów kontekstu, podczas gdy przycinanie przypomina bardziej filtrację lub, jak wspomniał Drew Breunig, „przycinanie” kontekstu. Może to być oparte na zasadach heurystycznych, takie jak usuwanie starszych wiadomości z listy wiadomości. Drew wspomniał również o Provence, narzędziu do przycinania kontekstu przeszkolonym na zadania pytania-odpowiedzi.
Izolowanie kontekstu (Isolating Context)
Izolowanie kontekstu polega na rozdzielaniu kontekstu w celu wsparcia agenta w realizacji zadań.
Wieloagenci (Multi-agent)
Jednym z najpopularniejszych sposobów izolowania kontekstu jest rozdzielanie go na różne podagenty. Motywacją dla biblioteki Swarm OpenAI jest „separacja punktów uwagi”, czyli przydzielanie zespołu agentów do obsługi podzadań. Każdy agent dysponuje swoim zestawem narzędzi, instrukcją i niezależnym oknem kontekstowym.
System badawczy wieloagentowy firmy Anthropic dostarcza solidnych dowodów na to, że kilku agentów z niezależnym kontekstem działa lepiej niż pojedynczy agent, ponieważ okna kontekstowe każdego podagenta mogą skupić się na węższym podzadaniu. Jak opisano w ich blogu:
Podagenty pracują równolegle z własnymi oknami kontekstowymi, a równocześnie eksplorują różne aspekty problemu.
Oczywiście wieloagenci również napotykają wyzwania, w tym zużycie tokenów (na przykład Anthropic zgłasza, że zużycie tokenów wynosi 15 razy więcej niż w przypadku rozmowy), konieczność starannych strategii inżynieryjnych w celu zaplanowania pracy podagentów oraz problemy ze współpracą między nimi.
Izolacja kontekstu z użyciem środowisk (Context Isolation with Environments)
Projekt badawczy HuggingFace pokazuje interesujący przykład izolacji kontekstu. Większość agentów używa wywołania API narzędzi, które zwracają obiekty JSON (parametry narzędzi), a następnie przekazywane są do narzędzi (jak API wyszukiwarki) w celu uzyskania odpowiedzi (jak wyniki wyszukiwania). HuggingFace wykorzystuje CodeAgent, który bezpośrednio zwraca kod z potrzebnymi wywołaniami narzędzi. Te kody są następnie uruchamiane w izolowanym środowisku. Tylko konkretne konteksty zwracane przez wywołania narzędzi (jak zwrócona wartość) są przesyłane z powrotem do LLM.
Dzięki temu kontekst może być izolowany w środowisku od LLM. Hugging Face wskazuje, że to doskonały sposób na izolację obiektów, które konsumują dużą ilość tokenów:
Agenci kodowi lepiej radzą sobie z stanem…… potrzebujesz przechowywać obrazy/dźwięki/inne dane do późniejszego użycia? Żaden problem, wystarczy przydzielić je jako zmienną, a potem skorzystasz z nich później.
Stan (State)
Warto również zauważyć, że obiekt stanu agenta również jest dobrą metodą na izolację kontekstu. Może to działać podobnie jak piaskownica. Obiekt stanu może mieć zaprojektowany schemat (na przykład model Pydantic), który zawiera pola mogące być zapisywane do kontekstu. Pewne pole w schemacie (np. messages
) może być ujawniane agentowi w każdej interakcji, ale schemat może izolować informacje w innych polach w celu ich bardziej selektywnego wykorzystania.
Wnioski
Modele inżynierii kontekstowej agentów są w ciągłym rozwoju, ale możemy je podsumować w czterech głównych kategoriach: pisanie, selekcja, kompresja i izolacja:
- • Pisanie kontekstu, polega na przechowywaniu informacji poza oknem kontekstowym, aby można je było wykorzystać, gdy agent wykonuje zadanie.
- • Selekcja kontekstu, polega na wprowadzaniu potrzebnych informacji do okna kontekstowego, aby wspierać agenta w realizacji zadania.
- • Kompresja kontekstu, polega na zachowaniu tylko tych tokenów, które są niezbędne do wykonania zadania.
- • Izolowanie kontekstu, polega na rozdzielaniu kontekstu, aby wspierać agenta w realizacji zadań.
Zrozumienie i stosowanie tych wzorców jest kluczowym aspektem budowania efektywnych agentów dzisiaj.