บล็อก

วิธีทำให้ Hermes Agent ทำงานบนเซิร์ฟเวอร์ตลอดเวลา

Markdown

วิธีทำให้ Hermes Agent ทำงานบนเซิร์ฟเวอร์ตลอด 24/7: ติดตั้งบน VPS โดยไม่ใช้เบราว์เซอร์ เรียกใช้ gateway เป็นบริการระบบ เริ่มทำงานอัตโนมัติหลังรีบูต ตั้งค่า linger และ Docker

อ่านบทความฉบับเต็ม

หลังจากติดตั้ง Hermes Agent บนแล็ปท็อปแล้ว ก็เกิดคำถามขึ้นว่า ใครจะตอบข้อความใน Telegram และจัดทำสรุปข่าวตอนเช้าเมื่อปิดแล็ปท็อปแล้ว? ที่โต๊ะทำงาน เอเจนต์จะทำงานตราบเท่าที่คอมพิวเตอร์เปิดอยู่เท่านั้น หากต้องการให้บอตออนไลน์ตลอดเวลาและให้การทำงานตามกำหนดเวลาเริ่มเอง คุณต้องย้ายเอเจนต์ไปไว้บนเซิร์ฟเวอร์

ต่อไปนี้คือวิธีติดตั้ง Hermes บนเซิร์ฟเวอร์ Linux ทั่วไป เปลี่ยน gateway ให้เป็นบริการที่ทำงานต่อเนื่องและเริ่มทำงานอัตโนมัติหลังรีบูต พร้อมจำกัดการเข้าถึงเพื่อไม่ให้คนแปลกหน้าเข้าถึงเทอร์มินัลได้ คู่มือนี้อ้างอิงจากเอกสารอย่างเป็นทางการ

หากคุณยังไม่ได้ติดตั้ง Hermes เลย ให้เริ่มจากภาพรวมแยกต่างหากเรื่องเอเจนต์นี้คืออะไรและติดตั้งอย่างไร คู่มือนี้สมมติว่าคุณใช้งานเอเจนต์บนเครื่องของตัวเองอยู่แล้ว และครอบคลุมเฉพาะการย้ายไปยังเซิร์ฟเวอร์

ข้อมูลเกี่ยวกับการใช้งาน Ailoot อยู่ในเอกสาร

ทำไมจึงควรย้าย Hermes Agent จากแล็ปท็อปไปยังเซิร์ฟเวอร์?

ประเด็นสำคัญ

คอมพิวเตอร์ส่วนบุคคลทำงานได้ตราบเท่าที่คุณอยู่ใกล้และเปิดเครื่องอยู่ หากต้องการให้ทำงานตลอดเวลา คุณต้องใช้เซิร์ฟเวอร์: บอต Telegram จะตอบเมื่อคอมพิวเตอร์ของคุณปิดอยู่ และงานที่กำหนดเวลาไว้จะทำงานเอง คุณต้องใช้เซิร์ฟเวอร์เพื่อจุดประสงค์นี้เท่านั้น; แล็ปท็อปก็เพียงพอสำหรับการทำงานทั่วไปกับเอเจนต์

บนแล็ปท็อป Hermes ทำงานเฉพาะตอนที่เปิดฝาเครื่องและคุณอยู่ใกล้ ๆ ปิดฝาเมื่อไร บอตก็เงียบ สรุปข่าวตอนเช้าก็ไม่มาถึง ซึ่งไม่เหมาะกับงานอย่าง “ตอบผู้คนในแอปส่งข้อความและจัดการสิ่งต่าง ๆ ตามกำหนดเวลา”

สิ่งที่ทำให้เซิร์ฟเวอร์ต่างออกไปก็คือ เซิร์ฟเวอร์ไม่เคยพักและไม่ขึ้นอยู่กับสิ่งอื่น คุณติดตั้ง Hermes ตัวเดิมลงไป แล้วมันจะทำงานโดยไม่มีคุณ: ตอบข้อความใน Telegram ตอนตีสาม รวบรวมข่าวตามหัวข้อที่คุณสนใจทุกเช้า และเก็บรักษาเซสชันระหว่างการทำงานแต่ละครั้ง

การย้ายไปยังเซิร์ฟเวอร์เหมาะเมื่อเอเจนต์มีงานที่ต้องทำต่อเนื่อง เช่น บอตสำหรับคุณหรือทีม สรุปข่าวตอนเช้า การตอบกลับอัตโนมัติ หรือการทำงานกับเอกสารเป็นประจำ หากคุณแค่กำลังลองใช้ Hermes กับโปรเจ็กต์หนึ่งและนั่งอยู่ใกล้เครื่อง ก็ยังไม่จำเป็นต้องใช้เซิร์ฟเวอร์ เพราะเป็นขั้นตอนเพิ่มเติม

