README.mdXem bản gốc Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.
Tìm hiểu Hermes Agent
Xây dựng một AI agent tự động ở cấp độ sản xuất từ đầu bằng Python. hướng dẫn ưu tiên code gồm 27 chương bao gồm vòng lặp agent, hệ thống công cụ, tính bền vững của phiên, bộ nhớ, kỹ năng, nén ngữ cảnh, MCP, cổng đa nền tảng (Telegram / Discord / Slack / WeChat) và khả năng tự tiến hóa dựa trên RL — lấy cảm hứng từ Hermes Agent.
Mỗi chương đều có một triển khai tham chiếu có thể chạy được trong agents/sNN_*.py, đi kèm với lời giải thích bằng văn xuôi bên dưới docs/en/ (và docs/zh/ cho nhánh tiếng Trung). Đọc, chạy, chỉnh sửa, lặp lại.
repo này không cố gắng phản ánh mọi chi tiết sản phẩm từ cơ sở mã Hermes Agent. Nó tập trung vào các cơ chế thực sự quyết định liệu một agent có thể hoạt động tự chủ trên các nền tảng hay không:
- vòng hội thoại
- đăng ký và gửi công cụ
- tính kiên trì của phiên
- lắp ráp prompt
- nén ngữ cảnh
- quản lý trí nhớ và kỹ năng
- hệ thống kỹ năng
- sự cho phép và an toàn
- cổng đa nền tảng
- backend terminal
- lập kế hoạch
- định tuyến khả năng bên ngoài
Mục tiêu rất đơn giản:
hiểu rõ về cốt lõi thiết kế thực sự để bạn có thể tự xây dựng lại nó.
Repo này thực sự dạy gì
Đầu tiên là một câu:
Mô hình thực hiện lý luận. harness mang lại cho mô hình một môi trường làm việc trải rộng trên các nền tảng, duy trì qua các phiên và quản lý các kỹ năng của chính mô hình đó.
Môi trường làm việc đó được tạo thành từ một số bộ phận hợp tác:
Agent Loop: gửi tin nhắn đến mô hình, thực hiện lệnh gọi công cụ, nối kết quả, tiếp tụcTool System: lớp điều phối tự đăng ký - bàn tay của agentSession Store: SQLite với FTS5 — bộ nhớ hội thoại vẫn tồn tại khi khởi động lạiPrompt Builder: tập hợp các lời nhắc hệ thống từ tính cách, bộ nhớ, cấu hình và ngữ cảnhContext Compression: giữ cửa sổ hoạt động nhỏ khi cuộc trò chuyện kéo dàiMemory & Skills: kiến thức bền vững và các tập tin kỹ năng do agent quản lýPermission System: phát hiện các lệnh nguy hiểm trước khi thực hiệnGateway: một vòng lặp agent duy nhất lắng nghe trên Telegram, Discord, Slack, WeChat, v.v.Terminal Backends: chạy lệnh cục bộ, trong Docker, qua SSH hoặc trên nền tảng không có máy chủCron / MCP / Voice: phát triển lõi agent đơn thành một nền tảng làm việc đầy đủ
Đây là lời hứa giảng dạy của repo:
- dạy dòng chính theo thứ tự rõ ràng
- giải thích các khái niệm xa lạ trước khi dựa vào chúng
- bám sát cấu trúc hệ thống thực
- tránh khiến người học chìm đắm trong những chi tiết không liên quan về sản phẩm
Repo này cố tình không dạy điều gì
Repo này không cố gắng bảo tồn mọi chi tiết tồn tại trong hệ thống sản xuất.
Nếu một chi tiết không phải là trọng tâm trong mô hình hoạt động cốt lõi của tổng đài viên thì chi tiết đó sẽ không chiếm ưu thế trong quá trình giảng dạy. Điều đó bao gồm những thứ như:
- đóng gói, mảnh Nix và cơ chế phát hành
- trang đích và tài sản tiếp thị
- đăng ký doanh nghiệp và nối dây thanh toán
- đo từ xa và phân tích
- Đường dẫn đào tạo RL và nội bộ người chạy hàng loạt
- các yêu cầu API dành riêng cho nền tảng (phân tích cú pháp XML của WeChat, bàn phím nội tuyến Telegram)
- mỹ phẩm da / công cụ chủ đề
- logic di cư lịch sử
Những chi tiết đó có thể quan trọng trong sản xuất. Họ không thuộc về trung tâm của lộ trình giảng dạy 0-1.
Đây là dành cho ai
Người đọc giả định:
- biết Python cơ bản
- hiểu các hàm, lớp, cơ bản về async/await
- có thể hoàn toàn mới đối với hệ thống agent hoặc bot đa nền tảng
Vì vậy, repo cố gắng giữ một số quy tắc giảng dạy mạnh mẽ:
- giải thích một khái niệm trước khi sử dụng nó
- giữ một khái niệm được giải thích đầy đủ ở một nơi chính
- bắt đầu từ "nó là gì", sau đó là "tại sao nó tồn tại", rồi "làm thế nào để triển khai nó"
- tránh buộc người mới bắt đầu phải lắp ráp hệ thống từ các mảnh rời rạc
Thứ tự đọc đề xuất
- Tổng quan:
docs/en/s00-architecture-overview.md - Thứ tự đọc mã:
docs/en/s00f-code-reading-order.md - Bảng thuật ngữ:
docs/en/glossary.md - Phạm vi giảng dạy:
docs/en/teaching-scope.md - Cấu trúc dữ liệu:
docs/en/data-structures.md
Nếu đây là chuyến thăm đầu tiên của bạn, hãy bắt đầu ở đây
Đừng mở các chương ngẫu nhiên trước.
Con đường an toàn nhất là:
- Đọc
docs/en/s00-architecture-overview.mdđể có bản đồ hệ thống đầy đủ. - Đọc
docs/en/s00f-code-reading-order.mdđể bạn biết nên mở tệp nguồn nào trước. - Thực hiện theo năm giai đoạn theo thứ tự:
s01-s06 -> s07-s11 -> s12-s15 -> s16-s20 -> s21-s27. - Sau mỗi giai đoạn, hãy dừng lại và tự mình xây dựng lại phiên bản nhỏ nhất trước khi tiếp tục.
Nếu chương giữa và chương cuối bắt đầu mờ cùng nhau, hãy đặt lại theo thứ tự sau:
docs/en/data-structures.mddocs/en/entity-map.md- sau đó quay lại nội dung chương
Năm giai đoạn
s01-s06: xây dựng lõi agent đơn hoạt động bền bỉs07-s11: thêm thông tin — bộ nhớ, kỹ năng, an toàn, ủy quyền và cấu hìnhs12-s15: đa nền tảng - cổng, bộ điều hợp, backend terminal và lập lịchs16-s20: thêm các khả năng nâng cao - MCP, trình duyệt, giọng nói, tầm nhìn và đánh giá lý lịchs21-s27: tự cải thiện — tạo kỹ năng, hook, quỹ đạo/RL, plugin, đánh giá và tối ưu hóa
Chương chính
| Chương | Chủ đề | Những gì bạn nhận được |
|---|---|---|
s00 | Tổng quan về kiến trúc | bản đồ toàn cầu, các thuật ngữ chính và thứ tự học tập |
s01 | Vòng agent | vòng hội thoại đồng bộ — hỏi, gọi công cụ, nối thêm, tiếp tục |
s02 | Hệ thống công cụ | đăng ký công cụ tự đăng ký với điều phối công văn |
s03 | Cửa hàng phiên | Tính bền bỉ của SQLite + FTS5 — các cuộc hội thoại vẫn tồn tại khi khởi động lại |
s04 | Trình tạo nhắc nhở | Tập hợp lời nhắc hệ thống dựa trên phần từ tính cách, bộ nhớ và cấu hình |
s05 | Nén ngữ cảnh | tóm tắt LLM được kích hoạt tự động khi ngữ cảnh quá dài |
s06 | Phục hồi lỗi | Phân loại lỗi API, thử lại với thời gian chờ và chuyển đổi dự phòng của nhà cung cấp |
s07 | Hệ thống bộ nhớ | kiến thức liên tục giữa các phiên với MEMORY.md và USER.md |
s08 | Hệ Thống Kỹ Năng | kỹ năng do agent quản lý - tạo, chỉnh sửa và thực thi |
s09 | Hệ thống cấp phép | cổng phát hiện và phê duyệt lệnh nguy hiểm |
s10 | agent phụ | tạo ra bối cảnh mới cho các nhiệm vụ con bị cô lập |
s11 | Hệ thống cấu hình | Cấu hình YAML, env vars, profile và di chuyển runtime |
s12 | Kiến trúc cổng | vòng lặp gửi tin nhắn đa nền tảng |
s13 | Bộ điều hợp nền tảng | xây dựng tích hợp cho Telegram, Discord, Slack, WeChat, v.v. |
s14 | Phần cuối của terminal | chạy các lệnh trong Docker, qua SSH, trên Modal hoặc Daytona |
s15 | Lập lịch Cron | tự động hóa dựa trên thời gian với chuỗi thời lượng và biểu thức cron |
s16 | Tích hợp MCP | định tuyến khả năng bên ngoài thông qua Giao thức bối cảnh mô hình |
s17 | Tự động hóa trình duyệt | Nhà viết kịch + Trình duyệt để tương tác trên web |
s18 | Tiếng nói & Tầm nhìn | Phân tích hình ảnh và đường ống TTS/STT |
s19 | Giao diện CLI | nhắc_toolkit + Phong phú cho trải nghiệm terminal tương tác |
s20 | Đánh giá cơ bản | cứ sau N lượt, một thẻ nền sẽ cập nhật bộ nhớ và trích xuất các kỹ năng |
s21 | Vòng sáng tạo kỹ năng | đánh giá cơ bản trích xuất các mẫu thành các kỹ năng có thể sử dụng lại |
s22 | Hệ thống móc | móc vòng đời để mở rộng mà không cần sửa đổi mã lõi |
s23 | Quỹ đạo & RL | quỹ đạo hội thoại trở thành dữ liệu huấn luyện để cải tiến mô hình |
s24 | Kiến trúc plugin | nhà cung cấp bộ nhớ, nén và khả năng có thể cắm được |
s25 | Tổng quan về Tự tiến hóa | cái nhìn sâu sắc cốt lõi, bốn mục tiêu phát triển và tổng quan toàn bộ quy trình |
s26 | Hệ thống đánh giá | bộ dữ liệu đánh giá, tính điểm thể lực LLM-với tư cách là giám khảo và cổng ràng buộc |
s27 | Tối ưu hóa & Triển khai | các khái niệm phản hồi → thay đổi → vòng lặp chọn, quy trình đầy đủ và Giai đoạn 2-4 |
Mục lục chương: Cần tập trung vào điều gì trong mỗi chương
Nếu đây là lần đầu tiên bạn học tài liệu này một cách có hệ thống, đừng dồn sự chú ý của bạn vào tất cả các chi tiết. Mỗi chương tập trung vào 3 nội dung:
- Chương này bổ sung thêm những khả năng mới nào.
- Nơi sinh sống của nhà nước chủ chốt.
- Sau khi làm xong bạn có thể tự tay viết cơ chế tối thiểu này được không?
| Chương | Cấu trúc dữ liệu chính / Thực thể | Những gì bạn nên có sau chương này |
|---|---|---|
s01 | messages danh sách / AIAgent lớp / run_conversation() | một vòng hội thoại đồng bộ hoạt động tối thiểu |
s02 | ToolRegistry / ToolEntry / tool_result | hệ thống công cụ tự đăng ký, tự khám phá |
s03 | SessionDB / state.db / Chỉ số FTS5 | một lớp kiên trì SQLite — các cuộc hội thoại vẫn tồn tại khi khởi động lại |
s04 | build_context_files_prompt() / build_skills_system_prompt() | một quy trình tập hợp các lời nhắc từ tính cách, trí nhớ và cấu hình |
s05 | ContextCompressor / ngưỡng kích hoạt nén | lớp tóm tắt tự động khi ngữ cảnh quá dài |
s06 | ClassifiedError / FailoverReason / classify_api_error() | phân loại lỗi + thử lại thời gian chờ + chuyển đổi dự phòng của nhà cung cấp |
s07 | MemoryStore / MemoryManager / MEMORY.md / USER.md | một lớp ngăn cách "ngữ cảnh tạm thời" khỏi "bộ nhớ phiên chéo" |
s08 | SkillMeta / SkillBundle / tập tin kỹ năng SKILL.md | một hệ thống kỹ năng có thể tạo, chỉnh sửa và thực thi |
s09 | DANGEROUS_PATTERNS / detect_dangerous_command() / _ApprovalEntry | quy trình phê duyệt "các hoạt động nguy hiểm phải vượt qua cổng" |
s10 | delegate_tool / đứa trẻ messages / bị cô lập AIAgent | cơ chế subagent với bối cảnh riêng biệt cho việc ủy quyền một lần |
s11 | cấu hình dict / Profile chức năng quản lý / di chuyển | Cấu hình YAML + hồ sơ + di chuyển runtime |
s12 | GatewayRunner / MessageEvent / định tuyến nền tảng | vòng gửi tin nhắn đa nền tảng thống nhất |
s13 | BasePlatformAdapter / MessageType / SendResult | một mẫu bộ điều hợp nền tảng có thể tái sử dụng |
s14 | BaseEnvironment /local/docker/ssh/modal/daytona | môi trường thực thi trừu tượng: cục bộ, Docker, SSH, đám mây |
s15 | parse_schedule() / create_job() / get_due_jobs() / dicts công việc | lớp lập kế hoạch "khi đến lúc, công việc bắt đầu" |
s16 | mcp_tool / Cấu hình MCP / cầu nối lược đồ công cụ | một bus để cắm các công cụ và khả năng bên ngoài vào hệ thống |
s17 | browser_tool / Nhà viết kịch / Nhà cung cấp cơ sở trình duyệt | lớp tự động hóa trình duyệt để tương tác trên web |
s18 | tts_tool / voice_mode / vision_tools | đường ống đa phương thức: I/O giọng nói + phân tích hình ảnh |
s19 | HermesCLI / CommandDef / KawaiiSpinner / Kết xuất phong phú | giao diện terminal tương tác đầy đủ tính năng |
s20 | BackgroundReviewer / _MEMORY_REVIEW_PROMPT / bộ đếm kích hoạt kép | cơ chế xem xét lý lịch "mỗi N lượt, tự động phản ánh → cập nhật bộ nhớ/kỹ năng" |
s21 | vòng lặp tạo kỹ năng / lời nhắc trích xuất mẫu / quy trình kiên trì kỹ năng | điều kiện tiên quyết "khám phá các khuôn mẫu → tạo ra các kỹ năng có thể tái sử dụng" để tự tiến hóa |
s22 | HookRegistry / PluginHookRegistry / trình xử lý BOOT.md | hook vòng đời — chèn logic tùy chỉnh mà không sửa đổi mã lõi |
s23 | convert_to_trajectory() / compress_trajectory() / chức năng khen thưởng | dữ liệu hội thoại → quy trình đào tạo để cải tiến mô hình |
s24 | giao diện plugin / nhà cung cấp bộ nhớ / nhà cung cấp nén | bộ nhớ có thể cắm và nén mà không cần chạm vào mã lõi |
s25 | EvalExample / EvalDataset | cấu trúc dữ liệu nền tảng cho quá trình tự tiến hóa |
s26 | SyntheticDatasetBuilder / FitnessScore / ConstraintValidator | cơ sở hạ tầng đo lường — tạo dữ liệu, kết quả điểm số, thay đổi cổng |
s27 | SkillOptimizer / EvolutionResult / evolve_skill() | vòng lặp tối ưu hóa và quy trình 7 bước đầy đủ |
Phương pháp đọc cho người mới bắt đầu
Cách tiếp cận 1: Đường chính ổn định
Tốt nhất cho độc giả lần đầu tiên tiếp xúc với hệ thống agent.
Đọc theo thứ tự sau:
s00 -> s01 -> ... -> s20 -> s21 -> ... -> s27 (theo các con số; s24 chỉ là tài liệu).
Cách tiếp cận 2: Xây dựng trước, hoàn thiện sau
Tốt nhất cho độc giả "chạy rồi điền vào chỗ trống".
Đọc theo thứ tự sau:
s01-s06: xây dựng một agent cốt lõi với tính bền bỉ và nén ngữ cảnhs07-s11: thêm bộ nhớ, kỹ năng, an toàn, ủy quyền và cấu hìnhs12-s15: đa nền tảng, tìm hiểu cách thực thi trên nhiều môi trườngs16-s20: khả năng nâng cao cộng với khả năng tự đánh giá cơ bảns21-s27: bước vào quá trình tự phát triển - tạo kỹ năng, móc nối, quỹ đạo, đánh giá và tối ưu hóa
Cách tiếp cận 3: Khi bạn gặp khó khăn
Nếu bạn gặp phải bức tường ở chương giữa hoặc chương cuối, đừng tiến về phía trước một cách mù quáng.
Đặt lại theo thứ tự sau:
docs/en/s00-architecture-overview.mddocs/en/data-structures.mddocs/en/entity-map.md- chương bạn đang mắc kẹt
Khi người đọc thực sự gặp khó khăn, thường thì đó không phải là "Tôi không thể đọc được mã" mà là:
- cơ chế này cắm vào lớp nào?
- cấu trúc dữ liệu nào giữ trạng thái này?
- sự khác biệt giữa thuật ngữ này và thuật ngữ khác trông giống nhau là gì?
Bắt đầu nhanh
git clone <repo-url>
cd learn-hermes-agent
pip install -r requirements.txt
cp .env.example .env
Sau đó định cấu hình khóa API của bạn trong .envvà chạy:
python agents/s01_agent_loop.py
Thứ tự đề xuất:
- Chạy
s01và đảm bảo vòng lặp tối thiểu thực sự hoạt động. - Đọc
s00, sau đó di chuyển quas01 -> s06theo thứ tự. - Chỉ sau khi lõi agent đơn cộng với tính bền bỉ của nó cảm thấy ổn định, hãy tiếp tục vào
s07 -> s11. - Chuyển sang các chương về cổng và nền tảng
s12 -> s15chỉ sau khi agent cốt lõi có ý nghĩa. - Tiếp tục
s16 -> s20, sau đó là các chương tự tiến hóas21 -> s27.
Cách đọc từng chương
Mỗi chương sẽ dễ tiếp thu hơn nếu bạn giữ nguyên nhịp đọc:
- vấn đề gì sẽ xuất hiện nếu không có cơ chế này
- khái niệm mới có ý nghĩa gì
- việc triển khai đúng nhỏ nhất sẽ như thế nào
- nơi nhà nước thực sự sống
- cách nó cắm lại vào vòng lặp
- Dừng lại ở đâu trước, và điều gì có thể đợi đến sau
Nếu bạn tiếp tục hỏi:
- "Đây là cốt lõi chính hay chỉ là chi tiết phụ?"
- "Tiểu bang này thực sự sống ở đâu?"
quay lại:
Cấu trúc repository
learn-hermes-agent/
├── agents/ # runnable Python reference implementations per chapter (s24 is an exception, see below)
├── docs/zh/ # Chinese mainline docs
├── docs/en/ # English docs
├── illustrations/ # chalkboard-style diagrams for each chapter
├── tests/ # smoke tests
├── web/ # web teaching platform (optional)
├── .env.example # environment variable template
└── requirements.txt # Python dependencies
Lưu ý:
s24 Plugin Architecturehiện chỉ gửi kèm tài liệu (docs/en/s24-plugin-architecture.mdvà đối tác Trung Quốc). không cóagents/s24_*.pythực hiện tham khảo. Tài liệu độc lập và không chặn phần còn lại của thứ tự đọc.
Dạy đánh đổi
Để đảm bảo "có thể xây dựng từ 0 đến 1", repo này thực hiện sự cân bằng có chủ ý:
- Dạy phiên bản đúng tối thiểu trước, sau đó giải thích ranh giới mở rộng.
- Nếu cơ chế thực sự phức tạp nhưng ý tưởng cốt lõi thì không, hãy dạy ý tưởng cốt lõi trước.
- Nếu một thuật ngữ nâng cao xuất hiện, hãy giải thích nó - đừng cho rằng người đọc đã biết.
- Nếu một trường hợp biên trong hệ thống thực có giá trị giảng dạy thấp, hãy loại bỏ nó hoàn toàn.
Điều này có nghĩa là repo nhằm mục đích:
Độ trung thực cao trên các cơ chế cốt lõi, cân bằng có chủ ý ở các chi tiết ngoại vi.
Trạng thái ngôn ngữ
Tiếng Trung là dòng dạy kinh điển và là phiên bản chuyển động nhanh nhất.
zh: được đánh giá nhiều nhất và đầy đủ nhấten: tất cả các chương s00-s27 đều có sẵn; Tiếng Trung được cập nhật đầu tiên
Nếu bạn muốn có lộ trình giải thích đầy đủ và được cải tiến thường xuyên nhất, trước tiên hãy sử dụng tài liệu tiếng Trung.
Mục tiêu cuối cùng
Đến cuối repo, bạn sẽ có thể trả lời rõ ràng những câu hỏi sau:
- trạng thái tối thiểu mà một agent tự trị cần duy trì qua các phiên là gì?
- tại sao sổ đăng ký công cụ lại là trung tâm năng lực của agent?
- làm cách nào để một vòng lặp hội thoại có thể mở rộng tới hơn 15 nền tảng nhắn tin?
- mỗi bộ nhớ, kỹ năng, quyền, nén ngữ cảnh và khôi phục lỗi giải quyết được vấn đề gì?
- làm thế nào để phần phụ trợ của terminal loại bỏ môi trường thực thi?
- khi nào hệ thống một agent nên phát triển thành cổng, lập lịch, MCP và thoại?
Nếu bạn có thể trả lời những câu hỏi đó một cách rõ ràng và tự mình xây dựng một hệ thống tương tự thì repo này đã hoàn thành công việc của nó.
Đây không phải là "sao chép từng dòng mã nguồn." Đây là "nắm bắt những thiết kế thực sự quan trọng rồi tự mình xây dựng nó."