如何在无服务器推理上运行 Hermes Agent?

大多数自托管的 AI 智能体最终都会撞上同一个问题:模型层变成了基础设施胶水代码。编码任务想要一个模型,摘要任务想要另一个,视觉任务则需要多模态支持,结果你的"简单智能体"还没开始发挥作用,就得在 API 密钥、路由逻辑、重试机制和各家供应商的怪癖之间疲于应付。

Hermes Agent 通过将编码、推理、记忆、委托、工具使用和 Shell 访问融合在单个智能体循环中,尤其鲜明地体现了这一点。与其手动编排多家供应商,不如用 DigitalOcean 无服务器推理 让 Hermes 与一个兼容 OpenAI 的端点通信,而平台在幕后处理模型选择和路由。

而且 DigitalOcean 的无服务器推理支持 Claude、OpenAI等大模型,可直接给Hermes配置前沿大模型。

在这篇教程中,我们会把 Hermes Agent 连接到 DigitalOcean 无服务器推理,然后使用推理路由器自动为不同的智能体工作负载分配合适的模型------无需自行构建自定义路由基础设施。

核心要点

  • 一个 API 密钥,一个端点,多个模型。一个 DigitalOcean 模型访问密钥配合固定的基础 URL https://inference.do-ai.run/v1,就能让 Hermes Agent 访问 70 多个模型------无需在各个供应商的密钥之间切换,也不需要针对不同供应商修改代码。
  • 推理路由器消除了手工路由逻辑。你不再需要用硬编码规定哪个模型处理编码、总结或视觉任务,只需在控制面板中定义一次任务池,路由器就会自动对每个请求进行分类和分发------按成本、速度或你设定的手动排序进行优化。
  • 辅助任务覆盖真正藏着省钱的空间。默认情况下,Hermes 会将视觉、压缩、会话搜索和网页提取任务通过你的主模型路由。在 auxiliary: 配置块中将这些任务固定到更便宜的模型上,可以在不牺牲质量的情况下显著减少 token 支出,因为这些任务本来就不需要前沿模型。

Hermes 与 DigitalOcean:强力组合

Hermes 在设计上就是模型无关的。它支持大约 19 个一流供应商,外加任何兼容 OpenAI 的自定义端点,比如 DigitalOcean,并且可以随时无痛切换到 Hermes 自己的模型,无需改动代码,也不存在锁定。智能体核心负责工具调用、技能、记忆和子智能体委托,同时支持超过 18 种消息网关(例如 Telegram、Discord、Slack、WhatsApp、Signal、Email、Home Assistant)。LLM 只不过是一个可插拔的后端。

DigitalOcean 的推理引擎将四种能力打包在同一个兼容 OpenAI 和 Anthropic 的端点之后:

  • 无服务器推理------按 token 付费即可访问 70 多个开源和前沿模型(NVIDIA、DeepSeek、Qwen、MiniMax、Moonshot/Kimi、OpenAI、Anthropic、Mistral 等),并且支持缩容到零的定价。
  • 推理路由器------一个中间件,它会对每个提示进行分类,并将其路由到你定义的模型池中的最佳模型,按成本或延迟进行优化。公开预览中,预览期间不额外收费;只需为实际处理每个请求的模型付费。
  • 专用推理------为稳定的高吞吐工作负载提供预留的 GPU 端点。
  • 批量推理------异步作业,价格最高可比实时定价降低 50%。

对于 Hermes 的配置,最相关的两个部分是无服务器推理(直接通往特定模型的路径)和推理路由器(让你无需编写路由逻辑就能实现按请求智能选择模型)。

契合之处:

  • 一个密钥,多个模型。一个 DigitalOcean 模型访问密钥(sk-do-...)就能让 Hermes 访问整个模型目录,无需在多供应商 API 密钥之间来回折腾。
  • 路由器作为大脑。Hermes 需要完成重量级的工具调用、子智能体委托、摘要以及视觉任务------这些工作负载的成本结构差异巨大。推理路由器可以将你的 delegate_task 调用发送给一个便宜快速的模型,将主对话回合发送给前沿模型,将视觉查询发送给多模态模型------全都位于同一个端点之后,全部透明。
  • 稳定的 URL。与 DigitalOcean 面向单智能体的 Agent Platform 端点不同,无服务器推理有一个固定的基础 URL:https://inference.do-ai.run/v1。当你在 DigitalOcean 侧切换所选的路由器或模型时,Hermes 的配置无需做任何改动。

演示前置条件