ควรเตรียมอะไรบ้างก่อนติดตั้ง Hermes บน VPS?

ประเด็นสำคัญ

คุณต้องมีเซิร์ฟเวอร์ Linux ที่เข้าถึงผ่าน SSH ได้ (ทีมอย่างเป็นทางการทดสอบบน Ubuntu ที่ติดตั้งใหม่) เลือกโมเดลไว้ล่วงหน้า และเข้าใจว่าโดยทั่วไปเอเจนต์ไม่จำเป็นต้องใช้เบราว์เซอร์บนเซิร์ฟเวอร์ สำหรับการทำงานโดยไม่มีคนดูแล วิธีเข้าถึงโมเดลที่สะดวกที่สุดคือ Nous Portal: การลงชื่อเข้าใช้ OAuth จะต่ออายุโดยอัตโนมัติ ทำให้โทเค็นหมดอายุไม่ทำให้ระบบหยุดทำงานตอนกลางคืน

เตรียมสามอย่างก่อนติดตั้ง

เซิร์ฟเวอร์ ใช้ VPS Linux ทั่วไปได้ เอกสารระบุว่า Linux และ WSL2 อยู่ในระดับการสนับสนุนขั้นต้น และทดสอบบน Ubuntu รุ่นล่าสุด หากระบบมี glibc, systemd และโครงสร้างไดเรกทอรีแบบมาตรฐาน Hermes ก็จะติดตั้งได้อย่างถูกต้อง เรื่องนี้สำคัญบนเซิร์ฟเวอร์ เพราะขั้นตอนเริ่มทำงานอัตโนมัติทั้งหมดด้านล่างใช้ systemd ซึ่งมีมาให้พร้อมใน Ubuntu และ Debian

การเข้าถึง SSH คุณเชื่อมต่อกับเซิร์ฟเวอร์ผ่านเทอร์มินัลด้วย SSH; ไม่ได้ใช้เมาส์ที่นั่น คำสั่งทั้งหมดด้านล่างให้รันในเซสชัน SSH นี้ หากคุณเขียนโค้ดแบบ vibe coding และยังไม่คุ้นกับเทอร์มินัล ก็ไม่ต้องกังวล: มีเพียงไม่กี่คำสั่ง และคุณคัดลอกแต่ละคำสั่งได้ทั้งบรรทัด

โมเดลที่เลือกไว้ เอเจนต์ไม่ได้คิดเอง แต่เรียกใช้โมเดล สำหรับเซิร์ฟเวอร์ที่ทำงานโดยไม่มีคุณ สิ่งสำคัญคือการเข้าถึงโมเดลต้องไม่หมดอายุ ตัวเลือกที่ง่ายที่สุดคือสมัคร Nous Portal ผ่าน hermes setup --portal: การลงชื่อเข้าใช้ใช้ OAuth และโทเค็นจะต่ออายุโดยอัตโนมัติ คุณใช้ API keys ของตัวเองได้เช่นกัน แต่ต้องแน่ใจว่ามีเงินในบัญชี เพราะเอเจนต์แบบ headless ที่ยอดเงินเป็นศูนย์ก็จะเงียบไปเฉย ๆ โมเดลต้องมี context window อย่างน้อย 64,000 tokens มิฉะนั้น Hermes จะปฏิเสธการเริ่มทำงานด้วยโมเดลนั้น โมเดลคลาวด์ทั้งหมดในรายการเป็นไปตามข้อกำหนดนี้

หมายเหตุ

เอกสารอย่างเป็นทางการไม่ได้ระบุตัวเลขที่แน่นอนสำหรับการเลือก VPS หรือทรัพยากรขั้นต่ำ จึงไม่ได้ระบุตัวเลขที่แน่นอนไว้ที่นี่ จากประสบการณ์ที่อธิบายไว้ เครื่องขนาดเล็กก็เพียงพอสำหรับ gateway ที่มีบอตและกำหนดเวลา เพราะการประมวลผลหนักเกิดขึ้นฝั่งโมเดล ตัวเซิร์ฟเวอร์เองมีภาระงานน้อยมาก การทำงานอัตโนมัติผ่านเบราว์เซอร์เป็นส่วนที่หนักที่สุด แต่โดยทั่วไปไม่จำเป็นบนเซิร์ฟเวอร์ (จะอธิบายต่อด้านล่าง)

ติดตั้ง Hermes Agent บนเซิร์ฟเวอร์ด้วยคำสั่งเดียวได้อย่างไร?

