Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 6 — Bộ nhớ (Memory): ngắn hạn, dài hạn và quản lý context

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

LLM không tự nhớ gì cả — mỗi lần gọi, nó chỉ thấy đúng những gì bạn gửi trong messages. "Trí nhớ" của agent hoàn toàn do bạn dựng lên. Bài này bạn học ba loại bộ nhớ và cách không để context tràn.

Ba loại bộ nhớ

  • Bộ nhớ ngắn hạn (short-term): lịch sử hội thoại hiện tại — chính là mảng messages. Reset khi phiên kết thúc.
  • Bộ nhớ dài hạn (long-term): dữ liệu lưu ngoài (file, DB, vector store) tồn tại qua nhiều phiên — ví dụ hồ sơ khách hàng, ghi chú cũ.
  • Bộ nhớ làm việc (working/scratchpad): các bước suy nghĩ và kết quả tool trong một tác vụ — chính là observation ta nối vào ở bài 5.

Vấn đề: cửa sổ context có hạn

Mỗi model có giới hạn token. Hội thoại càng dài, chi phí càng cao và cuối cùng sẽ tràn. Ba chiến lược xử lý:

  • Cắt bớt (truncation): giữ system prompt + N lượt gần nhất, bỏ phần cũ.
  • Tóm tắt (summarization): định kỳ gọi LLM tóm tắt phần cũ thành một đoạn ngắn, thay cho toàn bộ lịch sử.
  • Truy hồi (retrieval / RAG): chỉ lấy đúng mẩu thông tin liên quan từ bộ nhớ dài hạn khi cần, thay vì nhồi hết vào.

Ví dụ: tóm tắt lịch sử để tiết kiệm token

def compress_history(messages, keep_last=4):
    system = messages[0]
    old = messages[1:-keep_last]
    recent = messages[-keep_last:]
    if not old:
        return messages
    summary = call_llm([
        {"role": "system", "content": "Tom tat hoi thoai sau that ngan gon, giu du kien quan trong."},
        {"role": "user", "content": str(old)},
    ])
    return [system,
            {"role": "user", "content": f"[Tom tat truoc do]: {summary}"}
           ] + recent

Ví dụ: bộ nhớ dài hạn đơn giản với file JSON

import json, os

def remember(user_id, key, value):
    path = f"mem_{user_id}.json"
    data = json.load(open(path)) if os.path.exists(path) else {}
    data[key] = value
    json.dump(data, open(path, "w"), ensure_ascii=False)

def recall(user_id, key, default=None):
    path = f"mem_{user_id}.json"
    if not os.path.exists(path):
        return default
    return json.load(open(path)).get(key, default)

Các bước thêm memory cho agent

  • Xác định thông tin nào cần nhớ qua phiên (tên khách, sở thích, trạng thái tác vụ).
  • Chọn nơi lưu: JSON/SQLite cho dữ liệu có cấu trúc; vector store nếu cần tìm theo ngữ nghĩa.
  • Trước mỗi phiên, recall dữ liệu liên quan và chèn vào system prompt.
  • Sau mỗi tác vụ, remember dữ liệu mới đáng lưu.
  • Bật nén lịch sử khi hội thoại vượt ngưỡng (ví dụ > 10 lượt).

Khung tư duy: "Nhớ ít, nhớ đúng"

Context = System prompt + Trí nhớ liên quan (đã lọc) + Vài lượt gần nhất

Mục tiêu không phải nhớ nhiều nhất mà là đưa vào context đúng thứ liên quan tới bước hiện tại. Context sạch → agent quyết định tốt hơn và rẻ hơn.

Checklist memory

  • [ ] Biết rõ đâu là short-term, đâu là long-term.
  • [ ] Có cơ chế chống tràn context (cắt/tóm tắt/retrieval).
  • [ ] Chỉ nạp trí nhớ liên quan, không nhồi tất cả.
  • [ ] Dữ liệu dài hạn lưu bền (file/DB), không mất khi restart.
  • [ ] Không lưu dữ liệu nhạy cảm thừa (tuân thủ quyền riêng tư).

Sai lầm thường gặp

  • Nhồi toàn bộ lịch sử mỗi lần gọi → tràn context, chi phí tăng vọt, agent "lạc".
  • Nhầm rằng LLM tự nhớ phiên trước → không lưu long-term nên agent "quên" mọi thứ sau restart.
  • Tóm tắt làm mất dữ kiện quan trọng (số đơn, số tiền). Hãy chỉ định rõ cái gì phải giữ.
  • Retrieval trả về mẩu không liên quan → agent bị nhiễu. Kiểm tra chất lượng truy hồi.
  • Lưu dữ liệu cá nhân bừa bãi → rủi ro bảo mật. Chỉ lưu thứ thật cần.
Agent giờ đã nhớ được ngữ cảnh. Bài 7 chúng ta xử lý lỗi và các ca thực tế để agent đủ cứng cáp cho việc thật.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi