Cơ Chế Cuốn Chiếu Lịch Sử Cửa Sổ Ngữ Cảnh (Chat History Rolling Context Window Manager)
Trong các ứng dụng Chatbot AI nhiều lượt (Multi-turn Conversational LLM), tổng số lượng token của cuộc hội thoại có thể dễ dàng vượt quá giới hạn cửa sổ ngữ cảnh max_tokens của mô…
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: sequence-truncation-strategies.
Nội dung đề bài
Mô tả bài toán
Trong các ứng dụng Chatbot AI nhiều lượt (Multi-turn Conversational LLM), tổng số lượng token của cuộc hội thoại có thể dễ dàng vượt quá giới hạn cửa sổ ngữ cảnh max_tokens của mô hình.
Quy tắc quản lý cuốn chiếu (Rolling Window Protocol):
- System Prompt (Chỉ dẫn hệ thống): Luôn là thành phần quan trọng nhất định hình nhân cách và quy tắc của bot, tuyệt đối không được cắt bỏ.
- Ngân sách còn lại: budget = max_tokens - len(system_prompt).
- Nếu
len(system_prompt) >= max_tokens: Không còn chỗ cho bất kỳ tin nhắn nào, trả về danh sách rỗng[]. - Chiến lược giữ tin nhắn mới nhất (Recency Priority):
- Duyệt ngược từ tin nhắn mới nhất về tin nhắn cũ nhất (từ cuối danh sách
messagesvề đầu). - Thêm từng tin nhắn nếu số lượng token của nó vẫn nằm trong ngân sách còn lại: ∑ tokens ≤ budget.
- Nếu một tin nhắn làm vượt quá ngân sách, dừng quá trình thêm tin nhắn (các tin nhắn cũ hơn nữa cũng bị cắt bỏ).
- Bảo toàn thứ tự thời gian:
- Các tin nhắn được chọn phải được sắp xếp lại theo đúng thứ tự thời gian ban đầu (từ cũ đến mới).
Yêu cầu kỹ thuật:
Viết hàm:
def manage_rolling_history(
system_prompt_tokens: list[int],
messages: list[dict[str, str | list[int]]],
max_tokens: int
) -> list[dict[str, str | list[int]]]system_prompt_tokens: Danh sách token của system prompt.messages: Danh sách các tin nhắn, mỗi tin nhắn là dict có key"role"(str) và"tokens"(list[int]).max_tokens: Ngưỡng giới hạn token tối đa (phải > 0, nếu không némValueError("max_tokens must be positive")).- Trả về danh sách các tin nhắn được giữ lại theo thứ tự thời gian.
Input
- Hàm
manage_rolling_history(system_prompt_tokens,messages,max_tokens): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
manage_rolling_history: Trả về kết quả kiểulist[dict[str, str | list[int]]]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- 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
system = [1, 2, 3]
m1 = {'role': 'user', 'tokens': [10, 11, 12]}
m2 = {'role': 'assistant', 'tokens': [20, 21, 22]}
m3 = {'role': 'user', 'tokens': [30, 31, 32]}
res = manage_rolling_history(system, [m1, m2, m3], max_tokens=10)Output
[{'role': 'assistant', 'tokens': [20, 21, 22]}, {'role': 'user', 'tokens': [30, 31, 32]}]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
system = [1, 2, 3, 4, 5]
m1 = {'role': 'user', 'tokens': [10]}
res = manage_rolling_history(system, [m1], max_tokens=5)Output
[]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.