ประเด็นสำคัญ

เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน SSH แล้วรันตัวติดตั้งพร้อมแฟล็กสำหรับข้ามเบราว์เซอร์บนเซิร์ฟเวอร์: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser จากนั้นเริ่มเชลล์เทอร์มินัลใหม่และเลือกโมเดลด้วย hermes setup --portal ตรวจสอบการติดตั้งด้วย hermes doctor

การติดตั้งบนเซิร์ฟเวอร์แทบจะเหมือนกับบนแล็ปท็อป ต่างกันตรงที่โดยทั่วไปเอเจนต์ไม่จำเป็นต้องใช้เบราว์เซอร์ที่นั่น การทำงานอัตโนมัติผ่านเบราว์เซอร์ยังต้องติดตั้ง Chromium ซึ่งมีขนาดใหญ่ด้วย จึงใช้แฟล็ก --skip-browser

  1. เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน SSH

    ssh root@your-server-address
    

    รันคำสั่งทั้งหมดต่อจากนี้ภายในเซสชันนี้ บนเซิร์ฟเวอร์โดยตรง

  2. รันตัวติดตั้งโดยไม่ติดตั้งเบราว์เซอร์

    curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser
    

    สคริปต์ดาวน์โหลดสภาพแวดล้อมที่จำเป็นและติดตั้งคำสั่ง hermes แฟล็ก --skip-browser จะข้ามการติดตั้งการทำงานอัตโนมัติผ่านเบราว์เซอร์; บนเซิร์ฟเวอร์ที่ไม่มีส่วนติดต่อแบบกราฟิกก็มีแต่จะกินพื้นที่ หากต้องการใช้เบราว์เซอร์ในภายหลัง คุณติดตั้งแยกต่างหากได้

  3. เริ่มเชลล์ใหม่และเลือกโมเดล

    source ~/.bashrc
    hermes setup --portal
    

    บรรทัดแรกโหลด PATH ใหม่เพื่อให้เรียกใช้คำสั่ง hermes ได้ บรรทัดที่สองเปิดหน้าลงชื่อเข้าใช้ Nous Portal: ยืนยันการลงชื่อเข้าใช้ แล้วเอเจนต์จะได้รับโมเดลและบริการต่าง ๆ โดยไม่ต้องใช้คีย์แยกสำหรับแต่ละรายการ

  4. ตรวจสอบการติดตั้ง

    hermes doctor
    

    คำสั่งนี้แสดงว่าติดตั้งอะไรแล้ว ขาดอะไร และแก้ไขอย่างไร เครื่องหมายสีเขียวหมายความว่าทุกอย่างพร้อมแล้ว

ก่อนเพิ่มบอตและกำหนดเวลา ให้ทดลองสนทนาธรรมดาบนเซิร์ฟเวอร์โดยตรงจนใช้งานได้ก่อน: รัน hermes แล้วมอบหมายงานง่าย ๆ ที่มีคำตอบตรวจสอบได้ให้มัน เอกสารแนะนำอย่างชัดเจนว่าอย่าเพิ่มฟีเจอร์มากมายก่อนการสนทนาทั่วไปจะทำงานได้ ซึ่งเป็นคำแนะนำที่สมเหตุสมผล

ทำให้ Hermes ทำงานตลอดเวลาได้อย่างไร?

ประเด็นสำคัญ

ก่อนอื่นตั้งค่า gateway ด้วย hermes gateway setup และเชื่อมต่อ Telegram จากนั้นเปลี่ยน gateway ให้เป็นบริการด้วยคำสั่งเดียว: hermes gateway install ติดตั้งบริการผู้ใช้ ส่วน sudo hermes gateway install --system ติดตั้งบริการระบบที่เริ่มทำงานเมื่อเซิร์ฟเวอร์บูต บริการผู้ใช้จัดการด้วย hermes gateway start, stop และ status ส่วนบริการระบบบน VPS ต้องคง scope --system ชัดเจนและสิทธิ์จำเป็นทุกครั้งที่ตรวจหรือเปลี่ยนบริการ

gateway คือโปรเซส Hermes เบื้องหลังตัวเดียวที่รักษาการเชื่อมต่อกับแอปส่งข้อความทั้งหมด จัดการเซสชัน และเรียกใช้งานตามกำหนดเวลา การทำงานตลอดเวลาทั้งหมดขึ้นอยู่กับมัน เป้าหมายคือทำให้โปรเซสนี้เริ่มทำงานเองและทำงานต่อเนื่อง

ก่อนอื่นตั้งค่า gateway และเชื่อมต่อแอปส่งข้อความ:

hermes gateway setup

