ai-247Đọc toàn bộ đề miễn phí

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ô…

AITrung bình30 phút

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ủ đề

llmcontext-windowchat-historyprompt-engineering

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 messages về đầ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ém ValueError("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ểu list[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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.