🤖HermesBlog
Nền tảng Nhắn tin Hermes · Parte 408/14/2026

A2A Song Má Thực Chiến: Để Hai Hermes Trên Hai Máy Tính Sai Việc Cho Nhau

Hermes nền tảng nhắn tin bài 40: Các bước triển khai A2A đa máy và bài học thực tế từ những lỗi gặp phải.

Một Hermes trên máy tính này bận không kham nổi, muốn nhờ Hermes trên máy tính khác giúp một tay — A2A sinh ra là để làm chuyện đó. Nhưng khi triển khai có những “hố” nào? Người dùng thực tế đã giúp bạn tránh rồi đây.

A2A -twonode

Khi Nào Cần Hai Máy

Trước tiên hãy nghĩ cho rõ: Bạn thực sự cần hai máy tính, hay chỉ muốn hai agent phối hợp với nhau?

Nếu hai agent sống trên cùng một máy, dùng delegation hoặc kanban là đủ — giống như trong cùng một văn phòng, hét to một tiếng gọi đồng nghiệp bàn bên là xong, không cần gọi điện thoại. A2A dành cho “xuyên máy / xuyên tiến trình / xuyên framework”: máy bàn và server của bạn mỗi nơi chạy một Hermes, chúng có bộ nhớ, công cụ và thông tin đăng nhập riêng — lúc này mới cần cây cầu mang tên A2A.

Các Bước Bắt Đầu

Bước 1: Bật nền tảng A2A trên cả hai máy. Khi cài Hermes chọn A2A, hoặc sửa file cấu hình đặt gateway.platforms.a2a.enabled thành true, cổng mặc định là 9900. Bước này tương đương với việc mỗi máy tính lắp một cánh cổng ra ngoài có kiểm soát ra vào.

Bước 2: Cấu hình token (chìa khóa cổng). Phía server đặt A2A_PEER_TOKENS hoặc A2A_BEARER_TOKEN. Nếu chỉ test trên máy local thì có thể không đặt token, nhưng cổng chỉ mở cho 127.0.0.1 — giống như thẻ ra vào chỉ phát cho cư dân trong tòa nhà vậy.

Bước 3: Expose địa chỉ. Khi xuyên máy bắt buộc phải đặt A2A_HOST, ví dụ 0.0.0.0 hoặc IP mạng LAN. Bước này là đưa cánh cửa từ “lối đi nội bộ” ra “mặt tiền đường”, để máy tính khác có thể tìm thấy bạn.

Bước 4: Ghép nối peer. Ở phía client cấu hình a2a_agents, hoặc dùng thẳng a2a_discover("http://địa_chỉ_server:9900") để xem Agent Card của đối phương — tương đương với việc chìa danh thiếp trước, xác nhận đối phương là ai, biết những kỹ năng gì.

Bước 5: Xác minh. Bật bộ công cụ a2a, dùng a2a_call gửi một tác vụ đơn giản thử xem. Chú ý timeout: client mặc định 330 giây, server trả lời trong khung 330 giây, tác vụ dài phải tăng lên, không là làm được nửa chừng đã bị tính là quá hạn. Xong thì vào ~/.hermes/a2a_audit.jsonl xem nhật ký kiểm toán.

Case Thực Tế 1: Một Lần Triển Khai Thành Công Trông Như Thế Nào

Tài liệu chính thức mô tả một kịch bản lý tưởng: Hermes trên máy bàn của bạn giao tác vụ cho Hermes trên server — server có sức mạnh tính toán lớn hơn, mạng ổn định hơn, database đầy đủ hơn. Ngược lại, Hermes trên server cũng có thể giao những việc kiểu “kiểm tra file local” cho phía máy bàn. Hai bên mỗi bên có bộ nhớ và công cụ riêng, làm việc của mình, thông qua Agent Card để khám phá kỹ năng của nhau, hội thoại được khóa theo contextId, hỗ trợ nhiều vòng.

Cứ như hai phòng ban trong một công ty: phòng Marketing (máy bàn) cần một bản báo cáo phân tích dữ liệu, gửi email cho phòng Dữ liệu (server), phòng Dữ liệu làm xong gửi lại, hai bên mỗi bên lưu hồ sơ riêng, không ảnh hưởng lẫn nhau.