วิซาร์ดการตั้งค่าจะแนะนำแพลตฟอร์มและช่วยให้คุณกรอกโทเค็นบอตกับรายการผู้ที่เข้าถึงได้ ขั้นตอนเชื่อมต่อ Telegram (สร้างบอตด้วย BotFather ค้นหา ID ของคุณ และกรอกโทเค็น) อธิบายไว้ในคู่มือการติดตั้งหลัก; จะไม่กล่าวซ้ำที่นี่

ต่อไปคือกับดักที่ผู้คนมักลืมกันมากที่สุด หากคุณแค่รัน hermes gateway โปรเซสจะทำงานตราบเท่าที่เซสชัน SSH ยังเปิดอยู่ ปิดเทอร์มินัล แล้ว gateway ก็หยุด หากต้องการให้ทำงานต่อเนื่อง คุณต้องให้ระบบควบคุมโปรเซสนี้ มีคำสั่งเดียวสำหรับเรื่องนี้:

hermes gateway install

คำสั่งนี้ติดตั้ง gateway เป็นบริการ: บน Linux จะเป็นบริการ systemd ระดับผู้ใช้ ส่วนบน macOS จะใช้ launchd ระบบจะตรวจสอบโปรเซสและเริ่มทำงานอีกครั้งหากเกิดข้อขัดข้อง

บนเซิร์ฟเวอร์ ส่วนใหญ่คุณจะต้องใช้ตัวเลือกที่สอง: บริการระบบที่เริ่มทำงานเมื่อเครื่องบูต ก่อนที่ผู้ใช้คนใดจะลงชื่อเข้าใช้:

sudo hermes gateway install --system

นี่คือสิ่งที่คุณต้องใช้กับ VPS: เซิร์ฟเวอร์รีบูต บริการเริ่มทำงานเอง และบอตกลับมาออนไลน์ จัดการด้วยคำสั่งง่าย ๆ เหล่านี้:

hermes gateway start     # start
hermes gateway stop      # stop
hermes gateway status    # check status

สำหรับบริการระบบ ให้เพิ่ม sudo และแฟล็ก --system ลงในคำสั่งเหล่านี้ หากไม่มีสองอย่างนี้ คำสั่งจะจัดการบริการผู้ใช้แทนบริการที่เริ่มทำงานตอนบูต:

sudo hermes gateway start --system
sudo hermes gateway stop --system
sudo hermes gateway status --system

ทำไมจึงต้องใช้ linger และหากไม่มีจะเกิดอะไรขึ้น?

ประเด็นสำคัญ

หากคุณติดตั้ง gateway เป็นบริการผู้ใช้ (โดยไม่มี --system), systemd จะหยุดมันทันทีที่คุณออกจาก SSH และจะไม่เริ่มทำงานตอนบูต แก้ไขได้ด้วยคำสั่งเดียว: sudo loginctl enable-linger username หลังจากนั้นบริการจะทำงานโดยไม่ขึ้นอยู่กับการลงชื่อเข้าใช้หรือออกจากระบบของคุณ

นี่คืออุปสรรคที่พบได้บ่อยที่สุด: คุณติดตั้งบริการแล้ว แต่บอตยังคงเงียบตอนกลางคืน สาเหตุอยู่ที่วิธีทำงานของบริการผู้ใช้ใน Linux

บริการ systemd ของผู้ใช้จะผูกกับเซสชันของคุณโดยค่าเริ่มต้น คุณเชื่อมต่อผ่าน SSH แล้ว user manager ของคุณเริ่มทำงาน; บริการก็ทำงาน คุณออกจากระบบ แล้วระบบถือว่าผู้ใช้ไม่ทำงาน จึงปิดบริการของผู้ใช้นั้นพร้อมกับ gateway ของคุณ สำหรับเซิร์ฟเวอร์ที่คุณเข้าออกระบบ นี่คือปัญหา: บอตออนไลน์เฉพาะตอนที่คุณเชื่อมต่อ SSH อยู่

แก้ไขได้ด้วยโหมด linger ซึ่งทำให้ระบบคง user manager ให้ทำงานต่อ แม้ผู้ใช้นั้นไม่ได้ลงชื่อเข้าใช้:

sudo loginctl enable-linger username

หลังรันคำสั่งนี้ บริการผู้ใช้จะทำงานเองและเริ่มทำงานเมื่อเซิร์ฟเวอร์บูต โดยไม่ต้องรอให้คุณลงชื่อเข้าใช้ หากไม่มี linger ระบบจะกลับไปทำงานแบบเดิม: gateway ปิดเมื่อคุณออกจาก SSH และไม่เริ่มทำงานตอนบูต เอกสารระบุเรื่องนี้ไว้อย่างชัดเจน

