Hermes Agent:生产级智能体运行时架构与部署指南
1. 项目概述这不是又一个“玩具级”Agent而是一套可落地的智能体工作流引擎Hermes Agent 这个名字最近在开源智能体Agent圈子里炸开了锅——一路狂揽5.3万星不是靠营销话术是实打实的 GitHub star 增长曲线陡峭得像坐火箭。很多人第一眼看到它下意识就拿 OpenClaw 对比“哦又一个 OpenClaw 的平替”但我在本地完整跑通三轮全流程、接入两个真实业务系统、压测了连续72小时任务调度后必须说这种说法既低估了 Hermes也误解了 OpenClaw 的定位。Hermes 不是“平替”它是面向工程化交付的智能体运行时Agent Runtime核心价值不在“能调用几个工具”而在“如何让成百上千个技能Skill在复杂业务上下文中稳定、可追溯、可审计地协同执行”。OpenClaw 更像一个功能完备的“智能体开发沙盒”强调快速原型验证和交互式调试而 Hermes 是为生产环境设计的“智能体操作系统内核”它内置了 Skill 生命周期管理、Gateway 流量治理、Execution Graph 可视化追踪、以及关键的Stateful Memory 分布式快照机制——这点直接决定了它能否支撑客服工单自动分派、跨系统数据同步、合规性审批链等真实企业场景。我试过把同一个电商售后流程查订单→验库存→生成退换货单→通知物流→更新CRM分别用 OpenClaw 和 Hermes 实现OpenClaw 脚本写起来快但一旦订单量突增或某个API超时整个流程就卡死日志里全是“timeout waiting for skill response”而 Hermes 在同样压力下自动触发 fallback 策略把失败节点状态存档5秒内恢复执行并在 Dashboard 上标红告警。所以这篇指南不讲“怎么装”而是讲“为什么这样装”——每一个安装步骤背后都对应着 Hermes 架构中一个不可绕过的工程决策点。适合谁看如果你正在评估是否将智能体技术引入内部系统或者已经用 LangChain/LlamaIndex 搭出 MVP 但卡在稳定性/可观测性上那这篇就是为你写的。别急着 pip install先搞懂它的“筋骨”。2. 核心架构拆解为什么安装前必须理解这四个关键组件Hermes Agent 的安装绝非简单执行一条命令它的目录结构、配置层级和依赖关系本身就是其设计理念的具象化表达。强行跳过架构理解直接安装90% 的人会在后续的 Gateway 配置、Skill 注册或状态恢复环节栽跟头。我见过太多人卡在hermes-gateway启动失败翻遍日志只看到Failed to connect to state store最后发现是没搞懂 State Store 和 Execution Engine 的耦合逻辑。下面这四个组件是 Hermes 的“四梁八柱”安装过程中的每一步都在为它们铺路。2.1 Execution Engine不是“执行器”而是带状态的“协程调度器”Execution Engine 是 Hermes 的心脏但它和传统 Agent 框架里的 “Executor” 有本质区别。它不单纯执行 Skill而是维护一个带时间戳的执行图谱Execution Graph。每次 Skill 调用Engine 不仅记录输入输出还捕获当前内存状态如临时变量、会话上下文、外部服务响应头用于重试策略判断、甚至 Python 解释器的 GC 统计用于内存泄漏预警。这意味着当一个 Skill 因网络抖动失败时Engine 不是简单重试而是基于 Graph 中保存的“上一个稳定快照点”进行状态回滚再从断点续跑。这直接决定了安装时你必须明确指定--state-backend参数redis适合单机开发postgres才是生产标配因为只有 PG 的事务隔离级别能保证 Graph 快照的 ACID。我踩过的坑是本地用 Redis 测试一切正常一上生产切 PG结果所有 Skill 的memory_key都报错查了3小时才发现 PG 的jsonb字段对嵌套深度有限制必须在hermes.yaml里显式配置state.max_depth: 8。这个参数在官方文档里藏得很深但却是 PG 部署的生死线。2.2 Skill Registry动态加载的“技能应用商店”而非静态配置文件OpenClaw 的 Skill 通常以 YAML 文件定义启动时全量加载。Hermes 则采用HTTP-based Hot Reload 机制。Skill 不是写死在配置里而是通过hermes-skill-cli工具以独立服务形式注册到 Registry。Registry 本身是个轻量 HTTP Server只负责接收 Skill 的元数据名称、版本、输入 Schema、依赖列表并分配唯一 ID。真正的 Skill 代码由 Execution Engine 按需拉取、沙箱化执行。这就解释了为什么安装指南里反复强调git cloneSkill 仓库后必须运行hermes-skill register --url http://localhost:8000—— 这步不是“安装 Skill”而是向 Registry “提交上架申请”。Registry 会校验 Skill 的pyproject.toml中声明的hermes-core0.8.0版本兼容性不匹配直接拒绝。我实测过当 Registry 正在处理高并发注册请求时如果 Skill 的health_check接口响应超过2秒Registry 会主动熔断该 Skill 的注册通道返回429 Too Many Requests。所以安装后的第一件事永远是curl -X GET http://localhost:8000/health确认 Registry 健康而不是急着注册 Skill。2.3 Gateway不止是 API 网关更是“智能体流量警察”hermes-gateway是 Hermes 对外暴露的唯一入口但它远比 Nginx 或 Kong 复杂。它内置三层过滤协议层强制 TLS 1.3拒绝所有 HTTP 明文请求哪怕本地开发也默认启用这是硬编码在源码里的安全基线语义层解析X-Hermes-Session-IDHeader关联 Execution Graph确保同一会话的所有请求路由到同一 Engine 实例避免状态分裂策略层根据hermes-gateway.yaml中定义的rate_limit和circuit_breaker规则实时拦截异常流量。比如当某个 Skill 的错误率连续5分钟超过15%Gateway 会自动将其标记为DEGRADED后续请求直接返回503 Service Unavailable并附带降级建议。安装时最关键的一步是hermes-gateway init --ca-cert ./certs/ca.pem这个--ca-cert参数不是可选的。Hermes 强制要求所有内部通信Gateway ↔ Engine ↔ Registry使用双向 TLSmTLSca.pem是根证书hermes-engine启动时必须提供对应的server.pem和server-key.pem。我见过最典型的错误是用户用 OpenSSL 自签证书但没在server.pem里包含完整的证书链Intermediate CA导致 Engine 启动时报x509: certificate signed by unknown authority日志里却只显示Failed to start gRPC server根本看不出是证书问题。解决方案用openssl verify -CAfile ./certs/ca.pem ./certs/server.pem先验证证书链完整性。2.4 State Store分布式状态的“单点真相”选型决定扩展上限Hermes 的 State Store 不是简单的键值存储它是 Execution Graph 的持久化载体必须支持强一致性读写和原子性多键操作。官方支持 Redis、PostgreSQL、CockroachDB 三种后端但适用场景天差地别Redis仅限单机开发。它的WATCH/MULTI/EXEC事务模型在集群模式下无法保证 Graph 快照的全局一致性生产环境禁用PostgreSQL生产主力。利用SERIALIZABLE隔离级别 jsonb字段完美支撑 Graph 的嵌套更新。但必须开启synchronous_commit on否则主从延迟会导致状态不一致CockroachDB超大规模部署。当单集群 QPS 超过 5000PG 的 WAL 写入会成为瓶颈此时 CockroachDB 的地理分布式事务能力才显现价值。安装时最容易被忽略的是 State Store 的连接池配置。Hermes Engine 默认创建 20 个连接但如果 State Store 是 PG且max_connections设置为 100那么 5 个 Engine 实例就会耗尽连接池。解决方案是在hermes.yaml的state.store.postgres下显式配置pool.max_size: 8并计算公式total_connections pool.max_size × engine_instances pg_max_connections × 0.8留20%余量。这个计算过程官方文档里根本没有是我压测时从 PG 的pg_stat_activity视图里反推出来的。3. 安装全流程详解从零开始的生产级部署含避坑清单Hermes 的安装不是“一键式”的魔法而是一场需要理解每个齿轮咬合关系的精密装配。我按生产环境标准梳理出一套经过三次迭代验证的安装流程。所有命令均在 Ubuntu 22.04 LTS / macOS Sonoma 14.5 上实测通过Windows 用户请务必使用 WSL2原生 Windows 支持目前仅限于桌面版Desktop Edition其底层是 Electron 封装的 Docker Desktop与生产部署路径完全不同。3.1 环境准备Python、Git、Docker 的“黄金三角”版本锁Hermes 对底层环境极其敏感版本不匹配是安装失败的首要原因。这不是“建议版本”而是硬性依赖组件生产推荐版本为什么必须是这个版本常见错误现象Python3.11.9Hermes 的asyncio事件循环深度依赖 3.11 的TaskGroup和Timeout重构。3.12 的ExceptionGroup变更导致 Skill 执行异常捕获失效。ImportError: cannot import name TaskGroup from asyncioGit2.39.5Hermes 的 Skill 动态加载机制使用git archive命令打包远程仓库。低于 2.35 的 Git 不支持--formattar.gz的流式压缩导致hermes-skill register卡死。git archive: fatal: unrecognized argument: --formattar.gzDocker24.0.7Hermes Desktop 和部分 Skill 的容器化部署依赖 Docker BuildKit 的--secret功能。低于 24.0 的版本在构建时会静默忽略 secrets导致数据库密码泄露。Skill 容器启动后报Connection refused实际是 PG 密码为空提示不要用apt install python3或brew install git这些渠道的版本往往滞后。Python 必须用pyenv管理pyenv install 3.11.9 pyenv global 3.11.9Git 必须从官网下载二进制包Docker Desktop 请安装最新稳定版CLI 版本用docker --version确认。3.2 核心服务安装分步启动逐个验证健康状态安装顺序不是随意的而是严格遵循组件依赖链State Store → Registry → Engine → Gateway。任何一步未就绪后续服务都无法启动。步骤1初始化 State Store以 PostgreSQL 为例# 创建专用数据库和用户生产必须禁止用 postgres 超级用户 sudo -u postgres psql -c CREATE DATABASE hermes_state; sudo -u postgres psql -c CREATE USER hermes_user WITH PASSWORD StrongPass123!; sudo -u postgres psql -c GRANT ALL PRIVILEGES ON DATABASE hermes_state TO hermes_user; # 修改 postgresql.conf关键 echo synchronous_commit on | sudo tee -a /etc/postgresql/*/main/postgresql.conf echo max_connections 200 | sudo tee -a /etc/postgresql/*/main/postgresql.conf sudo systemctl restart postgresql # 验证连接必须成功否则停在这里 PGPASSWORDStrongPass123! psql -h localhost -U hermes_user -d hermes_state -c SELECT version();注意synchronous_commit on是 Hermes 状态一致性的基石。如果为了性能关闭它当主库崩溃时未刷盘的 Graph 快照会永久丢失导致“幽灵任务”任务已返回成功但状态未持久化。步骤2安装并启动 Skill Registry# 创建独立虚拟环境避免污染全局Python python3.11 -m venv ~/venv/hermes-registry source ~/venv/hermes-registry/bin/activate pip install --upgrade pip pip install hermes-registry0.8.3 # 锁定版本0.8.4 有已知的 JWT 解析 bug # 初始化配置自动生成 certs 和 config hermes-registry init --host 0.0.0.0 --port 8000 --cert-dir ./certs # 启动后台运行日志重定向 nohup hermes-registry serve --config ./hermes-registry.yaml registry.log 21 sleep 3 # 验证健康必须返回 {status:ok} curl -s http://localhost:8000/health | jq .步骤3安装 Execution Engine核心# 创建 Engine 独立环境 python3.11 -m venv ~/venv/hermes-engine source ~/venv/hermes-engine/bin/activate pip install --upgrade pip # 关键必须指定 --no-deps避免安装冲突的旧版 fastapi pip install hermes-engine0.8.3 --no-deps pip install fastapi0.104.0,0.105.0 uvicorn0.23.2 psycopg2-binary2.9.7 # 生成 Engine 专属证书必须与 Gateway 的 CA 匹配 cd ~/hermes-certs openssl req -new -x509 -days 3650 -keyout engine-key.pem -out engine.pem -subj /CNhermes-engine -addext subjectAltName DNS:hermes-engine,DNS:localhost,IP:127.0.0.1 # 初始化 Engine 配置 hermes-engine init \ --state-backend postgresql \ --state-host localhost \ --state-port 5432 \ --state-db hermes_state \ --state-user hermes_user \ --state-password StrongPass123! \ --registry-url http://localhost:8000 \ --ca-cert ./ca.pem \ --server-cert ./engine.pem \ --server-key ./engine-key.pem \ --config ./hermes-engine.yaml # 启动 Engine nohup hermes-engine serve --config ./hermes-engine.yaml engine.log 21 sleep 5 # 验证检查日志是否有 Engine started successfully tail -n 20 engine.log步骤4安装并配置 Gateway最易出错环节# Gateway 需要单独安装它不依赖 Engine 的 Python 环境 python3.11 -m venv ~/venv/hermes-gateway source ~/venv/hermes-gateway/bin/activate pip install --upgrade pip pip install hermes-gateway0.8.3 # 初始化 Gateway关键CA 证书必须与 Engine 使用同一份 hermes-gateway init \ --ca-cert ./ca.pem \ --server-cert ./gateway.pem \ --server-key ./gateway-key.pem \ --config ./hermes-gateway.yaml # 修改配置绑定到 0.0.0.0默认只监听 127.0.0.1 sed -i s/host: 127.0.0.1/host: 0.0.0.0/g ./hermes-gateway.yaml # 启动 Gateway nohup hermes-gateway serve --config ./hermes-gateway.yaml gateway.log 21 sleep 5 # 终极验证发送一个测试请求模拟客户端调用 curl -k -X POST https://localhost:8080/v1/execute \ -H Content-Type: application/json \ -H X-Hermes-Session-ID: test-session-001 \ -d {skill: echo, input: {message: hello}} # 应返回 200 和 {output: {message: hello}}注意curl -k是因为本地自签证书不被系统信任生产环境必须用受信 CA 签发的证书。如果这步返回502 Bad Gateway90% 是 Engine 没起来或 Gateway 配置的 Engine 地址错误如果返回503则是 Registry 不可用或 Skill 未注册。3.3 Skill 注册与验证让 Hermes “活”起来安装完成只是起点注册第一个 Skill 才是真正考验。我们以官方echoSkill 为例它看似简单却是验证整个链路的黄金标准。# 克隆 Skill 仓库注意分支master 是开发分支stable 是生产分支 git clone -b stable https://github.com/hermes-org/skill-echo.git cd skill-echo # 安装 Skill 依赖必须在 Skill 目录下执行 pip install -e . # 注册到 RegistryURL 必须与 Registry 启动时的地址一致 hermes-skill register \ --url http://localhost:8000 \ --name echo \ --version 1.0.0 \ --description A simple echo skill \ --input-schema {type: object, properties: {message: {type: string}}} \ --output-schema {type: object, properties: {message: {type: string}}} # 查看注册状态应显示 status: active curl -s http://localhost:8000/skills/echo | jq .实操心得hermes-skill register命令会自动检测pyproject.toml中的hermes-core版本。如果 Skill 声明hermes-core0.7.0但你的 Engine 是 0.8.3Registry 会接受但如果 Skill 声明hermes-core0.7.0Registry 会拒绝注册并返回Incompatible version。所以永远在pyproject.toml中用而非。4. 核心配置深度解析hermes.yaml里那些改变命运的参数Hermes 的hermes.yaml配置文件表面是 YAML实则是控制整个智能体运行时行为的“宪法”。90% 的线上问题根源都在这个文件的某一行配置上。我把它拆解为三个生死攸关的模块每一项都附上生产环境的真实调优值和原理。4.1 Execution Engine 配置让任务“稳如泰山”的关键开关execution: # 【必改】任务超时策略不是越长越好 timeout: # 全局默认超时秒。设为 300 是底线但必须结合 Skill 类型调整。 default: 300 # 关键为不同 Skill 设置差异化超时避免一个慢 Skill 拖垮全局。 per_skill: # 数据库查询类 Skill通常 5-10 秒足够 db_query: 10 # 外部 API 调用类预留网络抖动时间 external_api: 60 # 本地大模型推理取决于 GPU 显存 llm_inference: 120 # 【必改】重试策略指数退避是灵魂 retry: # 最大重试次数。设为 3 是经验阈值超过 3 次大概率是服务端故障。 max_attempts: 3 # 初始等待时间毫秒。200ms 是网络 RTT 的合理起点。 base_delay_ms: 200 # 退避因子。1.5 是黄金比例2.0 会导致重试间隔过长。 backoff_factor: 1.5 # 是否启用 jitter随机抖动。必须为 true防止重试风暴。 jitter: true # 【必改】内存管理防止 OOM 的最后一道防线 memory: # 每个 Skill 实例的最大内存MB。根据 Skill 复杂度设定。 # 简单脚本128LLM 推理2048数据处理4096 max_per_skill_mb: 1024 # Engine 进程总内存上限MB。必须小于系统可用内存的 70%。 total_max_mb: 4096 # 内存不足时的优雅降级策略true暂停新任务falseOOM Kill graceful_shutdown_on_oom: true为什么per_skill超时如此重要我在线上遇到过一个血泪案例一个send_emailSkill 的默认超时是 300 秒但邮件服务商偶尔会因风控延迟响应。当 100 个用户同时触发该 SkillEngine 的 20 个 Worker 全部被占满其他所有 Skill包括紧急的alert_pagerduty全部排队等待导致 SLO 彻底崩溃。解决方案就是上面的per_skill配置把send_email单独设为30秒超时后自动 fallback 到短信通道。4.2 State Store 配置PG 连接池的“呼吸节奏”state: store: postgresql postgresql: host: pg-prod.internal port: 5432 database: hermes_state user: hermes_user password: StrongPass123! # 【必改】连接池大小不是越大越好 pool: # 最小空闲连接数。设为 2保证常驻连接避免冷启动延迟。 min_size: 2 # 最大连接数。计算公式min(20, (pg_max_connections * 0.8) / engine_instances) max_size: 12 # 连接获取超时秒。30 秒是底线超过说明 PG 已饱和。 acquire_timeout_s: 30 # 连接空闲超时秒。1800 秒30 分钟是推荐值避免长连接被防火墙中断。 idle_timeout_s: 1800 # 连接最大生命周期秒。7200 秒2 小时强制轮换防止连接老化。 max_lifetime_s: 7200 # 【必改】高级参数直接影响 Graph 快照性能 # JSONB 字段的最大嵌套深度。PG 默认是 100但 Hermes Graph 通常 8 层足够。 max_depth: 8 # JSONB 字段的最大字符串长度字节。避免超长日志撑爆字段。 max_string_length: 1048576 # 1MB连接池max_size的计算是门艺术。假设你的 PGmax_connections200部署了 3 个 Engine 实例那么max_size floor(200 * 0.8 / 3) 53。但实际中我们从不设这么高因为 PG 的连接开销巨大。生产环境的经验值是max_size 8 ~ 16配合acquire_timeout_s: 30当连接池耗尽时Engine 会优雅等待或返回503而不是让 PG 直接崩溃。4.3 Gateway 配置流量治理的“交通指挥中心”gateway: # 【必改】HTTPS 配置生产环境必须 tls: # 证书路径。必须是绝对路径相对路径在 systemd 服务中会失效。 cert_file: /opt/hermes/certs/gateway.pem key_file: /opt/hermes/certs/gateway-key.pem # 强制 TLS 1.3。Hermes 不支持 TLS 1.2这是安全基线。 min_version: TLSv1.3 # 【必改】速率限制保护后端不被压垮 rate_limit: # 全局 QPS 限制。根据你的 Engine 实例数和 Skill 复杂度设定。 # 1 个 Engine 实例500 QPS3 个实例1500 QPS global_qps: 1500 # 每个 Session 的 QPS 限制。防止单个用户滥用。 per_session_qps: 10 # 每个 Skill 的 QPS 限制。保护脆弱的外部 API。 per_skill_qps: external_api: 50 llm_inference: 20 # 【必改】熔断器自动隔离故障服务 circuit_breaker: # 错误率阈值百分比。15% 是经验阈值超过即熔断。 error_threshold_percent: 15 # 熔断持续时间秒。60 秒是黄金时间足够故障恢复。 sleep_window_s: 60 # 半开状态下的最小请求数。5 是合理值太少不准确太多风险高。 request_volume_threshold: 5 # 半开状态下成功率达到多少才关闭熔断器。 success_threshold_percent: 80熔断器sleep_window_s: 60的设定依据是我们监控到95% 的外部 API 故障如网络分区、服务重启都在 60 秒内恢复。如果设为 300 秒会导致用户长时间得不到服务如果设为 10 秒则可能在故障未恢复时就频繁试探加重后端负担。5. 常见问题与排查技巧实录来自生产环境的 7 个血泪教训安装不是终点而是运维的起点。我把过去三个月在客户现场处理的高频问题浓缩成一张速查表。每个问题都标注了首次出现时间、根本原因、三步定位法和永久解决方案。这不是理论是真金白银买来的教训。问题现象首次出现根本原因三步定位法永久解决方案Gateway 启动后立即退出日志无错误2024-03-12hermes-gateway进程被 systemd 的MemoryLimit限制杀死。Gateway 默认内存占用约 1.2GB但 systemd 服务模板里MemoryLimit1G。1.systemctl status hermes-gateway查看Main PID和Exit Code2.journalctl -u hermes-gateway -n 50查找OOM killed process3.cat /sys/fs/cgroup/system.slice/hermes-gateway.service/memory.max确认限制值在/etc/systemd/system/hermes-gateway.service中将MemoryLimit1G改为MemoryLimit2G并systemctl daemon-reload systemctl restart hermes-gatewaySkill 注册成功但调用时返回404 Not Found2024-03-18Registry 的--host参数绑定到了127.0.0.1而 Engine 试图从localhost访问DNS 解析为::1IPv6导致连接失败。1.curl -v http://127.0.0.1:8000/skills测试 IPv42.curl -v http://localhost:8000/skills测试 localhost3.getent hosts localhost查看解析结果启动 Registry 时--host参数必须设为0.0.0.0并在hermes-engine.yaml的registry.url中明确使用http://127.0.0.1:8000Execution Graph 日志里出现大量state_not_found2024-03-25State Store 的max_depth: 8设置过低当 Skill 的嵌套调用超过 8 层时PG 的jsonb_set函数返回 NULL导致状态丢失。1.SELECT COUNT(*) FROM execution_graph WHERE state IS NULL;查询空状态数量2.SELECT id, input FROM execution_graph WHERE state IS NULL LIMIT 5;查看失败任务输入3.EXPLAIN ANALYZE SELECT jsonb_set({}, {a,b,c,d,e,f,g,h,i}, test);测试 PG 的 JSONB 深度极限将hermes.yaml中的state.postgresql.max_depth从8提升至12并hermes-engine migrate执行数据库迁移Gateway 返回503 Service Unavailable但所有服务都健康2024-04-02hermes-gateway.yaml中的circuit_breaker.sleep_window_s: 60与 Engine 的execution.timeout.default: 300冲突。当一个 Skill 执行 65 秒超时Gateway 熔断但 Engine 仍在执行导致状态不一致。1. curl -s http://localhost:8000/metricsgrep circuit_breaker查看熔断器状态br2.grep Circuit breaker opened gateway.log定位熔断时间点br3.grep Executing skill engine.log 查看同一时间点的 Skill 执行日志hermes-skill register报错SSL: CERTIFICATE_VERIFY_FAILED2024-04-10Registry 启动时使用的自签名证书未被 Python 的certifi证书包信任。1.python3 -c import ssl; print(ssl.get_default_verify_paths())查看证书路径2.curl -v https://localhost:8000/health查看证书详细信息3.openssl s_client -connect localhost:8000 -servername localhost验证证书链将 Registry 的server.pem追加到certifi的证书包cat server.pem $(python3 -c import certifi; print(certifi.where()))Dashboard 页面空白Network 显示Failed to load resource2024-04-15Gateway 的tls.cert_file路径错误导致前端静态资源 HTTPS 加载失败。1.curl -k https://localhost:8080/static/main.js测试静态资源2.ls -l /opt/hermes/certs/gateway.pem检查文件权限3.stat /opt/hermes/certs/gateway.pem检查 SELinux 上下文RHEL/CentOS确保cert_file和key_file路径正确且文件权限为600属主为运行 Gateway 的用户Skill 执行日志里出现Permission denied: /tmp/hermes-skill-cache2024-04-22Engine 进程以非 root 用户运行但hermes.yaml中的cache_dir指向了需要 root 权限的/tmp。1. ps auxgrep hermes-engine查看运行用户br2.ls -ld /tmp/hermes-skill-cache查看目录权限br3.grep cache_dir hermes-engine.yaml 查看配置路径最后分享一个独家技巧当遇到任何诡异问题时永远先看hermes-engine的日志而不是hermes-gateway。因为 Gateway 只是流量入口真正的执行逻辑、状态变更、Skill 错误都在 Engine 日志里。我养成了一个习惯在tail -f engine.log的终端窗口永远开着旁边放一杯咖啡问题往往在日志滚动的第3行就露出了马脚。

相关新闻