Hermes Flightplan #1: Hướng dẫn toàn tập xây dựng Telegram AI Agent hoạt động 24/7 (Kèm mã nguồn copy-paste)

@witcheer
TIẾNG ANH4 tuần trước · 22 thg 6, 2026
111K
232
34
5
759

TL;DR

Hướng dẫn toàn diện về cách triển khai Hermes AI agent trên VPS hoặc Mac, bao gồm tích hợp Telegram, tính năng tự động khôi phục sau khi lỗi và thiết lập bảo mật thông qua Nous Portal.

Bạn muốn một AI agent mà bạn có thể nhắn tin từ điện thoại, một agent vẫn chạy sau khi bạn đóng laptop và tự động quay lại sau khi khởi động lại? Hermes Agent làm được điều đó: nó chạy như một cổng kết nối (gateway) mà bạn trò chuyện qua Telegram, và một khi bạn kết nối đúng cách, nó sẽ tự khởi động lại sau khi bị crash hoặc mất điện.

Tôi đã xây dựng cùng một thiết lập trên hai máy, một VPS đám mây giá rẻ và Mac Mini trên bàn làm việc, để tôi có thể viết ra toàn bộ quy trình mà không bỏ sót bước nào. Đó là một con đường duy nhất. Máy tính chỉ thay đổi những gì bạn gõ ở hai chỗ: lệnh cài đặt và phần giữ cho gateway hoạt động. Mọi thứ ở giữa đều giống hệt nhau.

Mọi thứ bên dưới đều chạy trên phần cứng của chính tôi. Đường dẫn Linux là một Hetzner CX23 (x86, 2 vCPU, 4GB RAM, 40GB ổ đĩa) trên Ubuntu 24.04.4 LTS - Đường dẫn Mac là Mac Mini M4 trên macOS 15. Cả hai đều chạy Hermes Agent v0.16.0.

bạn sẽ có được gì sau cùng

  • Hermes Agent được cài đặt, chạy dưới tài khoản người dùng thông thường, không phải root
  • Một bot Telegram mà bạn nhắn tin từ điện thoại, chỉ khóa cho tài khoản của bạn
  • Gateway chạy như một dịch vụ được quản lý, để nó tự động quay lại sau khi bị crash hoặc khởi động lại
  • Trên VPS, một máy chủ được bảo vệ: chỉ ssh bằng key, không đăng nhập root, tường lửa

chọn máy của bạn

VPS là cách rẻ nhất. Bất kỳ máy x86 nào có 4GB RAM và khoảng 20GB ổ đĩa trống đều chạy được; máy của tôi là Hetzner CX23 với giá $7.79/tháng (giá Hetzner US, 2026-06-18). Thuê nó, và nó luôn hoạt động theo định nghĩa.

Một chiếc Mac bạn đã sở hữu là lựa chọn khác. Bất kỳ máy Mac Apple silicon nào luôn bật nguồn đều hoạt động được, và chi phí vận hành bằng không ngoài giá máy. Sự đánh đổi là lớp độ bền (durability layer) phức tạp hơn trên macOS, điều tôi sẽ đề cập ở cuối.

Bạn cần một ssh key trên máy của mình (ssh-keygen -t ed25519 nếu bạn chưa có), một tài khoản Telegram và một mô hình cho agent. Hướng dẫn này chỉ đến Nous Portal, sử dụng OAuth, vì vậy không có API key nào phải lưu trong tệp. Hermes cần một mô hình có ít nhất 64k ngữ cảnh.

bước 1: chuẩn bị máy

trên VPS

Tạo máy chủ tại nhà cung cấp của bạn: Ubuntu 24.04, một instance x86 (không phải Arm, xem ghi chú chi phí) và dán ssh public key của bạn tại thời điểm tạo.

Một máy chủ công cộng mới cần vài phút để bảo vệ trước khi bạn đặt agent lên đó. secure-box.sh trong công thức thực hiện việc này trong một lần: nâng cấp apt, một swapfile 2GB, một người dùng sudo không phải root với key của bạn, ssh chỉ bằng key với đăng nhập root tắt và tường lửa chỉ cho phép ssh. Chỉnh sửa hai biến ở đầu, sao chép nó qua, chạy nó với quyền root:

bash
1scp secure-box.sh root@<địa-chỉ-ip-vps-của-bạn>:
2ssh root@<địa-chỉ-ip-vps-của-bạn> 'bash secure-box.sh'

Bản Ubuntu này được cài đặt với PasswordAuthentication được đặt là yes, mặc dù tôi đã tạo máy chủ bằng ssh key. Script sẽ tắt nó. Trước khi bạn đóng phiên root, hãy mở một terminal thứ hai và xác nhận người dùng mới có thể đăng nhập, để một lỗi không thể khóa bạn ra ngoài:

bash
1ssh hermes@<địa-chỉ-ip-vps-của-bạn>

Từ đây bạn là hermes, không phải root.

trên Mac

Không cần bước bảo vệ. Đó là máy của bạn trên mạng của riêng bạn, không phải máy chủ công cộng. Cài đặt Homebrew nếu bạn chưa có (trình cài đặt sử dụng nó ở bước tiếp theo) và bạn đã sẵn sàng.

bước 2: cài đặt Hermes

Việc cài đặt là một lệnh duy nhất, giống nhau trên cả hai máy, chạy với tư cách người dùng thông thường của bạn:

bash
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
2source ~/.bashrc
3hermes --version

Trình cài đặt phát hiện hệ điều hành của bạn và kéo bộ công cụ riêng của nó (uv, Python 3.11, Node.js 22, ripgrep, ffmpeg, Playwright Chromium cho các công cụ trình duyệt) vào ~/.hermes, vì vậy nó không bao giờ chạm vào Python hệ thống của bạn. Trên máy Hetzner của tôi, nó đã cài đặt Hermes Agent v0.16.0 trên Python 3.11.15.

Đây là bước nặng. Trên VPS, nó đã đưa dung lượng ổ đĩa từ 1.2GB đã sử dụng lên 7.8GB, khoảng 6.6GB, phần lớn là công cụ trình duyệt và Node. Hãy dự trù 20GB trống và đừng lo lắng. Chạy qua một lệnh ssh đơn giản không có terminal, trình cài đặt sẽ in ra "Setup wizard skipped (no terminal available)", điều này không sao, vì thiết lập là bước tiếp theo.

Trên Mac, lệnh tương tự cũng chạy, với một điểm phức tạp: cài đặt Homebrew trước. Với Homebrew có sẵn, trình cài đặt sẽ kéo git và các phụ thuộc của nó mà không cần nhắc nhở. Nếu không có nó, nó sẽ dựa vào Command Line Tools của Apple, có thể mở một hộp thoại macOS mà bạn phải nhấp vào, và một hộp thoại không tốt qua ssh (đây là trong nhánh macOS của trình cài đặt). Sau đó, nó là cùng một luồng như trên.

bước 3: trỏ nó vào một mô hình

bash
1hermes setup --portal

Đây là OAuth chống lại Nous Portal: nó in ra một URL và một mã, bạn phê duyệt nó trong trình duyệt và bây giờ máy chủ nói chuyện với một mô hình mà không có API key nào nằm trong tệp. Nous Portal có một gói miễn phí và tôi đã chạy toàn bộ mọi thứ trên một mô hình miễn phí. Nếu bạn muốn tự mang nhà cung cấp của mình, hãy chạy hermes model và chọn một cái; key sau đó sẽ nằm trong ~/.hermes/.env.

bước 4: nói chuyện với nó

trên VPS

Khoảnh khắc ssh của bạn bị ngắt, một phiên foreground sẽ chết cùng với nó. tmux giữ cho phiên hoạt động: bắt đầu bên trong tmux, tách nó ra và nó sẽ tiếp tục chạy.

bash
1sudo apt-get install -y tmux
2tmux new -s hermes # sau đó, bên trong: hermes

Tách bằng Ctrl-b rồi d, và kết nối lại sau đó từ bất cứ đâu:

bash
1ssh hermes@<địa-chỉ-ip-vps-của-bạn>
2tmux attach -t hermes

Lần khởi động đầu tiên của agent tương tác mất một chút thời gian. Máy của tôi mất khoảng 30 giây để tải mô hình và kỹ năng trước khi dấu nhắc xuất hiện. Khi nó đã hoạt động, các lệnh gạch chéo (slash commands) sẽ hoạt động.

/goal là lệnh đáng để xem: nó đặt một mục tiêu thường trực mà agent làm việc qua các lượt, với một mô hình đánh giá kiểm tra sau mỗi lượt xem nó đã hoàn thành chưa.

bash
1/goal kiểm tra tổng RAM và dung lượng ổ đĩa trống của máy này bằng các công cụ shell, sau đó báo cáo cả hai trên một dòng và đánh dấu mục tiêu đã hoàn thành

Máy của tôi đã tự chạy lệnh shell và trả về "VPS total RAM: 3.7Gi, free disk space: 28G" trong khoảng 15 giây. Đó là agent sử dụng các công cụ của chính nó.

