Đại lý Hermes: Nó là gì & Cách sử dụng nó với Nstproxy Crawl
TL;DR
Hermes Agent là AI agent mã nguồn mở, cấp giấy phép MIT, tự lưu trữ của Nous Research — một ứng dụng terminal và desktop có bộ nhớ lâu dài, hệ thống kỹ năng tự cải thiện và hỗ trợ cho Telegram, Discord, Slack, WhatsApp, Signal và CLI.
Nó đi kèm với hơn 70 công cụ tích hợp sẵn, bao gồm web_search và web_extract, và có thể được mở rộng theo hai cách: kết nối với một máy chủ MCP hoặc viết một plugin đăng ký một công cụ tùy chỉnh qua ctx.register_tool().
Công cụ web_extract tích hợp sẵn của Hermes trả về Markdown nhưng áp dụng một cách cắt giảm ngân sách ký tự cứng và không được tài liệu hóa để render JavaScript; đường dẫn browser_navigate/browser_snapshot của nó có thể thêm xử lý proxy và chống bot, nhưng chỉ thông qua một backend cloud-browser kiểu Browserbase có trả phí và một vòng lặp tương tác cây truy cập nhiều bước.
Kết nối Nstproxy Crawl như một plugin Hermes mang lại cho agent một lệnh gọi công cụ duy nhất có thể render JavaScript, xác thực thông qua hồ bơi proxy của Nstproxy và trả về Markdown hoặc JSON sạch — mà không cần một đăng ký tự động hóa trình duyệt riêng biệt.
Việc tích hợp là một plugin Hermes dài ~40 dòng: một manifest plugin.yaml, một hàm register(ctx), và một bộ xử lý thực hiện POST đến endpoint /api/v1/crawl/scrape của Nstproxy Crawl và trả về Markdown đã được phân tích.
Nstproxy Crawl tính phí theo lượt fetch thành công (bao gồm cả phản hồi 404/403) thay vì theo lượt thử, và việc crawl cấp site cần có giới hạn maxDepth/maxPages rõ ràng — cả hai đều quan trọng khi một agent tự động gọi công cụ thay vì một người thực hiện từng yêu cầu một.
Trải nghiem Nstproxy - Bat dau dung thu mien phi ngay
What Hermes Agent is
Hermes Agent là một AI agent mã nguồn mở, được cấp giấy phép MIT do Nous Research xây dựng, được phân phối dưới dạng một ứng dụng terminal và ứng dụng desktop gốc cho macOS và Windows. Nó được cài đặt bằng một script duy nhất (curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash trên Linux/macOS/WSL2/Termux, hoặc một dòng lệnh PowerShell trên Windows), và trình cài đặt bundling Python 3.11, Node.js, ripgrep, và ffmpeg để agent có một runtime hoạt động ngay lập tức. Tính năng nổi bật của nó là một vòng lặp học tập: README của dự án mô tả một agent "tạo ra kỹ năng từ kinh nghiệm, cải thiện chúng trong quá trình sử dụng," và tìm kiếm lịch sử cuộc trò chuyện trong quá khứ của nó thay vì bắt đầu từ đầu trong mỗi phiên.
Quyền truy cập model không bị giới hạn theo nhà cung cấp — hermes model chuyển đổi giữa Nous Portal của Nous Research, OpenRouter, OpenAI, hoặc một endpoint tùy chỉnh mà không cần chạm vào mã — và agent tiếp cận người dùng qua Telegram, Discord, Slack, WhatsApp, Signal, email, hoặc một phiên CLI đơn giản. Ở phía dưới, Hermes có hơn 70 công cụ tích hợp được nhóm thành các bộ công cụ (tự động hóa trình duyệt, truy cập tệp và terminal, tìm kiếm và trích xuất web, thị giác, tạo hình ảnh, tự động hóa nhà cửa, và nhiều hơn nữa), có thể cấu hình theo từng nền tảng với lệnh hermes tools.
Why extend it with Nstproxy Crawl
Các công cụ web của Hermes tự cung cấp giải pháp cho trường hợp thông thường nhưng có những giới hạn đã được tài liệu hóa mà bạn nên biết trước khi xây dựng quy trình làm việc xung quanh chúng. Công cụ web_extract tích hợp sẵn lấy một URL và trả về Markdown, nhưng tài liệu của Nous Research mô tả một ngân sách ký tự cố định trên kết quả — khoảng 15.000 ký tự theo mặc định, chia thành "~75% đầu / 25% đuôi" với một footer [TRUNCATED] rõ ràng khi một trang vượt quá điều đó — và tài liệu tương tự chỉ ra các trang nặng JS "trả về ít nội dung" hướng đến browser_navigate cộng với browser_snapshot. Đường dẫn trình duyệt đó hoạt động, nhưng đó là một dạng công cụ hoàn toàn khác: nó mở một phiên trình duyệt thật, trả về một ảnh chụp cây truy cập với các phần tử tương tác được đánh số, và cần một backend có khả năng CDP (Chrome địa phương, hoặc một tùy chọn cloud như Browserbase) để chạy — và xử lý proxy hoặc chống bot trên đường đó là một tính năng của cấp trình duyệt cloud có trả phí, không phải là thứ mà web_extract cung cấp.
Nstproxy Crawl lấp đầy khoảng cách giữa hai công cụ đó với một hình dạng thứ ba: một cuộc gọi API có thể render JavaScript, định tuyến qua hồ bơi proxy của Nstproxy với xử lý dấu vân tay trình duyệt, và trả về Markdown, HTML hoặc JSON sạch — gần với những gì web_extract đã trả về cho model, nhưng không có hành vi cắt giảm theo mặc định hoặc khoảng cách render JS, và không yêu cầu một đăng ký trình duyệt cloud riêng biệt để có phủ sóng proxy.
Take a Quick Look
Khi một trang mà một đại lý cần đọc nặng về JS hoặc bị phát hiện bot, Nstproxy Crawl chuyển nó thành Markdown sạch hoặc JSON trong một cuộc gọi API duy nhất được hỗ trợ bởi proxy — không cần backend tự động hóa trình duyệt riêng biệt.
Đại lý Hermes đã được cài đặt và có thể truy cập thông qua hermes trên PATH của bạn, với một backend mô hình đã được cấu hình qua hermes model.
Tài khoản Nstproxy và API key cho Crawl, được giữ trong một biến môi trường thay vì mã hóa cứng trong bất kỳ tệp nào.
Python 3.11, mà trình cài đặt của Hermes đã đóng gói sẵn.
Quen thuộc với việc chỉnh sửa YAML và Python — plugin bên dưới ngắn gọn, nhưng bạn sẽ muốn điều chỉnh mô tả và các tham số của công cụ cho quy trình làm việc của riêng mình.
Cài đặt
Các plugin Hermes sống dưới ~/.hermes/plugins/<tên-plugin>/. Tạo thư mục và ba tệp mà một plugin cần:
mkdir-p ~/.hermes/plugins/nstproxy-crawl
cd ~/.hermes/plugins/nstproxy-crawl
touch plugin.yaml __init__.py
Cấu hình
Khai báo siêu dữ liệu của plugin trong plugin.yaml:
name: nstproxy-crawl
version:"1.0"description: Lấy một URL dưới dạng Markdown sạch qua Nstproxy Crawl, với việc hiển thị JS và truy cập được hỗ trợ bởi proxy.
Đặt khóa API Nstproxy như một biến môi trường thay vì viết nó vào bất kỳ tệp plugin nào — các plugin Hermes chạy như Python thông thường, vì vậy os.environ có sẵn cho chúng như bất kỳ kịch bản nào:
exportNSTPROXY_API_KEY="your-api-key-here"
Bắt tay thực
Đăng ký công cụ bên trong __init__.py, theo mẫu plugin đã được tài liệu hóa của Hermes — một hàm register(ctx) gọi ctx.register_tool() với một sơ đồ và một trình xử lý:
import json
import os
import requests
NSTPROXY_API_BASE ="https://api.nstproxy.com"defregister(ctx): schema ={"name":"nstproxy_crawl_scrape","description":("Lấy một URL và trả về Markdown sạch, hiển thị JavaScript và ""định tuyến qua nhóm proxy của Nstproxy. Sử dụng điều này cho các trang mà ""web_extract trả về ít nội dung, hoặc cần truy cập được hỗ trợ bởi proxy."),"parameters":{"type":"object","properties":{"url":{"type":"string","description":"URL để lấy và chuyển đổi thành Markdown.",}},"required":["url"],},}defhandle_crawl_scrape(params,**kwargs):del kwargs
target_url =(params or{}).get("url","").strip()ifnot target_url:return json.dumps({"success":False,"error":"url là bắt buộc"}) api_key = os.environ.get("NSTPROXY_API_KEY")ifnot api_key:return json.dumps({"success":False,"error":"NSTPROXY_API_KEY chưa được thiết lập"}) response = requests.post(f"{NSTPROXY_API_BASE}/api/v1/crawl/scrape", headers={"x-api-key": api_key,"Content-Type":"application/json"}, json={"url": target_url,"formats":["markdown"],"onlyMainContent":True}, timeout=60,) response.raise_for_status() envelope = response.json()if envelope.get("err"):return json.dumps({"success":False,"error": envelope.get("msg","yêu cầu thất bại")}) result = envelope.get("data",{})ifnot result.get("success"):return json.dumps({"success":False,"error": result.get("status","crawl không hoàn thành")}) page = result.get("data",{})return json.dumps({"success":True,"title": page.get("metadata",{}).get("title",""),"markdown": page.get("markdown",""),}) ctx.register_tool( name="nstproxy_crawl_scrape", toolset="nstproxy_crawl", schema=schema, handler=handle_crawl_scrape,)
Hai chi tiết quan trọng ở đây, cả hai đều được rút ra từ tài liệu API và cẩm nang của Nstproxy: phản hồi được lồng — một lớp bao bọc ở cấp độ cao err/code/msg bao bọc một đối tượng success/status bên trong, mà chính nó bao bọc tải trọng data.markdown thực tế — và một HTTP 200 chỉ xác nhận rằng yêu cầu đã được nhận, không phải rằng crawl đã thành công, vì vậy trình xử lý kiểm tra err và success một cách rõ ràng thay vì chỉ tin tưởng vào mã trạng thái.
Đính kèm công cụ
Kích hoạt bộ công cụ mới theo cách mà bạn kích hoạt bất kỳ bộ công cụ tích hợp nào:
hermes tools
Chọn nstproxy_crawl từ danh sách tương tác (hoặc truyền trực tiếp với hermes chat --toolsets "web,nstproxy_crawl"), và mô hình sẽ có quyền truy cập vào nstproxy_crawl_scrape bên cạnh các công cụ hiện có trong suốt phiên làm việc.
Ví dụ đã làm
Đây là logic phân tích của trình xử lý được xác minh với phong bì phản hồi được tài liệu hóa của Nstproxy Crawl — chạy trên một thiết bị cục bộ phục vụ hình dạng JSON chính xác đó, vì môi trường này không có khóa API Nstproxy trực tiếp để gọi đến điểm cuối thực:
import json
import requests
defcrawl_scrape(api_base): resp = requests.get(f"{api_base}/scrape_response.json", timeout=10)# đại diện cho POST thực resp.raise_for_status() envelope = resp.json()if envelope.get("err"):return{"success":False,"error": envelope.get("msg","lỗi không xác định")} inner = envelope.get("data",{})ifnot inner.get("success"):return{"success":False,"error": inner.get("status","chưa hoàn thành")} page = inner.get("data",{})return{"success":True,"title": page.get("metadata",{}).get("title",""),"markdown": page.get("markdown","")}print(json.dumps(crawl_scrape("http://127.0.0.1:8100"), indent=2))
Đầu ra:
{"success":true,"title":"Sự nghiệp tại Example Corp","markdown":"# Trang sự nghiệp Ví dụ\n\nChúng tôi đang tuyển dụng một Kỹ sư Backend Cao cấp làm việc từ xa - Hoa Kỳ.\n\n[Đăng ký ở đây](https://example.com/jobs/8077887)"}
Điều này khớp với cùng cấu trúc lồng nhau err / data.success / data.data.markdown mà tài liệu API trực tiếp của Nstproxy mô tả, xác nhận logic giải nén trong trình xử lý plugin trước khi chỉ vào một khóa API thực.
Đầu ra trả về
Khi công cụ được kích hoạt, một yêu cầu ngôn ngữ tự nhiên như "đọc trang sự nghiệp tại nstproxy.com và tóm tắt các vai trò kỹ thuật mở" sẽ cung cấp cho mô hình một cuộc gọi nstproxy_crawl_scrape để thực hiện, và công cụ trả về một chuỗi JSON với các trường success, title, và markdown — hình dạng giống như đã hiển thị ở trên. Vòng lặp gọi công cụ của Hermes đọc Markdown theo cách tương tự như cách nó đọc đầu ra của web_extract, vì vậy không cần thay đổi cách mà tác nhân lý luận về kết quả; sự khác biệt hoàn toàn nằm ở những gì mà phép lấy dữ liệu cơ bản có thể xử lý.
Giới hạn
Plugin ở trên lấy một trang đơn mỗi lần gọi — nó không đặt maxDepth hoặc maxPages, vì những tham số đó chỉ áp dụng cho điểm cuối thu thập cấp trang của Nstproxy Crawl (POST /api/v1/crawl), không phải điểm cuối scrape một trang được sử dụng ở đây. Nếu bạn mở rộng plugin này để gọi đến điểm cuối cấp trang thay vì vậy, hãy đặt các giới hạn đó một cách rõ ràng: một cuộc thu thập trang không giới hạn được khởi động tự động bởi một tác nhân có thể lang thang vào các kết quả tìm kiếm, phân trang, hoặc các trang đăng nhập mà không có con người nào trong vòng lặp để nhận thấy.
Nstproxy Crawl tính phí theo mỗi lần lấy dữ liệu thành công thay vì theo mỗi lần thử — một phản hồi quay trở lại với mã trạng thái thực, bao gồm cả 404 hoặc 403, có thể tính phí một lần, vì phép lấy dữ liệu đó đã thành công mặc dù trang không. Sự phân biệt đó quan trọng hơn khi một tác nhân đang gọi công cụ theo lịch trình riêng hơn là cho một yêu cầu thủ công một lần, vì một URL xấu được cung cấp cho tác nhân trong một vòng lặp vẫn được tính vào việc sử dụng. Kiểm tra lại giá cả đăng ký hiện tại của Crawl trước khi phụ thuộc vào một con số cụ thể, vì nó có thể thay đổi, và xem tài liệu tham khảo API Crawl để biết sơ đồ yêu cầu/phản hồi đầy đủ mà plugin này xây dựng trên đó, bao gồm điểm cuối thu thập cấp trang và các tham số maxDepth/maxPages của nó. Thông báo phát động Crawl của Nstproxy bao gồm bộ tính năng đầy đủ hơn nếu tích hợp này phát triển vượt ra ngoài các phép lấy dữ liệu một trang.
Trình xử lý cũng giả định rằng API Crawl phản hồi trong thời gian chờ 60 giây của nó; một trang chậm hoặc nặng JS có thể vượt quá thời gian đó, trong trường hợp đó, công cụ nên trả về một thất bại rõ ràng thay vì để yêu cầu bị treo — các phiên bản sản xuất của plugin này nên bắt requests.Timeout một cách rõ ràng thay vì để nó lan truyền như một ngoại lệ không được xử lý, vì Hermes mong đợi các trình xử lý công cụ luôn trả về một chuỗi JSON.
Kết luận
Các công cụ web tích hợp sẵn của Hermes Agent bao trùm hầu hết các trường hợp, nhưng một kết quả web_extract bị cắt ngắn hoặc một phiên browser_navigate cần một backend cloud-browser trả phí để hỗ trợ proxy là cả hai cạnh thực tế mà bạn sẽ cuối cùng gặp phải. Một plugin nhỏ — một tệp khai báo plugin.yaml và một chức năng register(ctx) bọc một cuộc gọi HTTP duy nhất đến điểm cuối thu thập của Nstproxy Crawl — đóng khoảng cách đó với một cuộc gọi công cụ dựa trên proxy, render JavaScript trả về cùng loại Markdown mà tác nhân đã biết cách đọc. Giữ khóa API trong một biến môi trường, giới hạn bất kỳ lần thu thập cấp trang nào bạn thêm sau này bằng các giới hạn về trang và độ sâu rõ ràng, và tích hợp sẽ phù hợp vào vòng lặp gọi công cụ hiện tại của Hermes mà không thay đổi cách mà tác nhân lý luận về kết quả của nó.
Câu hỏi thường gặp
Q: Hermes Agent là gì?
Đại lý Hermes là một đại lý AI mã nguồn mở, cấp phép MIT, tự lưu trữ được xây dựng bởi Nous Research. Nó hoạt động như một ứng dụng terminal và ứng dụng desktop gốc, hỗ trợ Telegram, Discord, Slack, WhatsApp và Signal bên cạnh việc sử dụng CLI đơn giản, và được xây dựng xung quanh một hệ thống kỹ năng tự cải thiện với bộ nhớ kéo dài qua các phiên.
Q: Tôi có cần sử dụng Nous Portal để chạy Đại lý Hermes không?
Không. hermes model chuyển đổi giữa các backend — Nous Portal, OpenRouter, OpenAI, hoặc một điểm cuối tùy chỉnh — mà không thay đổi bất kỳ mã nào, vì vậy Nous Portal là một tùy chọn trong số nhiều tùy chọn khác chứ không phải là yêu cầu.
Q: Tại sao không chỉ sử dụng công cụ web_extract tích hợp sẵn của Hermes?web_extract hoạt động tốt cho các trang bình thường, nhưng tài liệu của chính Nous Research mô tả việc cắt xén đầu ra mặc định ~15,000 ký tự và lưu ý rằng các trang nặng JS mà trả về ít nội dung nên sử dụng browser_navigate/browser_snapshot. Một plugin Nstproxy Crawl cung cấp cho đại lý một cuộc gọi công cụ duy nhất xử lý việc dựng JS và truy cập thông qua proxy trực tiếp, mà không có sự cắt xén hoặc một backend tự động hóa trình duyệt riêng biệt.
Q: Sự tích hợp này có sử dụng crawling cấp trang web của Nstproxy Crawl hay chỉ các trang đơn lẻ?
Plugin trong hướng dẫn này gọi điểm cuối scrape của Crawl cho các trang đơn lẻ. Crawling cấp trang web là một điểm cuối riêng biệt (POST /api/v1/crawl) yêu cầu các giới hạn maxDepth và maxPages rõ ràng — hãy thêm những giới hạn đó một cách có chủ đích nếu bạn mở rộng plugin để crawl toàn bộ một trang web, vì một đại lý tự động không có cảm nhận tích hợp về khi nào một lần crawl đã đi đủ xa.
Q: Tôi nên đặt chìa khóa API Nstproxy của mình ở đâu?
Trong một biến môi trường (NSTPROXY_API_KEY trong ví dụ của hướng dẫn này), được đọc tại thời gian chạy bằng os.environ.get(). Không bao giờ viết nó trực tiếp vào plugin.yaml, __init__.py, hoặc bất kỳ tệp nào có thể kết thúc trong kiểm soát phiên bản hoặc cấu hình Hermes chia sẻ.
Q: Đại lý Hermes có thể gọi Nstproxy Crawl thông qua MCP thay vì một plugin không?
Hermes hỗ trợ kết nối bất kỳ máy chủ MCP nào qua ~/.hermes/config.yaml, nhưng Nstproxy Crawl được công khai như một REST API thay vì một máy chủ MCP đã xuất bản, vì vậy plugin đăng ký một công cụ tùy chỉnh — cách tiếp cận trong hướng dẫn này — là con đường tích hợp trực tiếp hiện nay. Một lớp bao bọc MCP xung quanh cùng một REST API cũng sẽ hoạt động, nếu bạn muốn tiêu chuẩn hóa trên MCP giữa nhiều đại lý.
Q: Điều gì xảy ra nếu yêu cầu crawl thất bại hoặc quá thời gian?
Trình xử lý trong hướng dẫn này kiểm tra các trường err và success của phong bì phản hồi một cách rõ ràng và trả về một đối tượng JSON lỗi thay vì ném ra một ngoại lệ, vì Hermes mong đợi mỗi trình xử lý công cụ trả về một chuỗi JSON. Một phiên bản sản xuất cũng nên bắt các lỗi ở mức mạng như requests.Timeout và requests.ConnectionError theo cách tương tự, để một lần truy cập không thành công không làm sập vòng lặp gọi công cụ của đại lý.
Q: Điều này có thay thế hoàn toàn các công cụ tự động hóa trình duyệt của Hermes không?
Không. browser_navigate và browser_snapshot vẫn là lựa chọn đúng cho các nhiệm vụ cần phải nhấp, cuộn, điền vào một mẫu, hoặc tương tác với một trang theo cách khác ngoài việc chỉ đọc nó. Plugin Nstproxy Crawl là một lối đi nhanh hơn, rẻ hơn cụ thể cho "đọc nội dung của trang này", điều này bao gồm một phần lớn những gì các công cụ web của một đại lý được sử dụng thực tế.
Hermes Agent là AI agent mã nguồn mở, tự lưu trữ của Nous Research. Đây là những gì nó làm, nơi mà các công cụ web tích hợp sẵn của nó gặp giới hạn thực sự, và cách để cung cấp cho nó quyền truy cập vào các trang JS-rendering, proxy-backed với một plugin Nstproxy Crawl ngắn.
Lena Zhou
Aug. 24th 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.