Đây là lý do AI Agent Memory trở thành một thành phần quan trọng khi xây dựng các ứng dụng AI có khả năng tương tác nhiều bước, cá nhân hóa trải nghiệm và thực hiện những nhiệm vụ kéo dài qua nhiều phiên làm việc.
Trong bài viết này, MCNA Technology School sẽ cùng bạn tìm hiểu Short-term Memory, Long-term Memory, cách quản lý ngữ cảnh và cách xây dựng một mô hình bộ nhớ đơn giản bằng Python.
1. AI Agent Memory là gì?
AI Agent Memory là cơ chế giúp một AI Agent lưu trữ, truy xuất và sử dụng lại thông tin từ những tương tác trước đó. Thông tin này có thể là lịch sử hội thoại, trạng thái của một nhiệm vụ, sở thích của người dùng hoặc những dữ kiện cần thiết cho các lần tương tác tiếp theo.
Một mô hình ngôn ngữ lớn (LLM) không mặc nhiên ghi nhớ mọi cuộc trò chuyện trước đây chỉ vì nó đã xử lý chúng. Ứng dụng cần chủ động cung cấp lại ngữ cảnh hoặc sử dụng một cơ chế lưu trữ trạng thái để duy trì tính liên tục.
Theo tài liệu về Memory của LangGraph, có thể phân biệt hai nhóm bộ nhớ chính dựa trên phạm vi truy xuất: Short-term Memory, gắn với một cuộc hội thoại hoặc thread, và Long-term Memory, có thể được sử dụng qua nhiều phiên khác nhau.
Tham khảo: LangGraph – Memory overview.
1.1. Vì sao AI Agent cần Memory?
- Duy trì ngữ cảnh: Agent có thể hiểu các câu hỏi tiếp nối như “Còn phương án thứ hai thì sao?” mà không cần người dùng nhắc lại toàn bộ nội dung.
- Theo dõi nhiệm vụ: Agent có thể biết công việc đang ở bước nào, dữ liệu nào đã được xử lý và bước tiếp theo cần thực hiện.
- Cá nhân hóa trải nghiệm: Hệ thống có thể sử dụng những sở thích hoặc yêu cầu đã được người dùng cho phép lưu lại.
- Giảm thao tác lặp lại: Người dùng không cần cung cấp lại những thông tin phù hợp và còn hiệu lực ở mỗi phiên làm việc.
- Hỗ trợ quy trình dài: Agent có thể tiếp tục công việc sau khi tạm dừng, nếu trạng thái cần thiết đã được lưu trữ bền vững.
1.2. Memory không đồng nghĩa với Context Window
Context Window là lượng thông tin mà mô hình có thể tiếp nhận trong một lần xử lý. Memory là cơ chế của ứng dụng để lưu giữ và truy xuất thông tin cần thiết theo thời gian.
Hai khái niệm có liên quan nhưng không giống nhau. Một ứng dụng có thể lưu hàng nghìn thông điệp trong cơ sở dữ liệu, nhưng không nhất thiết phải đưa toàn bộ chúng vào mỗi yêu cầu gửi đến LLM. Thay vào đó, hệ thống có thể chọn lịch sử gần nhất, bản tóm tắt hoặc một số dữ kiện liên quan để tạo ngữ cảnh phù hợp.
2. Short-term Memory: Bộ nhớ ngắn hạn của AI Agent
Short-term Memory lưu trữ thông tin cần thiết trong phạm vi một phiên hội thoại hoặc một luồng thực thi. Đây thường là nơi quản lý lịch sử trao đổi, trạng thái hiện tại và kết quả trung gian của nhiệm vụ đang thực hiện.
2.1. Short-term Memory lưu trữ những gì?
- Lịch sử tin nhắn giữa người dùng và AI.
- Yêu cầu hiện tại và các điều kiện người dùng đã đưa ra.
- Kết quả từ những công cụ mà Agent đã gọi.
- Trạng thái nhiệm vụ, ví dụ đã đọc file hay chưa, đã phân tích dữ liệu hay chưa.
- Bản tóm tắt cuộc hội thoại khi lịch sử trở nên quá dài.
2.2. Ví dụ thực tế
Giả sử người dùng yêu cầu một AI Agent phân tích dữ liệu bán hàng:
- Lượt 1: “Hãy phân tích file sales_2026.csv.”
- Lượt 2: “Tìm 5 sản phẩm có doanh thu cao nhất.”
- Lượt 3: “Vẽ biểu đồ cho 5 sản phẩm đó.”
Nếu không có cơ chế duy trì trạng thái, Agent có thể không biết “5 sản phẩm đó” đề cập đến kết quả nào hoặc file dữ liệu nào đang được sử dụng. Short-term Memory giúp ứng dụng giữ lại những thông tin cần thiết để nối tiếp quy trình.
2.3. Hạn chế của Short-term Memory
Lịch sử hội thoại thường tăng dần theo số lượt tương tác. Nếu ứng dụng đưa toàn bộ lịch sử vào mỗi yêu cầu, lượng token đầu vào, chi phí và độ trễ có thể tăng. Ngoài ra, lịch sử quá dài có thể chứa nhiều thông tin không còn liên quan đến nhiệm vụ hiện tại.
Các giải pháp thường được sử dụng gồm:
- Giới hạn số lượng tin nhắn gần nhất được giữ trong ngữ cảnh.
- Tóm tắt các lượt hội thoại cũ thành những dữ kiện quan trọng.
- Giữ lại trạng thái nhiệm vụ thay vì toàn bộ nội dung trung gian.
- Truy xuất bổ sung thông tin cũ khi thật sự cần thiết.
Với các framework như LangGraph, trạng thái ngắn hạn có thể được lưu bằng cơ chế checkpoint để khôi phục thread. Chi tiết triển khai phụ thuộc vào framework và hệ thống lưu trữ được lựa chọn.
Tài liệu tham khảo: LangGraph – Add memory.
3. Long-term Memory: Bộ nhớ dài hạn của AI Agent
Long-term Memory lưu giữ thông tin có thể cần sử dụng lại giữa nhiều phiên hội thoại hoặc nhiều lần thực thi. Thay vì chỉ nhớ những gì vừa diễn ra, Agent có thể truy xuất một số thông tin đã được lưu từ trước khi chúng thực sự hữu ích.
3.1. Những loại thông tin nên lưu
- Sở thích đã được người dùng xác nhận, chẳng hạn ngôn ngữ trả lời hoặc định dạng báo cáo mong muốn.
- Thông tin dự án có giá trị sử dụng lâu dài và được phép lưu trữ.
- Các quyết định đã được thống nhất trong một quy trình công việc.
- Kinh nghiệm từ những tác vụ trước, nếu được tổng hợp và kiểm chứng phù hợp.
- Các hướng dẫn hoặc quy tắc nghiệp vụ có thể áp dụng cho nhiều phiên làm việc.
3.2. Ví dụ về Long-term Memory
Giả sử một người thường xuyên sử dụng AI để tạo báo cáo dữ liệu. Trong những phiên trước, người này đã xác nhận rằng họ muốn báo cáo bằng tiếng Việt, có phần kết luận và ưu tiên biểu đồ khi so sánh các nhóm dữ liệu.
Nếu ứng dụng được phép lưu những tùy chọn đó, Agent có thể sử dụng chúng trong phiên tiếp theo mà không cần hỏi lại mỗi lần. Tuy nhiên, hệ thống nên cho phép người dùng xem, cập nhật hoặc xóa thông tin đã lưu khi cần thiết.
3.3. Phân biệt ba dạng thông tin trong Memory
| Loại bộ nhớ | Thông tin lưu trữ | Ví dụ |
|---|---|---|
| Semantic Memory | Các sự kiện và dữ kiện | Người dùng ưu tiên báo cáo bằng tiếng Việt. |
| Episodic Memory | Các sự kiện hoặc trải nghiệm đã xảy ra | Phiên phân tích trước đã phát hiện một nhóm sản phẩm có doanh thu giảm. |
| Procedural Memory | Quy trình hoặc hướng dẫn thực hiện | Quy trình chuẩn để kiểm tra chất lượng dữ liệu trước khi tạo báo cáo. |
Đây là cách phân loại mang tính khái niệm. Một ứng dụng thực tế có thể triển khai các loại thông tin này bằng cấu trúc dữ liệu, cơ sở dữ liệu hoặc những cơ chế khác nhau tùy yêu cầu.
4. Short-term Memory và Long-term Memory khác nhau thế nào?
| Tiêu chí | Short-term Memory | Long-term Memory |
|---|---|---|
| Phạm vi | Một phiên hoặc một thread | Nhiều phiên hoặc nhiều thread được phép chia sẻ dữ liệu |
| Mục tiêu | Duy trì ngữ cảnh và tiến trình hiện tại | Ghi nhớ dữ kiện có giá trị lâu dài |
| Dữ liệu thường gặp | Lịch sử tin nhắn, kết quả trung gian, trạng thái nhiệm vụ | Sở thích, hồ sơ, kiến thức hoặc thông tin dự án |
| Thời gian lưu | Theo vòng đời phiên hoặc chính sách lưu trữ | Theo chính sách lưu trữ dài hạn và quyền truy cập |
| Cách truy xuất | Lấy trạng thái của phiên hiện tại | Tìm thông tin phù hợp từ kho lưu trữ |
| Ví dụ | Đang xử lý bước 2 của báo cáo | Người dùng muốn báo cáo có phần tổng kết |
Hai loại bộ nhớ không thay thế nhau. Một AI Agent hữu ích có thể kết hợp Short-term Memory để xử lý công việc hiện tại và Long-term Memory để sử dụng lại những thông tin có giá trị qua nhiều phiên.
5. Triển khai AI Agent Memory bằng Python
Để hiểu cách hoạt động, chúng ta sẽ xây dựng một mô hình bộ nhớ đơn giản bằng Python. Chương trình sử dụng hai dictionary để mô phỏng bộ nhớ phiên làm việc và bộ nhớ dài hạn của người dùng.
Ví dụ này chưa gọi LLM và chưa phải một AI Agent hoàn chỉnh. Mục tiêu là làm rõ cách lưu, đọc và phân tách dữ liệu trước khi kết nối với mô hình AI.
5.1. Xây dựng bộ nhớ ngắn hạn và dài hạn
short_term_memory = {}
long_term_memory = {}
def save_message(session_id, role, content):
if session_id not in short_term_memory:
short_term_memory[session_id] = []
short_term_memory[session_id].append({
"role": role,
"content": content
})
def get_history(session_id):
return short_term_memory.get(session_id, [])
def save_user_memory(user_id, key, value):
if user_id not in long_term_memory:
long_term_memory[user_id] = {}
long_term_memory[user_id][key] = value
def get_user_memory(user_id):
return long_term_memory.get(user_id, {})
save_message("session_001", "user", "Tôi muốn phân tích doanh thu.")
save_message("session_001", "assistant", "Bạn muốn phân tích theo tháng hay theo sản phẩm?")
save_user_memory("user_001", "language", "Vietnamese")
save_user_memory("user_001", "report_style", "Có phần kết luận")
print(get_history("session_001"))
print(get_user_memory("user_001"))
Trong ví dụ trên:
short_term_memorylưu lịch sử theosession_id, vì vậy các phiên khác nhau có thể có lịch sử riêng.long_term_memorylưu thông tin theouser_id, cho phép nhiều phiên của cùng người dùng tham chiếu đến một tập thông tin dài hạn.save_message()thêm một tin nhắn vào lịch sử phiên.get_history()lấy lịch sử của phiên được yêu cầu.save_user_memory()lưu một thông tin dài hạn theo cặp khóa và giá trị.get_user_memory()truy xuất các thông tin đã lưu của người dùng.
5.2. Thử nghiệm tính độc lập giữa các phiên
Bạn có thể thêm đoạn code sau vào cuối chương trình:
save_message("session_002", "user", "Tôi muốn phân tích chi phí.")
print("Session 001:")
print(get_history("session_001"))
print("Session 002:")
print(get_history("session_002"))
print("Long-term memory:")
print(get_user_memory("user_001"))
Kết quả mong đợi là Session 001 chỉ chứa những tin nhắn của phiên đầu tiên, còn Session 002 chỉ chứa tin nhắn của phiên thứ hai. Thông tin dài hạn của user_001 vẫn được lưu riêng trong dictionary tương ứng.
Điều này minh họa một nguyên tắc quan trọng: lịch sử hội thoại cần được phân tách theo phiên, trong khi thông tin dùng chung giữa nhiều phiên phải được quản lý theo danh tính và phạm vi truy cập phù hợp.
5.3. Hạn chế của ví dụ trên
Hai dictionary chỉ tồn tại trong bộ nhớ của tiến trình Python. Khi chương trình kết thúc hoặc khởi động lại, dữ liệu sẽ mất. Chương trình cũng chưa có xác thực người dùng, giới hạn dung lượng, xử lý dữ liệu nhạy cảm hoặc cơ chế truy xuất thông tin theo mức độ liên quan.
Khi phát triển ứng dụng thực tế, có thể thay dictionary bằng cơ sở dữ liệu hoặc một lớp lưu trữ phù hợp. Cần lựa chọn công nghệ dựa trên yêu cầu về độ bền dữ liệu, quy mô, tốc độ truy vấn và bảo mật.
6. Quản lý Context Window và tối ưu Memory
Lưu được nhiều dữ liệu không có nghĩa là nên gửi toàn bộ dữ liệu đó vào LLM ở mỗi lượt. Một thiết kế Memory tốt cần chọn đúng thông tin, đúng thời điểm và đúng phạm vi sử dụng.
6.1. Giới hạn lịch sử hội thoại
Với những ứng dụng đơn giản, có thể chỉ lấy một số tin nhắn gần nhất để xây dựng ngữ cảnh. Cách này dễ triển khai nhưng có thể bỏ sót thông tin quan trọng ở đầu cuộc hội thoại.
def get_recent_history(session_id, limit=6):
history = get_history(session_id)
return history[-limit:]
Đoạn code trên trả về tối đa sáu tin nhắn cuối cùng của phiên. Trong ứng dụng thực tế, nên kết hợp giới hạn số tin nhắn với giới hạn token và logic giữ lại các dữ kiện quan trọng.
6.2. Tóm tắt lịch sử
Khi cuộc hội thoại kéo dài, ứng dụng có thể tạo bản tóm tắt chứa mục tiêu, các quyết định đã thống nhất, dữ kiện quan trọng và trạng thái hiện tại. Bản tóm tắt được sử dụng cùng một phần lịch sử gần nhất để tránh phải đưa toàn bộ hội thoại vào context window.
Việc tóm tắt cần được kiểm tra để tránh làm mất các con số, điều kiện hoặc quyết định quan trọng. Với nhiệm vụ có yêu cầu chính xác cao, nên giữ lại dữ liệu gốc hoặc tham chiếu đến nguồn dữ liệu thay vì chỉ dựa vào bản tóm tắt.
6.3. Truy xuất bộ nhớ theo nhu cầu
Không phải thông tin dài hạn nào cũng cần được đưa vào mọi yêu cầu. Ví dụ, sở thích về định dạng báo cáo có thể hữu ích khi tạo báo cáo nhưng không cần thiết khi trả lời một câu hỏi định nghĩa đơn giản.
Ứng dụng có thể lọc theo người dùng, loại thông tin, thời gian cập nhật hoặc từ khóa. Với kho dữ liệu lớn, có thể cân nhắc tìm kiếm ngữ nghĩa để truy xuất các mục bộ nhớ liên quan đến câu hỏi hiện tại.
Cần phân biệt Memory với Vector Database: Memory là khái niệm về việc lưu giữ và sử dụng thông tin, còn Vector Database là một trong những lựa chọn công nghệ có thể hỗ trợ truy xuất theo độ tương đồng ngữ nghĩa.
7. Những nguyên tắc cần lưu ý khi thiết kế AI Agent Memory
7.1. Chỉ lưu thông tin thực sự hữu ích
Không nên lưu mọi câu nói của người dùng thành thông tin dài hạn. Ưu tiên dữ kiện có giá trị sử dụng lại, đã được xác nhận và phù hợp với mục đích của ứng dụng. Thông tin suy luận chưa chắc chắn cần được đánh dấu rõ ràng thay vì xem như sự thật.
7.2. Phân tách dữ liệu giữa người dùng
Trong ứng dụng có nhiều người dùng, mỗi bản ghi bộ nhớ cần gắn với phạm vi truy cập phù hợp. Không được chỉ dựa vào một khóa phiên do phía người dùng tự khai báo mà bỏ qua việc xác thực quyền truy cập ở phía máy chủ.
7.3. Kiểm soát thời hạn lưu trữ
Thông tin cũ có thể không còn chính xác. Hệ thống nên cân nhắc thời gian lưu, thời điểm cập nhật và cách xử lý dữ kiện mâu thuẫn. Người dùng cũng nên có cơ chế xem, sửa hoặc yêu cầu xóa dữ liệu được lưu theo chính sách của ứng dụng.
7.4. Bảo vệ dữ liệu và quyền riêng tư
Tránh lưu mật khẩu, khóa API hoặc dữ liệu nhạy cảm vào bộ nhớ hội thoại thông thường. Cần áp dụng phân quyền, mã hóa khi phù hợp, chính sách lưu trữ rõ ràng và cơ chế xóa dữ liệu. Nếu Memory được dùng trong các hệ thống có nhiều khách hàng, việc cách ly dữ liệu là yêu cầu quan trọng.
7.5. Đánh giá chất lượng truy xuất
Một hệ thống Memory không chỉ cần lưu đúng mà còn phải truy xuất đúng. Nên kiểm tra liệu Agent có lấy đúng dữ kiện, có sử dụng thông tin đã lỗi thời hay không, và có vô tình đưa dữ liệu của người dùng khác vào ngữ cảnh hay không.
8. Khi nào nên sử dụng Short-term Memory và Long-term Memory?
Không phải ứng dụng AI nào cũng cần một hệ thống bộ nhớ phức tạp. Việc lựa chọn phụ thuộc vào thời gian thực hiện nhiệm vụ, tần suất tương tác và mức độ cá nhân hóa cần thiết.
- Chatbot hỏi đáp đơn giản: có thể chỉ cần duy trì một phần lịch sử hội thoại.
- AI Agent xử lý quy trình nhiều bước: cần lưu trạng thái nhiệm vụ và kết quả trung gian.
- Trợ lý cá nhân hóa: có thể cần Long-term Memory để lưu những tùy chọn đã được người dùng đồng ý.
- AI Agent làm việc với dự án dài hạn: cần cơ chế lưu trữ bền vững, truy xuất theo quyền và khả năng khôi phục trạng thái.
- Hệ thống doanh nghiệp: cần thiết kế thêm kiểm soát truy cập, thời hạn lưu trữ, giám sát và đánh giá chất lượng.
Đối với các ứng dụng sử dụng OpenAI API, tài liệu chính thức về Conversation State trình bày các phương pháp duy trì trạng thái giữa nhiều lượt, bao gồm truyền ngữ cảnh thủ công và sử dụng cơ chế hội thoại được lưu trữ. Cách lựa chọn phụ thuộc vào kiến trúc ứng dụng và yêu cầu quản lý dữ liệu.
Tham khảo: OpenAI – Conversation State.
9. Kết luận
AI Agent Memory là một thành phần quan trọng giúp ứng dụng AI duy trì tính liên tục, theo dõi nhiệm vụ và sử dụng lại thông tin hữu ích. Short-term Memory tập trung vào trạng thái của phiên hiện tại, trong khi Long-term Memory phục vụ việc lưu trữ và truy xuất dữ kiện qua nhiều phiên.
Để xây dựng hệ thống hiệu quả, nhà phát triển cần kết hợp lưu trữ phù hợp, quản lý Context Window, truy xuất có chọn lọc và kiểm soát quyền riêng tư. Một hệ thống Memory tốt không phải là hệ thống ghi nhớ mọi thứ, mà là hệ thống biết thông tin nào cần lưu, khi nào cần truy xuất và khi nào cần loại bỏ.
Nếu bạn muốn phát triển nền tảng lập trình và tư duy dữ liệu để tiến xa hơn trong lĩnh vực AI, hãy tham khảo các chương trình đào tạo tại MCNA Technology School.

