{"title":"Najlepsze praktyki pamięci","slug":"memory-best-practices","category":"guides","summary":"Jak ustrukturyzować wspomnienia do skutecznego recall — kategorie, klucze, tagi, priorytety.","audience":["human","llm"],"tags":["guide","memory","best-practices","patterns"],"difficulty":"intermediate","updated":"2026-06-27","word_count":601,"read_minutes":3,"lang":"pl","translated":true,"requested_lang":"pl","content_markdown":"\n# Najlepsze praktyki pamięci\n\nSposób ustrukturyzowania wspomnień determinuje ich użyteczność. Ten przewodnik\nobejmuje wzorce kategoryzowania, tagowania i priorytetyzowania wspomnień, aby\nLLM mógł przypomnieć właściwą informację we właściwym czasie.\n\n## Kategorie: wybierać najbardziej konkretną\n\n| Kategoria | Użyć dla | Przykład |\n|----------|---------|---------|\n| `identity` | Imię użytkownika, rola, dane kontaktowe | `\"user_name\": \"Michael Schäfer\"` |\n| `preference` | Sympatie, antypatie, styl pracy | `\"communication\": \"Prefers concise responses\"` |\n| `fact` | Weryfikowalne fakty | `\"office_location\": \"Berlin, Germany\"` |\n| `project` | Status projektu, decyzje | `\"project_synapse\": \"v1.5.0 deployed\"` |\n| `skill` | Umiejętności użytkownika | `\"skill_python\": \"Advanced, 10+ years\"` |\n| `mistake` | Błędy z przeszłości do uniknięcia | `\"mistake_npm_version\": \"Always bump version\"` |\n| `context` | Kontekst istotny dla sesji | `\"current_focus\": \"Working on docs system\"` |\n| `note` | Różne notatki | `\"note_idea\": \"Try Redis for caching\"` |\n\n> [!TIP]\n> W razie wątpliwości używać `fact` dla weryfikowalnych informacji i `note` dla\n> reszty. Nie nadużywać kategoryzacji — lepszy jasny `fact` niż mylący `context`.\n\n## Klucze: znaczące identyfikatory\n\nPole `key` jest identyfikatorem wspomnienia. Używać znaczących, stabilnych kluczy:\n\n**Dobre klucze:**\n- `user_name`\n- `project_synapse_status`\n- `preference_communication_style`\n- `mistake_npm_version_bump`\n\n**Złe klucze:**\n- `mem_001` (nie znaczący)\n- `temp` (nie opisowy)\n- `2026-06-27-note` (data nie pomaga w recall)\n\n### Konwencje nazewnictwa kluczy\n\n- `snake_case` (małe litery z podkreśleniami)\n- Prefiksować kategorią: `preference_*`, `project_*`, `mistake_*`\n- Używać opisowych rzeczowników, nie czasowników\n- Utrzymywać poniżej 50 znaków\n\n## Tagi: do wyszukiwania i filtrowania\n\nTagi umożliwiają szybkie filtrowanie i wyszukiwanie. Dodać 2-5 tagów na\nwspomnienie:\n\n```json\n{\n  \"category\": \"project\",\n  \"key\": \"project_synapse_status\",\n  \"content\": \"Synapse v1.5.0 deployed. Next: v1.6.0 with docs system.\",\n  \"tags\": [\"synapse\", \"deployment\", \"status\", \"v1.5.0\"]\n}\n```\n\n### Wzorce tagów\n\n- **Nazwy projektów**: `synapse`, `synapse-mcp`, `synapse-chat`\n- **Tematy**: `deployment`, `ci`, `database`, `auth`\n- **Status**: `active`, `completed`, `blocked`\n- **Wskaźniki priorytetu**: `urgent`, `long-term`\n\n> [!NOTE]\n> Tagi są niewrażliwe na wielkość liter. Używać małych liter dla spójności.\n\n## Priorytety: być realistycznym\n\n| Priorytet | Użyć dla | % wspomnień |\n|----------|---------|---------------|\n| `critical` | Tożsamość użytkownika, informacje prawne, decyzje nieodwracalne | około 5% |\n| `high` | Aktywne projekty, ważne preferencje | około 20% |\n| `normal` | Większość faktów, notatek, kontekstu | około 65% |\n| `low` | Efemeryczne, warto wiedzieć | około 10% |\n\n> [!WARNING]\n> Nie oznaczać wszystkiego jako `critical`. Jeśli wszystko jest krytyczne, nic\n> nie jest. Zarezerwować `critical` dla rzeczy, których zapomnienie wyrządziłoby\n> realną szkodę.\n\n## Kiedy zapisywać, a kiedy nie\n\n### Zawsze zapisywać\n\n- Tożsamość użytkownika (imię, e-mail, rola)\n- Długoterminowe preferencje\n- Decyzje projektowe i ich uzasadnienie\n- Przeszłe błędy i wyciągnięte lekcje\n- Zobowiązania względem użytkownika\n\n### Nie zapisywać\n\n- Stan przejściowy (użyć zmiennych)\n- Historię konwersacji dosłownie (system czatu to obsługuje)\n- Dane wrażliwe (hasła, klucze API)\n- Faktory łatwo wyprowadzalne (aktualna data, zawartość plików)\n- Kontekst efemeryczny (użyć kategorii `context` z niskim priorytetem)\n\n## Aktualizacja wspomnień\n\nPOST `/memory` z tym samym `category` + `key` aktualizuje istniejące wspomnienie:\n\n```python\n# Początkowy zapis\nstore(\"project\", \"project_synapse_status\", \"v1.4.0 deployed\", priority=\"high\")\n\n# Później: aktualizacja tym samym kluczem\nstore(\"project\", \"project_synapse_status\", \"v1.5.0 deployed. CI green.\", priority=\"high\")\n```\n\n> [!TIP]\n> Używać stabilnych kluczy, aby aktualizować bez tworzenia duplikatów. LLM\n> powinien ponownie POSTować ten sam klucz przy zmianie informacji, a nie\n> tworzyć nowe wspomnienia.\n\n## Cykl życia wspomnienia\n\n```\nCreate → Active → Stale → Archive → Delete\n```\n\n- **Create**: POST /memory z pełnym kontekstem\n- **Active**: Częsty recall, aktualizacja w razie potrzeby\n- **Stale**: Nadal istotne, ale nieaktywnie używane (obniżyć priorytet?)\n- **Archive**: Ustawić priorytet na `low`, zachować dla odniesienia historycznego\n- **Delete**: DELETE /memory/:id, gdy już nieistotne\n\n### Okresowe czyszczenie\n\n```python\n# Znalezienie wspomnień nieaktualizowanych od 90 dni\nold_memories = requests.get(\n    f\"{URL}/memory/search?q=*\",\n    headers={\"Authorization\": f\"Bearer {KEY}\"}\n)\n\nfor mem in old_memories[\"results\"]:\n    if is_stale(mem, days=90):\n        # Albo usunąć, albo obniżyć priorytet\n        if is_obsolete(mem):\n            delete_memory(mem[\"id\"])\n        else:\n            update_memory(mem[\"id\"], priority=\"low\")\n```\n\n## Wzorzec: dziedziczenie pamięci\n\nDla hierarchicznego kontekstu (projekt → podprojekt → zadanie):\n\n```python\n# Projekt nadrzędny\nstore(\"project\", \"project_synapse\", \"Main Synapse project\", \n      tags=[\"synapse\", \"parent\"], priority=\"high\")\n\n# Podprojekt (tagi łączą z nadrzędnym)\nstore(\"project\", \"project_synapse_docs\", \"Docs system for Synapse\",\n      tags=[\"synapse\", \"docs\", \"synapse-parent\"], priority=\"high\")\n\n# Konkretne zadanie (tagi łączą z podprojektem)\nstore(\"project\", \"task_docs_loader\", \"Implement docs-loader.ts\",\n      tags=[\"synapse\", \"docs\", \"task\"], priority=\"normal\")\n```\n\nLLM może wtedy wyszukać `q=synapse+docs`, aby znaleźć wszystkie powiązane\nwspomnienia.\n\n## Wzorzec: dziennik decyzji\n\nZapisywać decyzje z uzasadnieniem, aby LLM nie kwestionował ich ponownie:\n\n```python\nstore(\"fact\", \"decision_postgres_over_sqlite\",\n      \"Chose PostgreSQL over SQLite for production. Reason: concurrent writes, \"\n      \"FTS5 native support, better backup story. Date: 2026-06-15. Decided by: Michael.\",\n      tags=[\"decision\", \"database\", \"postgres\", \"sqlite\"],\n      priority=\"high\")\n```\n\n## Wzorzec: unikanie błędów\n\nZapisywać błędy z konkretnymi instrukcjami unikania:\n\n```python\nstore(\"mistake\", \"mistake_forget_version_bump\",\n      \"Forgot to bump package.json version after changes. npm publish failed. \"\n      \"FIX: Always run `npm version patch` before pushing. \"\n      \"CI fails with 'version already exists' if you forget.\",\n      tags=[\"npm\", \"ci\", \"publish\", \"version\"],\n      priority=\"high\")\n```\n\n## Antywzorce do unikania\n\n> [!WARNING]\n> - **Zapisywanie logów konwersacji** — system czatu to obsługuje\n> - **Zapisywanie całych plików** — użyć magazynu skryptów lub zewnętrznego magazynu\n> - **Zapisywanie stanu efemerycznego** — użyć zmiennych\n> - **Zapisywanie sekretów** — użyć zmiennych środowiskowych\n> - **Duplikowanie wspomnień** — używać stabilnych kluczy\n> - **Nadmiarowe tagowanie** — 2-5 tagów na wspomnienie jest optymalne\n> - **Wszystko jest krytyczne** — być realistycznym z priorytetami\n\n## Następne kroki\n\n- [Memory API](/docs/api/memory)\n- [Trwały agent LLM](/docs/guides/persistent-llm-agent)\n- [Strategia tagowania pamięci](/docs/llm-cookbook/memory-tagging-strategy)\n","content_html":"<h1>Najlepsze praktyki pamięci</h1>\n<p>Sposób ustrukturyzowania wspomnień determinuje ich użyteczność. Ten przewodnik\nobejmuje wzorce kategoryzowania, tagowania i priorytetyzowania wspomnień, aby\nLLM mógł przypomnieć właściwą informację we właściwym czasie.</p>\n<h2>Kategorie: wybierać najbardziej konkretną</h2>\n<table>\n<thead>\n<tr>\n<th>Kategoria</th>\n<th>Użyć dla</th>\n<th>Przykład</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>identity</code></td>\n<td>Imię użytkownika, rola, dane kontaktowe</td>\n<td><code>&quot;user_name&quot;: &quot;Michael Schäfer&quot;</code></td>\n</tr>\n<tr>\n<td><code>preference</code></td>\n<td>Sympatie, antypatie, styl pracy</td>\n<td><code>&quot;communication&quot;: &quot;Prefers concise responses&quot;</code></td>\n</tr>\n<tr>\n<td><code>fact</code></td>\n<td>Weryfikowalne fakty</td>\n<td><code>&quot;office_location&quot;: &quot;Berlin, Germany&quot;</code></td>\n</tr>\n<tr>\n<td><code>project</code></td>\n<td>Status projektu, decyzje</td>\n<td><code>&quot;project_synapse&quot;: &quot;v1.5.0 deployed&quot;</code></td>\n</tr>\n<tr>\n<td><code>skill</code></td>\n<td>Umiejętności użytkownika</td>\n<td><code>&quot;skill_python&quot;: &quot;Advanced, 10+ years&quot;</code></td>\n</tr>\n<tr>\n<td><code>mistake</code></td>\n<td>Błędy z przeszłości do uniknięcia</td>\n<td><code>&quot;mistake_npm_version&quot;: &quot;Always bump version&quot;</code></td>\n</tr>\n<tr>\n<td><code>context</code></td>\n<td>Kontekst istotny dla sesji</td>\n<td><code>&quot;current_focus&quot;: &quot;Working on docs system&quot;</code></td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>Różne notatki</td>\n<td><code>&quot;note_idea&quot;: &quot;Try Redis for caching&quot;</code></td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-ok\">W razie wątpliwości używać `fact` dla weryfikowalnych informacji i `note` dla\nreszty. Nie nadużywać kategoryzacji — lepszy jasny `fact` niż mylący `context`.</div><h2>Klucze: znaczące identyfikatory</h2>\n<p>Pole <code>key</code> jest identyfikatorem wspomnienia. Używać znaczących, stabilnych kluczy:</p>\n<p><strong>Dobre klucze:</strong></p>\n<ul>\n<li><code>user_name</code></li>\n<li><code>project_synapse_status</code></li>\n<li><code>preference_communication_style</code></li>\n<li><code>mistake_npm_version_bump</code></li>\n</ul>\n<p><strong>Złe klucze:</strong></p>\n<ul>\n<li><code>mem_001</code> (nie znaczący)</li>\n<li><code>temp</code> (nie opisowy)</li>\n<li><code>2026-06-27-note</code> (data nie pomaga w recall)</li>\n</ul>\n<h3>Konwencje nazewnictwa kluczy</h3>\n<ul>\n<li><code>snake_case</code> (małe litery z podkreśleniami)</li>\n<li>Prefiksować kategorią: <code>preference_*</code>, <code>project_*</code>, <code>mistake_*</code></li>\n<li>Używać opisowych rzeczowników, nie czasowników</li>\n<li>Utrzymywać poniżej 50 znaków</li>\n</ul>\n<h2>Tagi: do wyszukiwania i filtrowania</h2>\n<p>Tagi umożliwiają szybkie filtrowanie i wyszukiwanie. Dodać 2-5 tagów na\nwspomnienie:</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;category&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;project&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;key&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;project_synapse_status&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;content&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;Synapse v1.5.0 deployed. Next: v1.6.0 with docs system.&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;tags&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;synapse&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;deployment&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;status&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;v1.5.0&quot;</span><span class=\"hljs-punctuation\">]</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h3>Wzorce tagów</h3>\n<ul>\n<li><strong>Nazwy projektów</strong>: <code>synapse</code>, <code>synapse-mcp</code>, <code>synapse-chat</code></li>\n<li><strong>Tematy</strong>: <code>deployment</code>, <code>ci</code>, <code>database</code>, <code>auth</code></li>\n<li><strong>Status</strong>: <code>active</code>, <code>completed</code>, <code>blocked</code></li>\n<li><strong>Wskaźniki priorytetu</strong>: <code>urgent</code>, <code>long-term</code></li>\n</ul>\n<div class=\"callout callout-note\">Tagi są niewrażliwe na wielkość liter. Używać małych liter dla spójności.</div><h2>Priorytety: być realistycznym</h2>\n<table>\n<thead>\n<tr>\n<th>Priorytet</th>\n<th>Użyć dla</th>\n<th>% wspomnień</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>critical</code></td>\n<td>Tożsamość użytkownika, informacje prawne, decyzje nieodwracalne</td>\n<td>około 5%</td>\n</tr>\n<tr>\n<td><code>high</code></td>\n<td>Aktywne projekty, ważne preferencje</td>\n<td>około 20%</td>\n</tr>\n<tr>\n<td><code>normal</code></td>\n<td>Większość faktów, notatek, kontekstu</td>\n<td>około 65%</td>\n</tr>\n<tr>\n<td><code>low</code></td>\n<td>Efemeryczne, warto wiedzieć</td>\n<td>około 10%</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-warn\">Nie oznaczać wszystkiego jako `critical`. Jeśli wszystko jest krytyczne, nic\nnie jest. Zarezerwować `critical` dla rzeczy, których zapomnienie wyrządziłoby\nrealną szkodę.</div><h2>Kiedy zapisywać, a kiedy nie</h2>\n<h3>Zawsze zapisywać</h3>\n<ul>\n<li>Tożsamość użytkownika (imię, e-mail, rola)</li>\n<li>Długoterminowe preferencje</li>\n<li>Decyzje projektowe i ich uzasadnienie</li>\n<li>Przeszłe błędy i wyciągnięte lekcje</li>\n<li>Zobowiązania względem użytkownika</li>\n</ul>\n<h3>Nie zapisywać</h3>\n<ul>\n<li>Stan przejściowy (użyć zmiennych)</li>\n<li>Historię konwersacji dosłownie (system czatu to obsługuje)</li>\n<li>Dane wrażliwe (hasła, klucze API)</li>\n<li>Faktory łatwo wyprowadzalne (aktualna data, zawartość plików)</li>\n<li>Kontekst efemeryczny (użyć kategorii <code>context</code> z niskim priorytetem)</li>\n</ul>\n<h2>Aktualizacja wspomnień</h2>\n<p>POST <code>/memory</code> z tym samym <code>category</code> + <code>key</code> aktualizuje istniejące wspomnienie:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Początkowy zapis</span>\nstore(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;project_synapse_status&quot;</span>, <span class=\"hljs-string\">&quot;v1.4.0 deployed&quot;</span>, priority=<span class=\"hljs-string\">&quot;high&quot;</span>)\n\n<span class=\"hljs-comment\"># Później: aktualizacja tym samym kluczem</span>\nstore(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;project_synapse_status&quot;</span>, <span class=\"hljs-string\">&quot;v1.5.0 deployed. CI green.&quot;</span>, priority=<span class=\"hljs-string\">&quot;high&quot;</span>)</code></pre><div class=\"callout callout-ok\">Używać stabilnych kluczy, aby aktualizować bez tworzenia duplikatów. LLM\npowinien ponownie POSTować ten sam klucz przy zmianie informacji, a nie\ntworzyć nowe wspomnienia.</div><h2>Cykl życia wspomnienia</h2>\n<pre><code class=\"hljs language-plaintext\">Create → Active → Stale → Archive → Delete</code></pre><ul>\n<li><strong>Create</strong>: POST /memory z pełnym kontekstem</li>\n<li><strong>Active</strong>: Częsty recall, aktualizacja w razie potrzeby</li>\n<li><strong>Stale</strong>: Nadal istotne, ale nieaktywnie używane (obniżyć priorytet?)</li>\n<li><strong>Archive</strong>: Ustawić priorytet na <code>low</code>, zachować dla odniesienia historycznego</li>\n<li><strong>Delete</strong>: DELETE /memory/:id, gdy już nieistotne</li>\n</ul>\n<h3>Okresowe czyszczenie</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Znalezienie wspomnień nieaktualizowanych od 90 dni</span>\nold_memories = requests.get(\n    <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory/search?q=*&quot;</span>,\n    headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{KEY}</span>&quot;</span>}\n)\n\n<span class=\"hljs-keyword\">for</span> mem <span class=\"hljs-keyword\">in</span> old_memories[<span class=\"hljs-string\">&quot;results&quot;</span>]:\n    <span class=\"hljs-keyword\">if</span> is_stale(mem, days=<span class=\"hljs-number\">90</span>):\n        <span class=\"hljs-comment\"># Albo usunąć, albo obniżyć priorytet</span>\n        <span class=\"hljs-keyword\">if</span> is_obsolete(mem):\n            delete_memory(mem[<span class=\"hljs-string\">&quot;id&quot;</span>])\n        <span class=\"hljs-keyword\">else</span>:\n            update_memory(mem[<span class=\"hljs-string\">&quot;id&quot;</span>], priority=<span class=\"hljs-string\">&quot;low&quot;</span>)</code></pre><h2>Wzorzec: dziedziczenie pamięci</h2>\n<p>Dla hierarchicznego kontekstu (projekt → podprojekt → zadanie):</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Projekt nadrzędny</span>\nstore(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;project_synapse&quot;</span>, <span class=\"hljs-string\">&quot;Main Synapse project&quot;</span>, \n      tags=[<span class=\"hljs-string\">&quot;synapse&quot;</span>, <span class=\"hljs-string\">&quot;parent&quot;</span>], priority=<span class=\"hljs-string\">&quot;high&quot;</span>)\n\n<span class=\"hljs-comment\"># Podprojekt (tagi łączą z nadrzędnym)</span>\nstore(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;project_synapse_docs&quot;</span>, <span class=\"hljs-string\">&quot;Docs system for Synapse&quot;</span>,\n      tags=[<span class=\"hljs-string\">&quot;synapse&quot;</span>, <span class=\"hljs-string\">&quot;docs&quot;</span>, <span class=\"hljs-string\">&quot;synapse-parent&quot;</span>], priority=<span class=\"hljs-string\">&quot;high&quot;</span>)\n\n<span class=\"hljs-comment\"># Konkretne zadanie (tagi łączą z podprojektem)</span>\nstore(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;task_docs_loader&quot;</span>, <span class=\"hljs-string\">&quot;Implement docs-loader.ts&quot;</span>,\n      tags=[<span class=\"hljs-string\">&quot;synapse&quot;</span>, <span class=\"hljs-string\">&quot;docs&quot;</span>, <span class=\"hljs-string\">&quot;task&quot;</span>], priority=<span class=\"hljs-string\">&quot;normal&quot;</span>)</code></pre><p>LLM może wtedy wyszukać <code>q=synapse+docs</code>, aby znaleźć wszystkie powiązane\nwspomnienia.</p>\n<h2>Wzorzec: dziennik decyzji</h2>\n<p>Zapisywać decyzje z uzasadnieniem, aby LLM nie kwestionował ich ponownie:</p>\n<pre><code class=\"hljs language-python\">store(<span class=\"hljs-string\">&quot;fact&quot;</span>, <span class=\"hljs-string\">&quot;decision_postgres_over_sqlite&quot;</span>,\n      <span class=\"hljs-string\">&quot;Chose PostgreSQL over SQLite for production. Reason: concurrent writes, &quot;</span>\n      <span class=\"hljs-string\">&quot;FTS5 native support, better backup story. Date: 2026-06-15. Decided by: Michael.&quot;</span>,\n      tags=[<span class=\"hljs-string\">&quot;decision&quot;</span>, <span class=\"hljs-string\">&quot;database&quot;</span>, <span class=\"hljs-string\">&quot;postgres&quot;</span>, <span class=\"hljs-string\">&quot;sqlite&quot;</span>],\n      priority=<span class=\"hljs-string\">&quot;high&quot;</span>)</code></pre><h2>Wzorzec: unikanie błędów</h2>\n<p>Zapisywać błędy z konkretnymi instrukcjami unikania:</p>\n<pre><code class=\"hljs language-python\">store(<span class=\"hljs-string\">&quot;mistake&quot;</span>, <span class=\"hljs-string\">&quot;mistake_forget_version_bump&quot;</span>,\n      <span class=\"hljs-string\">&quot;Forgot to bump package.json version after changes. npm publish failed. &quot;</span>\n      <span class=\"hljs-string\">&quot;FIX: Always run `npm version patch` before pushing. &quot;</span>\n      <span class=\"hljs-string\">&quot;CI fails with &#x27;version already exists&#x27; if you forget.&quot;</span>,\n      tags=[<span class=\"hljs-string\">&quot;npm&quot;</span>, <span class=\"hljs-string\">&quot;ci&quot;</span>, <span class=\"hljs-string\">&quot;publish&quot;</span>, <span class=\"hljs-string\">&quot;version&quot;</span>],\n      priority=<span class=\"hljs-string\">&quot;high&quot;</span>)</code></pre><h2>Antywzorce do unikania</h2>\n<div class=\"callout callout-warn\"></div><h2>Następne kroki</h2>\n<ul>\n<li><a href=\"/docs/api/memory\">Memory API</a></li>\n<li><a href=\"/docs/guides/persistent-llm-agent\">Trwały agent LLM</a></li>\n<li><a href=\"/docs/llm-cookbook/memory-tagging-strategy\">Strategia tagowania pamięci</a></li>\n</ul>\n","urls":{"html":"/docs/guides/memory-best-practices","text":"/docs/guides/memory-best-practices?format=text","json":"/docs/guides/memory-best-practices?format=json","llm":"/docs/guides/memory-best-practices?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}