远程 Hermes Agent 后端¶
DeepTutor Connected Agents 可以调用 Hermes Agent 网关,而无需在 DeepTutor 容器中安装 Hermes CLI。该后端类型为 hermes_remote,其显示名称为 Hermes Agent (remote)。
配置¶
每个后端的设置位于常规 subagent.json 设置文档中的 backends.hermes_remote 之下:
enabled:聊天是否可以委托给此后端。base_url:网关根地址,例如http://hermes-uni:8642。api_key_env:包含网关 bearer 令牌的环境变量名称。默认值为DEEPTUTOR_HERMES_REMOTE_API_KEY。profile:信息性的部署/配置文件标签;它不是凭据,也不用于构造 URL。model、effort、system_prompt、auto_approve:与本地后端共享的运行控制项。idle_timeout_seconds:SSE 帧之间的最大空闲间隔(默认600)。网关发送的 keepalive 心跳会重置此看门狗计时器。
API 密钥仅限环境变量。它绝不会作为内联设置字段被接受、持久化,也不会由 GET /api/subagents/settings 返回。
网关 URL 必须是 HTTP(S),且不得包含凭据、查询文本或片段。可选的 /p/<profile> 前缀支持 Hermes 多配置文件路由。
重定向永远不会被跟随。
HTTP 契约¶
适配器使用带 bearer 令牌的认证请求(Authorization: Bearer ...),并设置显式的连接/读取/写入/连接池超时。端点及机器可读的功能契约详见
Hermes API Server 指南。
GET /v1/capabilities检测可用性,并验证所配置的网关是否公布运行提交、事件流式传输、停止、审批响应和会话资源。检测会报告不同的not_configured、key_missing、unreachable、unauthorized和incompatible详细信息。POST /v1/runs启动一次运行。请求使用input作为用户提示,instructions作为可选的首次会话系统指令,model(如已配置),model_options.reasoning_effort(如已配置),以及session_id(用于恢复会话)。服务器返回 HTTP 202,附带{ "run_id": "...", "status": "started" }。全新的运行将其运行 ID 用作会话 ID;恢复的运行则保留所提供的会话 ID。 在恢复运行之前,适配器会获取GET /api/sessions/{session_id}/messages。它只保留非空的用户/助手行,排除工具行,并最多发送最近 40 行作为conversation_history。404 表示会话已不存在:旧的会话 ID 和请求头会被丢弃,运行将以无历史记录的全新状态启动,同时重新应用system_prompt。GET /v1/runs/{run_id}/events是一个 SSE 流。帧中包含位于data:行中的 JSON。适配器消费以下事件对象:message.delta(delta)、tool.started(tool、preview)、tool.completed(tool、error)、reasoning.available(text)、approval.request、run.completed(output)、run.failed(error)和run.cancelled。工具生命周期事件变为工具/工具结果行; 答案增量变为合并 ID 为hermes_remote:final的累积文本;其他生命周期事件变为日志/错误行。网关通过同一流发出工具/推理、文本/完成和审批事件。POST /v1/runs/{run_id}/approval解决待处理的审批。当自动批准时,请求体为{ "choice": "once" };当auto_approve为 false 时,请求体为{ "choice": "deny" }。审批响应失败会被暴露,运行会停止,而不是无限期等待。POST /v1/runs/{run_id}/stop中断一次运行。取消操作会发出此请求,并带有受保护的、有界清理窗口,然后重新抛出取消异常;SSE 空闲超时则发出该请求并返回错误。
会话连续性同时使用网关文档中记载的
X-Hermes-Session-Id 请求头和 session_id 请求字段。适配器还会发送兼容性的 X-Hermes-Session 请求头。自定义 system_prompt 会在全新会话或历史记录查找报告会话已不存在(404)时发送。每个请求都携带固定的
CONSULT_ORIGIN_INSTRUCTION 递归防护,用于标识 DeepTutor Connected Agents 并指示网关代理直接回答,而不是委派回 DeepTutor。
/v1/runs API 没有图像上传字段。因此,附件及其 DeepTutor 本地路径不会发送到远程网关。
隔离与安全¶
此后端将 Hermes 网关保持在 DeepTutor 进程/容器之外:工具在网关主机上运行,而不是在 DeepTutor 中运行。将每个 DeepTutor 聊天限定在其各自返回的会话 ID 中;不要在用户或聊天之间共享会话 ID。确保 API_SERVER_KEY(网关的服务端密钥)和 DEEPTUTOR_HERMES_REMOTE_API_KEY(DeepTutor 端环境变量名对应的值)不会出现在设置文件、日志、事件文本和前端负载中。
流式传输是静默的,除了适配器暴露的结构化 SSE 生命周期。它不会轮询或重试 POST /v1/runs;调用方取消或空闲看门狗总是会尝试有界的停止。
实现与验证¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 dee/DeepTutor