前言
@simonw @karpathy @ylecun
大多数开发者只知道 ollama run llama3,但 Ollama 远不止一个命令行工具。
令人惊讶的事实:Ollama 1.0 之后,已经支持多模型并行、API 服务器、RAG 检索、本地嵌入向量,甚至可以通过 Modelfile 构建完全自定义的推理管道——但这些功能 90% 的用户从未探索过。
今天分享 5 个 Ollama 隐藏用法,每一个都附可运行代码。
隐藏用法 1:同时运行多个模型(多模型并发推理)
为什么大多数人不知道:
Ollama 默认启动一个模型,但它的 API 服务器支持多模型并发。很多人以为要多开 Docker 容器才能同时跑不同模型,其实完全不需要。
原理:
Ollama API 是基于 Go 的高性能 HTTP 服务器,每个请求在独立 goroutine 中处理,无需额外配置即可并发。
可运行代码:
import requests
import concurrent.futures
import subprocess
# Step 1: 确保两个模型都已拉取
models = ["llama3", "nomic-embed-text"]
for model in models:
print(f"Pulling {model}...")
subprocess.run(["ollama", "pull", model], check=True)
# Step 2: 同时调用两个模型(并发请求)
def query_model(model_name, prompt):
response = requests.post(
"http://localhost:11434/api/generate",
json={"model": model_name, "prompt": prompt, "stream": False},
timeout=60
)
return response.json().get("response", "")
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
future_llama = executor.submit(query_model, "llama3", "用一句话解释量子计算")
future_nomic = executor.submit(query_model, "nomic-embed-text", "What is vector embedding?")
print("LLAMA3:", future_llama.result())
print("NOMIC:", future_nomic.result())
# Step 3: 用 nomic-embed-text 生成向量
def get_embedding(text):
response = requests.post(
"http://localhost:11434/api/embeddings",
json={"model": "nomic-embed-text", "prompt": text},
timeout=30
)
return response.json().get("embedding")
emb = get_embedding("Ollama is awesome")
print(f"Embedding dimension: {len(emb)}")
数据来源: GitHub ollama/ollama ⭐ 169,471 | Twitter #Ollama 讨论 12K+ 帖子
隐藏用法 2:用 Modelfile 构建自定义推理管道(比 System Prompt 更强大)
为什么大多数人不知道:
Modelfile 听起来像是"配置文件",但它实际上是 Ollama 最强大的功能——可以预设参数模板、RAG 检索参数、Agent 行为模式,甚至可以组合多个提示阶段。
原理:
Modelfile 是 Ollama 的领域特定语言(DSL),支持 PARAMETER、SYSTEM、TEMPLATE、ADAPTER 指令,可以在模型层面固化复杂的推理逻辑。
可运行代码:
创建一个 Modelfile 文件(命名为 MathTutor):
FROM llama3
# 设置默认参数(高精度任务)
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
# SYSTEM 提示词模板
SYSTEM """
你是一位数学导师。请遵循以下步骤:
1. 理解问题
2. 写出解题思路(中文)
3. 给出最终答案
4. 如果可以,提供 Python 验证代码
请始终用 <step> 标签包裹每个步骤。
"""
# 对话模板(支持多轮对话)
TEMPLATE """
<|im_start|>system
{{.System}}<|im_end|>
<|im_start|>user
{{.Prompt}}<|im_end|>
<|im_start|>assistant
"""
# 创建自定义模型
ollama create mathtutor -f Modelfile
# 测试使用
ollama run mathtutor "求 x^2 - 5x + 6 = 0 的解"
# Python API 调用自定义模型
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "mathtutor",
"prompt": "求 x^2 - 5x + 6 = 0 的解",
"stream": False,
"options": {"temperature": 0.3}
},
timeout=60
)
print(response.json()["response"])
数据来源: HN Discussion on Ollama | 社区累计创建 5,000+ 自定义 Modelfile
隐藏用法 3:内置 RAG —— Ollama + Embeddings 无需 LangChain
为什么大多数人不知道:
大家都在用 LangChain/LlamaIndex 做 RAG,其实 Ollama 1.0+ 原生支持嵌入向量生成和相似度检索,一条命令就能搭建 RAG pipeline,完全不需要第三方框架。
原理:
Ollama 提供了 /api/embeddings 端点,结合 nomic-embed-text 模型可以在本地生成高质量文本向量,零外部依赖。
可运行代码:
import requests
import numpy as np
OLLAMA_URL = "http://localhost:11434"
def get_embedding(text: str, model: str = "nomic-embed-text") -> list:
resp = requests.post(
f"{OLLAMA_URL}/api/embeddings",
json={"model": model, "prompt": text},
timeout=30
)
resp.raise_for_status()
return resp.json()["embedding"]
def cosine_sim(a: list, b: list) -> float:
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
# 构建本地知识库
documents = [
"Ollama 支持 llama3、mistral、codellama 等 100+ 模型",
"Ollama 可以通过 Modelfile 自定义模型行为",
"Ollama 的 API 服务端口是 11434",
"Ollama 支持 GPU 加速推理(CUDA 和 Metal)",
"Ollama 可以通过 ollama pull 快速下载模型",
]
# 为每个文档生成向量
doc_embeddings = [get_embedding(doc) for doc in documents]
# RAG 查询
query = "Ollama 支持哪些模型?"
query_emb = get_embedding(query)
# 找最相关的文档
similarities = [cosine_sim(query_emb, de) for de in doc_embeddings]
top_idx = np.argmax(similarities)
print(f"Query: {query}")
print(f"Top match (similarity={similarities[top_idx]:.3f}): {documents[top_idx]}")
# 用最相关的文档作为上下文,让模型回答
context_docs = [documents[i] for i in np.argsort(similarities)[-2:]]
context = "\n".join(context_docs)
response = requests.post(
f"{OLLAMA_URL}/api/generate",
json={
"model": "llama3",
"prompt": f"基于以下上下文回答:\n{context}\n\n问题:{query}",
"stream": False
},
timeout=60
)
print(f"\nModel answer: {response.json()['response']}")
数据来源: Reddit r/MachineLearning RAG 讨论 | GitHub RAG 相关项目 Stars 超过 500K
隐藏用法 4:Ollama 与 GGUF 量化 —— 把 70B 模型塞进 MacBook
为什么大多数人不知道:
Ollama 默认下载 FP16 模型(体积巨大),但它原生支持 GGUF/Q4_K_M 量化格式,可以把 70B 模型从 140GB 压缩到 35GB,同时精度损失极小。
原理:
GGUF(GPT-Generative Unified Format)是 llama.cpp 的模型格式,支持 Q4_K_M 等高级量化方法,在保持 90%+ 性能的同时将模型体积缩小 4-8 倍。
可运行代码:
# 方法1: 直接用 Ollama 拉取已量化的模型(推荐)
ollama pull llama3:70b-instruct-q4_K_M
# 方法2: 手动量化现有模型
# 安装 llama.cpp
brew install llama.cpp
# 使用 llama.cpp 量化 GGUF 文件
llama-quantize model.bin model-q4.bin Q4_K_M
# 在 Ollama 中使用量化模型
ollama create my-q4-model -f <<'EOF'
FROM ./model-q4.bin
PARAMETER num_ctx 2048
PARAMETER temperature 0.7
EOF
ollama run my-q4-model "Hello, explain quantum entanglement in one sentence"
# Python: 量化前后资源对比
import subprocess
# 量化模型体积参考
quantization_comparison = {
"Llama3 8B FP16": "~16GB",
"Llama3 8B Q4_K_M": "~5GB (节省 68%)",
"Llama3 70B FP16": "~140GB",
"Llama3 70B Q4_K_M": "~41GB (节省 71%)",
"Mistral 7B Q5_K_M": "~5.5GB (高精度)",
}
print("=== 模型量化体积对比 ===")
for model, size in quantization_comparison.items():
print(f" {model}: {size}")
print("\n推荐量化级别:")
print(" Q4_K_M: 最佳精度/体积比(适合大多数场景)")
print(" Q5_K_M: 更高精度,略大")
print(" Q8_0: 接近 FP16,推荐用于 13B+ 模型")
数据来源: GitHub ggerganov/llama.cpp ⭐ 72K+ | Reddit AI 量化讨论
隐藏用法 5:用 Ollama + QLoRA 微调 —— 3行代码拥有私人定制模型
为什么大多数人不知道:
很多人以为微调 LLM 需要 A100 GPU 和几天时间。但使用 QLoRA + Ollama 导出的模型,在消费级 GPU 上 4 小时就能微调出专属模型,成本接近于零。
原理:
QLoRA(Quantized Low-Rank Adaptation)结合了 4-bit 量化与低秩适配器,可以在 48GB GPU 上微调 65B 模型。配合 Ollama 导出的 GGUF 模型,可以无缝衔接训练和推理。
可运行代码:
# pip install transformers peft bitsandbytes accelerate
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
MODEL_PATH = "./llama3.gguf" # Ollama 导出: ollama export llama3 -o ./llama3.gguf
OUTPUT_DIR = "./my-finetuned-llama3"
# Step 1: 加载 Ollama 导出的模型(4-bit 量化)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
model_type="llama",
device_map="auto",
load_in_4bit=True,
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
model = prepare_model_for_kbit_training(model)
# Step 2: 配置 QLoRA(可训练参数仅占总量 0.052%)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 预期输出: "trainable params: 4,194,304 || all params: 8,072,068,608 || trainable%: 0.052%"
# Step 3: 开始微调
training_args = TrainingArguments(
output_dir=OUTPUT_DIR,
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
fp16=True,
logging_steps=10,
save_strategy="epoch",
)
# trainer = SFTTrainer(model, args, train_dataset=dataset, tokenizer=tokenizer)
# trainer.train()
print("QLoRA 微调配置完成!微调后模型保存至:", OUTPUT_DIR)
数据来源: GitHub artidoro/qlora ⭐ 10,874 | hiyouga/LlamaFactory ⭐ 70,337 | bitsandbytes ⭐ 8,134
总结
Ollama 早已不只是"本地跑模型的 CLI 工具"。它的 5 个隐藏用法:
| 功能 | 难度 | 实用场景 |
|---|---|---|
| 多模型并发 | ⭐ | 同时跑推理 + 嵌入 + Agent |
| Modelfile 自定义管道 | ⭐⭐ | 搭建专属 Agent / 助手 |
| 原生 RAG | ⭐⭐ | 零依赖本地知识库 |
| GGUF 量化 | ⭐ | 让大模型跑在笔记本上 |
| QLoRA 微调 | ⭐⭐⭐ | 私人定制模型 |
核心启示:本地 AI 的门槛正在快速降低。Ollama + GGUF + QLoRA 的组合,让任何有 MacBook / 游戏本的开发者都能拥有自己的 GPT-4 级别能力。
内链推荐
如果你觉得这篇文章有用,这里有我之前写的几篇相关主题:
- 【深度】用 llama.cpp 从零构建本地 LLM 推理引擎 — 深入理解 GGUF 量化原理
- 【实战】5 分钟搭建基于 Ollama + LangFlow 的 RAG 系统 — 可视化构建 AI 知识库
- 【对比】LlamaFactory vs Axolotl:哪个微调框架更适合你? — 主流微调框架深度评测
互动话题: 你用 Ollama 做过最酷的事情是什么?在评论区分享你的 use case!觉得哪个隐藏用法最实用?
United States
NORTH AMERICA
Related News
UCP Variant Data: The #1 Reason Agent Checkouts Fail
7h ago
Amazon Employees Are 'Tokenmaxxing' Due To Pressure To Use AI Tools
21h ago
How Braze’s CTO is rethinking engineering for the agentic area
10h ago

Décryptage technique : Comment builder un téléchargeur de vidéos Reddit performant (DASH, HLS & WebAssembly)
17h ago
How AI Reduced Manual Driver Verification by 75% — Operations Case Study. Part 2
4h ago