ข้อควรระวัง

เรื่องนี้ไม่เกี่ยวกับบริการระบบ (ติดตั้งด้วย sudo hermes gateway install --system): บริการนั้นทำงานในระดับเครื่องอยู่แล้วและเริ่มตอนบูต จำเป็นต้องใช้ linger เฉพาะกับบริการผู้ใช้เท่านั้น เลือกอย่างใดอย่างหนึ่ง: บริการระบบ หรือบริการผู้ใช้พร้อม linger

รัน Hermes บนเซิร์ฟเวอร์ด้วย Docker พร้อมรีสตาร์ตอัตโนมัติได้อย่างไร?

ประเด็นสำคัญ

หากคุณต้องการใช้ Docker ก็สามารถให้ Hermes ทำงานเป็น gateway ที่ทำงานต่อเนื่องในคอนเทนเนอร์ได้: docker run -d --name hermes --restart unless-stopped -v ~/.hermes:/opt/data -p 8642:8642 nousresearch/hermes-agent gateway run แฟล็ก --restart unless-stopped จะทำให้คอนเทนเนอร์กลับมาทำงานหลังรีบูต และภายใน image โปรเซส gateway จะเริ่มทำงานใหม่หากเกิดข้อขัดข้องเช่นกัน

Docker เป็นอีกวิธีที่ใช้ได้สำหรับให้เอเจนต์ทำงานบนเซิร์ฟเวอร์ โดยเฉพาะหากคุณคุ้นเคยกับคอนเทนเนอร์อยู่แล้ว หรือต้องการแยกเอเจนต์ออกจากระบบหลัก ตั้งค่าเพียงครั้งเดียวด้วย docker run ... setup จากนั้นเริ่มคอนเทนเนอร์เบื้องหลัง:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

บรรทัดที่รับผิดชอบการทำงานตลอดเวลามีหน้าที่ดังนี้:

  • -d — คอนเทนเนอร์ทำงานเบื้องหลังและไม่ค้างเทอร์มินัลไว้
  • --restart unless-stopped — Docker นำคอนเทนเนอร์กลับมาทำงานหลังเซิร์ฟเวอร์รีบูตหรือเกิดข้อขัดข้อง จะไม่รีสตาร์ตเฉพาะกรณีที่คุณหยุดมันด้วยตนเอง
  • -v ~/.hermes:/opt/data — การตั้งค่า คีย์ เซสชัน และ memory อยู่บนเซิร์ฟเวอร์ นอกคอนเทนเนอร์ และยังคงอยู่เมื่อสร้างคอนเทนเนอร์ขึ้นใหม่

image เพิ่มการป้องกันอีกชั้น: โปรเซส gateway ทำงานภายใต้ตัวควบคุม s6 หาก gateway ขัดข้อง ก็จะเริ่มทำงานใหม่ภายในไม่กี่วินาทีโดยไม่สูญเสียคอนเทนเนอร์เอง นี่คือการป้องกันสองชั้น: Docker คอยให้คอนเทนเนอร์ทำงานจากภายนอก ส่วน s6 เฝ้าติดตามโปรเซสภายใน

จำความแตกต่างอย่างหนึ่งของวิธีใช้ Docker ไว้: การติดตั้งแบบนี้จะไม่อัปเดตด้วยคำสั่ง hermes update หากต้องการอัปเดตใน Docker ให้แทนที่ image ด้วย image ใหม่—ดาวน์โหลดรุ่นล่าสุดแล้วสร้างคอนเทนเนอร์ขึ้นใหม่

ตรวจสอบอย่างไรว่าทุกอย่างทำงานและจะกลับมาทำงานหลังรีบูต?

ประเด็นสำคัญ

ตรวจสอบสถานะบริการด้วย systemctl และดูบันทึกการทำงานแบบสด จากนั้นทดสอบเซิร์ฟเวอร์ขั้นสำคัญ: รีบูตเครื่องและตรวจสอบว่าบอตกลับมาออนไลน์เอง Hermes รักษาเซสชันและการตอบกลับไว้หลังรีสตาร์ต; คำตอบที่ยังไม่เสร็จจะถูกส่งหลังระบบกู้คืน

สำหรับบริการผู้ใช้ ให้ตรวจสอบสถานะและบันทึกการทำงานดังนี้:

hermes gateway status
journalctl --user -u hermes-gateway -f

บริการระบบที่แนะนำสำหรับ VPS ต้องใช้ scope ระบบแทน:

sudo hermes gateway status --system
sudo journalctl -u hermes-gateway -f

