## Context engineering i pamięć

*Kontekst i wiedza*

*Ostatnia zmiana: 28 września 2026*

Model wie tylko to, co jest w kontekście bieżącego wywołania. Context engineering to wybór, co tam włożyć: najmniej tokenów, które wystarczą do następnego kroku, a z pamięci poza oknem tylko to, co potrzebne teraz.

**Po ludzku:** Przekazanie dyżuru w szpitalu. Nocna zmiana nie opowiada całej nocy minuta po minucie, tylko zostawia kartę: uczulenia, podane leki, co się zmieniło, co zostało do zrobienia. Czego nie ma w karcie, tego dzienna zmiana nie wie.

*Interaktywny widżet na stronie: Agent od 40 tur dodaje obsługę zwrotów do modułu płatności. Wybierz, jak zarządza kontekstem, i zobacz, które z sześciu faktów dotrwają do pytania w turze 41 i czy agent odpowie dobrze.*

### Co walczy o miejsce w oknie

- Do jednego wywołania trafiają: system prompt, definicje narzędzi, przykłady, pobrane dokumenty, historia rozmowy, wyniki narzędzi i rozumowanie modelu (thinking). W agencie najszybciej rosną wyniki narzędzi. Manus podaje średnio ok. 100 tokenów wejścia na 1 token wyjścia. Limit okna i to, jak koszt rośnie z każdą turą, opisuje temat „Okno kontekstowe i agent”.
- Jakość spada, zanim okno się skończy. To context rot. Chroma (lipiec 2025) sprawdziła 18 modeli: wyniki pogarszały się z długością wejścia nawet w prostych zadaniach, a dodatkowo szkodziły fragmenty na ten sam temat, które nie odpowiadają na pytanie. W teście LongMemEval każdy model wypadł wyraźnie lepiej na wersji z samymi potrzebnymi fragmentami (ok. 300 tokenów) niż na pełnej (ok. 113 tys.), choć odpowiedź była w obu. Anthropic tłumaczy to budżetem uwagi: n tokenów to n² par, więc uwaga rozkłada się na coraz więcej kandydatów (temat „Attention”). Najmniej tokenów nie znaczy krótko: brak potrzebnego faktu szkodzi tak samo jak szum.

### Jak pisać prompty: minimum, które działa

- Zadanie, powód, ograniczenia i format wyniku. Powód działa lepiej niż zakaz. Zamiast „NIGDY nie używaj wielokropka” napisz, że tekst przeczyta syntezator mowy, który wielokropka nie wymówi. Znając powód, model wywnioskuje też przypadki, których nie wypisałeś. Pisz, co robić, a nie czego nie robić. Test z dokumentacji Claude: czy kolega bez kontekstu wykonałby to polecenie?
- Przykłady sterują formatem i tonem skuteczniej niż opis. Dokumentacja Claude zaleca 3–5 różnych przykładów w tagach `<example>`. Anthropic radzi dobrać kilka typowych zamiast listy wszystkich przypadków brzegowych. Zbyt podobne przykłady model kopiuje razem z przypadkowymi cechami, na przykład zawsze tą samą długością.
- Strukturę dają sekcje albo tagi XML: osobno instrukcje, kontekst, przykłady i dane wejściowe, żeby model nie mylił poleceń z danymi. Długie dokumenty idą na górę, pytanie na koniec. W testach Anthropic dawało to do 30% lepsze odpowiedzi przy wielu dokumentach.

### Techniki dla długich zadań

