Hermes + OpenRouter:一个 API 端点调用两百个模型

通过OpenRouter一个API端点调用Hermes及两百多个其他模型,包含注册配置、API调用、价格对比和适用场景分析。

目录

  1. OpenRouter 是什么
  2. 注册和获取 API Key
  3. 调用 Hermes 模型
    1. 用 curl 测试
    2. Python 调用
    3. 流式输出
    4. Function Calling
  4. OpenRouter 上的 Hermes 模型列表
  5. 价格对比:本地 vs 云端
    1. 本地部署成本
    2. OpenRouter 成本
  6. 混合使用方案
  7. 在框架中使用 OpenRouter
    1. LangChain
    2. CrewAI
    3. 在 LobeChat 中使用
  8. 多模型对比
  9. 使用限制和注意事项
    1. 速率限制
    2. 模型可用性
    3. 数据隐私
  10. 适合什么场景
  11. 花费控制

本地部署 Hermes 当然好,但不是所有时候都方便——出门在外用手机、换了一台没 GPU 的电脑、或者团队里有人不想折腾环境配置。这时候你需要一个云端的方案。

OpenRouter 就很适合这个场景。它是一个模型 API 聚合平台,背后对接了几十家模型提供商的两百多个模型,包括 Hermes 系列。你只需要一个 API Key,就能调用所有模型。接口格式完全兼容 OpenAI,切换成本几乎为零。

OpenRouter 是什么

你可以把 OpenRouter 理解为模型 API 的”聚合路由器”。它的定位:

  • 一个 API Key 调所有模型:不用分别注册 OpenAI、Anthropic、Google 等各家平台
  • 统一的计费:所有模型的费用都从一个账户扣
  • 自动路由:同一个模型可能有多个提供商,OpenRouter 自动选最快最便宜的
  • 兼容 OpenAI API 格式:你现有的代码基本不用改

注册和获取 API Key

  1. 访问 openrouter.ai
  2. 用 Google 或 GitHub 账号登录
  3. 进入 API Keys 页面,创建一个新的 Key
  4. 充值(支持信用卡,最低 5 美元)

拿到 API Key 之后,所有后续操作都只需要这一个 Key。

调用 Hermes 模型

用 curl 测试

1
2
3
4
5
6
7
8
9
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nousresearch/hermes-3-llama-3.1-8b",
"messages": [
{"role": "user", "content": "用三句话解释什么是 RAG"}
]
}'

注意模型名称的格式:nousresearch/hermes-3-llama-3.1-8b。OpenRouter 上的模型名都是 提供商/模型名 这种格式。

Python 调用

因为 API 兼容 OpenAI 格式,直接用 openai 库就行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY"
)

response = client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=[
{"role": "system", "content": "你是一个专业的编程助手。"},
{"role": "user", "content": "Python 里 list 和 tuple 有什么区别?"}
],
temperature=0.7,
max_tokens=1024
)

print(response.choices[0].message.content)

就这么简单。跟调用 OpenAI 的代码唯一的区别就是 base_url 和 model 名称。

流式输出

1
2
3
4
5
6
7
8
9
10
11
stream = client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=[
{"role": "user", "content": "写一个 Python 装饰器的教程"}
],
stream=True
)

for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)

Function Calling

Hermes 的拿手好戏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
tools = [
{
"type": "function",
"function": {
"name": "search_product",
"description": "搜索产品信息",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词"
},
"category": {
"type": "string",
"enum": ["electronics", "books", "clothing"],
"description": "产品类别"
}
},
"required": ["query"]
}
}
}
]

response = client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=[
{"role": "user", "content": "帮我找一款降噪耳机"}
],
tools=tools,
tool_choice="auto"
)

message = response.choices[0].message
if message.tool_calls:
for call in message.tool_calls:
print(f"函数: {call.function.name}")
print(f"参数: {call.function.arguments}")

OpenRouter 上的 Hermes 模型列表

OpenRouter 上可用的 Hermes 模型(价格可能会变动,以官网为准):

模型 上下文长度 输入价格 输出价格
hermes-3-llama-3.1-8b 128K ~$0.05/M ~$0.05/M
hermes-3-llama-3.1-70b 128K ~$0.40/M ~$0.40/M
hermes-3-llama-3.1-405b 128K ~$2.00/M ~$2.00/M

M = 百万 tokens。8B 版本的价格非常亲民,一百万 token 才几美分。日常使用的话,5 美元能用很久。

价格对比:本地 vs 云端

做个简单的成本对比,帮你判断什么时候该用本地、什么时候该用云端。

本地部署成本

假设你有一张 RTX 4090(大概 12000 元):

  • 电费:300W * 24h * 30天 * 1元/度 = 每月 216 元
  • 硬件折旧:按3年计 = 每月 333 元
  • 总计:约每月 550 元

每月大概能处理 500-1000 万 tokens(取决于使用强度)。

OpenRouter 成本

用 Hermes 3 8B:

  • 500 万 tokens:约 $0.50(约 3.5 元)
  • 1000 万 tokens:约 $1.00(约 7 元)

结论很明显

  • 低用量(每月 < 5000 万 tokens):云端更划算,不需要买 GPU
  • 高用量(每月 > 5000 万 tokens):本地更划算
  • 需要稳定低延迟:本地更可靠
  • 需要数据隐私:本地是唯一选择
  • 需要灵活性和便携性:云端更方便

混合使用方案