คำสั่งแรกตรวจบริการที่เลือก คำสั่งที่สองติดตาม log ของ scope นั้น ชื่อ unit นี้ใช้กับการติดตั้ง ~/.hermes เริ่มต้น Hermes home อื่นอาจมี suffix ให้ดูผล status แล้วใช้ unit ตรงนั้น ห้ามติดตาม user unit ขณะทดสอบการติดตั้งระบบ

บันทึกของ Hermes อยู่ใน ~/.hermes/logs/ และระบบจะปกปิดข้อมูลลับจากบันทึกโดยอัตโนมัติ จึงส่งให้ฝ่ายสนับสนุนได้อย่างปลอดภัย

ตอนนี้รีบูตเซิร์ฟเวอร์และตรวจสอบว่าเอเจนต์กลับมาทำงานเอง นี่คือการทดสอบเซิร์ฟเวอร์ที่สำคัญ และมักเป็นสิ่งที่ผู้คนลืมทำ:

sudo reboot

เมื่อเซิร์ฟเวอร์เข้าถึงได้อีกครั้ง ให้เชื่อม SSH ใหม่ การติดตั้งระบบตรวจ sudo hermes gateway status --system กับ system journal ส่วน user ที่มี linger ตรวจ hermes gateway status กับ user journal แล้วส่งข้อความ Telegram หาบอต หากมันตอบโดยที่คุณไม่ต้องทำอะไร การตั้งค่าเริ่มทำงานอัตโนมัติก็ถูกต้อง นี่คือเหตุผลที่ทำทั้งหมดนี้

ไม่ต้องกังวลว่าจะสูญเสียบทสนทนา Hermes เขียนเซสชันลงดิสก์ และเซสชันเหล่านั้นยังอยู่หลัง gateway รีสตาร์ต ยิ่งไปกว่านั้น หาก gateway ขัดข้องขณะที่กำลังส่งคำตอบพอดี ก็จะส่งคำตอบนั้นหลังระบบกู้คืน แทนที่จะรันงานซ้ำ เรื่องนี้สำคัญสำหรับบอตที่ทำงานตลอดเวลา: การรีสตาร์ตที่ไม่คาดคิดจะไม่ทำให้บทสนทนาขาดตอน

รักษาความปลอดภัยให้เอเจนต์ที่เข้าถึงเทอร์มินัลบนเซิร์ฟเวอร์ได้อย่างไร?

ประเด็นสำคัญ

มาตรการป้องกันหลักสามข้อ: ปิดการเข้าถึงบอตไว้โดยค่าเริ่มต้น (บอตตอบเฉพาะคนที่อยู่ในรายการ) เอเจนต์ขออนุญาตก่อนรันคำสั่งอันตราย และหากต้องการแยกอย่างเต็มรูปแบบ ให้รันเอเจนต์บนเซิร์ฟเวอร์ใน Docker sandbox ทางที่ดีอย่าเปิดโหมดไม่ต้องยืนยัน (YOLO) บนเซิร์ฟเวอร์

เอเจนต์บนเซิร์ฟเวอร์คือโปรแกรมที่เข้าถึงเทอร์มินัลและทำงานโดยไม่มีคุณคอยดูแล ตรวจสอบการตั้งค่าสามข้อนี้ก่อน

ปิดการเข้าถึงบอต โดยค่าเริ่มต้น gateway จะตอบเฉพาะคนในรายการผู้ที่เข้าถึงได้ หรือผู้ที่ดำเนินการเชื่อมโยงผ่านรหัสในข้อความส่วนตัวเสร็จแล้ว นี่คือพฤติกรรมที่เหมาะสมสำหรับบอตที่เข้าถึงเทอร์มินัลได้: คนแปลกหน้าที่ส่งข้อความหาบอตจะทำอะไรไม่ได้ รายการนี้ตั้งค่าด้วย ID ตัวเลข เช่น สำหรับ Telegram:

TELEGRAM_ALLOWED_USERS=123456789,987654321

การยืนยันก่อนใช้คำสั่งอันตราย ก่อนทำสิ่งใดที่ทำลายข้อมูล เอเจนต์จะขออนุญาตจากคุณ มีโหมด YOLO ที่ปิดการยืนยัน; ทางที่ดีอย่าเปิดโหมดนี้บนเซิร์ฟเวอร์ที่ทำงานโดยไม่มีคุณ การยืนยันมีไว้เพื่อป้องกันไม่ให้เกิดสิ่งที่ย้อนกลับไม่ได้โดยที่คุณไม่รู้ตัว

