🤖 AI-агенты для бизнеса

9. Эксплуатация

🔵 Запуск, тестирование, бенчмарки, деплой и мониторинг — используя только скомпилированные бинарники.


9.1 Бинарники

Бинарник Назначение
agent_web_bot HTTP-сервер (главный процесс)
agent_bench E2E-бенчмарк агентов
site_tool тест YAML-инструмента локально (без сервера и LLM)
hook_tool тест YAML-хука локально
workflow_tool локальный запуск воркфлоу
scraper краулер сайта в архив; анализ архива
route_tool тест HTTP-маршрутов локально (http_route / static_route)
office_tool тест офисного инструмента локально (скачивает OfficeCLI при первом запуске)
officecli_pdf_exporter PDF-экспортер-плагин OfficeCLI (headless Chromium)

9.2 Запуск сервера

./agent_web_bot
AGENT_OS_BIND=0.0.0.0:8080 ./agent_web_bot        # сменить адрес привязки

Загружает .env, config/server.yaml, config/agents/**, config/budgets.yaml, config/web/**. См. 03-server-configuration.


9.3 Тестирование инструментов

site_tool config/agents/ngu/tools/ngu_search.yaml '{"query":"поступление"}'
site_tool config/agents/drom/tools/drom_find_brands.yaml '{"query":"газ"}'

Печатает переданные аргументы, call_template, вывод для LLM и result_template. Ненулевой код выхода при ошибке.


9.4 Тестирование хуков

hook_tool config/agents/ngu/hooks/faq_cache.yaml user "Как поступить на фит?"
hook_tool config/agents/ngu/hooks/faq_cache.yaml turn "вопрос" "ответ" --db /tmp/faq.db
hook_tool config/scripts/hooks/moderation.yaml user "Привет" --live   # реальный LLM-судья

Команды: info, user "<msg>", turn "<q>" "<a>", loop "<reason>". Флаги: --db, --live, --agent, --template, --user, --session.


9.5 Бенчмарки

agent_bench прогоняет сценарии из config/agents/<agent>/bench/scenarios.yaml.

# против работающего сервера
agent_bench --url=https://HOST --agent=drom --max=5

# поднять собственный локальный сервер (нужен DEEPSEEK_API_KEY в .env)
agent_bench --port=3001 --max=3

# фильтр по имени сценария (подстрока / regex)
agent_bench --url=https://HOST --name="Camry|BMW" --max=10

# параллельность + таймаут
agent_bench --url=https://HOST --agent=drom --parallel=3 --timeout=90

Флаги:

Флаг По умолчанию Описание
--url= (спавн локального) подключиться к работающему серверу (пропускает спавн)
--port= 3001 порт локального сервера (игнорируется при --url)
--agent= (все) только этот шаблон
--name= (все) только сценарии с этой подстрокой в имени
--max= все максимум N сценариев
--parallel= 4 параллельных сценариев
--timeout= 90 таймаут хода (сек)

Результаты пишутся в bench_report_<timestamp>.json в рабочей папке, со счётчиками passed/failed и per-turn failures.

Формат сценария

name: "Drom Agent"
model: "drom-agent"

scenarios:
  - name: "Поиск Camry"
    turns:
      - user: "Найди Toyota Camry"
        assert:
          contains: [camry]
          min_links: 2
          valid_urls: true

Проверки: contains (подстроки), min_links / min_urls (число markdown-ссылок), valid_urls (все ссылки http/https).


9.6 Краулинг сайта в архив

scraper https://nsu.ru -w 8 -d 3 -n 500          # обход
scraper --analyze nsu_full.archive               # анализ повторяющихся блоков

Флаги: -w/--workers, -d/--max-depth, -n/--max-pages, -r/--rate-limit (мс), -o/--output (путь архива), -m/--navmap, --timeout (сек), --no-same-domain.

Архив (каталог с meta.json, docs.bin, terms.bin) — это то, что ищет archive_tool.


9.7 Мониторинг и логи

Источник Где Что показывает
stdout сервера запуск на переднем плане / редирект в файл старт, ошибки, список шаблонов
JSONL-трейсы logs/process-<pid>.jsonl события процесса (спавн, tool-вызовы, ошибки)
Событийное хранилище logs/events.db (DuckDB) запрашиваемая история событий
Message store logs/messages.db (DuckDB) транскрипты + FAQ-кэш
Access-лог logs/access.jsonl, logs/access.db только HTTP-запросы
Cron store logs/cron.db (DuckDB) задания + per-run статус/токены/стоимость
Health curl .../health жив ли сервис

Использование trace-agent

Шаблон trace-agent (config/agents/trace/agent.yaml) — диагностический ассистент поверх logs/events.db. Спроси его (в чате) «В каких сессиях были ошибки?», «Сколько потратил агент X?», «Какие поиски вернули ноль результатов?». Его инструменты trace_* (sessions, events, transcript, search, process) описаны в trace_tool.

Дашборд

Страница /dashboard (и её API GET /v1/dashboard) даёт сводку по серверу:


9.8 Деплой изменений конфига

Конфиг-only изменения (агенты, инструменты, хуки, бюджеты, веб-контент) не требуют пересборки — скопируй изменённые config/ и data/ на сервер и перезапусти (или положись на live reload для config/agents/** / config/web/**):

# загрузить
scp -r config/ data/ user@host:/path/to/agent_os/

# перезапустить
ssh user@host "kill \$(pgrep agent_web_bot); cd /path/to/agent_os && \
  set -a && source .env && set +a && nohup ./agent_web_bot > agent_os.log 2>&1 &"

# проверить
curl -sk https://HOST/health

Если добавлен новый движок инструмента/хука (новый kind:, потребовавший Rust-кода), бинарник надо пересобрать — но добавление агентов/инструментов/хуков на существующих движках не требует этого никогда.

Деплой конфига из git-репозитория

Вместо копирования файлов укажи серверу конфиг-репозиторий — он склонирует и зафиксирует при старте (или будет опрашивать):

# зафиксировать тег при старте
AGENT_OS_CONFIG_REPO=https://github.com/org/agent-config \
AGENT_OS_CONFIG_REF=v1.2.0 \
./agent_web_bot

# или опрашивать репозиторий и hot-reload при изменении
AGENT_OS_CONFIG_REPO=https://github.com/org/agent-config \
AGENT_OS_CONFIG_POLL=60 \
./agent_web_bot

Разрешённый коммит логируется при старте и виден на /health в поле config (source, url, ref, commit, poll_secs). Чтобы выкатить изменение — закоммить/тегни в конфиг-репозитории и перезапусти (pin-режим) или дождись следующего тика опроса. См. §3.1.


9.9 TLS

Задай PEM-сертификат/ключ через AGENT_OS_TLS_CERT / AGENT_OS_TLS_KEY; иначе — обычный HTTP (например за reverse-прокси).