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 và code bạn nộp đượ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.

Yêu cầu

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)
system = [1, 2, 3, 4, 5]
m1 = {'role': 'user', 'tokens': [10]}
res = manage_rolling_history(system, [m1], max_tokens=5)

Output

[{'role': 'assistant', 'tokens': [20, 21, 22]}, {'role': 'user', 'tokens': [30, 31, 32]}]
[]
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.

Nhóm Zalo