Skip to content
Wróć do bloga
Open Source

Dlaczego Twoj agent AI pamięta za duzo (i jak to naprawic)

Vstorm · · 8 min czytania
Spis treści

Wyprobowalismy 4 rozne systemy pamieci dla naszych agentow AI. Wszystkie przechowywaly za duzo smieci.

Bazy wektorowe zapisywaly kazda wiadomosc - w tym “tak”, “ok” i “mozesz powtorzyc?” Logi rozmow rosly do megabajtow szumu. Wyszukiwanie RAG zwracalo 10 nieistotnych fragmentow na kazdy uzyteczny. A koszt tokenowy embeddingu wszystkiego byl absurdalny.

TL;DR

  • Przechowuj mniej, pamietaj lepiej - wiekszość systemow pamieci przechowuje wszystko i zle wyszukuje. Selektywna, swiadoma pamiec zawsze wygrywa z totalnym zapamietywaniem.
  • Naucz agenta o jego wlasnych ograniczeniach - prompt systemowy musi wyraznie mowic “twoj kontekst miesci 10 wiadomosci”. Bez tego agent zaklada, ze pamięta wszystko.
  • “Zapisz natychmiast” to kluczowa zasada - jesli agent nie zapisze informacji w momencie, gdy sie jej dowiaduje, informacja zostaje utracona przy zmianie kontekstu. Nie ma drugiej szansy.
  • Plikowa pamiec jest prosta i debugowalna - mozesz czytac, edytowac i wersjonowac pliki pamieci agenta za pomoca git. Sprobuj zrobic to z baza wektorowa.
  • Polacz strategie krotko- i dlugoterminowe - sumaryzacja obsluguje niedawny kontekst, plikowa pamiec obsluguje trwala wiedze, wyszukiwanie historii obsluguje rzadkie zapytania.

Fundamentalny problem

Fundamentalny problem: wiekszość systemow pamieci AI jest zaprojektowana, aby pamietac wszystko. Ale najlepsza ludzka pamiec dziala poprzez zapominanie prawie wszystkiego i zachowywanie tylko tego, co wazne.

Po latach pracy z agentami produkcyjnymi w Vstorm, doszlismy do innego podejscia. Zamiast przechowywac kazda wiadomosc w bazie wektorowej, dajemy agentowi ustrukturyzowany system plikow dla trwalej pamieci - i uczymy go decydowac, co jest warte zapisania.

Problem: okna kontekstu sa skonczone

Oto fakt, ktory wiekszość architektur agentow ignoruje: twoje okno kontekstu miesci tylko ostatnie ~10-20 wiadomosci. Wszystko wczesniejsze znika - chyba ze jawnie to gdzies zapisales.

Typowa konfiguracja produkcyjna:

  • Okno kontekstu: 128k tokenow (GPT-4o) lub 200k tokenow (Claude)
  • Srednia wiadomosc: ~500 tokenow (z wywolaniami narzedzi)
  • Efektywna pojemnosc: ~50-100 wiadomosci zanim zarzadzanie kontekstem sie wlaczy
  • Z sumaryzacja: ~20 ostatnich wiadomosci + skompresowane podsumowanie

Po 50 wymianach agent nie pamięta imienia uzytkownika z wiadomosci #3. Nie dlatego, ze jest glupi - bo informacja dosłownie nie jest juz w kontekscie.

Rozwiazanie: ustrukturyzowana plikowa pamiec

Zamiast wrzucac wszystko do bazy wektorowej, dajemy agentowi system plikow zorganizowany wedlug celu:

/memory/
├── AGENTS.md # Core instructions, learned behaviors
├── knowledge/
│ ├── user.md # User's name, preferences, timezone
│ ├── projects/
│ │ └── api-project.md # Project-specific context
│ └── tech-stack.md # Preferred technologies
├── skills/
│ ├── task-planning.md # How to plan complex tasks
│ └── code-review.md # How to review code
└── conversations/
└── summaries/ # Summaries of important past conversations

Agent czyta te pliki na poczatku kazdej rozmowy i aktualizuje je, gdy dowie sie czegos nowego. To nie jest automatyczne przechowywanie - to swiadome zarzadzanie pamiecia.