- Stały prefiks na początek: system prompt, definicje narzędzi, stałe dokumenty. Zmienne części na koniec, historię tylko dopisuj, serializuj deterministycznie (ta sama kolejność kluczy w JSON-ie). Wtedy kolejne wywołania trafiają w cache, zobacz temat „Prompt caching”. Każda zmiana w środku kontekstu, czyli kompakcja, czyszczenie albo nowe narzędzie, unieważnia cache od miejsca zmiany. Dlatego edytuj rzadko i dużymi porcjami. Manus z tego powodu nie usuwa narzędzi w trakcie zadania, tylko blokuje ich wybór przy dekodowaniu.
- Pobieranie na żądanie zamiast ładowania z góry. Agent trzyma lekkie wskaźniki, czyli ścieżki plików, URL-e i zapytania, a treść czyta narzędziami, gdy jej potrzebuje: `grep`, `head`, zapytanie do bazy. Claude Code łączy oba podejścia: `CLAUDE.md` trafia do kontekstu na starcie, pliki agent czyta na bieżąco. Tak samo działają Agent Skills, tylko z instrukcjami: w prefiksie leży sama nazwa i opis każdej umiejętności, ok. 100 tokenów, a pełne instrukcje wczytują się, gdy zadanie pasuje do opisu. To ta sama odpowiedź co wyszukiwanie narzędzi przy rozdętych definicjach (temat „MCP”), szerzej w temacie „Harness agenta kodującego”. Cena: więcej tur i wolniej niż gotowe wyniki z indeksu (temat „RAG”). Reguły, które obowiązują zawsze, ładuj z góry. Wyszukiwanie znajduje to, co przypomina pytanie, a „bez zgody nic na produkcji” nie przypomina żadnego.
- Kompakcja: przy progu model streszcza historię, a praca toczy się dalej od streszczenia i ostatnich tur. Claude Code zachowuje decyzje architektoniczne, nierozwiązane błędy i szczegóły implementacji, wyrzuca powtarzające się wyniki narzędzi i dokłada 5 ostatnio czytanych plików. Streszczenie gubi szczegóły, które w chwili streszczania wyglądały na nieważne, a samo kosztuje wywołanie czytające całą historię. Stan na wrzesień 2026: API Claude (beta) i Responses API OpenAI potrafią kompaktować po stronie serwera, przy progu tokenów albo na żądanie. Claude zwraca czytelne streszczenie i pozwala podać własny prompt streszczający, a element kompakcji OpenAI jest zaszyfrowany, więc to, co zgubił, pokaże tylko ewaluacja.
- Czyszczenie starych wyników narzędzi to najłagodniejsza forma odchudzania kontekstu. Surowy wynik sprzed 30 tur rzadko jest potrzebny dosłownie. Zastępujesz go znacznikiem, a samo wywołanie zostaje, więc agent wie, co już sprawdził, i może pobrać to jeszcze raz. W API Claude robi to context editing: po przekroczeniu progu (domyślnie 100 tys. tokenów wejścia) czyści starsze wyniki i zostawia 3 ostatnie. W Claude Fable 5.1, Opus 5.5 i Sonnet 5.5, jeśli odsyłasz bloki myślenia, czyszczenie zostaw API. Zmiana wcześniejszego wyniku narzędzia we własnym kodzie albo kompakcja z własnym streszczeniem, która zostawia ostatnie tury razem z ich myśleniem, sprawia, że każdy późniejszy blok myślenia nie przejdzie kontroli prefiksu: dla kont założonych od 31 sierpnia 2026 to domyślnie błąd 400. Jedno streszczenie zastępujące całą historię jest w porządku.
- Notatki poza oknem: agent sam prowadzi plik, na przykład `NOTES.md`, listę zadań albo `progress.txt`, i czyta go po resecie kontekstu. Manus przy średnio ok. 50 wywołaniach narzędzi na zadanie co chwilę przepisuje `todo.md`, żeby cel stał na końcu kontekstu, a nie ginął w środku. Przy pracy z kodem dokumentacja Claude radzi czasem zacząć od czystego okna zamiast kompakcji: model odtwarza stan z notatek, testów i historii gita. Notatki zawierają tylko to, co agent uznał za ważne, i też się starzeją.
- Subagent dostaje czyste okno na zadanie poboczne, na przykład przeszukanie repozytorium. Zużywa dziesiątki tysięcy tokenów, a oddaje streszczenie, według Anthropic zwykle 1–2 tys. tokenów. Główny kontekst zostaje krótki, ale subagent nie widzi ustaleń głównego wątku, więc zlecenie musi je zawierać. Więcej w temacie „Wielu agentów”.

### Pamięć między sesjami

- Pamięć długoterminowa to zapis poza modelem, który wraca do kontekstu w kolejnych sesjach. Zapisuje się fakty i preferencje (pracuje w TypeScripcie, woli krótkie odpowiedzi), epizody (jak rozwiązano podobne zgłoszenie, co nie zadziałało) i reguły (poprawione instrukcje). Do wyboru są dwie formy: jeden profil nadpisywany w całości (prosty, ale przy aktualizacji łatwo coś w nim zgubić) albo kolekcja małych wpisów (mniej strat, ale trudniejsze wyszukiwanie, poprawianie i kasowanie).
- Do kontekstu pamięć wraca na dwa sposoby. Mały profil jest zawsze w prefiksie: to proste, ale płacisz za niego w każdym wywołaniu. Większy zbiór agent przeszukuje narzędziem, gdy go potrzebuje: to się skaluje, ale może nie trafić. Memory tool w API Claude działa po stronie klienta. Model prosi o operacje na plikach w katalogu `/memories`, twój kod wykonuje je na twoim magazynie, a API dopisuje polecenie, żeby przed pracą zawsze przejrzeć ten katalog. Zapis w trakcie pracy jest od razu widoczny, ale spowalnia. Zapis w tle po sesji nie spowalnia, ale działa z opóźnieniem.
- Pamięć się starzeje. Wpis „projekt używa MySQL” po migracji na Postgresa szkodzi bardziej niż brak wpisu, bo model ufa swoim notatkom. Trzymaj przy wpisie datę i źródło, niech nowszy wygrywa, a nieużywane wpisy wygasają. Dokumentacja memory tool zaleca też limit rozmiaru plików, usuwanie danych wrażliwych przed zapisem i ochronę przed ścieżkami typu `/memories/../../`.
- Memory poisoning: obca treść, czyli strona, dokument albo mail, każe modelowi zapisać fałszywy wpis, który potem działa w każdej sesji. Johann Rehberger pokazał w 2024 roku zapis fałszywych wspomnień w ChatGPT przez dokumenty, obrazy i przeglądane strony, a potem wpis, który wysyłał atakującemu wszystkie przyszłe rozmowy. OpenAI według autora zablokowało we wrześniu 2024 ten kanał wycieku, ale nie samo zapisywanie. Zapis do pamięci traktuj jak akcję z uprawnieniami: tylko z wypowiedzi użytkownika albo za jego zgodą, z widocznym komunikatem. Zobacz „Prompt injection”.
- Użytkownik musi móc widzieć, poprawiać i kasować pamięć oraz rozmawiać bez niej. Pamięć jednego użytkownika nigdy nie może trafić do kontekstu innego: osobna przestrzeń na użytkownika i projekt, a przy usunięciu konta usuwasz też pamięć.

