🤖HermesBlog
Официальные Учебники Hermes · Часть 258/9/2026

Учебник 25: Выполнение кода

Учебник 25: Выполнение кода — простое для понимания руководство на основе официальной документации

Это часть официальной серии руководств Hermes Agent. Смотреть все руководства

Представьте, что вы печёте торт и вместо того, чтобы приносить ингредиенты по одному, вы записываете весь рецепт, отдаёте его помощнику, и он приносит только готовый торт. Именно это Code Execution делает для Hermes Agent — он позволяет агенту запустить полноценный Python-скрипт, который вызывает несколько инструментов внутри, а затем возвращает в разговор только конечный результат.


Hermes tutorial

Что такое Code Execution?

Обычно, когда Hermes нужно выполнить поиск в интернете, прочитать файл или запустить команду, он делает это шаг за шагом — и каждый промежуточный результат попадает в его «память» (контекстное окно). Это медленно и расходует токены.

С помощью инструмента execute_code Hermes пишет Python-скрипт, который может вызывать инструменты программно — например, web_search, read_file или patch — всё за один раз. Скрипт выполняется в отдельном дочернем процессе, и только вывод print() возвращается агенту. Все промежуточные данные остаются скрытыми.


Как это работает: пошагово

Шаг 1: Агент пишет Python-скрипт
Он начинает с импорта инструментов из специального модуля:

from hermes_tools import web_search, web_extract

Шаг 2: Hermes создаёт вспомогательный модуль
Он автоматически генерирует заглушку hermes_tools.py, которая связывает ваш скрипт с основным агентом.

Шаг 3: Открывается канал связи
Hermes открывает Unix domain socket (быструю локальную «телефонную линию» между процессами) и запускает поток-слушатель.

Шаг 4: Скрипт выполняется в дочернем процессе
Каждый вызов инструмента внутри скрипта передаётся через этот сокет обратно в Hermes, который выполняет его и отправляет результат обратно.

Шаг 5: Возвращается только вывод print
Операторы print() в скрипте — это единственное, что видит LLM. Все промежуточные результаты инструментов никогда не попадают в контекстное окно — это экономит огромное количество токенов.


Когда Hermes использует это?

Агент автоматически выбирает execute_code, когда замечает:

  • 3 или более вызовов инструментов с логикой между ними (например, фильтрация или сравнение)
  • Пакетную обработку данных — например, поиск по многим файлам и извлечение фрагментов
  • Циклы — повторение действия для множества элементов

Главный плюс? Эффективность токенов. Вместо того чтобы передавать каждый результат поиска обратно в разговор, в диалог попадает только итоговое резюме.


Практические примеры, которые можно попробовать

1. Конвейер обработки данных

from hermes_tools import search_files, read_file
import json

# Найти все конфигурационные файлы и извлечь настройки базы данных
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. Многоэтапное веб-исследование

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. Массовый рефакторинг файлов

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"Fixed {fixed} files out of {len(matches.get('matches', []))} matches")

4. Конвейер сборки и тестирования

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))

Ключевые моменты, которые стоит запомнить

  • Доступные инструменты внутри скриптов: web_search, web_extract, read_file, write_file, search_files, patch и terminal (только в фоновом режиме).
  • Возвращается только вывод print() — всё остальное остаётся скрытым.
  • Отлично подходит для циклов, фильтрации и многоэтапных задач — это как дать Hermes мини-среду программирования.

Итог

Code Execution превращает Hermes из пошагового ассистента в пакетный процессор. Он пишет скрипт, запускает его и возвращает вам только конечный ответ — экономя время, токены и умственные усилия. Если вы когда-нибудь заметите, что Hermes выполняет множество повторяющихся вызовов инструментов, скорее всего, он использует эту функцию под капотом.

Далее: Урок 26 — Пакетная обработка: запуск сотен промптов параллельно.

📖 Официальная документация

Эта статья основана на официальной документации Hermes Agent :Официальные документы › user-guide/features/code-execution