{"title":"Thực hành tốt nhất về bộ nhớ","slug":"memory-best-practices","category":"guides","summary":"Cách cấu trúc bộ nhớ cho thu hồi hiệu quả — danh mục, key, tag, mức ưu tiên.","audience":["human","llm"],"tags":["guide","memory","best-practices","patterns"],"difficulty":"intermediate","updated":"2026-06-27","word_count":847,"read_minutes":4,"lang":"vi","translated":true,"requested_lang":"vi","content_markdown":"\n# Thực hành tốt nhất về bộ nhớ\n\nCách bạn cấu trúc bộ nhớ xác định độ hữu ích của chúng. Hướng dẫn này bao phủ\nmẫu cho việc phân danh mục, gắn tag và ưu tiên bộ nhớ để LLM có thể thu hồi\nthông tin đúng vào thời điểm đúng.\n\n## Danh mục: Chọn cái cụ thể nhất\n\n| Danh mục | Dùng cho | Ví dụ |\n|----------|---------|---------|\n| `identity` | Tên người dùng, vai trò, thông tin liên hệ | `\"user_name\": \"Michael Schäfer\"` |\n| `preference` | Thích, không thích, phong cách làm việc | `\"communication\": \"Prefers concise responses\"` |\n| `fact` | Sự kiện có thể kiểm chứng | `\"office_location\": \"Berlin, Germany\"` |\n| `project` | Trạng thái dự án, quyết định | `\"project_synapse\": \"v1.5.0 deployed\"` |\n| `skill` | Kỹ năng người dùng | `\"skill_python\": \"Advanced, 10+ years\"` |\n| `mistake` | Lỗi quá khứ để tránh | `\"mistake_npm_version\": \"Always bump version\"` |\n| `context` | Ngữ cảnh liên quan phiên | `\"current_focus\": \"Working on docs system\"` |\n| `note` | Ghi chú linh tinh | `\"note_idea\": \"Try Redis for caching\"` |\n\n> [!TIP]\n> Khi nghi ngờ, sử dụng `fact` cho thông tin có thể kiểm chứng và `note` cho\n> mọi thứ khác. Không phân danh mục quá mức — tốt hơn có một `fact` rõ ràng\n> hơn một `context` gây nhầm lẫn.\n\n## Key: Định danh ý nghĩa\n\nTrường `key` là định danh của bộ nhớ. Sử dụng key ý nghĩa, ổn định:\n\n**Key tốt:**\n- `user_name`\n- `project_synapse_status`\n- `preference_communication_style`\n- `mistake_npm_version_bump`\n\n**Key xấu:**\n- `mem_001` (không ý nghĩa)\n- `temp` (không mô tả)\n- `2026-06-27-note` (ngày không giúp thu hồi)\n\n### Quy ước đặt tên key\n\n- `snake_case` (chữ thường với dấu gạch dưới)\n- Tiền tố với danh mục: `preference_*`, `project_*`, `mistake_*`\n- Sử dụng danh từ mô tả, không động từ\n- Giữ dưới 50 ký tự\n\n## Tag: Dành cho tìm kiếm và lọc\n\nTag cho phép lọc và tìm kiếm nhanh. Thêm 2-5 tag mỗi bộ nhớ:\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### Mẫu tag\n\n- **Tên dự án**: `synapse`, `synapse-mcp`, `synapse-chat`\n- **Chủ đề**: `deployment`, `ci`, `database`, `auth`\n- **Trạng thái**: `active`, `completed`, `blocked`\n- **Chỉ báo ưu tiên**: `urgent`, `long-term`\n\n> [!NOTE]\n> Tag không phân biệt chữ hoa chữ thường. Sử dụng chữ thường để nhất quán.\n\n## Mức ưu tiên: Thực tế\n\n| Ưu tiên | Dùng cho | % Bộ nhớ |\n|----------|---------|---------------|\n| `critical` | Nhận dạng người dùng, thông tin pháp lý, quyết định không thể đảo ngược | ~5% |\n| `high` | Dự án đang hoạt động, sở thích quan trọng | ~20% |\n| `normal` | Hầu hết sự kiện, ghi chú, ngữ cảnh | ~65% |\n| `low` | Tạm thời, tốt nếu biết | ~10% |\n\n> [!WARNING]\n> Không đánh dấu mọi thứ `critical`. Nếu mọi thứ là critical, không có gì là\n> critical cả. Dự trữ `critical` cho những thứ sẽ gây hại thực sự nếu quên.\n\n## Khi nào lưu so với không lưu\n\n### Luôn lưu\n\n- Nhận dạng người dùng (tên, email, vai trò)\n- Sở thích dài hạn\n- Quyết định dự án và lý do\n- Lỗi quá khứ và bài học\n- Cam kết với người dùng\n\n### Không lưu\n\n- Trạng thái tạm thời (sử dụng biến thay thế)\n- Lịch sử hội thoại nguyên văn (hệ thống chat xử lý điều này)\n- Dữ liệu nhạy cảm (mật khẩu, API key)\n- Sự kiện dễ dàng suy ra (ngày hiện tại, nội dung tệp)\n- Ngữ cảnh tạm thời (sử dụng danh mục `context` với ưu tiên thấp)\n\n## Cập nhật bộ nhớ\n\nPOST `/memory` với cùng `category` + `key` cập nhật bộ nhớ hiện có:\n\n```python\n# Initial store\nstore(\"project\", \"project_synapse_status\", \"v1.4.0 deployed\", priority=\"high\")\n\n# Later: update with same key\nstore(\"project\", \"project_synapse_status\", \"v1.5.0 deployed. CI green.\", priority=\"high\")\n```\n\n> [!TIP]\n> Sử dụng key ổn định để bạn có thể cập nhật mà không tạo bản trùng lặp. LLM\n> nên POST lại cùng key khi thông tin thay đổi, không tạo bộ nhớ mới.\n\n## Vòng đời bộ nhớ\n\n```\nCreate → Active → Stale → Archive → Delete\n```\n\n- **Create**: POST /memory với ngữ cảnh đầy đủ\n- **Active**: Thu hồi thường xuyên, cập nhật khi cần\n- **Stale**: Vẫn liên quan nhưng không được sử dụng tích cực (ưu tiên thấp hơn?)\n- **Archive**: Đặt ưu tiên thành `low`, giữ cho tham chiếu lịch sử\n- **Delete**: DELETE /memory/:id khi không còn liên quan\n\n### Dọn dẹp định kỳ\n\n```python\n# Find memories not updated in 90 days\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        # Either delete or lower priority\n        if is_obsolete(mem):\n            delete_memory(mem[\"id\"])\n        else:\n            update_memory(mem[\"id\"], priority=\"low\")\n```\n\n## Mẫu: Kế thừa bộ nhớ\n\nCho ngữ cảnh phân cấp (dự án → dự án con → tác vụ):\n\n```python\n# Parent project\nstore(\"project\", \"project_synapse\", \"Main Synapse project\", \n      tags=[\"synapse\", \"parent\"], priority=\"high\")\n\n# Sub-project (tags link to parent)\nstore(\"project\", \"project_synapse_docs\", \"Docs system for Synapse\",\n      tags=[\"synapse\", \"docs\", \"synapse-parent\"], priority=\"high\")\n\n# Specific task (tags link to sub-project)\nstore(\"project\", \"task_docs_loader\", \"Implement docs-loader.ts\",\n      tags=[\"synapse\", \"docs\", \"task\"], priority=\"normal\")\n```\n\nLLM có thể sau đó tìm `q=synapse+docs` để tìm tất cả bộ nhớ liên quan.\n\n## Mẫu: Nhật ký quyết định\n\nLưu quyết định với lý do để LLM không tái thẩm lại chúng:\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## Mẫu: Tránh lỗi\n\nLưu lỗi với hướng dẫn tránh cụ thể:\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## Mẫu chống cần tránh\n\n> [!WARNING]\n> - **Lưu nhật ký hội thoại** — hệ thống chat xử lý điều này\n> - **Lưu toàn bộ tệp** — sử dụng script store hoặc lưu trữ bên ngoài\n> - **Lưu trạng thái tạm thời** — sử dụng biến\n> - **Lưu bí mật** — sử dụng biến môi trường\n> - **Trùng lặp bộ nhớ** — sử dụng key ổn định\n> - **Gắn tag quá mức** — 2-5 tag mỗi bộ nhớ là lý tưởng\n> - **Mọi thứ là critical** — thực tế với ưu tiên\n\n## Bước tiếp theo\n\n- [Memory API](/docs/api/memory)\n- [LLM Agent cố định](/docs/guides/persistent-llm-agent)\n- [Chiến lược gắn tag bộ nhớ](/docs/llm-cookbook/memory-tagging-strategy)\n","content_html":"<h1>Thực hành tốt nhất về bộ nhớ</h1>\n<p>Cách bạn cấu trúc bộ nhớ xác định độ hữu ích của chúng. Hướng dẫn này bao phủ\nmẫu cho việc phân danh mục, gắn tag và ưu tiên bộ nhớ để LLM có thể thu hồi\nthông tin đúng vào thời điểm đúng.</p>\n<h2>Danh mục: Chọn cái cụ thể nhất</h2>\n<table>\n<thead>\n<tr>\n<th>Danh mục</th>\n<th>Dùng cho</th>\n<th>Ví dụ</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>identity</code></td>\n<td>Tên người dùng, vai trò, thông tin liên hệ</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>Thích, không thích, phong cách làm việc</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>Sự kiện có thể kiểm chứng</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>Trạng thái dự án, quyết định</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>Kỹ năng người dùng</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>Lỗi quá khứ để tránh</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>Ngữ cảnh liên quan phiên</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>Ghi chú linh tinh</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\">Khi nghi ngờ, sử dụng `fact` cho thông tin có thể kiểm chứng và `note` cho\nmọi thứ khác. Không phân danh mục quá mức — tốt hơn có một `fact` rõ ràng\nhơn một `context` gây nhầm lẫn.</div><h2>Key: Định danh ý nghĩa</h2>\n<p>Trường <code>key</code> là định danh của bộ nhớ. Sử dụng key ý nghĩa, ổn định:</p>\n<p><strong>Key tốt:</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>Key xấu:</strong></p>\n<ul>\n<li><code>mem_001</code> (không ý nghĩa)</li>\n<li><code>temp</code> (không mô tả)</li>\n<li><code>2026-06-27-note</code> (ngày không giúp thu hồi)</li>\n</ul>\n<h3>Quy ước đặt tên key</h3>\n<ul>\n<li><code>snake_case</code> (chữ thường với dấu gạch dưới)</li>\n<li>Tiền tố với danh mục: <code>preference_*</code>, <code>project_*</code>, <code>mistake_*</code></li>\n<li>Sử dụng danh từ mô tả, không động từ</li>\n<li>Giữ dưới 50 ký tự</li>\n</ul>\n<h2>Tag: Dành cho tìm kiếm và lọc</h2>\n<p>Tag cho phép lọc và tìm kiếm nhanh. Thêm 2-5 tag mỗi bộ nhớ:</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>Mẫu tag</h3>\n<ul>\n<li><strong>Tên dự án</strong>: <code>synapse</code>, <code>synapse-mcp</code>, <code>synapse-chat</code></li>\n<li><strong>Chủ đề</strong>: <code>deployment</code>, <code>ci</code>, <code>database</code>, <code>auth</code></li>\n<li><strong>Trạng thái</strong>: <code>active</code>, <code>completed</code>, <code>blocked</code></li>\n<li><strong>Chỉ báo ưu tiên</strong>: <code>urgent</code>, <code>long-term</code></li>\n</ul>\n<div class=\"callout callout-note\">Tag không phân biệt chữ hoa chữ thường. Sử dụng chữ thường để nhất quán.</div><h2>Mức ưu tiên: Thực tế</h2>\n<table>\n<thead>\n<tr>\n<th>Ưu tiên</th>\n<th>Dùng cho</th>\n<th>% Bộ nhớ</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>critical</code></td>\n<td>Nhận dạng người dùng, thông tin pháp lý, quyết định không thể đảo ngược</td>\n<td>~5%</td>\n</tr>\n<tr>\n<td><code>high</code></td>\n<td>Dự án đang hoạt động, sở thích quan trọng</td>\n<td>~20%</td>\n</tr>\n<tr>\n<td><code>normal</code></td>\n<td>Hầu hết sự kiện, ghi chú, ngữ cảnh</td>\n<td>~65%</td>\n</tr>\n<tr>\n<td><code>low</code></td>\n<td>Tạm thời, tốt nếu biết</td>\n<td>~10%</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-warn\">Không đánh dấu mọi thứ `critical`. Nếu mọi thứ là critical, không có gì là\ncritical cả. Dự trữ `critical` cho những thứ sẽ gây hại thực sự nếu quên.</div><h2>Khi nào lưu so với không lưu</h2>\n<h3>Luôn lưu</h3>\n<ul>\n<li>Nhận dạng người dùng (tên, email, vai trò)</li>\n<li>Sở thích dài hạn</li>\n<li>Quyết định dự án và lý do</li>\n<li>Lỗi quá khứ và bài học</li>\n<li>Cam kết với người dùng</li>\n</ul>\n<h3>Không lưu</h3>\n<ul>\n<li>Trạng thái tạm thời (sử dụng biến thay thế)</li>\n<li>Lịch sử hội thoại nguyên văn (hệ thống chat xử lý điều này)</li>\n<li>Dữ liệu nhạy cảm (mật khẩu, API key)</li>\n<li>Sự kiện dễ dàng suy ra (ngày hiện tại, nội dung tệp)</li>\n<li>Ngữ cảnh tạm thời (sử dụng danh mục <code>context</code> với ưu tiên thấp)</li>\n</ul>\n<h2>Cập nhật bộ nhớ</h2>\n<p>POST <code>/memory</code> với cùng <code>category</code> + <code>key</code> cập nhật bộ nhớ hiện có:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Initial store</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\"># Later: update with same key</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\">Sử dụng key ổn định để bạn có thể cập nhật mà không tạo bản trùng lặp. LLM\nnên POST lại cùng key khi thông tin thay đổi, không tạo bộ nhớ mới.</div><h2>Vòng đời bộ nhớ</h2>\n<pre><code class=\"hljs language-plaintext\">Create → Active → Stale → Archive → Delete</code></pre><ul>\n<li><strong>Create</strong>: POST /memory với ngữ cảnh đầy đủ</li>\n<li><strong>Active</strong>: Thu hồi thường xuyên, cập nhật khi cần</li>\n<li><strong>Stale</strong>: Vẫn liên quan nhưng không được sử dụng tích cực (ưu tiên thấp hơn?)</li>\n<li><strong>Archive</strong>: Đặt ưu tiên thành <code>low</code>, giữ cho tham chiếu lịch sử</li>\n<li><strong>Delete</strong>: DELETE /memory/:id khi không còn liên quan</li>\n</ul>\n<h3>Dọn dẹp định kỳ</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Find memories not updated in 90 days</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\"># Either delete or lower priority</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>Mẫu: Kế thừa bộ nhớ</h2>\n<p>Cho ngữ cảnh phân cấp (dự án → dự án con → tác vụ):</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Parent project</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\"># Sub-project (tags link to parent)</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\"># Specific task (tags link to sub-project)</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 có thể sau đó tìm <code>q=synapse+docs</code> để tìm tất cả bộ nhớ liên quan.</p>\n<h2>Mẫu: Nhật ký quyết định</h2>\n<p>Lưu quyết định với lý do để LLM không tái thẩm lại chúng:</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>Mẫu: Tránh lỗi</h2>\n<p>Lưu lỗi với hướng dẫn tránh cụ thể:</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>Mẫu chống cần tránh</h2>\n<div class=\"callout callout-warn\"></div><h2>Bước tiếp theo</h2>\n<ul>\n<li><a href=\"/docs/api/memory\">Memory API</a></li>\n<li><a href=\"/docs/guides/persistent-llm-agent\">LLM Agent cố định</a></li>\n<li><a href=\"/docs/llm-cookbook/memory-tagging-strategy\">Chiến lược gắn tag bộ nhớ</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"]}