你需要准备:

  • 一个 DigitalOcean 账户,并已开通推理产品(在控制面板侧边栏的 INFERENCE 下可见,如果未开通,可联系卓普云申请权限)
  • 一个 sk-do-... 格式的模型访问密钥。在控制面板的 Inference → Model Access Keys 下创建,详细方法可见卓普云官网的教程。你可以将密钥的作用域限定为特定的基础模型、推理路由器,也可以选择将其限制在某个 VPC 内。
  • 一个可正常工作的 Hermes Agent 安装。支持 Linux、macOS、WSL2 或 Android (Termux)
bash 复制代码
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
  • 安装脚本会拉取 uv、Python 3.11、Node.js、ripgrep、ffmpeg 以及 Hermes 源码。原生 Windows 通过一行 PowerShell 命令安装已得到支持,但还处于早期 beta 阶段------WSL2 是经过更多验证的路径。
  • 一个上下文长度 ≥64K 的模型。Hermes 拒绝使用任何更小的模型,因为在对话开始之前,工具模式、系统提示词和工作内存加起来就会填满较小的上下文窗口。DigitalOcean 目录中的大多数模型都能轻松满足这一要求。

60 秒快速通路:将无服务器推理设为 Hermes 的主供应商

这是最精简的可用配置。你将把 Hermes 的自定义端点供应商指向 DigitalOcean,并挑选一个模型。

导出密钥

bash 复制代码
echo 'export MODEL_ACCESS_KEY="sk-do-..."' >> ~/.zshrc
source ~/.zshrc

根据你的 shell,相应地使用 ~/.bashrc(bash)或 ~/.config/fish/config.fish(fish)。

找到模型 ID

DigitalOcean 使用简洁的模型别名(例如 llama3.3-70b-instruct、anthropic-claude-4.6-sonnet、openai-gpt-4.1)。用你刚导出的密钥列出可用的模型:

bash 复制代码
curl -s -H "Authorization: Bearer $MODEL_ACCESS_KEY" \
  https://inference.do-ai.run/v1/models \
  | jq '.data[].id'

挑选一个。对于 Hermes 的主模型,最好选择一个具备智能体能力且上下文 ≥64K 的------Claude Sonnet/Opus、GPT-4.1、Llama 3.3 70B、DeepSeek V3.2、Qwen 3.5 或 MiniMax M2 都是可靠的选择。

在 Hermes 中配置供应商

复制代码
hermes model

在交互式选择器中:

  • 选择 Custom endpoint (self-hosted / VLLM / etc.)------或者,根据你用的 Hermes 版本,可能是 More providers... → Custom endpoint(手动输入 URL)。
  • API base URL:https://inference.do-ai.run/v1
  • API key:粘贴你的 sk-do-... 密钥。
  • Model name:你挑选的模型别名,例如 llama3.3-70b-instruct。
  • Context length:留空以自动检测。

Hermes 会通过访问 /v1/models 来验证端点,并将选择写入 ~/.hermes/config.yaml。

生成的 model: 部分看起来类似这样:

yaml 复制代码
model:
  default: llama3.3-70b-instruct
  provider: custom
  base_url: https://inference.do-ai.run/v1
  # api_key 从你输入的密钥中读取(依照 Hermes 版本,存储在 ~/.hermes/.env 中的 OPENAI_API_KEY
  # 或自定义供应商凭据存储中)

用一次冒烟测试确认一切正常

复制代码
hermes

然后在聊天中输入:Summarize this repo in 3 bullets and show me the main entrypoint. 如果你得到了一条连贯的回答,并且 Hermes 的工具指示器亮起,那么基础配置就完成了。

更进一步:使用推理路由器作为 Hermes 的引擎

真正有趣的地方来了。与其将 Hermes 固定到单个模型,不如让 DigitalOcean 将每个请求路由到模型池中最合适的模型。

推理路由器究竟是什么

推理路由器是你在控制面板中配置一次、然后可以通过名称来引用的一个策略。发往路由器的每个请求都会根据你定义的任务被分析;路由器会从你为匹配任务指定的模型池中挑选一个模型,并采用你设定的优先级(成本、延迟或手动排序)。如果选中的模型触发了速率限制或 5xx 错误,路由器会自动回退到下一个候选项------不会丢失调用。每次响应都包含关于选中的模型以及被检测出的任务元数据,因此你可以准确地看到什么在运行、以及为什么。这对运行应用有着深远的影响。它让你可以在规模扩大的时候进行更深入的成本优化,并使模型应用整体上更高效。

创建一个路由器

