本地部署 Hermes 当然好,但不是所有时候都方便——出门在外用手机、换了一台没 GPU 的电脑、或者团队里有人不想折腾环境配置。这时候你需要一个云端的方案。
OpenRouter 就很适合这个场景。它是一个模型 API 聚合平台,背后对接了几十家模型提供商的两百多个模型,包括 Hermes 系列。你只需要一个 API Key,就能调用所有模型。接口格式完全兼容 OpenAI,切换成本几乎为零。
OpenRouter 是什么 你可以把 OpenRouter 理解为模型 API 的”聚合路由器”。它的定位:
一个 API Key 调所有模型 :不用分别注册 OpenAI、Anthropic、Google 等各家平台
统一的计费 :所有模型的费用都从一个账户扣
自动路由 :同一个模型可能有多个提供商,OpenRouter 自动选最快最便宜的
兼容 OpenAI API 格式 :你现有的代码基本不用改
注册和获取 API Key
访问 openrouter.ai
用 Google 或 GitHub 账号登录
进入 API Keys 页面,创建一个新的 Key
充值(支持信用卡,最低 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 OpenAIclient = 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 OpenAIlocal_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: 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 ChatOpenAIllm = 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 LLMllm = 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 OpenAIclient = 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 timefrom openai import OpenAI, RateLimitErrorclient = 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 支持设置花费上限:
在账户设置里设置月度预算
每个 API Key 可以单独设限
可以限制某些贵的模型不让用
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 只是其中一个但绝对是性价比最高的选择之一。