Back to blog

Memory Trong AI Coding Assistant: Cái Gì Tồn Tại, Cái Gì Không

aisoftware-engineeringproductivityvibe-codingopinion
Memory Trong AI Coding Assistant: Cái Gì Tồn Tại, Cái Gì Không

Bạn dành một tiếng vào đầu mỗi session mới để giải thích lại những điều tương tự cho AI coding assistant:

"Project này dùng repository pattern. Đừng dùng raw query trong handler. Tất cả API response theo format này. Chúng ta prefer explicit error return thay vì exception."

AI gật đầu, nhớ trong suốt session, rồi quên sạch ngay khi bạn đóng cửa sổ.

Hôm sau. Briefing tương tự. Gật đầu tương tự. Quên tương tự.

Đây không phải giới hạn của intelligence của AI — đây là giới hạn của memory architecture của nó. Một khi bạn hiểu memory của AI thực sự hoạt động như thế nào, bạn có thể ngừng lặp lại bản thân và bắt đầu xây dựng một tool thực sự hiểu codebase của bạn.


Bốn Loại Memory Của AI

AI coding assistant không có một "memory" duy nhất. Chúng có nhiều memory system riêng biệt, mỗi cái có thuộc tính, lifetime, và cơ chế khác nhau.

1. In-Context Memory (Volatile)

Đây là sliding window mà chúng ta đã thảo luận trong bài viết về context. Mọi thứ AI biết trong một session đều sống ở đây — cuộc trò chuyện, file được paste, tool output, response của chính nó. Nó nhanh, phong phú, và hoàn toàn volatile: khi session kết thúc, nó biến mất.

Lifetime: Một session
Những gì đưa vào: Mọi thứ bạn nói và chia sẻ
Những gì mất đi: Mọi thứ, khi session đóng
Quyền kiểm soát của bạn: Cao — bạn quyết định paste gì và nói gì

In-context memory là working memory của AI. Mạnh nhưng tạm thời. Treat nó là cơ chế memory duy nhất giống như chỉ dùng RAM mà không có disk storage.

2. Injected Memory (Persistent, Thủ Công)

Đây là dạng memory thực tế và bị underuse nhất trong AI coding workflow. Nó hoạt động bằng cách đặt instruction và context vào các file mà tool tự động đọc khi bắt đầu mỗi session — trước khi bạn gõ một ký tự.

Các tool khác nhau dùng tên file khác nhau:

ToolFile
Claude CodeCLAUDE.md
Cursor.cursorrules
GitHub Copilot.github/copilot-instructions.md
Windsurf.windsurfrules
AiderCONVENTIONS.md

Các file này được inject vào system prompt khi bắt đầu session. AI đọc chúng trước mọi thứ khác. Đây là thứ gần nhất với permanent memory trong hầu hết AI coding workflow.

Lifetime: Vĩnh viễn (cho đến khi bạn chỉnh sửa file)
Những gì đưa vào: Bất cứ thứ gì bạn viết vào file
Những gì mất đi: Không có gì — nó persist qua các session
Quyền kiểm soát của bạn: Toàn quyền — bạn là tác giả

3. External Memory (Persistent, Tự Động)

Một số AI coding tool nâng cao kết nối với external retrieval system — vector database, code search index, embedding store. Khi bạn đặt câu hỏi, tool tìm kiếm trong external store này và tự động pull context liên quan vào session.

Ví dụ:

  • Codebase indexing trong Cursor hay Copilot — semantic search toàn bộ repo của bạn
  • Knowledge base trong enterprise AI tool — các quyết định trong quá khứ, architecture doc, runbook
  • Embeddings-based search — tìm đúng file hay function theo nghĩa, không phải keyword chính xác

External memory có thể chứa lượng thông tin tùy ý — lớn hơn nhiều so với bất kỳ context window nào. Sự đánh đổi là chất lượng retrieval: bạn nhận lại những gì retrieval system cho là liên quan, không nhất thiết là những gì bạn thực sự cần.

Lifetime: Miễn là index còn tồn tại
Những gì đưa vào: File được index, document, code
Những gì mất đi: Chunk được retrieve, không phải toàn bộ nội dung
Quyền kiểm soát của bạn: Trung bình — bạn kiểm soát những gì được index

4. Agent Memory (Persistent, Do AI Ghi)