在控制面板中(左侧边栏)选择 Inference → Inference Router,然后在活动界面点击 Create Router。

有两种开始方式:

  • 默认/推荐路由器。在"Getting Started"标签中点击 See Default Routers。DigitalOcean 提供了预先配置的路由器,用于常见的智能体模式:写作与内容开发、软件工程和文档智能。如果你想要一键设置,就选一个;你随时可以查看、复制和编辑。
  • 自定义路由器。点击 Create Router 从头定义一个模型池。

对于 Hermes 形态的工作负载,自定义路由器通常值得多花几分钟时间:Hermes 在单个智能体循环中混合了编码、摘要、推理、规划和工具分发,因此你会希望为每一种任务设置明确的路径。

定义自定义路由器时:

  • 名称:选一个稳定的名称;你在 Hermes 中会以 router:<name> 的格式引用它。
  • 描述:这也同时充当路由提示,所以要具体一些。路由器用它来为每个请求挑选正确的任务。
  • 任务:每个任务需要:
    • 一个以名词为中心的名称和清晰的描述(文档明确建议使用以名词为中心的表述,并尽量使任务之间的重叠最小化,以实现稳定路由)
    • 模型池中最多 3 个模型
    • 一种选择策略:成本优化、速度优化或手动排序

为 Hermes 设计的一个合理的初始任务布局:

任务 选择策略 建议的模型池
coding 手动排序 Claude Sonnet → GPT-4.1 → DeepSeek V3.2
reasoning 手动排序 Claude Opus → GPT-4.1 → Llama 3.3 70B
summarization 成本优化 Llama 3.3 70B → DeepSeek V3.2 → Qwen 3.5
general_chat 速度优化 Llama 3.3 70B → MiniMax M2 → Qwen 3.5
document_intel 手动排序 首先选择一个多模态模型(具备视觉能力)

完成后保存。路由器将出现在 My Routers 下。

将 Hermes 指向路由器

使用路由器就像直接替换模型调用一样:同样的端点,同样的认证方式,只是模型字段的值不同:用 router:<router-name> 代替原始的模型别名。最简单的办法是重新运行 hermes model 并只更新模型名称:

ini 复制代码
hermes model
# Custom endpoint
# API base URL:   https://inference.do-ai.run/v1   (与之前相同)
# API key:        sk-do-...                         (与之前相同)
# Model name:     router:my-hermes-router           ← 唯一的变化

或者直接编辑 ~/.hermes/config.yaml

vbnet 复制代码
model:
  default: router:my-hermes-router
  provider: custom
  base_url: https://inference.do-ai.run/v1

hermes config get modelhermes status 进行验证。然后启动会话。

运行时你应该看到的现象

路由器返回的每一次聊天补全响应都会包含实际被选中的模型。用 cURL 调用路由器时看起来是这样:

vbnet 复制代码
curl --location 'https://inference.do-ai.run/v1/chat/completions' \
  --header 'Content-Type: application/json' \
  --header "Authorization: Bearer $MODEL_ACCESS_KEY" \
  --data '{
    "model": "router:my-hermes-router",
    "messages": [
      { "role": "user", "content": "Are there any syntax issues in this Python code?" }
    ]
  }'

Hermes 在底层正是这样做的;响应正文会告诉你实际是哪个模型处理了这个请求。

会话固定(X-Model-Affinity 请求头)

智能体循环对于路由器来说有些奇怪------第一个回合可能像编码,第二个回合像是在对工具输出进行推理,第三个回合则像是规划。每个回合可能被路由到不同的模型,这有时会降低缓存命中率和连续性。

DigitalOcean 通过 X-Model-Affinity 请求头解决了这个问题。带有某个 affinity 值的第一通呼叫会经过正常路由;之后使用相同值的呼叫会跳过路由,直接固定到第一通呼叫选择的模型。当会话被锁定时,响应会包含 "pinned": true。

Hermes 目前还没有在界面中暴露这个请求头,但你有两个实用的选择:

  • https://inference.do-ai.run/v1 前面运行一个小型代理,根据会话注入 X-Model-Affinity: <hermes-session-id>,然后将 Hermes 指向这个代理。如果你关心长智能体循环中的缓存局部性,这是最干净的路径。
  • 暂时跳过。路由器的按请求回退已经能处理可靠性,而且即使不固定,单回合内的提示缓存也能起作用。如果以后发现因缓存未命中导致成本偏离,再回头考虑。

为仅使用 DigitalOcean 的设定配置 Hermes

