Bài 6 — Trí nhớ, ngữ cảnh và hiểu thời gian tự nhiên
Một agent năng suất tốt phải hiểu "chiều mai", "thứ Sáu tuần sau", "dời như lần trước". Bài này ta trang bị hai thứ: context thời gian (để hiểu ngôn ngữ tương đối) và memory (để nhớ sở thích, ngữ cảnh phiên).
Vấn đề lớn nhất: thời gian tương đối
LLM không biết hôm nay là ngày mấy trừ khi bạn nói. Không có context này, "đặt họp thứ Sáu" sẽ thành ngày sai. Giải pháp: luôn nhét thời gian hiện tại và timezone vào system prompt.
from datetime import datetime
from zoneinfo import ZoneInfo
now = datetime.now(ZoneInfo("Asia/Ho_Chi_Minh"))
system = f"""Hôm nay là {now:%A, %d/%m/%Y %H:%M} (giờ VN, UTC+7).
Khi người dùng nói thời gian tương đối (mai, thứ Sáu, tuần sau),
hãy quy đổi ra ngày tuyệt đối dựa trên mốc trên."""
Ba tầng bộ nhớ của agent
| Tầng | Chứa gì | Vòng đời | Ví dụ |
|---|---|---|---|
| Working memory | Hội thoại hiện tại | Trong phiên | "cuộc họp vừa nói" |
| Preference memory | Sở thích cố định | Lâu dài | "deep work buổi sáng" |
| Episodic memory | Sự việc đã xảy ra | Lâu dài | "tuần trước dời họp X" |
import json
def load_prefs():
try: return json.load(open("prefs.json"))
except FileNotFoundError: return {}
prefs = load_prefs() # {"deep_work": "09:00-11:00", "no_meeting_friday_pm": true}
Đưa prefs vào system prompt để agent tôn trọng: "Tránh đặt họp chiều thứ Sáu."
Các bước xử lý một câu tham chiếu
- Nhận câu: "Dời cuộc họp chiều mai sang giờ deep work."
- Từ context, quy "chiều mai" → ngày tuyệt đối.
- Từ working memory / list_events, xác định đúng event.
- Từ preference, tra "giờ deep work" = 09:00-11:00.
- Tạo preview
move_eventvới giờ đã giải mã, chờ xác nhận.
Quản lý cửa sổ ngữ cảnh (context window)
Hội thoại dài sẽ tràn context. Chiến lược thực chiến:
- Giữ nguyên vài lượt gần nhất.
- Tóm tắt phần cũ thành 1-2 câu ("User đã dời họp A sang thứ Năm, tạo task B").
- Dữ liệu lịch/task không nhồi hết vào prompt — chỉ đưa phần liên quan truy vấn hiện tại.
def trim(msgs, keep=6):
if len(msgs) <= keep: return msgs
head = summarize(msgs[:-keep]) # gọi LLM tóm tắt
return [{"role": "system", "content": head}] + msgs[-keep:]
Ví dụ cụ thể
Lượt 1: "Tạo task viết proposal." → agent tạo. Lượt 5: "Cái task lúc nãy, cho hạn thứ Tư." Nhờ working memory, agent biết "cái task lúc nãy" = proposal, quy "thứ Tư" ra ngày tuyệt đối, và cập nhật.
Khung tư duy: "Context trước, thông minh sau"
Đa số lỗi agent năng suất không phải do model kém, mà do thiếu context: không biết hôm nay ngày mấy, không nhớ sở thích, không thấy lịch hiện tại. Trước khi đổ lỗi cho model, hãy hỏi: nó có đủ thông tin để trả lời đúng không?
Sai lầm thường gặp
- Không cấp ngày giờ hiện tại. Lỗi kinh điển khiến mọi lịch tương đối sai. Luôn nhét vào system prompt.
- Quên timezone. User ở VN, server ở UTC → lệch 7 tiếng. Chuẩn hóa timezone rõ ràng.
- Nhồi toàn bộ lịch + task vào mỗi prompt. Tốn token, chậm, dễ nhiễu. Chỉ đưa dữ liệu liên quan.
- Không cắt/tóm tắt hội thoại dài. Tràn context → mất thông tin đầu hoặc lỗi. Có chiến lược trim.
- Nhớ sở thích nhưng không dùng. Lưu "deep work buổi sáng" mà vẫn đặt họp 9h sáng thì memory vô nghĩa. Phải đưa preference vào prompt.