Sandbox เพื่อแยกการทำงานอย่างเต็มรูปแบบ หากต้องการให้เอเจนต์ไม่สามารถมองเห็นระบบหลักของเซิร์ฟเวอร์ได้จริง ๆ ให้รันคำสั่งของมันในคอนเทนเนอร์ Docker:

hermes config set terminal.backend docker

จากนั้นทุกสิ่งที่เอเจนต์ทำในเทอร์มินัลจะเกิดขึ้นภายใน sandbox ที่แยกไว้ และไม่สามารถเข้าถึงเซิร์ฟเวอร์ที่ใช้งานจริงได้ นี่เป็นมาตรการป้องกันที่สมเหตุสมผลเมื่อคุณให้อิสระเอเจนต์ดำเนินการด้วยตัวเอง

ควรทำอย่างไรหากบอตเงียบหรือ gateway ขัดข้อง?

ประเด็นสำคัญ

เริ่มจากตรวจสอบสถานะบริการและบันทึกการทำงาน; ส่วนใหญ่สาเหตุคือโทเค็นบอต รายการผู้ที่เข้าถึงได้ หรือโมเดล หากโปรเซสทั้งหมดค้างสนิท บริการ systemd มีตัวจับเวลา watchdog ที่จะรีสตาร์ต gateway หากหยุดแสดงสัญญาณการทำงาน

เมื่อบอตหยุดตอบสนอง ให้ทำตามลำดับนี้ ตรวจ scope ที่ติดตั้งก่อน: บริการระบบใช้ sudo hermes gateway status --system กับ system journal บริการผู้ใช้ใช้ hermes gateway status กับ user journal หาก gateway ทำงานอยู่แต่ข้อความส่งไม่ถึง แทบทุกครั้งจะเป็นปัญหาการตั้งค่าแพลตฟอร์ม: โทเค็นบอตไม่ถูกต้อง หรือบุคคลนั้นไม่ได้อยู่ในรายการผู้ที่เข้าถึงได้ รัน hermes gateway setup อีกครั้งใน Hermes home เดิม แล้วตรวจบริการที่เลือกด้วย hermes gateway status --system สำหรับระบบ หรือ hermes gateway status สำหรับผู้ใช้ setup สำเร็จไม่พิสูจน์ว่า gateway ที่ถูกต้องกำลังทำงาน

หากโมเดลส่งคำตอบว่างเปล่าหรือแปลก ๆ ให้ตรวจสอบด้วย hermes model และยืนยันผู้ให้บริการกับการลงชื่อเข้าใช้ ลำดับการกู้คืนทั่วไปที่พาคุณจาก “ทุกอย่างพังหมด” กลับไปสู่การทำงานปกติคือ: hermes doctor, hermes model, hermes setup ตามด้วย hermes gateway status --system สำหรับติดตั้งระบบ หรือ hermes gateway status สำหรับผู้ใช้

อีกเรื่องสำหรับกรณีที่พบไม่บ่อยแต่ชวนหงุดหงิด เมื่อโปรเซสทั้งหมดค้างโดยไม่ได้ขัดข้องจริง บริการ systemd มีตัวจับเวลา watchdog: เพิ่มบรรทัดนี้ลงใน ~/.hermes/config.yaml แล้วติดตั้งบริการใหม่

gateway:
  systemd_watchdog_seconds: 120
# For the VPS system service (same Hermes home as the original install):
sudo hermes gateway install --system --force
sudo hermes gateway status --system

หากเป็นบริการผู้ใช้ ให้สร้างเฉพาะ scope นั้นด้วย hermes gateway install --force และตรวจ hermes gateway status เลือก scope เดียว ห้ามติดตั้งทั้งคู่เพื่อซ่อม gateway ตัวเดียว

หลังจากนั้น gateway จะส่งสัญญาณให้ระบบเป็นระยะว่า “ฉันยังทำงานอยู่” และหากสัญญาณหยุด systemd จะรีสตาร์ตโปรเซสโดยอัตโนมัติ วิธีนี้ใช้ได้เฉพาะบน Linux ที่มี systemd และเฉพาะกรณีโปรเซสค้าง ตัวจับเวลา watchdog ไม่มีผลกับการขัดข้องของเครือข่ายตามปกติระหว่างเซิร์ฟเวอร์กับแอปส่งข้อความ

ยังมีคำถามอะไรอีกบ้างเกี่ยวกับ Hermes Agent บนเซิร์ฟเวอร์?

ประเด็นสำคัญ