下面是一个完全填充的 ~/.hermes/config.yaml 框架,它把所有事情都交给 DigitalOcean------主模型通过路由器,辅助任务用更便宜的模型,并为路由器出现 5xx 时提供了一个回退。

yaml 复制代码
model:
  default: router:my-hermes-router
  provider: custom
  base_url: https://inference.do-ai.run/v1

# 辅助任务:视觉、网页提取、压缩、会话搜索、技能、MCP。
# 在此设置 base_url 会跳过供应商解析,直接发送到 DO。
auxiliary:
  vision:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}    # 或硬编码;环境变量插值取决于版本
    model: openai-gpt-4.1           # DO 目录中的任意多模态模型
  compression:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}
    model: llama3.3-70b-instruct    # 便宜且 ≥64K 上下文(压缩所需)
  session_search:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}
    model: llama3.3-70b-instruct
    max_concurrency: 2              # 避免在摘要扇出时触发 429 突发
  web_extract:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}
    model: llama3.3-70b-instruct
  skills_hub:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}
    model: llama3.3-70b-instruct
  mcp:
    base_url: https://inference.do-ai.run/v1
    api_key: ${MODEL_ACCESS_KEY}
    model: llama3.3-70b-instruct

# 子智能体委托------覆盖 delegate_task 使用的模型
delegation:
  base_url: https://inference.do-ai.run/v1
  api_key: ${MODEL_ACCESS_KEY}
  model: llama3.3-70b-instruct      # 对于一次性子任务比主路由器更便宜

# 主供应商在重试后仍返回 429/5xx 时的回退
fallback_model:
  provider: custom
  model: llama3.3-70b-instruct
  base_url: https://inference.do-ai.run/v1
  key_env: MODEL_ACCESS_KEY         # 存储 API 密钥的环境变量名

关于此配置的一些说明:

  • 辅助模型的覆盖很重要。如果没有它们,Hermes 会将视觉、压缩、网页提取、MCP 和会话搜索的调用全都送回你的主模型。在主模型使用路由器的配置下,这意味着每次对一大段对话的摘要都会做一次路由决策------而且可能跑到昂贵的模型上。将这些任务固定到一个特定的便宜模型才是正确的默认方式。
  • 压缩模型的上下文长度必须 ≥ 主模型的上下文长度,因为它会收到整个对话的中间部分来进行摘要。如果你的主模型上下文是 200K,不要为压缩选择 32K 的模型。
  • 回退在遇到速率限制(429)、服务器错误(5xx)和认证失败(401/403)时触发。将回退指向同一个供应商的特定模型意味着:"如果路由器本身故障,就回退到同一个端点上的一个已知良好型号。"如果你想要真正的跨供应商弹性,请把回退指向 OpenRouter 或 Nous Portal。API 密钥优先级怪癖。Hermes 会将供应商环境变量(如 OPENROUTER_API_KEY)限定到它们自己的基础 URL,但 OPENAI_API_KEY 是自定义端点的回退。如果你同时配置了 OpenRouter 或其他供应商,请确保你的自定义端点供应商实际使用的是 MODEL_ACCESS_KEY(你的 DO 密钥)------hermes doctor 和 hermes status 会告诉你正在使用的是哪个凭证。

Hermes 的功能与能力

在你将其投入长期运行之前,有几点值得了解。

  • 工具调用。Hermes 严重依赖工具/函数调用。DigitalOcean 上的 OpenAI 和 Anthropic 模型能可靠地支持这一点,目录中的大多数大型开源模型也同样支持。如果更换路由器后工具调用突然停止工作,请检查路由器选择了哪个模型。
  • 内置工具。DigitalOcean 的 Chat Completions API 支持服务器端工具,包括 RAG(knowledge_base_retrieval)、MCP 集成以及网络搜索。Hermes 默认不会直接暴露这些工具,但可以通过自定义插件注入。
  • 提示缓存。支持的模型会自动缓存重复的提示前缀,从而降低 Hermes 庞大且重复出现的系统提示和技能定义带来的成本。
  • 推理控制。支持推理功能的模型允许配置推理力度等级,Hermes 的 agent.reasoning_effort 设置可以直接映射到这些选项。
  • 隐私与可观测性。开放权重模型的流量不会被记录或用于训练。DigitalOcean 还通过控制面板提供详细的延迟、吞吐量、错误、token 用量以及路由器决策指标。
  • 定价。无服务器推理按 token 付费,推理路由器目前在公开预览期间不额外收费。实际效果是,这让 Hermes 得以将大多数请求路由到更便宜的模型,同时为更困难的任务保留前沿模型。

