🤖HermesBlog
Hướng dẫn Chính thức của Hermes · Parte 258/9/2026

Hướng dẫn 25: Thực thi Mã

Hướng dẫn 25: Thực thi Mã — hướng dẫn dễ hiểu dựa trên tài liệu chính thức

Đây là một phần trong chuỗi hướng dẫn chính thức của Hermes Agent. Xem tất cả các bài hướng dẫn

Hãy tưởng tượng bạn đang nướng một chiếc bánh và thay vì phải đi lấy từng nguyên liệu một, bạn viết ra toàn bộ công thức, đưa cho người phụ giúp, và họ chỉ mang về cho bạn chiếc bánh đã hoàn thành. Đó chính xác là những gì Code Execution làm cho Hermes Agent — nó cho phép agent chạy một tập lệnh Python hoàn chỉnh để gọi nhiều công cụ bên trong, sau đó chỉ trả về kết quả cuối cùng cho cuộc trò chuyện.


Hermes tutorial

Code Execution là gì?

Thông thường, khi Hermes cần tìm kiếm trên web, đọc một tệp tin, hoặc chạy một lệnh, nó thực hiện từng bước một — và mọi kết quả trung gian đều được nạp vào “bộ nhớ” (cửa sổ ngữ cảnh) của nó. Điều đó thật chậm và lãng phí token.

Với công cụ execute_code, Hermes viết một tập lệnh Python có thể gọi các công cụ một cách theo chương trình — như web_search, read_file, hoặc patch — tất cả trong một lần. Tập lệnh chạy trong một tiến trình con riêng biệt, và chỉ có đầu ra của print() được trả về cho agent. Tất cả dữ liệu trung gian lộn xộn vẫn được ẩn đi.


Cách hoạt động: Từng bước một

Bước 1: Agent viết một tập lệnh Python
Nó bắt đầu bằng việc import các công cụ từ một mô-đun đặc biệt:

from hermes_tools import web_search, web_extract

Bước 2: Hermes tạo một mô-đun trợ giúp
Nó tự động tạo ra một tệp hermes_tools.py để kết nối tập lệnh của bạn với agent chính.

Bước 3: Một kênh giao tiếp được mở
Hermes mở một Unix domain socket (một “đường dây điện thoại” cục bộ nhanh giữa các tiến trình) và bắt đầu một luồng lắng nghe.

Bước 4: Tập lệnh chạy trong một tiến trình con
Mỗi lần gọi công cụ bên trong tập lệnh của bạn sẽ truyền qua socket đó trở lại Hermes, nó thực thi và gửi kết quả trở lại.

Bước 5: Chỉ có đầu ra của print() được trả về
Các câu lệnh print() của tập lệnh là thứ duy nhất mà LLM nhìn thấy. Tất cả các kết quả công cụ trung gian không bao giờ đi vào cửa sổ ngữ cảnh — tiết kiệm một lượng lớn token.


Khi nào Hermes sử dụng tính năng này?

Agent tự động chọn execute_code khi nó phát hiện:

  • 3 lần gọi công cụ trở lên có logic xen kẽ (như lọc hoặc so sánh)
  • Xử lý dữ liệu hàng loạt — ví dụ: tìm kiếm nhiều tệp tin và trích xuất các đoạn trích
  • Vòng lặp — lặp lại một hành động trên nhiều mục

Điểm mạnh lớn nhất? Hiệu quả token. Thay vì đưa mọi kết quả tìm kiếm trở lại cuộc trò chuyện, chỉ có bản tóm tắt cuối cùng được truyền qua.


Các ví dụ thực tế bạn có thể thử

1. Quy trình xử lý dữ liệu

from hermes_tools import search_files, read_file
import json

# Tìm tất cả các tệp cấu hình và trích xuất cài đặt cơ sở dữ liệu
matches = search_files("database", path=".", file_glob="*.yaml", limit=20)
configs = []
for match in matches.get("matches", []):
    content = read_file(match["path"])
    configs.append({"file": match["path"], "preview": content["content"][:200]})

print(json.dumps(configs, indent=2))

2. Nghiên cứu web nhiều bước

from hermes_tools import web_search, web_extract
import json

results = web_search("Rust async runtime comparison 2025", limit=5)
summaries = []
for r in results["data"]["web"]:
    page = web_extract([r["url"]])
    for p in page.get("results", []):
        if p.get("content"):
            summaries.append({
                "title": r["title"],
                "url": r["url"],
                "excerpt": p["content"][:500]
            })

print(json.dumps(summaries, indent=2))

3. Tái cấu trúc tệp hàng loạt

from hermes_tools import search_files, read_file, patch

matches = search_files("old_api_call", path="src/", file_glob="*.py")
fixed = 0
for match in matches.get("matches", []):
    result = patch(
        path=match["path"],
        old_string="old_api_call(",
        new_string="new_api_call(",
        replace_all=True
    )
    if "error" not in str(result):
        fixed += 1

print(f"Đã sửa {fixed} tệp trong số {len(matches.get('matches', []))} kết quả khớp")

4. Quy trình xây dựng và kiểm thử

from hermes_tools import terminal
import json

result = terminal("cd /project && python -m pytest --tb=short -q 2>&1", timeout=120)
output = result.get("output", "")

passed = output.count(" passed")
failed = output.count(" failed")

print(json.dumps({"passed": passed, "failed": failed}, indent=2))

Những điểm chính cần nhớ

  • Các công cụ có sẵn trong tập lệnh: web_search, web_extract, read_file, write_file, search_files, patchterminal (chỉ chạy ở chế độ nền trước).
  • Chỉ có đầu ra của print() được trả về — mọi thứ khác đều được ẩn đi.
  • Rất hữu ích cho các vòng lặp, lọc và quy trình nhiều bước — giống như việc cung cấp cho Hermes một môi trường lập trình mini.

Tóm tắt

Code Execution biến Hermes từ một trợ lý từng bước thành một bộ xử lý hàng loạt. Nó viết một tập lệnh, chạy nó và chỉ đưa cho bạn câu trả lời cuối cùng — tiết kiệm thời gian, token và gánh nặng tinh thần. Nếu bạn thấy Hermes thực hiện nhiều lần gọi công cụ lặp đi lặp lại, có lẽ nó đang sử dụng tính năng này bên trong.

Tiếp theo: Bài hướng dẫn 26 — Xử lý hàng loạt: chạy hàng trăm lời nhắc song song.

📖 Tài liệu chính thức

この記事は Hermes Agent のTài liệu chính thứcに基づいています:Tài liệu chính thức › user-guide/features/code-execution