Zasada “Zapisz natychmiast”

Kluczowa instrukcja w prompcie systemowym agenta:

system_prompt = f"""
## CRITICAL: Context Window Limitations
**Your context window only holds the last 10 messages.** This means:
- Information shared earlier in the conversation WILL BE LOST
- User preferences, names, project details - all forgotten after ~10 exchanges
- You MUST proactively save important information to your persistent memory
**When to save to memory (DO THIS IMMEDIATELY):**
- User tells you their name → Save to knowledge/user.md
- User shares preferences → Save to AGENTS.md under "User Preferences"
- User describes a project → Save to knowledge/projects/
- User corrects you → Update relevant memory file
- Important facts → Save to knowledge/
**Example:** If user says "My name is Kacper", IMMEDIATELY:
1. Acknowledge: "Nice to meet you, Kacper!"
2. Save to memory: edit_file("knowledge/user.md", ...)
"""

Kluczowe spostrzezenie: nie zapisuj wszystkiego. Zapisuj tylko to, czego potrzebowalbyś, gdybyś stracil cala rozmowe. Agent podejmuje te decyzje - nie heurystyka, nie embedding, nie prog podobienstwa wektorowego. Sam LLM decyduje, co jest warte zapamietania.

Procedura startowa: czytaj zanim odpowiesz

Kazda rozmowa zaczyna sie od zaladowania pamieci:

# Agent's startup routine (from system prompt):
# 1. Read AGENTS.md to recall your instructions
# 2. Read knowledge/user.md to remember the user
# 3. Check if skills/ has relevant skills for this topic

To jest tanie - przeczytanie 3-4 malych plikow markdown kosztuje kilkaset tokenow. Ale oznacza to, ze agent wie, z kim rozmawia, nad jakimi projektami pracuje i jak woli sie komunikowac.

AGENTS.md: pamiec rdzenna agenta

Plik AGENTS.md sluzy jako tozsamosc agenta i wyuczone zachowania:

# Winston - Core Instructions
## Identity
You are Winston, an autonomous AI assistant.
## Critical Behaviors
### Memory Management
- Your context window is LIMITED to ~10 messages
- Important information WILL BE LOST if not saved
- When user shares personal info → SAVE IMMEDIATELY
### Proactive Learning
When you learn something new about the user:
1. Acknowledge what you learned
2. Save to appropriate memory file
3. Confirm: "I've noted that for future reference."
## User Preferences
- Language: User may speak Polish or English - match their language
- Code style: Prefers explicit over clever

Ten plik rosnie organicznie. Kiedy agent dowiaduje sie, ze uzytkownik woli TypeScript od JavaScript, aktualizuje sekcje User Preferences. Kiedy popelni blad i zostanie poprawiony, dodaje wpis “Learned Behaviors”.

Umiejetnosci: wielokrotnego uzytku workflow

Umiejetnosci to pliki markdown, ktore ucza agenta konkretnych wzorcow:

# Task Planning Skill
**Trigger**: User gives a complex task or asks to "implement", "build", "create"
## Before Starting ANY Complex Task
### 1. Understand the Goal
- What is the desired end state?
- What problem does this solve?
- What are the constraints?
### 2. Break Down the Task
**Bad**: "Build a login system"
**Good**:
1. Create user model with email/password
2. Implement password hashing
3. Create login endpoint
4. Add JWT token generation
5. Write tests for each component
### 3. Create a Todo List
Use write_todos to track the plan...

Umiejetnosci sa ladowane do promptu systemowego, gdy sa istotne. Agent sprawdza katalog skills/ i laduje umiejetnosci pasujace do biezacego tematu rozmowy.

Zarzadzanie kontekstem: sumaryzacja + trwalosc

Architektura laczy dwie strategie:

Krotkoterminowa: procesor sumaryzacji - automatycznie kompresuje starsze wiadomosci, gdy kontekst sie zapelnia:

from pydantic_ai_summarization import create_summarization_processor
summarization_processor = create_summarization_processor(
trigger=("fraction", 0.8), # At 80% of context
keep=("messages", 20), # Keep last 20 messages
max_input_tokens=128000,
)

Dlugoterminowa: plikowa pamiec - agent zapisuje wazne fakty do plikow markdown:

# When user says "My name is Kacper"
# Agent immediately calls:
edit_file("knowledge/user.md", old_string="", new_string="Name: Kacper\n")

Krotkoterminowy kontekst (ostatnie wiadomosci) jest zarzadzany automatycznie. Dlugoterminowa pamiec (preferencje uzytkownika, szczegoly projektow) jest zarzadzana swiadomie przez agenta.

Wyszukiwanie historii: znajdz bez ladowania

Dla rozmow obejmujacych setki wiadomosci, dostarczamy narzedzie wyszukiwania, ktore odpytuje baze danych bez ladowania wszystkiego do kontekstu:

@toolset.tool
async def search_history(query: str, limit: int = 10, role: str = None) -> str:
"""Search conversation history for past messages.
The most recent 10 messages are already in your context.
Use this for older messages or specific searches.
"""
messages = await conversation_repo.search_messages(
db, conversation_id, query,
limit=min(max(1, limit), 50),
role=role,
)
if not messages:
return f"No messages found matching '{query}'"
results = []
for msg in messages:
timestamp = msg.created_at.strftime("%Y-%m-%d %H:%M")
content = msg.content[:500] + "..." if len(msg.content) > 500 else msg.content
results.append(f"[{timestamp}] {msg.role.capitalize()}: {content}")
return f"Found {len(messages)} message(s):\n\n" + "\n\n".join(results)

Agent moze wyszukac “Python tutorials” w starych wiadomosciach bez ladowania calej historii rozmowy. Wyniki sa obcinane do 500 znakow, aby uniknac rozdecia kontekstu.

Wzorzec: selektywna pamiec > totalne zapamietywanie

Oto framework:

  1. Okno kontekstu (10-20 wiadomosci): Ostatnia rozmowa, zarzadzana automatycznie przez sumaryzacje
  2. Trwala pamiec (pliki): Wazne fakty zapisywane swiadomie przez agenta
  3. Wyszukiwanie historii (baza danych): Przeszukiwalne archiwum dla rzadkich zapytan
  4. Umiejetnosci (pliki): Wyuczone workflow ladowane na zadanie

Kazda warstwa obsluguje inne potrzeby retencji. Nie embeddujesz kazdej wiadomosci w bazie wektorowej. Nie przechowujesz kazdego faktu w grafie wiedzy. Pozwalasz agentowi decydowac, co jest wazne - tak jak ludzka pamiec.

Kluczowe wnioski

  • Przechowuj mniej, pamietaj lepiej. Wiekszość systemow pamieci przechowuje wszystko i zle wyszukuje. Selektywna, swiadoma pamiec zawsze wygrywa z totalnym zapamietywaniem.
  • Naucz agenta o jego wlasnych ograniczeniach. Prompt systemowy musi wyraznie mowic “twoj kontekst miesci 10 wiadomosci”. Bez tego agent zaklada, ze pamięta wszystko.
  • “Zapisz natychmiast” to kluczowa zasada. Jesli agent nie zapisze informacji w momencie, gdy sie jej dowiaduje, informacja zostanie utracona przy zmianie kontekstu. Nie ma drugiej szansy.
  • Plikowa pamiec jest prosta i debugowalna. Mozesz czytac pliki pamieci agenta. Mozesz je edytowac. Mozesz wersjonowac je za pomoca git. Sprobuj zrobic to z baza wektorowa.
  • Polacz strategie krotko- i dlugoterminowe. Sumaryzacja obsluguje niedawny kontekst. Plikowa pamiec obsluguje trwala wiedze. Wyszukiwanie historii obsluguje rzadkie zapytania. Kazda warstwa sluzy innemu celowi.

Wyprobuj sam

memv - system trwalej pamieci dla agentow AI z ustrukturyzowanym przechowywaniem plikow i selektywna retencja.

pip install memvee
Udostępnij artykuł

Powiązane artykuły

Gotowy, żeby wdrożyć swoją aplikację AI?

Wybierz frameworki, wygeneruj projekt gotowy do produkcji i wdróż. 75+ opcji, jedna komenda, zero długu konfiguracyjnego.

Potrzebujesz pomocy przy budowie agentów AI?