写在前面
如果说GitHub是代码的家,PornHub是毛片的家,那么问题来了:模型的家在哪?模型怎么跑起来?跑不起来的模型又该去哪里调用?
这三个问题,恰好对应三个工具:
- Hugging Face:模型从哪来——全世界开源模型的发布地和集散中心。
- Ollama:模型怎么在自己电脑上跑——一条命令下载并运行本地模型。
- OpenRouter:模型怎么在云上调——一个 API Key 调用几百个云端模型。
如果用熟悉的东西打个比方:
| 工具 | 一句话定位 | 类比 |
|---|---|---|
| Hugging Face | 模型、数据集、Demo 的托管平台 | 模型界的 GitHub |
| Ollama | 本地运行大模型的工具 | 模型界的 Docker |
| OpenRouter | 统一调用云端模型的网关 | 模型界的聚合支付 |
它们在一个 AI 应用里的位置,大概是这样的:
模型仓库] HF -->|下载 GGUF 权重| Ollama[🦙 Ollama
本地运行] Lab -->|提供 API| Providers[☁️ 各家推理服务商] Providers --> OR[🔀 OpenRouter
统一网关] Ollama -->|localhost:11434| App[📱 你的应用] OR -->|openrouter.ai/api/v1| App
按照惯例,先上本文的阅读体验预警:
说明:本文涉及的价格、额度、功能信息截至 2026 年 10 月,这个领域变化极快,以各官网为准。
第一章:Hugging Face——模型界的 GitHub
一个做聊天机器人的公司,怎么成了 AI 的中心
Hugging Face 的名字来自那个张开双手拥抱的表情 🤗。2016 年它成立的时候,做的是一款面向年轻人的聊天机器人 App——没错,一个"陪聊"产品。
后来他们把内部做 NLP 的工具开源了,没想到这个副产品比主业火得多。这个库后来就是大名鼎鼎的 Transformers。于是公司干脆转型,专心做开源 AI 基础设施。
这个故事告诉我们:你的副业,可能才是你的主业。
如今,几乎所有主流开源模型——Llama、Qwen、DeepSeek、Gemma、Mistral——发布时都会把权重放到 Hugging Face 上。平台上的公开模型数量已经达到几百万的量级。
Hub 里有什么
Hugging Face Hub 的结构和 GitHub 非常像,只是"仓库"里装的东西不同:
模型权重 + Model Card] Hub --> D[Datasets
训练与评测数据集] Hub --> S[Spaces
在线 Demo 应用] Hub --> L[开源库] L --> T[transformers
加载和运行模型] L --> DS[datasets
加载数据集] L --> DF[diffusers
图像/视频生成] L --> HH[huggingface_hub
上传下载与 CLI]
- Models:每个模型是一个 Git 仓库,里面是权重文件和配置。仓库首页的 Model Card 相当于 README,写着模型用途、训练数据、局限和协议。
- Datasets:数据集仓库,很多论文的评测数据都放在这里。
- Spaces:用 Gradio 或 Streamlit 写的在线 Demo,点开就能试用模型,不用自己部署。
最小可用示例
用 Transformers 跑一个小模型,只需要几行代码:
from transformers import pipeline
pipe = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct")
messages = [{"role": "user", "content": "用一句话介绍你自己"}]
result = pipe(messages, max_new_tokens=64)
print(result[0]["generated_text"])第一次运行时会自动从 Hub 下载权重,缓存在 ~/.cache/huggingface/ 下面。友情提示:这个目录会悄悄长到几百 GB,请定期检查你的硬盘。
只想下载文件、不想写代码,可以用命令行:
pip install -U huggingface_hub
hf download Qwen/Qwen2.5-0.5B-Instruct不下载,直接调用:Inference Providers
不想下载权重、也没有显卡?Hugging Face 现在提供了 Inference Providers,把请求转发给第三方推理服务商,接口兼容 OpenAI 格式:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.environ["HF_TOKEN"],
)
resp = client.chat.completions.create(
model="openai/gpt-oss-120b:cheapest", # 后缀可选 :fastest / :cheapest
messages=[{"role": "user", "content": "什么是 ISO 20022?一句话回答"}],
)
print(resp.choices[0].message.content)模型名后面的后缀决定路由策略::fastest 选最快的服务商,:cheapest 选最便宜的,也可以直接写服务商名字指定。是不是有点眼熟?后面讲 OpenRouter 的时候还会遇到同样的思路。
需要注意的是,以前那个"免费随便用"的 Serverless Inference API 已经基本退场了,免费账号每月只有很少的额度,正经使用还是要付费。
看懂权重文件:格式与量化
逛 Hugging Face 时,最让新手困惑的是同一个模型有一堆不同的文件。搞懂两个概念就够了。
文件格式:
- safetensors:现在的主流格式,只存张量数据,加载时不会执行任意代码,安全。
- .bin / .pt(pickle):老格式,加载时可能执行任意代码。来路不明的 pickle 文件,等于来路不明的 exe。
- GGUF:llama.cpp 生态使用的格式,通常已经量化好,适合本地运行。Ollama 用的就是它。
量化(Quantization):把模型参数从 16 位浮点数压缩成 8 位、4 位甚至更低,用一点精度换大幅降低的内存占用。你会在文件名里看到 Q8_0、Q4_K_M 这样的后缀,数字越小越省内存,效果损失也越大。Q4_K_M 通常被认为是性价比最高的甜点位。
估算显存/内存的经验公式:参数量 × 每个参数的字节数,再加 20% 左右的余量,上下文越长,余量要越大。
| 模型规模 | FP16 | Q8 | Q4 |
|---|---|---|---|
| 7B | ~14 GB | ~7 GB | ~4 GB |
| 14B | ~28 GB | ~14 GB | ~8 GB |
| 32B | ~64 GB | ~32 GB | ~18 GB |
| 70B | ~140 GB | ~70 GB | ~40 GB |
看完这张表,你大概就明白为什么"本地跑 70B"是一个经典的放弃起点了。
模型也有协议
之前有讲过开源协议,模型世界同样适用,而且更复杂:
- 有的模型用标准开源协议,比如 Apache 2.0、MIT,基本可以放心商用。
- 有的模型用厂商自定义协议,比如 Llama 的社区协议,对用户规模和用途有附加限制。
- 有的模型是 Gated Model:需要登录、同意条款、甚至等待人工审核才能下载。
所以"开源模型"和"开放权重模型"并不是一回事。商用之前,请务必读一读 Model Card 里的 License 那一栏。
第二章:Ollama——模型界的 Docker
为什么说它像 Docker
如果你用过 Docker,学 Ollama 几乎是零成本:
| Docker | Ollama |
|---|---|
docker pull nginx | ollama pull qwen3 |
docker run nginx | ollama run qwen3 |
docker images | ollama list |
docker ps | ollama ps |
docker rmi nginx | ollama rm qwen3 |
Dockerfile | Modelfile |
| Docker Hub | Ollama Library |
Ollama 把下载权重、选择量化版本、配置推理参数、启动服务这些繁琐步骤,全部封装成了一条命令。早期它主要基于 llama.cpp 做推理,后来逐步加入了自己的引擎和更多硬件支持。
三分钟上手
# macOS 可以直接下载安装包,Linux 一条命令安装
curl -fsSL https://ollama.com/install.sh | sh
# 下载并运行一个模型,直接进入对话
ollama run qwen3
# 查看本地模型和正在运行的模型
ollama list
ollama psOllama 安装后会在本地 11434 端口启动一个服务,并且提供 OpenAI 兼容接口。这意味着你几乎不用改代码,就能把应用从云端模型切到本地模型:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # 随便填,本地不校验
)
resp = client.chat.completions.create(
model="qwen3",
messages=[{"role": "user", "content": "用 Go 写一个 hello world"}],
)
print(resp.choices[0].message.content)还有一个很实用的技巧:Ollama 可以直接拉取 Hugging Face 上的 GGUF 模型,这就把第一章和第二章连起来了:
ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:Q4_K_MModelfile:给模型写个"人设"
和 Dockerfile 一样,你可以基于已有模型定制一个新模型:
FROM qwen3
PARAMETER temperature 0.3
PARAMETER num_ctx 16384
SYSTEM """
你是一名资深支付系统架构师,回答简洁,优先给出结论,必要时附带 Mermaid 图。
"""ollama create payment-expert -f Modelfile
ollama run payment-expert注意 num_ctx 这个参数,它是上下文窗口大小。Ollama 默认的上下文窗口往往比模型宣称的小得多,超出部分会被悄悄截断。很多"本地模型怎么前言不搭后语"的问题,根源都在这里。
2026 年的 Ollama:不只是本地了
这一两年 Ollama 的变化很大,有三个值得关注:
1. 兼容 Anthropic 接口。 从 2026 年初的版本开始,Ollama 除了 OpenAI 格式,还兼容了 Anthropic 的 Messages API。这意味着 Claude Code 这类原本只能连 Anthropic 的工具,也可以接到本地开源模型上:
export ANTHROPIC_BASE_URL=http://localhost:11434
export ANTHROPIC_AUTH_TOKEN=ollama
claude --model qwen3-coder2. 一键启动编码 Agent。 新增的 ollama launch 命令可以自动配置并启动 Claude Code、Codex、OpenCode 这类编码工具,省去手动设置环境变量的麻烦。
3. 云端模型。 本地显存不够跑大模型怎么办?Ollama 推出了带 :cloud 后缀的云端模型,用法和本地模型完全一样,只是实际在 Ollama 的服务器上运行,并配套推出了按月订阅的付费套餐。
所以 Ollama 正在从"本地运行工具"变成"本地 + 云端的混合平台"。不过要清醒一点:一旦用了 :cloud 模型,数据就离开你的电脑了,选择本地模型的初衷如果是隐私,那就别碰这个后缀。
同类工具一览
| 工具 | 特点 | 适合谁 |
|---|---|---|
| Ollama | 命令行优先,API 友好,生态最广 | 开发者,想把模型接进应用 |
| LM Studio | 图形界面,点点鼠标就能用 | 非开发者,想先体验模型 |
| llama.cpp | 底层推理引擎,最灵活,参数最多 | 想深度调优的折腾党 |
| vLLM | 高并发、高吞吐的服务端推理 | 生产环境,有 GPU 服务器 |
一句话:个人电脑上用 Ollama 或 LM Studio,服务器上做生产用 vLLM。
第三章:OpenRouter——模型界的聚合支付
一个支付人看 OpenRouter
作为一个做支付的人,第一次看到 OpenRouter 的时候,我的第一反应是:这不就是聚合支付吗?
商户不想分别对接微信、支付宝、银联、各家银行,于是有了聚合支付:一次对接,所有通道都能用,还能按成功率和费率智能选路,某个通道挂了自动切换。
OpenRouter 干的是同一件事,只不过把"支付通道"换成了"模型服务商":
| 聚合支付 | OpenRouter |
|---|---|
| 一次对接,接入所有支付通道 | 一个 API Key,调用几百个模型 |
| 按费率、成功率智能选路 | 按价格、延迟、可用性选择服务商 |
| 通道故障自动降级 | 模型或服务商故障自动 fallback |
| 收取通道费 | 充值时收取平台手续费 |
| 统一对账 | 统一账单和用量统计 |
更有意思的是,2026 年 8 月,支付巨头 Stripe 宣布收购 OpenRouter,据报道交易金额超过 70 亿美元。Stripe 的说法大意是:token 正在成为 AI 时代的"货币",而 OpenRouter 管的正是 token 往哪里花。
我的类比,被 Stripe 用几十亿美元验证了。(当然,这和我没有任何关系。)
怎么用
OpenRouter 的接口兼容 OpenAI 格式,换个 base_url 就能用:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "解释一下什么是幂等性"}],
)
print(resp.choices[0].message.content)模型名的格式是 厂商/模型,具体名字以 OpenRouter 官网的模型列表为准。
杀手锏:Fallback 与路由
OpenRouter 最有价值的不是"能调很多模型",而是路由能力。比如,你可以给一个请求指定多个备选模型,前一个失败就自动尝试下一个:
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
extra_body={
"models": [
"anthropic/claude-sonnet-4.5",
"openai/gpt-oss-120b",
"deepseek/deepseek-chat",
]
},
messages=[{"role": "user", "content": "帮我 review 这段代码"}],
)这和支付系统里的"通道降级"一模一样。做过支付的人都知道,能自动降级的系统和不能降级的系统,半夜被电话叫醒的频率是不一样的。
另外,同一个开源模型往往有多家服务商在跑,OpenRouter 会在它们之间选路,你也可以按价格、延迟、吞吐量指定偏好。还有一个 openrouter/auto,让系统根据你的提示词自动挑选合适的模型。
怎么收费
OpenRouter 的收费模式很好理解:
- 模型价格原价透传:每百万 token 的价格和服务商官方价格一致,不加价。
- 充值时收手续费:充值时收取一定比例的平台费,目前是 5.5%。
- 免费模型:有一批标着
:free的免费模型,但每天有请求次数限制,适合测试和玩票。 - BYOK(自带 Key):你可以绑定自己在各厂商的 API Key,继续享受 OpenRouter 的路由和统一接口,只按用量付少量费用。
所以是否值得用,算账的方式很简单:5.5% 的手续费,换来一个 Key、自动 fallback、统一账单和随时切换模型的自由,值不值? 对于需要同时用多个模型的个人开发者和小团队,答案通常是值;对于用量巨大、只用一两家模型的团队,直连官方可能更划算,也能拿到更高的限额。
第四章:三件套怎么搭配
一张表看区别
| 维度 | Hugging Face | Ollama | OpenRouter |
|---|---|---|---|
| 核心功能 | 托管和分发模型 | 本地运行模型 | 统一调用云端模型 |
| 模型从哪来 | 自己就是源头 | Ollama Library / Hugging Face | 各家推理服务商 |
| 需要显卡吗 | 下载不需要,本地跑需要 | 需要足够的内存或显存 | 不需要 |
| 数据去哪了 | 本地跑则不出门 | 本地模型不出门 | 经过 OpenRouter 和服务商 |
| 费用 | 浏览下载免费,推理收费 | 本地免费,云端模型订阅 | 按 token 付费 + 手续费 |
| 能用闭源模型吗 | 不能 | 不能 | 能(Claude、GPT、Gemini 等) |
| 最适合 | 找模型、研究、微调 | 隐私敏感、离线、低成本试验 | 生产应用、多模型切换 |
一个务实的混合架构
在实际项目里,最务实的做法往往不是三选一,而是组合使用:简单任务和敏感数据走本地,复杂任务走云端,云端再做多模型兜底。
这套架构的思路,其实和支付系统的路由设计如出一辙:按成本、能力、合规要求分流,再加上降级兜底。
怎么选?
- 想先体验一下大模型 → Hugging Face 的 Spaces 点开就玩,或者装个 Ollama 跑个小模型。
- 数据不能出门、要离线运行 → Ollama + Hugging Face 上下载的开源模型。
- 要做正式的产品,追求效果和稳定性 → OpenRouter,或直连官方 API。
- 要微调自己的模型 → Hugging Face 的全家桶(transformers、datasets、peft 等)。
第五章:放弃——那些想拔网线的瞬间
放弃姿势一:硬盘没了
在 Hugging Face 上看到一个好模型,顺手下载;又看到一个,再下载;Ollama 里 pull 了七八个模型"先存着"。某天系统提示磁盘空间不足,一查,~/.cache/huggingface 和 ~/.ollama 加起来几百 GB。
急救:ollama rm 删掉不用的模型;hf cache scan 查看 Hugging Face 缓存,再按需清理。预防:模型是用来跑的,不是用来收藏的。
放弃姿势二:一秒两个字
满怀期待地跑了一个 70B 模型,结果输出速度一秒两个字,风扇声音盖过了你的思考。原因通常是显存放不下,模型被部分甚至全部卸载到 CPU 上运行。
急救:ollama ps 看一下模型有多少跑在 GPU 上;换更小的模型或更激进的量化版本。认清现实:消费级硬件上,7B 到 30B 量级的模型才是舒适区。
放弃姿势三:本地模型在胡言乱语
让本地模型分析一份长文档,它的回答和文档毫无关系。你怀疑模型太蠢,其实是上下文窗口太小,文档的大部分内容被截断了,模型根本没看到。
急救:调大 num_ctx,但要知道上下文越长越吃内存。
放弃姿势四:同一个模型,不同的智商
在 OpenRouter 上调用同一个开源模型,有时候效果很好,有时候明显变笨。原因可能是请求被路由到了不同的服务商,而它们部署的量化精度和上下文长度并不一样。
急救:在请求里指定服务商,或者在模型页面查看各服务商的量化参数,选定一家固定下来。
放弃姿势五:钱包没了
用 OpenRouter 写了个 Agent,让它自己循环调用工具,然后去开了个会。回来发现,它在一个死循环里和自己聊了两个小时,用的还是最贵的模型。
急救:给每个 API Key 设置消费上限,OpenRouter 支持按 Key 设置额度。预防:Agent 必须有最大步数限制。这和支付系统里的限额风控是一个道理——永远不要相信一个没有上限的循环。
放弃姿势六:刚学会,就过时了
你花了一周时间对比各家模型、调好了提示词、写完了评测脚本。第二天,三家厂商同时发布了新模型,排行榜全部刷新。
急救:无。这是 AI 时代程序员的日常。好在 Hugging Face、Ollama、OpenRouter 都在做同一件事:让切换模型的成本尽可能低。只要你的代码里模型名是配置项而不是写死的,新模型出来,改一行配置就好。
写在最后
写完这篇我发现,这三个工具代表了使用大模型的三种姿态:
- Hugging Face:我想知道模型是什么、从哪来,甚至自己动手改。
- Ollama:我想把模型握在自己手里,数据不出门,不按 token 交钱。
- OpenRouter:我不在乎模型在哪,只要好用、稳定、随时能换。
而它们背后有一个共同的趋势:模型正在变成一种可替换的基础设施,就像水、电,或者支付通道。真正的竞争力,不在于你绑定了哪个模型,而在于你的系统能不能在模型之间自由切换、合理分流、优雅降级。
至于标题里的"放弃"——我想通了,要放弃的是"找到一个最好的模型然后一劳永逸"的幻想。在这个一周一个新模型的时代,唯一不变的就是变化本身。
好了,我要去清理硬盘了。
评论
还没有评论,来说点什么吧。