Quản Lý Bộ Nhớ Hội Thoại Trượt Giới Hạn Token & Tóm Tắt (Memory Buffer)
{"role": "system", "content": f"Summary of previous conversation: {summary_text}"} đặt ngay sau tin nhắn system ban đầu.
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-dict-json.
Nội dung đề bài
Mục tiêu kiến thức
- Trong ứng dụng Chatbot hoặc AI Agent, khi người dùng trò chuyện kéo dài, tổng số token của lịch sử sẽ vượt quá Context Window của mô hình hoặc gây tốn kém chi phí token không cần thiết.
- Chiến lược Quản lý Bộ nhớ Hội thoại:
- Token Estimation: Để đơn giản và nhanh, số token của một tin nhắn bằng
len(content.split()) + 4(4 tokens overhead cho role và formatting). - Bảo toàn System Prompt: Tin nhắn hệ thống đầu tiên (
role == "system") LUÔN LUÔN được giữ lại nguyên vẹn ở vị trí đầu. - Cửa sổ trượt (Sliding Window): Lấy các tin nhắn mới nhất từ cuối ngược lên đầu sao cho tổng số token (bao gồm cả system prompt) không vượt quá
max_tokens. - Tóm tắt nén (Summary Compression): Khi các tin nhắn cũ bị đẩy ra ngoài cửa sổ, chúng được thay thế bằng một tin nhắn tóm tắt ngắn:
{"role": "system", "content": f"Summary of previous conversation: {summary_text}"} đặt ngay sau tin nhắn system ban đầu.
Yêu cầu
Xây dựng lớp ConversationMemoryManager:
class ConversationMemoryManager:
def __init__(self, max_tokens: int = 100):
pass
def add_message(self, role: str, content: str) -> None:
pass
def set_summary(self, summary_text: str) -> None:
pass
def get_context_messages(self) -> list[dict[str, str]]:
passget_context_messages():- Ưu tiên:
- Base system message đầu tiên (nếu có trong lịch sử).
- Summary message (nếu
set_summaryđã được gọi):{"role": "system", "content": f"Summary of previous conversation: {summary_text}"}. - Các tin nhắn trò chuyện gần đây nhất (
role in ["user", "assistant"]). Lấy từ tin nhắn mới nhất lùi dần về trước, dừng lại khi việc thêm một tin nhắn sẽ làm tổng số token vượt quámax_tokens. - Trả về danh sách các tin nhắn theo đúng thứ tự thời gian (chronological order).
Input
- Lớp
ConversationMemoryManager(max_tokens): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
ConversationMemoryManager: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
mem = ConversationMemoryManager(max_tokens=20)
mem.add_message('system', 'You assistant')
mem.add_message('user', 'Hello there')
mem.add_message('assistant', 'Hi human')
mem.add_message('user', 'Need help')
ctx = mem.get_context_messages()Output
[{'role': 'system', 'content': 'You assistant'}, {'role': 'assistant', 'content': 'Hi human'}, {'role': 'user', 'content': 'Need help'}]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
mem = ConversationMemoryManager(max_tokens=50)
mem.add_message('system', 'Base instructions')
mem.set_summary('User is asking about Python and LoRA.')
mem.add_message('user', 'Can you show code?')
ctx = mem.get_context_messages()Output
[{'role': 'system', 'content': 'Base instructions'}, {'role': 'system', 'content': 'Summary of previous conversation: User is asking about Python and LoRA.'}, {'role': 'user', 'content': 'Can you show code?'}]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