Hãy phân biệt hai khái niệm: tmux giữ một phiên tương tác mở qua một kết nối ssh bị ngắt, nhưng không qua một lần khởi động lại. Đối với một gateway không giám sát tồn tại sau khi khởi động lại, bạn muốn một dịch vụ được quản lý, đó là bước 6.

trên Mac

Bạn đang ngồi trước máy, vì vậy bạn có thể chạy hermes trong một terminal. tmux vẫn hữu ích nếu bạn ssh vào từ máy tính xách tay của mình, nhưng nó là tùy chọn ở đây.

bước 5: Telegram gateway

Phần này giống hệt nhau trên cả hai máy. Tạo một bot: nhắn tin cho @ BotFather trên Telegram, gửi /newbot và sao chép token. Lấy ID người dùng số của bạn từ @ userinfobot. Sau đó cấu hình gateway:

bash
1hermes gateway setup

Chọn Telegram, dán token và đặt người dùng được phép thành ID số của bạn để chỉ bạn mới có thể nói chuyện với nó. Token sẽ được lưu vào ~/.hermes/.env, phần còn lại vào ~/.hermes/gateway.json.

Thiết lập chỉ ghi cấu hình. Nó không khởi động bất cứ thứ gì, vì vậy bot vẫn im lặng và điều đó khiến mọi người bất ngờ: chưa có gì đang thăm dò Telegram. Khởi động nó ở chế độ foreground một lần để kiểm tra nó kết nối:

bash
1hermes gateway run

Bạn muốn thấy, trong nhật ký:

bash
1gateway.run: Connecting to telegram...
2[Telegram] Connected to Telegram (polling mode)
3gateway.run: ✓ telegram connected

Chế độ thăm dò (polling mode) có nghĩa là gateway chủ động kết nối đến Telegram; không có gì kết nối vào máy của bạn, đó là lý do tại sao tường lửa không cần cổng inbound nào ngoài ssh. Nhắn tin cho bot của bạn; nó sẽ trả lời. Sau đó dừng gateway foreground bằng Ctrl-C, vì bạn không thể có hai thứ cùng thăm dò một token cùng một lúc và bước tiếp theo sẽ chạy nó như một dịch vụ.

bước 6: làm cho nó tồn tại sau khi khởi động lại

Đây là nơi duy nhất hai máy khác nhau.

trên VPS: systemd

hermes gateway install đăng ký gateway như một dịch vụ systemd để nó khởi động lại khi bị crash và quay lại sau khi khởi động lại. Trên phiên bản này, trình cài đặt hỏi hai câu hỏi [Y/n] và không có cờ nào để bỏ qua chúng. Chạy nó qua một lệnh ssh không tương tác, điều tự nhiên khi viết script cho một máy chủ và nó không nhận được câu trả lời, nó sẽ hủy bỏ và không cài đặt gì. Cung cấp câu trả lời trên stdin:

bash
1printf 'n\nY\n' | hermes gateway install

Hai câu hỏi là "bắt đầu gateway ngay bây giờ?" và "tự động bắt đầu khi đăng nhập/khởi động?". n rồi Y có nghĩa là: không bắt đầu nó ngay lúc này, nhưng hãy bật nó khi khởi động. Trình cài đặt cũng bật tính năng kéo dài phiên người dùng (user-session lingering), đó là thứ cho phép một dịch vụ người dùng chạy trước khi bạn đã đăng nhập. Xác nhận nó, bởi vì đây là thứ làm cho "tồn tại sau khi khởi động lại" trở nên đúng và không chỉ là "tồn tại sau khi đăng xuất":

bash
1loginctl show-user $USER -p Linger # muốn: Linger=yes

Bắt đầu nó và kiểm tra nó:

bash
1hermes gateway start
2systemctl --user status hermes-gateway

Bạn muốn thấy active (running) và NRestarts=0. Trên máy của tôi, gateway sử dụng khoảng 280MB và toàn bộ máy ở khoảng 556MB, thoải mái trên 4GB.

Bây giờ là bài kiểm tra thực sự. Khởi động lại và không chạm vào nó:

bash
1sudo reboot

Máy của tôi đã quay lại trong khoảng 15 giây, gateway đã tự động khởi động, kết nối lại với Telegram và trả lời tin nhắn tiếp theo với lịch sử trò chuyện từ trước khi khởi động lại còn nguyên vẹn. Đó là toàn bộ mục đích.

trên Mac: launchd và một watchdog

