A2A ดีพลอยต์สองเครื่องจริง: ให้ Hermes บนคอมพิวเตอร์สองเครื่องสั่งงานหากัน
เฮอร์มีส แพลตฟอร์มข้อความ ตอนที่ 40: ขั้นตอนการติดตั้งแบบ A2A ข้ามเครื่อง และบทเรียนจริงจากความผิดพลาดที่เจอมา
คอมพิวเตอร์เครื่องหนึ่งที่รัน Hermes อยู่เริ่มรับไม่ไหว อยากให้อีกเครื่องช่วยแบ่งเบา — A2A คือคำตอบสำหรับเรื่องนี้ แต่การดีพลอย์จริงมีหลุมพรางอะไรบ้าง? ผู้ใช้จริงเค้าเหยียบมาแล้ว
ต้องใช้สองเครื่องเมื่อไหร่
ขอคิดให้ชัดก่อน: คุณจำเป็นต้องใช้สองเครื่องจริง ๆ หรือแค่อยากให้เอเจนต์สองตัวทำงานร่วมกัน?
ถ้าเอเจนต์สองตัวอยู่บนเครื่องเดียวกัน การใช้การมอบหมายงานหรือคานบังคับก็พอแล้ว — เหมือนอยู่ในออฟฟิศเดียวกัน ตะโกนเรียกเพื่อนร่วมโต๊ะข้าง ๆ ก็ได้ ไม่ต้องโทรศัพท์ A2A สร้างมาเพื่อ “ข้ามเครื่อง/ข้ามโปรเซส/ข้ามเฟรมเวิร์ก”: เดสก์ท็อปกับเซิร์ฟเวอร์ของคุณแต่ละตัวรัน Hermes คนละตัว มีหน่วยความจำ เครื่องมือ และข้อมูลล็อกอินเป็นของตัวเอง แบบนี้แหละที่ต้องใช้ A2A เป็นสะพานเชื่อม
ขั้นตอนเริ่มต้น
ขั้นที่ 1: เปิดใช้งาน A2A platform ทั้งสองเครื่อง ตอนติดตั้ง Hermes เลือก A2A หรือแก้ไฟล์คอนฟิกโดยตั้งค่า gateway.platforms.a2a.enabled เป็น true พอร์ตดีฟอลต์คือ 9900 ขั้นนี้เหมือนการติดประตูใหญ่พร้อมระบบรักษาความปลอดภัยให้แต่ละเครื่อง
ขั้นที่ 2: ตั้งค่า token (กุญแจประตู) ฝั่งเซิร์ฟเวอร์ตั้ง A2A_PEER_TOKENS หรือ A2A_BEARER_TOKEN ถ้าแค่ทดสอบในเครื่องเดียว ไม่ต้องตั้ง token ก็ได้ แต่ประตูจะเปิดเฉพาะ 127.0.0.1 — เหมือนบัตรผ่านที่แจกให้เฉพาะคนในตึก
ขั้นที่ 3: เปิดเผย address การข้ามเครื่องต้องตั้ง A2A_HOST เช่น 0.0.0.0 หรือ IP ใน LAN ขั้นนี้คือการย้ายประตูจาก “ทางเดินภายใน” ไปไว้ “ติดถนน” ให้อีกเครื่องหาคุณเจอ
ขั้นที่ 4: จับคู่ peer ฝั่งไคลเอนต์ตั้งค่า a2a_agents หรือใช้ a2a_discover("http://เซิร์ฟเวอร์:9900") เพื่อดู Agent Card ของอีกฝ่าย — เหมือนการแลกนามบัตรก่อน เพื่อยืนยันว่าเขาเป็นใคร มีสกิลอะไรบ้าง
ขั้นที่ 5: ทดสอบ เปิดใช้งาน a2a toolset แล้วใช้ a2a_call ส่งงานง่าย ๆ ลองดู ระวังเรื่อง timeout: ไคลเอนต์ดีฟอลต์ 330 วินาที เซิร์ฟเวอร์ตอบกลับภายใน 300 วินาที งานยาว ๆ ต้องเพิ่มค่าไว้ มิฉะนั้นทำงานไปครึ่งทางจะโดนตัดสินว่า timeout พอเสร็จแล้วไปดู audit log ที่ ~/.hermes/a2a_audit.jsonl
เคสจริงที่ 1: การดีพลอย์ที่สำเร็จหน้าตาเป็นยังไง
ในเอกสารทางการบรรยายฉากในอุดมคติ: Hermes บนเดสก์ท็อปของคุณส่งงานให้ Hermes บนเซิร์ฟเวอร์ — เซิร์ฟเวอร์มีพลังประมวลผลแรงกว่า เครือข่ายเสถียรกว่า ฐานข้อมูลครบกว่า ในทางกลับกัน Hermes บนเซิร์ฟเวอร์ก็ส่งงานแบบ “ช่วยดูไฟล์ในเครื่องหน่อย” กลับมาที่เดสก์ท็อปได้ แต่ละฝ่ายมีความจำและเครื่องมือของตัวเอง ทำงานของตัวเอง ค้นพบสกิลของกันและกันผ่าน Agent Card บทสนทนาถูกคีย์ด้วย contextId รองรับหลายรอบ
เหมือนสองแผนกในบริษัท: ฝ่ายการตลาด (เดสก์ท็อป) ต้องการรายงานวิเคราะห์ข้อมูล ส่งอีเมลไปที่ฝ่ายข้อมูล (เซิร์ฟเวอร์) ฝ่ายข้อมูลทำเสร็จส่งกลับมา ต่างฝ่ายต่างเก็บเอกสารของตัวเอง ไม่ก้าวก่ายกัน
เคสจริงที่ 2: การดีพลอย์ที่ล้มเหลว
ในคอมมูนิตี้มีเคสจริง (#82910): ผู้ใช้ดีพลอย์สองโหนดบน macOS สองเครื่อง — หนึ่ง gateway ที่ติดต่อผู้ใช้ + หนึ่ง worker ฟังดูเหมือนเคสสำเร็จข้างต้น แต่ผลลัพธ์กลับพัง และสุดท้ายทีมก็ถอดระบบนี้ออก
ปัญหาอยู่ที่บทบาท “ผู้ประสานงาน” กับ “worker” ไม่ได้ถูกแยกให้ชัดเจน พ่อเอเจนต์ (ผู้ประสานงาน) เก็บทุกอย่างไว้ในเซสชันของตัวเอง: ทุกขั้นตอนของ worker ผลลัพธ์ระหว่างทาง ความคิดระหว่างการทำงานทุกอย่างไหลกลับมาในเซสชันพ่อ ทำให้เกิดการพองของ context — พ่อเอเจนต์จมอยู่กับข้อมูลมหาศาล เริ่มเฉื่อยลงเรื่อย ๆ การถอดความข้ามเอเจนต์ถ่วงประสิทธิภาพโดยรวม งานซับซ้อนยิ่งไปกระตุ้น recovery loop ยิ่งจมยิ่งลึก
บทเรียนชัดเจน: การทำงานข้ามเครื่องด้วย A2A ต้องออกแบบขอบเขตหน้าที่ก่อน — ใครประสาน ใครทำงาน ใครจำอะไร อย่าโยนทุกอย่างใส่เซสชันพ่อ worker ควรมี “สมุดจด” ของตัวเอง
เช็กลิสต์หลีกเลี่ยงหลุมพราง
Reverse proxy ทำให้ตัวตนยุบรวม (#80534/#80779): ถ้าคุณใช้ nginx, K8s Ingress หรือ CDN เป็น reverse proxy peer ทั้งหมดจะใช้ bearer token ตัวเดียวกัน ตัวตนจะยุบรวมเป็น address ของ proxy วิธีแก้คือให้ proxy ส่ง X-Forwarded-For แล้วอนุมานตัวตนจริงจาก trusted proxy ถัดไป เหมือนหน้ารับพัสดุของตึก ต้องเขียนชื่อผู้รับจริงบนกล่อง ไม่งั้นของกองอยู่ที่หน้ารับหมด
Multiplex profiles ถูกปฏิเสธเส้นทาง (#80884/#80956): ถ้าคุณใช้ multiplex_profiles รันหลายคอนฟิก ข้อความ A2A ขาเข้าที่ถูก route ไปยัง profile รองอาจถูกปฏิเสธโดย authorization layer ของ gateway วิธีแก้คือตอนเริ่มระบบให้จับ immutable adapter security context เก็บนโยบาย authentication, trust, binding และ Agent Card ของแต่ละ profile ไว้ แต่ละประตูต้องมีกฎเข้าออกของตัวเอง ใช้ร่วมกันไม่ได้
การตั้งค่า timeout: ดีฟอลต์ไคลเอนต์ 330 วินาที vs เซิร์ฟเวอร์ 300 วินาที งานยาว ๆ อย่าลืมปรับ ไม่งั้นเหมือนโทรทางไกล พูดยังไม่จบก็ถูกตัดสาย
Bounded worker mode (#82503): นี่คือสูตรยาที่ทางการคิดไว้สำหรับการพองของ context non-root served A2A route สามารถรัน subprocess หรือ versioned RPC worker ที่มี bounded output, process tree reaping, cancellation และ exactly-once termination — worker ทำงานเสร็จก็เลิก ไม่เทกระบวนการทั้งหมดใส่เซสชันพ่อ
ความหมายสำหรับผู้ใช้
การดีพลอย์ A2A สองเครื่องไม่ใช่แค่ “เอาเครื่องสองเครื่องมาต่อกัน” มันเหมือนการเปิดสาขาใหม่: หน้าร้าน (Agent Card) ประตูเข้าออก (token) การแบ่งงาน (ใครประสานใครทำงาน) คลังสินค้า (ความจำแต่ละฝ่าย) ต้องคิดให้ครบ การดีพลอย์ที่สำเร็จทำให้สองเครื่องได้โชว์จุดแข็งของตัวเอง การดีพลอย์ที่ล้มเหลวทำให้ผู้ประสานงานจมอยู่กับข้อมูล
จำสามข้อ: กำหนดขอบเขตหน้าที่ให้ชัดก่อน แล้วค่อยคิดเรื่องเทคนิค; reverse proxy ต้องจัดการเรื่องตัวตน; งานยาวปรับ timeout งานซับซ้อนใช้ bounded worker ทำได้ครบสามข้อนี้ Hermes บนสองเครื่องก็จะเป็นเพื่อนร่วมงานที่ดีต่อกันจริง ๆ ไม่ใช่เพื่อนที่ถ่วงกันพัง
📖 เอกสารทางการ
この記事は Hermes Agent のเอกสารทางการに基づいています:เอกสารทางการ › user-guide/messaging/a2a