Session được tạo/quản lý như nào, và vì sao thread_id có thể sai?

Trong Telegram topic, mỗi inbound message có thread_id. Nhưng “session” là lớp riêng của hệ thống agent: nó quyết định cuộc trò chuyện nào được nối tiếp, context nào được nạp lại, và reply sẽ gửi về đâu. Bug thường nằm ở việc session được khóa/quản lý theo user_id + chat_id nhưng chưa coi thread_id là một phần bắt buộc của ngữ cảnh topic.

1. Session lifecycle — từ tin nhắn đến reply Telegram UpdateMỗi message có metadatauser / senderchat_idmessage_thread_id GatewayNhận event, normalizexác định platformgắn chat/threadđẩy vào orchestrator Session ManagerTìm hoặc tạo sessionload history/contextinject metadataquản lý state lượt này Agent RunModel xử lýprompttoolsfinal answer DeliveryGửi replychat_idthread_idmessage target 2. Session được quản lý bằng “khóa” — đây là điểm quyết định đúng/sai Khóa đúng cho group topicSession nên phân biệt đến topic:platform + chat_id + thread_idVí dụ:telegram:-100...:59 → Session A Khóa dễ gây saiSession chỉ phân biệt đến group:platform + chat_idVí dụ:telegram:-100... → 1 session chung Session store lưu gì?Không chỉ ID, còn gồm:• message history• active topic/department• tool/delivery context• user/profile contextSai khóa → load nhầm history/context. 3. Ví dụ cụ thể: cùng user, cùng group, khác topic Message 1 — Marketinguser = Michaelchat_id = groupthread_id = 668 Message 2 — Topic nàyuser = Michaelchat_id = groupthread_id = 59 Nếu session key có thread_idtelegram:group:668 → Marketing Sessiontelegram:group:59 → Current Topic SessionKhông trộn context giữa topicReply dùng đúng chat_id + thread_id hiện tại. Nếu session key thiếu thread_idtelegram:group → 1 session chungTin Marketing và topic này bị nối vào cùng mạchAgent có thể thấy context cũ/saiDelivery có thể thiếu thread_id hoặc dùng thread cũ. Kết luận dev-spec:Inbound luôn đọc thread_id hiện tại; session lookup, prompt injection, và outbound delivery cũng phải dùng đúng thread_id hiện tại — không được chỉ dựa vào chat_id.
Bản này mô tả session như một lớp quản lý riêng: nó tạo/khôi phục mạch hội thoại, nạp context, rồi quyết định target trả lời. Nếu khóa session không có thread_id, các topic trong cùng group dễ bị trộn.
Session được tạo khi nào?
Khi có inbound message, gateway chuyển event vào orchestrator. Session Manager tìm session đang có theo khóa định danh. Nếu chưa có, nó tạo session mới cho mạch hội thoại đó.
Session được quản lý bằng gì?
Bằng session key và metadata: platform, chat_id, user_id, thread_id, history, delivery target, context đã nạp. Với Telegram topic, thread_id phải là metadata bắt buộc.
Tại sao đọc thread_id vẫn sai?
Vì có thể đọc đúng ở inbound, nhưng sau đó rơi mất khi lookup session, dựng prompt cho agent, hoặc gửi reply. Nên cần kiểm tra cả 3 điểm, không chỉ payload Telegram.