macOS sử dụng launchd, không phải systemd và có một cái bẫy. Trên macOS 15 với Hermes v0.16.0, hermes gateway start có thể không đăng ký được dịch vụ launchd và dự phòng, mà không báo cho bạn, thành một tiến trình nền không được giám sát. Bạn sẽ thấy điều này:

bash
1Bootstrap failed: 5: Input/output error
2⚠ launchd cannot manage the gateway on this macOS version (launchctl exit 5)
3✓ Started gateway as a background process instead
4 It will NOT auto-start at login or auto-restart on crash.

Nếu bạn đã có một công việc launchd hoạt động trước đó, lệnh này đã dỡ nó ra và dự phòng chạy tốt cho đến lần crash hoặc khởi động lại đầu tiên, sau đó agent của bạn sẽ biến mất mà không có gì báo cho bạn. launchctl thô hoạt động ở nơi cli thất bại, bao gồm cả qua ssh:

bash
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist
2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # muốn: state = running

Plist khởi động gateway khi đăng nhập nhưng không khởi động lại nó khi bị crash. Một watchdog cron thu hẹp cả hai khoảng trống và cron chạy khi khởi động mà không cần đăng nhập. Công thức cung cấp gateway-watchdog.sh; nó kiểm tra mỗi 5 phút xem tiến trình gateway còn sống không và khởi động lại nó nếu không. Cài đặt nó theo lịch trình:

bash
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -

Tôi đã thấy trình tự này khôi phục một gateway bị hạ cấp trên Mac Mini của chính mình. Khởi động lại nó và xác nhận gateway đã quay lại trong vòng năm phút mà không cần đăng nhập.

xác minh thiết lập của bạn

  1. Dịch vụ đang hoạt động: systemctl --user status hermes-gateway trên Linux (active (running)), hoặc launchctl print gui/$(id -u)/ai.hermes.gateway | grep state trên macOS (state = running)
  2. Nhắn tin cho bot của bạn: nó trả lời bạn và bỏ qua bất kỳ ai không nằm trong danh sách người dùng được phép của bạn
  3. Trên Linux, loginctl show-user $USER -p Linger hiển thị Linger=yes
  4. Khởi động lại máy, đợi, nhắn tin cho bot một lần nữa mà không cần đăng nhập lại: nó trả lời

chi phí

Trên VPS, máy chủ là khoản chi duy nhất. Máy của tôi là Hetzner CX23 với giá $0.012/giờ, giới hạn ở $7.79/tháng (giá Hetzner US, 2026-06-18; EU CX22 có cấu hình tương tự và rẻ hơn).

Trên Mac, đó là một máy bạn đã sở hữu, không có dịch vụ bổ sung nào. Mô hình này miễn phí trên gói miễn phí của Nous Portal trong cả hai trường hợp.

Ở đây, bộ nhớ không phải là giới hạn: gateway sử dụng khoảng 280MB, toàn bộ máy khoảng 556MB, vì vậy 1GB RAM là quá đủ. Ổ đĩa là giới hạn thực sự: bản cài đặt khoảng 6.6GB, vì vậy một image 1GB hoặc 10GB là chật, hãy cung cấp 20GB. Và sử dụng x86, đó là lựa chọn an toàn.

tự chạy nó và điều gì tiếp theo

Cả hai máy đều có một công thức đầy đủ với các script chính xác, có thể chạy nguyên trạng:

Bây giờ bạn đã có một agent luôn hoạt động trên Telegram tồn tại sau khi khởi động lại.

Flightplan tiếp theo được xây dựng dựa trên nó: các công việc theo lịch chỉ nhắn tin cho bạn khi có điều gì đó quan trọng, một không gian làm việc được đồng bộ hóa git mà agent đọc và ghi, và luồng soạn thảo và phê duyệt giữ một con người trong mọi hành động công khai.

cảm ơn bạn đã đọc

Lưu một chạm

Đọc sâu bài viết viral bằng AI trong YouMind

Lưu nguồn, đặt câu hỏi tập trung, tóm tắt lập luận và biến một bài viết viral thành các ghi chú có thể tái sử dụng trong một không gian làm việc AI duy nhất.

Khám phá YouMind
Dành cho nhà sáng tạo

Biến Markdown của bạn thành bài viết 𝕏 gọn gàng

Khi bạn đăng bài viết dài của riêng mình, việc định dạng hình ảnh, bảng và khối mã cho 𝕏 rất mệt mỏi. YouMind biến cả bản nháp Markdown thành một bài viết 𝕏 gọn gàng, sẵn sàng để đăng.

Thử Markdown sang 𝕏

Thêm pattern để giải mã

Bài viết viral gần đây

Khám phá thêm bài viết viral