快速故障排查技巧

如果你遇到以下任一错误,这部分概述了如何解决。

第一次聊天时立即出现 httpx.ReadError: Connection reset by peer。几乎总是基础 URL 的问题。Hermes 要求使用带 /v1 后缀的 OpenAI 风格 URL:https://inference.do-ai.run/v1,而不是 https://inference.do-ai.run。重新运行 hermes model 并输入带有 /v1 的 URL。

inference.do-ai.run 返回 401 Unauthorized。你的 "sk-do-..." 密钥丢失、已过期或作用域过窄。如果你将密钥限定到了特定模型,请确保你正在使用的模型或调用的路由器位于该作用域内。检查方法:

bash 复制代码
curl -s -H "Authorization: Bearer $MODEL_ACCESS_KEY" \
  https://inference.do-ai.run/v1/models | jq '.data[].id'

Hermes 在启动时抱怨上下文长度。选择一个上下文 ≥64K 的模型。模型目录中每个模型旁边会显示其上下文窗口。

工具调用被默默丢弃。路由器很可能为该请求选择了一个不支持工具的模型。要么在路由器定义中为那个任务固定一个支持工具的模型,要么在手动排序中将支持工具的模型排在首位。

发送了错误的 API 密钥。运行 hermes doctor。如果你同时配置了 OpenRouter 或其他供应商,Hermes 的密钥作用域逻辑应当只将 OPENROUTER_API_KEY 发送到 OpenRouter,而把 OPENAI_API_KEY(或你为自定义端点存储的任意密钥)发送到 DigitalOcean。如果你发现泄漏,请在自定义端点配置中显式设置 api_key,而不是依赖环境变量回退。

成本高于预期。检查 Serverless Inference Metrics → 按模型划分的成本归因。如果 Hermes 的某个辅助任务(通常是压缩或会话搜索)正在调用昂贵的模型,请在 auxiliary: 中用便宜的模型覆盖该任务(参见第 5 节)。

结语

Hermes Agent 与 DigitalOcean 无服务器推理 是一对天然的搭档:Hermes 带来了智能体框架------工具调用、持久记忆、技能、子智能体委托以及十多种消息网关------而 DigitalOcean 则带来模型层,只需一个 API 密钥、一个稳定的 URL,以及一个能默默为每一次循环挑选合适模型的路由器。其结果是一个自托管、多供应商的个人智能体,你可以将时间花在定义智能体应该做什么上,而不是花在把各种供应商拼接在一起、或手动调整哪个模型处理哪个任务上。先用 60 秒的快速设置对接单个模型,确认一切正常,然后在看清你的 token 消耗真正流向之后,再升级到推理路由器------那时候成本的故事通常会变得真正有趣:以开源模型的价格获得前沿质量输出,而路由逻辑在公开预览期间完全免费。在此基础上,Hermes 的 auxiliary、delegation 和 fallback 钩子让你能在同一个端点之后,根据需要深入地调校整个系统。去构建点什么,观察指标,然后持续迭代。

注意:目前DigitalOcean 无服务器推理提供Claude、OpenAI等商业模型与Deepseek、Qwen等开源模型,新注册用户使用商业模型需开通权限,可直接联系卓普云申请开通

相关推荐
老码观察3 小时前
数环通iPaaS知识库选型实践:从技术评估到RAGFlow深度调优
人工智能·agent·知识库
DigitalOcean4 小时前
AI 推理产品省钱指南:如何通过基建优化降低 80% 推理成本?
aigc·agent·vibecoding
求知也求真佳4 小时前
S07---S11 | 系统加固闭环总结:让你的 AI Agent 从 “能跑” 到 “稳跑、安全跑、长期跑”
开发语言·agent
JaydenAI4 小时前
[Deep Agents:LangChain的Agent Harness-12]利用create_deep_agent整合所有的Harness中间件
langchain·agent·deep agents·harness
hyunbar5 小时前
Hermes 能不能完全替换 OpenClaw ?
agent·mcp
闲人编程6 小时前
什么是“工具调用”(Function Calling)?Agent的手和脚
大模型·agent·智能体·工具调用·function·calling
厚国兄6 小时前
Agent 工程化系列 · 第 06 篇_MCP是什么协议
人工智能·llm·agent
人工智能培训9 小时前
如何定义和测量“通用具身智能”
大数据·人工智能·机器学习·prompt·agent
嘻嘻仙人9 小时前
从原理到代码,拆解Reflection智能体设计模式
agent