Deep Dive The Story

Bảy nền tảng chat, một gateway: kiến trúc nhắn tin của Hermes

Hermes Agent

Hermes Agent

@hermesagents

March 25, 2026

9 phút đọc

Tính năng chủ lực của Hermes Agent v0.2.0 không phải tích hợp model hay hệ thống skill. Đó là Gateway Nhắn tin Đa nền tảng — một tiến trình Hermes lắng nghe bảy nền tảng chat đồng thời: Telegram, Discord, Slack, WhatsApp, Signal, email (IMAP/SMTP) và Home Assistant. Đến bản phát hành 8 tháng 4, danh sách tăng lên mười ba, thêm Matrix, Feishu, WeCom, Mattermost, DingTalk và SMS (qua Twilio).

Điều dễ bỏ qua ở đây: viết một Telegram bot không khó. Khó là chạy đồng thời bảy tích hợp chat mà tất cả chia sẻ cùng một agent, cùng bộ nhớ, cùng registry công cụ — đó mới là kiến trúc thật. Bài này giải thích cách Hermes thực sự giải bài toán đó.

Cách làm ngây thơ, và vì sao nó không chạy

Nếu bạn phải xây "AI bot vừa trả lời trên Telegram vừa trên Discord," phản xạ đầu tiên chắc là dựng hai bot riêng. Mỗi con một tiến trình, một database, một state, đều gọi cùng API LLM. Về mặt khái niệm, người dùng Telegram và Discord nói chuyện với cùng agent; thực tế họ nói chuyện với hai agent không biết nhau.

Hầu hết dự án bot hiện tại làm thế, và vấn đề lộ ra dần:

  • Bộ nhớ phân nhánh. Người dùng nói trên Telegram dị ứng đậu phộng — chuyển sang Discord hỏi nấu ăn thì thông tin biến mất. Agent phải được dạy cùng một thứ hai lần.
  • State công cụ trôi. Cron job tạo qua Slack không hiện khi kiểm tra cron trên Telegram. Lịch sử session bị phân mảnh. Token ủy quyền (ví dụ tích hợp Notion) phải cài vào từng bot riêng.
  • Chi phí vận hành nhân lên. N bot nghĩa là N tiến trình, N service, N stream log, N file config, N điểm có thể hỏng. Phức tạp tăng tuyến tính theo số nền tảng.
  • Quy tắc an toàn phân mảnh. Siết chính sách phê duyệt lệnh nguy hiểm trên một bot thì phải nhớ cập nhật trên các bot khác. Trôi dạt an toàn là mặc định.

Hermes chọn đường khác: đúng một tiến trình agent, một database session, một kho bộ nhớ, một registry công cụ. Các nền tảng là adapter — cửa trước mỏng đổ tin nhắn vào và ra agent chung.

Hình dáng gateway

Bên trong, Hermes gateway có ba lớp.

Dưới cùng là agent — cùng lõi Hermes chạy ở chế độ CLI. Nó không biết gì về nền tảng chat. Nó nhận tin nhắn, chạy vòng lặp agent (gọi LLM, gọi tool, tra bộ nhớ, checkpoint), và tạo phản hồi. Giao diện duy nhất ra bên ngoài là API dựa trên hàng đợi.

Ở giữa là lõi gateway — quản lý session, định tuyến user/platform, phân phối phê duyệt, lên lịch cron, streaming, xử lý media. Nó biến "tin nhắn đến từ nền tảng X, user Y, kênh Z" thành "agent run trong session S với quyền hạn này." Nó cũng xử lý việc chung: rate limit, chống flood, phát hiện tin nhắn trùng, timeout do không hoạt động, định tuyến nút phê duyệt, state xuyên nền tảng.

Trên cùng là các adapter nền tảng. Một adapter cho mỗi nền tảng. Công việc adapter hẹp — kết nối nền tảng (polling, long-poll, WebSocket, webhook, hay gì SDK ưa), dịch event nền tảng thành định dạng tin nhắn nội bộ gateway, và dịch phản hồi gateway ngược lại thành thứ nền tảng mong đợi (Markdown, MarkdownV2, mrkdwn, Discord rich embed, Matrix HTML, Slack block, email MIME).

Adapter cố ý nhỏ. Thêm nền tảng mới (cộng tác viên thêm Mattermost trong dưới 300 dòng Python ở v0.4.0) chủ yếu là ánh xạ event SDK thành hình dáng tin nhắn nội bộ gateway và ngược lại.

Session hoạt động thế nào xuyên nền tảng

Hermes session là thread hội thoại với cửa sổ bộ nhớ, state công cụ và lịch sử chạy riêng. Trên một nền tảng, session ánh xạ tự nhiên — một session mỗi chat Telegram, mỗi kênh Discord, mỗi thread Slack. Xuyên nền tảng thì thú vị hơn.

Mặc định, Hermes coi mỗi tổ hợp nền tảng/chat là session riêng biệt. DM Telegram, thread Slack, kênh Discord là ba cuộc trò chuyện với ba ngữ cảnh riêng, nhưng tất cả chia sẻ cùng bộ nhớ dài hạn qua provider bộ nhớ tháo lắp (Honcho mặc định từ v0.7.0). Thông tin bạn kỳ vọng mang theo — "dị ứng đậu phộng," "tên Alice," "dự án tên Atlas" — nằm trên lớp bộ nhớ, trong khi ngữ cảnh ngắn hạn mỗi cuộc trò chuyện giới hạn trong nền tảng bạn đang dùng.

Đây là thiết kế cho phép cùng trợ lý cảm giác giống nhau trên mọi nền tảng, mà không biến mỗi tin nhắn thành broadcast toàn cục rối rắm.

Vì sao shared thread session quan trọng

v0.4.0 thêm tính năng shared thread session mặc định — trong chat nhóm, mỗi user có session riêng trong cùng thread. Nghe nhỏ nhưng rất lớn cho ai từng chạy bot đa user trong nhóm.

Không có session theo user trong nhóm chat, mọi tin nhắn là phần của một cuộc trò chuyện chung. Alice hỏi, Bob hỏi ba mươi giây sau, ngữ cảnh bot trộn lẫn cả hai. Đáp án bị lẫn. Bộ nhớ Alice bị nhiễm dữ liệu Bob. Gateway càng tệ khi thêm user.

Với shared thread session, Alice và Bob mỗi người có session riêng trong thread. Họ thấy tin nhắn nhau trong chat, nhưng agent giữ ngữ cảnh và ghi bộ nhớ riêng mỗi user. v0.8.0 biến đây thành hành vi mặc định trên mọi nền tảng gateway. Loại fix vô hình cho đến khi bạn bị cháy bởi cách cũ, rồi không bao giờ muốn quay lại.

Gateway thật sự dùng để làm gì

Nhìn kiến trúc đủ lâu, gateway không còn giống "cách chạy bot trên nền tảng chat" mà giống thứ nó thật sự là: lớp điều phối giữa người (trên bất kỳ app nào) và một trợ lý AI duy nhất với bộ nhớ và công cụ chung.

Nền tảng chat không phải sản phẩm. Chúng là cửa vào. Sản phẩm là trợ lý đứng sau, và việc bạn không bao giờ phải nghĩ mình đang dùng cửa vào nào.

Đó là tính năng Hermes ship ngày đầu. Mọi thứ sau là câu chuyện lớp điều phối đó học làm gì trong bốn tuần tiếp theo.

Đọc thêm

Cập nhật thường xuyên

Tin tức cộng đồng về bản phát hành, skill mới và tích hợp của Hermes Agent. Không spam, hủy đăng ký bất cứ lúc nào.