运维

🔵 启动、测试、基准测试、部署和监控——仅使用 编译后的二进制文件。


9.1 CLI 命令

一切通过一个二进制文件 agent-os 及其子命令完成(子命令 可通过模块扩展,经由注册表 agent_os_cli):

命令 用途
agent-os serve HTTP 服务器(主进程)
agent-os bench 智能体 E2E 基准测试
agent-os tool 本地测试 YAML 工具(无需服务器和 LLM)
agent-os hook 本地测试 YAML 钩子
agent-os module workflow run 本地运行工作流
agent-os scrape 将网站爬取为归档;分析归档
agent-os route 本地测试 HTTP 路由(http_route / static_route)
agent-os office 本地测试办公工具(首次运行时下载 OfficeCLI)
officecli_pdf_exporter OfficeCLI 的 PDF 导出插件(headless Chromium);agent-os pdf-exporter 上的垫片

9.2 启动服务器

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

加载 .env、config/server.yaml、config/agents/**、 config/budgets.yaml、config/web/**。参见 03-server-configuration。


9.3 测试工具

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

打印传入的参数、call_template、给 LLM 的输出以及 result_template。出错时返回非零退出码。


9.4 测试钩子

agent-os hook config/agents/ngu/hooks/faq_cache.yaml user "Как поступить на фит?"
agent-os hook config/agents/ngu/hooks/faq_cache.yaml turn "вопрос" "ответ" --db /tmp/faq.db
agent-os hook 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-os bench 运行来自 config/agents/<agent>/bench/scenarios.yaml 的场景。

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

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

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

# параллельность + таймаут
agent-os 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 和每回合 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 将网站爬取为归档

agent-os scrape https://nsu.ru -w 8 -d 3 -n 500          # обход
agent-os scrape --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 进程事件(启动、工具调用、错误)
事件存储 logs/events.db(DuckDB) 可查询的事件历史
消息存储 logs/messages.db(DuckDB) 转录 + FAQ 缓存
访问日志 logs/access.jsonl、logs/access.db 仅 HTTP 请求
Cron 存储 logs/cron.db(DuckDB) 任务 + 每次运行的状态/令牌/成本
健康检查 curl .../health 服务是否存活

读取追踪:agent-os trace 和 HTTP API

服务器运行时,DuckDB 文件被其连接锁定,因此无法从外部 打开。为此提供了基于同一引擎 trace_tool 的只读 HTTP API 和 CLI:

agent-os trace sessions [--agent TEMPLATE] [--only-errors] [--limit N]
agent-os trace transcript <session_id> [--search QUERY] [--limit N]
agent-os trace events <session_id> [--limit N]
agent-os trace search <query> [--limit N]

CLI 访问 GET /v1/trace/{sessions,events,transcript,search}(admin 网关)。 基础 URL — --url / AGENT_OS_URL(默认 http://127.0.0.1:3000), 令牌 — --token / AGENT_OS_ADMIN_TOKEN / 来自 config/server.yaml 的第一个完整令牌。这些端点也便于从脚本和管理后台调用。

使用 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 部署配置变更

仅配置变更(智能体、工具、钩子、预算、网页内容)无需 重新构建——将修改后的 config/ 和 data/ 复制到服务器并 重启(或依赖 config/agents/** / config/web/** 的实时重载):

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

# перезапустить
ssh user@host "kill \$(pgrep agent-os); cd /path/to/agent_os && \
  set -a && source .env && set +a && nohup ./agent-os serve > 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-os serve

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

已解析的提交会在启动时记录日志,并可在 /health 的 config 字段中看到 (source、url、ref、commit、poll_secs)。要发布变更—— 在配置仓库中提交/打标签并重启(pin 模式)或等待 下一次轮询。参见 §3.1。


9.9 TLS

通过 AGENT_OS_TLS_CERT / AGENT_OS_TLS_KEY 指定 PEM 证书/密钥; 否则——使用普通 HTTP(例如在反向代理之后)。