Case Thực Tế 2: Một Lần Triển Khai Thất Bại

Có một case thực tế trong cộng đồng (#82910): người dùng triển khai double node trên hai máy macOS — một gateway hướng tới người dùng + một worker. Nghe thì có vẻ giống case thành công ở trên, nhưng kết quả là thất bại, cuối cùng team đã gỡ bỏ hệ thống này.

Vấn đề nằm ở chỗ vai trò “điều phối viên” và “worker” không được phân định rõ ràng. Agent cha (điều phối viên) nhồi quá nhiều thứ vào session của mình: từng bước thao tác của worker, từng đoạn kết quả trung gian, từng lần suy nghĩ — tất cả đều chảy ngược về session cha, dẫn đến phình to context — agent cha bị nhấn chìm trong biển thông tin, ngày càng đần đi. Transcription xuyên agent kéo tụt hiệu suất tổng thể, tác vụ phức tạp còn kích hoạt recovery loop, càng lún càng sâu.

Bài học rất rõ ràng: hợp tác xuyên máy bằng A2A phải thiết kế ranh giới trách nhiệm trước — ai điều phối, ai làm việc, bộ nhớ của ai thuộc về người đó. Đừng nhồi hết mọi thứ vào session cha, worker nên có “cuốn sổ tay” riêng của mình.

Checklist Tránh Hố Khi Triển Khai

Sụp đổ danh tính qua reverse proxy (#80534/#80779): Nếu bạn dùng nginx, K8s Ingress hoặc CDN làm reverse proxy, tất cả peer dùng chung một bearer token, danh tính sẽ bị sụp đổ hết thành địa chỉ proxy. Cách giải quyết là để proxy truyền X-Forwarded-For, suy ra danh tính thật từ sau proxy đáng tin cậy. Giống như lễ tân tòa nhà nhận hộ bưu kiện, phải ghi rõ người nhận thật trên kiện hàng, không thì tất cả chất đống ở quầy lễ tân.

Routing đa cấu hình bị từ chối (#80884/#80956): Nếu bạn dùng multiplex_profiles chạy nhiều cấu hình, message A2A đến (inbound) khi route tới profile phụ có thể bị lớp ủy quyền của gateway từ chối. Cách sửa là khi khởi động bắt giữ security context của immutable adapter, giữ lại chính sách xác thực, tin cậy, binding và Agent Card riêng cho từng profile. Mỗi cánh cửa phải có quy tắc ra vào riêng, không dùng chung một bộ.

Cài đặt timeout: Mặc định client 330 giây vs server 300 giây, tác vụ dài nhớ tăng lên. Không thì như gọi điện thoại đường dài, chưa nói hết câu đã bị cúp máy.

Chế độ worker có giới hạn (bounded worker) (#82503): Đây là toa thuốc chính thức cho chứng phình to context. Route A2A served không phải root có thể chạy subprocess hoặc versioned RPC worker đã cấu hình, với output có giới hạn, thu gọn process tree, hủy bỏ và kết thúc đúng một lần — worker làm xong là thu công, không đổ hết quá trình vào session cha.

Điều Đó Có Nghĩa Gì Với Người Dùng

Triển khai A2A trên hai máy không đơn giản là “nối dây hai máy tính”. Nó giống như mở một chi nhánh: mặt tiền (Agent Card), cổng ra vào (token), phân công (ai điều phối ai làm), kho bãi (bộ nhớ riêng) — tất cả đều phải nghĩ cho kỹ. Triển khai thành công giúp hai máy phát huy thế mạnh của nhau, triển khai thất bại khiến điều phối viên chết chìm trong thông tin.

Nhớ ba điều: đầu tiên xác định rõ ranh giới trách nhiệm, rồi mới tính đến chi tiết kỹ thuật; reverse proxy phải xử lý vấn đề danh tính; tác vụ dài thì tăng timeout, tác vụ phức tạp thì dùng bounded worker. Làm được mấy điểm này, hai Hermes trên hai máy tính mới thực sự trở thành đồng nghiệp tốt, chứ không phải đồng đội “kéo bè kéo cánh” hại nhau.

📖 Tài liệu chính thức

この記事は Hermes Agent のTài liệu chính thứcに基づいています:Tài liệu chính thức › user-guide/messaging/a2a