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 — Trí nhớ, ngữ cảnh và hiểu ngôn ngữ tự nhiên về thời gian

Đã đọc 0/8 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.

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ầngChứa gìVòng đờiVí dụ
Working memoryHội thoại hiện tạiTrong phiên"cuộc họp vừa nói"
Preference memorySở thích cố địnhLâu dài"deep work buổi sáng"
Episodic memorySự việc đã xảy raLâu dài"tuần trước dời họp X"
Bản đầu chỉ cần Working + Preference. Preference lưu đơn giản trong một file JSON:

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_event vớ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.
Chốt bài: Agent hiểu thời gian tương đối và nhớ ngữ cảnh/sở thích. Bài 7 ta cho nó chủ động: nhắc nhở và lập kế hoạch ngày.

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