Đây là loại mới nhất và thú vị nhất. Trong agentic workflow, chính AI viết ghi chú vào file tồn tại qua các session — thực chất là tạo ra memory của riêng mình.

Claude Code làm điều này với hệ thống /memory. Agent có thể viết observation, quyết định, và fact đã học vào markdown file. Các session tương lai đọc các file này và tiếp tục từ nơi agent trước dừng lại.

Lifetime: Miễn là file còn tồn tại
Những gì đưa vào: Bất cứ điều gì agent quyết định ghi lại
Những gì mất đi: Ghi chú của chính agent, khi đọc lần sau
Quyền kiểm soát của bạn: Thấp đến trung bình — bạn review và chỉnh sửa, nhưng AI viết


Tại Sao Injected Memory Là Công Cụ Mạnh Nhất Của Bạn Ngay Lúc Này

External memory và agent memory mạnh nhưng cần setup đáng kể hoặc tool cụ thể. Injected memory — một plain text file trong repo của bạn — có thể dùng ngay hôm nay, trong mọi AI coding tool, không cần infrastructure.

Và hầu hết developer không dùng nó.

Đây là những gì một CLAUDE.md (hay tương đương) được viết tốt mang lại cho bạn:

Loại bỏ ritual briefing. Không còn phải dành mười phút đầu mỗi session giải thích lại architecture của bạn. AI đã biết rồi.

Giữ AI suggestion đúng hướng. Khi AI biết convention của bạn, nó generate code phù hợp với codebase thay vì code trông như câu trả lời Stack Overflow từ một project khác.

Sống sót qua team turnover. Developer mới onboard với AI? File injected memory dạy AI các rule của project. AI dạy developer mới. File context trở thành living documentation.

Tích lũy theo thời gian. Mỗi khi bạn khám phá ra một constraint mới hay đưa ra một quyết định quan trọng, bạn thêm nó vào file. AI ngày càng thông minh hơn về project cụ thể của bạn.


Nên Viết Gì Trong Memory File

Sai lầm phổ biến là viết một memory file mô tả codebase làm gì. Đó là documentation — và AI có thể đọc source file của bạn cho việc đó.

Những gì AI không thể suy ra từ source file: tại sao quyết định được đưa ra, những gì cần tránh, và những gì bạn quan tâm.

Nội Dung Có Giá Trị Cao

Quyết định kiến trúc với lý do:

## Architecture
- Repository pattern cho tất cả database access. Không có raw SQL trong handler.
  Lý do: chúng ta từng có production incident từ handler làm direct query —
  abstraction layer cho chúng ta một chỗ để add logging và retry.
- Tất cả error được return as value, không phải throw as exception.
  Lý do: nhất quán với Go-influenced error handling style của chúng ta.

Convention không rõ ràng từ code:

## Conventions
- API response shape: { data: T, error: string | null, meta: { page, total } }
- Date formatting: luôn dùng ISO 8601. Không bao giờ dùng locale-specific format.
- Feature flag nằm trong lib/flags.ts. Đừng bao giờ hardcode feature toggle inline.

Những gì cần tránh:

## Do Not
- Đừng dùng useEffect để fetch data. Chúng ta dùng React Query.
- Đừng thêm dependency mới mà không check với team trước.
- Đừng dùng UserContext trực tiếp — dùng hook useCurrentUser().

Trạng thái project hiện tại:

## Current Work
- Đang migrate từ REST sang tRPC. Endpoint mới dùng tRPC. Endpoint cũ đang migrate dần.
- Auth đang được refactor. Đừng đụng vào auth/legacy/ — nó đang được thay thế.

Nội Dung Có Giá Trị Thấp (Bỏ Qua)

  • Mô tả cấu trúc file — AI có thể đọc directory tree của bạn
  • Số version của library — không liên quan đến code generation
  • Cách chạy project — đặt trong README
  • Best practice chung — AI đã biết những điều này rồi

Xây Dựng Memory Evolve Cùng Project

Một memory file được viết một lần và không bao giờ update là một memory file nói dối.

Các team tốt nhất treat injected memory file như một living document — được update khi project evolve, được review định kỳ, và được prune khi thông tin trở nên stale.

Một workflow đơn giản:

Khi nào update memory file:

  • Sau bất kỳ quyết định kiến trúc nào
  • Khi bạn từ chối một AI suggestion vì lý do project-specific
  • Khi bạn phát hiện một constraint mà AI cứ hiểu sai
  • Sau khi onboard developer mới (họ thấy gì khó hiểu?)
  • Khi deprecated thứ gì đó mà AI vẫn cứ gợi ý

Khi nào prune memory file:

  • Khi một constraint không còn áp dụng nữa
  • Khi bạn đã migrate khỏi thứ gì đó bạn từng cảnh báo về
  • Khi file trở nên dài đến mức những mục quan trọng bị mất

Giữ nó tập trung. Một memory file 50 dòng mà AI đọc cẩn thận có giá trị hơn file 500 dòng mà nó lướt qua.


Agent Memory: Để AI Tự Nhớ

Trong hệ thống memory của Claude Code, agent có thể ghi vào memory file sau một session. Bạn có thể prompt nó trực tiếp:

"Hãy nhớ rằng chúng ta đang dùng optimistic update trong module này — đừng gợi ý thêm loading state cho user interaction."

Agent ghi điều đó vào memory file. Session tiếp theo, nó đọc file trước khi bạn nói bất cứ điều gì. Bạn không bao giờ lặp lại nữa.

Điều này mạnh nhưng cần oversight. AI-written memory có thể:

  • Capture subtlety mà bạn sẽ quên tự viết xuống
  • Tích lũy qua nhiều session mà không cần nỗ lực thủ công
  • Đôi khi ghi lại thứ gì đó sai hoặc outdated

Review AI-written memory định kỳ giống như bạn review ghi chú của junior developer — với trust nhưng có verification.


Memory Qua Các Tool: So Sánh Thực Tế

Memory TypeClaude CodeCursorCopilotAider
Injected fileCLAUDE.md.cursorrulescopilot-instructions.mdCONVENTIONS.md
Codebase indexingQua MCP toolBuilt-inBuilt-inQua plugin
Agent self-writeCó (/memory)KhôngKhôngKhông
Cross-session persistenceQua fileQua fileQua fileQua file

Tất cả đều hỗ trợ injected memory. Đó là baseline của bạn. Mọi thứ khác là một layer bên trên.


Mental Model: RAM vs Disk

Mental model gọn nhất cho AI memory:

  • In-context memory = RAM — nhanh, đủ lớn cho công việc hiện tại, volatile
  • Injected memory = SSD — luôn có sẵn khi khởi động, bạn quản lý những gì trên đó
  • External memory = NAS/cloud storage — capacity khổng lồ, retrieval chậm hơn
  • Agent memory = log file — được ghi tự động, cần review định kỳ

Một chương trình chỉ dùng RAM và không bao giờ persist ra disk sẽ mất tất cả state khi restart. Một AI chỉ dùng in-context memory và không có injected file sẽ mất tất cả kiến thức về project mỗi session.

Bạn sẽ không build một chương trình như vậy. Đừng build AI workflow của bạn theo cách đó.


Tóm Tắt và Bài Học Chính

✅ AI coding assistant có bốn loại memory: in-context, injected, external, và agent-written
✅ In-context memory volatile — nó biến mất cùng với session
✅ Injected memory (CLAUDE.md, .cursorrules, v.v.) persistent, thủ công, và có sẵn trong mọi tool ngay hôm nay
✅ Viết memory file với quyết định + lý do + những gì cần tránh — không phải mô tả code làm gì
✅ Một memory file 50 dòng tập trung còn hơn một file 500 dòng toàn diện
✅ Treat memory file như living document — update sau quyết định, prune khi stale
✅ Agent self-written memory tích lũy theo thời gian — review định kỳ
✅ Mental model: in-context = RAM, injected = SSD, external = cloud storage, agent = log file


Suy Nghĩ Cuối

Mỗi tiếng bạn dành để lặp lại bản thân với AI là một tiếng bạn có thể dành để viết một memory file tốt.

AI sẽ không tự nhớ. Đó không phải là lỗi — đó là architecture. Công việc của bạn là xây dựng persistence layer làm cho điều đó không còn quan trọng nữa.

Viết file. Giữ nó current. Ngừng briefing. Bắt đầu build.


Liên quan: Context Là Tất Cả Trong AI Coding Assistant — bài viết đồng hành về quản lý in-session context window.

📬 Đăng ký nhận bản tin

Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.

💬 Comments

Đăng nhập để bình luận

Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.