### Sprawdź się

**Pytanie:** Agent po godzinie pracy zapomina ustalenia z początku sesji i robi się coraz droższy. Jak zaprojektujesz zarządzanie kontekstem i pamięcią?

**Krótka odpowiedź:** Model wie tylko to, co jest w bieżącym kontekście, więc przed każdym wywołaniem składaj najmniejszy zestaw tokenów potrzebny do następnego kroku. Stały prefiks z instrukcjami i narzędziami idzie na początek, pod cache. Duże dane agent pobiera narzędziami, gdy ich potrzebuje. Stare wyniki narzędzi czyść, historię przy progu kompaktuj, ale reguły i kluczowe ustalenia agent zapisuje w pliku z notatkami, bo streszczenie gubi szczegóły. Zadania poboczne dostają subagenci z czystym oknem. Pamięć między sesjami traktuj jak niezaufane dane: z datą, źródłem, wygasaniem i kontrolą użytkownika.

### Pytania pogłębiające

- **Kompakcja czy start od czystego okna?** Kompakcja zachowuje ciągłość długiej rozmowy, ale streszczenie gubi szczegóły i kosztuje dodatkowe wywołanie. Przy kodzie często lepszy jest czysty start: stan leży na dysku w notatkach, testach i historii gita, a model umie go odczytać. Dokumentacja Claude podaje to jako alternatywę dla kompakcji.
- **Jak sprawdzisz, czy kompakcja gubi coś ważnego?** Ewaluacją na długich sesjach: fakty podane wcześnie, pytania o nie po kompakcji, porównanie z odpowiedzią na pełnej historii. Prompt kompakcji najpierw dopracowujesz pod kątem kompletności, potem tniesz to, co zbędne. Fakty, których zgubić nie wolno, agent zapisuje w notatkach, zanim dojdzie do streszczenia.
- **Co trzymasz w stałym prefiksie, a co pobierasz na żądanie?** W prefiksie reguły obowiązujące zawsze i krótkie fakty potrzebne w większości kroków. Wyszukiwanie znajduje to, co przypomina pytanie, a ogólna reguła rzadko przypomina konkretne pytanie. Duże i rzadko potrzebne dane agent pobiera przez ścieżki i narzędzia.
- **Użytkownik mówi, że asystent „pamięta” coś, czego nigdy mu nie powiedział. Co sprawdzasz?** Skąd przyszedł wpis: z rozmowy, dokumentu, strony czy wyniku narzędzia. Jeśli z obcej treści, to memory poisoning. Poprawka: zapis tylko z wypowiedzi użytkownika albo po jego potwierdzeniu, źródło i data przy każdym wpisie, widoczny komunikat o zapisie.
- **Czemu nie wrzucić wszystkiego do okna miliona tokenów?** Każde wywołanie płaci za całe wejście i dłużej czeka na pierwszy token, a jakość spada z długością i szumem. W badaniu Chroma każdy testowany model wypadł wyraźnie lepiej na ok. 300 tokenach potrzebnych fragmentów niż na ok. 113 tys. tokenów, w których ta sama odpowiedź ginęła w szumie. Duże okno to zapas, nie strategia.

### Źródła

- [Anthropic: Effective context engineering for AI agents (2025)](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)
- [Chroma: Context Rot (2025)](https://www.trychroma.com/research/context-rot)
- [Dokumentacja Claude: Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool)
- [Dokumentacja Claude: Preserved thinking (edycja historii a bloki myślenia)](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking)
- [Embrace The Red: SpAIware, fałszywe wspomnienia w ChatGPT jako kanał wycieku (2024)](https://embracethered.com/blog/posts/2024/chatgpt-macos-app-persistent-data-exfiltration/)

Strona interaktywna: https://howaiworks.dev/pl/kontekst/
