大多数自托管的 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 model 和 hermes 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等开源模型,新注册用户使用商业模型需开通权限,可直接联系卓普云申请开通。