最聪明的做法是混合使用——敏感数据走本地 Hermes,一般性查询走 OpenRouter。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from openai import OpenAI

# 本地客户端
local_client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)

# 云端客户端
cloud_client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY"
)

def smart_query(messages, sensitive=False, model_preference=None):
"""根据场景自动选择本地或云端"""

if sensitive:
# 敏感数据走本地
return local_client.chat.completions.create(
model="hermes3:8b",
messages=messages
)

if model_preference:
# 指定了模型走 OpenRouter
return cloud_client.chat.completions.create(
model=model_preference,
messages=messages
)

# 默认走本地
try:
return local_client.chat.completions.create(
model="hermes3:8b",
messages=messages
)
except Exception:
# 本地不可用时回退到云端
return cloud_client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=messages
)

# 使用示例
messages = [{"role": "user", "content": "帮我分析这份公司内部财务数据"}]
result = smart_query(messages, sensitive=True) # 敏感数据走本地

messages = [{"role": "user", "content": "JavaScript 里怎么实现深拷贝"}]
result = smart_query(messages) # 普通问题,默认本地,失败了走云端

在框架中使用 OpenRouter

LangChain

1
2
3
4
5
6
7
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY",
model="nousresearch/hermes-3-llama-3.1-8b"
)

之后的用法跟 LangChain 教程里的完全一样。

CrewAI

1
2
3
4
5
6
7
from crewai import LLM

llm = LLM(
model="openrouter/nousresearch/hermes-3-llama-3.1-8b",
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY"
)

在 LobeChat 中使用

LobeChat 原生支持 OpenRouter。在设置里找到 OpenRouter 选项,填入 API Key 就行。所有 OpenRouter 上的模型都会出现在模型列表里。

多模型对比

OpenRouter 的一大优势是你可以方便地对比不同模型的效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from openai import OpenAI

client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY"
)

models = [
"nousresearch/hermes-3-llama-3.1-8b",
"meta-llama/llama-3.1-8b-instruct",
"mistralai/mistral-7b-instruct",
"google/gemma-2-9b-it"
]

question = "解释一下什么是 Transformer 架构中的自注意力机制"

for model in models:
try:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": question}],
max_tokens=500
)
print(f"\n{'='*60}")
print(f"模型: {model}")
print(f"回答: {response.choices[0].message.content[:200]}...")
print(f"Token 用量: {response.usage.total_tokens}")
except Exception as e:
print(f"{model}: 调用失败 - {e}")

这种对比在模型选型阶段特别有用。花几美分就能对比十几个模型在你的具体场景下的表现,比猜测高效多了。

使用限制和注意事项

速率限制

OpenRouter 有速率限制,免费账户和付费账户不同。如果你要做批量处理,注意加上重试逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time
from openai import OpenAI, RateLimitError

client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY"
)

def call_with_retry(messages, model, max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model=model,
messages=messages
)
except RateLimitError:
wait = 2 ** attempt # 指数退避
print(f"限流了,等 {wait} 秒后重试...")
time.sleep(wait)
raise Exception("重试次数用完")

模型可用性

不是所有模型在所有时候都可用。OpenRouter 背后对接的是多个提供商,某个提供商出问题时对应的模型就不可用。可以设置 fallback:

1
2
3
4
5
6
7
8
9
10
11
response = client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=messages,
extra_body={
"route": "fallback",
"models": [
"nousresearch/hermes-3-llama-3.1-8b",
"meta-llama/llama-3.1-8b-instruct" # 备选模型
]
}
)

数据隐私

通过 OpenRouter 调用意味着你的数据会经过他们的服务器。虽然 OpenRouter 声明不会存储对话内容,但如果你处理的是敏感数据,还是建议用本地部署方案。

适合什么场景

适合用 OpenRouter 的场景

  • 个人使用,用量不大
  • 需要快速切换和对比不同模型
  • 开发阶段的原型验证
  • 出门在外没有本地 GPU
  • 团队里有人不方便配本地环境

不适合的场景

  • 有严格的数据隐私要求
  • 每月 token 用量超过 5000 万
  • 需要极低延迟(网络延迟在这)
  • 需要对模型做定制化(微调等)

花费控制

OpenRouter 支持设置花费上限:

  1. 在账户设置里设置月度预算
  2. 每个 API Key 可以单独设限
  3. 可以限制某些贵的模型不让用
1
2
3
4
5
6
7
8
9
# 在请求头里追踪花费
response = client.chat.completions.create(
model="nousresearch/hermes-3-llama-3.1-8b",
messages=messages,
extra_headers={
"HTTP-Referer": "https://your-app.com", # 追踪来源
"X-Title": "my-app" # 应用标识
}
)

在 OpenRouter 的 Dashboard 上可以看到每天的花费明细,精确到每个请求。

OpenRouter 让使用 Hermes 变得更灵活。本地部署覆盖核心场景,OpenRouter 覆盖移动和备用场景,两者互补。如果你还没设置本地环境,可以先看 Hermes + Ollama 的本地部署教程,三条命令就能跑起来。cocoloop 社区里有人分享过更详细的混合方案,包括自动根据网络状况切换本地和云端的实现,有兴趣可以去看看。

一个 API Key,两百多个模型,Hermes 只是其中一个但绝对是性价比最高的选择之一。

参与讨论

对这篇文章有疑问或想法?cocoloop 社区有不少开发者在讨论 Hermes 相关话题,欢迎加入交流。

前往 cocoloop 社区 →