คำตอบสั้น ๆ สำหรับคำถามที่พบบ่อย: จำเป็นต้องใช้ VPS โดยเฉพาะหรือไม่ ใช้บอตหลายตัวในเครื่องเดียวกันได้หรือไม่ เซิร์ฟเวอร์ต้องมีส่วนติดต่อแบบกราฟิกหรือไม่ และจะเกิดอะไรขึ้นกับงานที่กำหนดเวลาไว้เมื่อเอเจนต์อยู่บนเซิร์ฟเวอร์

คำถามที่พบบ่อย

จำเป็นต้องใช้ VPS หรือคอมพิวเตอร์ของฉันเองก็ได้?

หากต้องการให้ทำงานตลอดเวลา คุณต้องใช้เครื่องที่เปิดอยู่เสมอ คอมพิวเตอร์ของคุณเองก็ใช้ได้หากคุณยอมเปิดเครื่องไว้ตลอด VPS สะดวกกว่า: เปิดอยู่เสมอและไม่ขึ้นอยู่กับว่าคุณกำลังทำงานหรือนอนหลับ เซิร์ฟเวอร์ Linux ทั่วไปก็เพียงพอ—เอกสารระบุว่า Linux อยู่ในระดับการสนับสนุนขั้นต้น และทดสอบบน Ubuntu ที่ติดตั้งใหม่

ฉันรันบอตหลายตัวบนเซิร์ฟเวอร์เดียวกันได้ไหม?

ได้ Hermes มีโปรไฟล์ และแต่ละโปรไฟล์มีบริการของตัวเอง คำสั่งอย่าง <profile> gateway install จะสร้างบริการแยกชื่อ hermes-gateway-<profile> และแต่ละบริการทำงานอย่างอิสระ แต่ละโปรไฟล์มีการตั้งค่า โทเค็นบอต และ memory ของตัวเอง

เซิร์ฟเวอร์ต้องมีจอภาพและกราฟิกไหม?

ไม่ เซิร์ฟเวอร์ทำงานโดยไม่มีหน้าจอ และคุณจัดการผ่าน SSH จากเทอร์มินัล โดยทั่วไปเอเจนต์บนเซิร์ฟเวอร์ประเภทนี้ไม่จำเป็นต้องใช้การทำงานอัตโนมัติผ่านเบราว์เซอร์ คุณจึงรันตัวติดตั้งด้วยแฟล็ก --skip-browser; วิธีนี้จะตัดองค์ประกอบขนาดใหญ่เพียงส่วนเดียวที่ต้องใช้กราฟิกออกไป

งานที่กำหนดเวลาไว้จะทำงานตอนที่ฉันไม่อยู่ไหม?

ใช่ นี่คือเหตุผลที่ย้ายไปใช้เซิร์ฟเวอร์ gateway ตัวเดิมจะทำงานตามกำหนดเวลา: ตรวจสอบตารางทุกหนึ่งนาทีและเริ่มงานเมื่อถึงกำหนด จากนั้นส่งผลลัพธ์ไปยังแชตเดิม เพราะ gateway ทำงานเป็นบริการตลอดเวลา ตารางงานจึงทำงานเองโดยไม่ต้องมีคุณคอยดูแล

บอตจะยังทำงานหลังอัปเดตและรีบูตเซิร์ฟเวอร์ไหม?

ใช่ การตั้งค่า เซสชัน และ memory เก็บไว้ในโฟลเดอร์ ~/.hermes และจะไม่สูญหาย หลังรีบูต บริการระบบ (หรือ Docker ที่ใช้ --restart unless-stopped) จะเริ่ม gateway เอง คำตอบที่ยังไม่เสร็จจะถูกส่งหลังรีสตาร์ตและไม่มีอะไรสูญหาย—แต่หากคำตอบกำลังส่งไปได้ครึ่งทางตอนเกิดข้อขัดข้อง คำตอบนั้นอาจมาถึงซ้ำพร้อมข้อความแจ้งว่าอาจเป็นรายการซ้ำ

ทำความรู้จักกับ Ailoot

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

ทำไม gateway ดูหยุดหลังติดตั้งเป็น system service?

การตรวจไม่ระบุ scope อาจไปอีกบริการ ใช้ hermes gateway status --system กับ system journal สำหรับติดตั้งระบบ ส่วน status ไม่ระบุและ user journal ใช้เฉพาะบริการผู้ใช้ คง Hermes home เดิมตลอด

system service บน VPS ต้องใช้ loginctl linger หรือไม่?

ไม่ต้อง linger ใช้กับ user systemd ที่ต้องอยู่ต่อหลัง logout และเริ่มตอนบูต บริการระบบเริ่มตอนเครื่องบูตอยู่แล้ว เลือก scope เดียวแล้วตรวจ status กับการตอบบอตซ้ำหลังรีบูต

บทความทั้งหมด