Ollama API 高级用法
一句话概述
Ollama 的 REST API 让你用 HTTP 请求就能调用本地运行的 AI 模型,还兼容 OpenAI API 格式,相当于在你自己的电脑上搭了一个"私人 ChatGPT API 服务"。
核心知识点表格
| 知识点 | 说明 |
|---|
| 默认地址 | http://localhost:11434 |
| API 格式 | 原生 API(/api/)+ OpenAI 兼容(/v1/) |
| 数据格式 | JSON 请求 / NDJSON 流式响应 |
| 主要功能 | 对话、补全、嵌入、模型管理 |
| 认证 | 2026新增 API Key 认证 |
| 兼容层 | OpenAI API + Anthropic Messages API |
| 自定义模型 | 支持 Modelfile 和 GGUF 上传 |
| 最新模型 | Kimi-K2.5, GLM-5, DeepSeek, Qwen, Gemma |
安装与配置
环境要求
- 已安装 Ollama(见基础教程)
- 至少一个已下载的模型
启动服务
# 启动 Ollama 服务
ollama serve # 启动 API 服务器,默认监听 11434 端口
# 自定义监听地址
OLLAMA_HOST=0.0.0.0:11434 ollama serve # 允许局域网访问
# 检查服务是否运行
curl http://localhost:11434 # 返回 "Ollama is running" 表示正常
# 下载模型(如果还没有)
ollama pull qwen2.5:7b # 下载通义千问 7B 模型
ollama pull deepseek-coder-v2 # 下载 DeepSeek 代码模型
基本使用
API 端点一览
GET / — 健康检查
GET /api/tags — 列出所有已下载模型
POST /api/chat — 对话(带历史消息)
POST /api/generate — 文本生成(单次)
POST /api/embeddings — 生成文本嵌入向量
POST /api/pull — 下载模型
POST /api/push — 上传模型
POST /api/create — 创建自定义模型
POST /api/copy — 复制模型
POST /api/show — 查看模型信息
DELETE /api/delete — 删除模型
GET /api/ps — 查看正在运行的模型
POST /api/blobs/:digest — 上传模型文件(GGUF)
对话 API(/api/chat)
# 基本对话请求
curl http://localhost:11434/api/chat \
-d '{
"model": "qwen2.5:7b",
"messages": [
{
"role": "system",
"content": "你是一个有用的助手,回答用中文。"
},
{
"role": "user",
"content": "什么是宏基因组学?"
}
]
}'
# 返回流式 NDJSON,每行一个 JSON 对象
# 关闭流式,一次性返回完整结果
curl http://localhost:11434/api/chat \
-d '{
"model": "qwen2.5:7b",
"messages": [
{"role": "user", "content": "什么是宏基因组学?"}
],
"stream": false
}'
# 返回单个 JSON 对象,包含完整回答
Python 调用示例
import requests # 导入 HTTP 请求库
# === 基本对话 ===
response = requests.post(
"http://localhost:11434/api/chat", # API 地址
json={
"model": "qwen2.5:7b", # 模型名称
"messages": [
{"role": "user", "content": "用一句话解释 DNA 测序"} # 用户消息
],
"stream": False # 关闭流式输出,等待完整回答
}
)
result = response.json() # 解析 JSON 响应
print(result["message"]["content"]) # 打印 AI 的回答
# === 流式对话(实时显示) ===
import json # 导入 JSON 库
response = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "qwen2.5:7b",
"messages": [{"role": "user", "content": "讲一个关于 Python 的笑话"}],
"stream": True # 开启流式输出
},
stream=True # requests 也要开启流式
)
for line in response.iter_lines(): # 逐行读取响应
if line:
data = json.loads(line) # 解析每行 JSON
print(data["message"]["content"], end="", flush=True) # 实时打印
生成嵌入向量
import requests # 导入 HTTP 请求库
# 生成文本嵌入向量(用于 RAG、语义搜索等)
response = requests.post(
"http://localhost:11434/api/embeddings", # 嵌入 API
json={
"model": "nomic-embed-text", # 嵌入模型
"prompt": "宏基因组学是研究环境中所有微生物基因组的学科" # 要向量化的文本
}
)
embedding = response.json()["embedding"] # 获取向量
print(f"向量维度: {len(embedding)}") # 打印向量维度
print(f"前5个值: {embedding[:5]}") # 打印前5个数值
高级用法
OpenAI 兼容 API
# Ollama 的 /v1/* 端点兼容 OpenAI API 格式
# 你可以直接用 OpenAI 的 SDK 连接 Ollama!
from openai import OpenAI # 导入 OpenAI SDK
# 创建客户端,指向本地 Ollama
client = OpenAI(
base_url="http://localhost:11434/v1", # 指向 Ollama 的 OpenAI 兼容端点
api_key="ollama" # Ollama 不需要真实 Key,随便填
)
# 像用 ChatGPT API 一样使用
response = client.chat.completions.create(
model="qwen2.5:7b", # 本地模型名称
messages=[
{"role": "system", "content": "你是一个生信分析专家。"},
{"role": "user", "content": "FASTQ 文件的质量值是什么意思?"}
]
)
print(response.choices[0].message.content) # 打印回答
# 好处:你现有的 OpenAI 代码只需要改 base_url 就能用本地模型
# 数据完全不会上传到外部服务器
结构化输出(JSON Mode)
# 让模型返回指定格式的 JSON
curl http://localhost:11434/api/chat \
-d '{
"model": "qwen2.5:7b",
"messages": [
{"role": "user", "content": "列出3种常见的测序技术,用JSON格式返回,包含名称、原理、优缺点"}
],
"format": {
"type": "object",
"properties": {
"techniques": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"principle": {"type": "string"},
"pros": {"type": "string"},
"cons": {"type": "string"}
},
"required": ["name", "principle", "pros", "cons"]
}
}
}
},
"stream": false
}'
# 模型会严格按照 JSON Schema 返回结构化数据
推理模型(Thinking)
# 对于推理模型(如 deepseek-r1),可以控制思考过程
curl http://localhost:11434/api/chat \
-d '{
"model": "deepseek-r1:7b",
"messages": [
{"role": "user", "content": "如果一个 FASTQ 文件有100万条 reads,每条150bp,这个文件大约多大?"}
],
"think": true,
"stream": false
}'
# think: true — 显示模型的推理过程
# think: false — 只显示最终答案
创建自定义模型(Modelfile)
# 创建一个专门回答生信问题的模型
# 1. 创建 Modelfile
cat > Modelfile << 'EOF'
FROM qwen2.5:7b
SYSTEM """你是一个专业的生物信息学助手。
你的回答应该:
1. 准确且基于科学事实
2. 用中文回答
3. 对专业术语加上白话解释
4. 给出代码示例时加中文注释"""
PARAMETER temperature 0.3
PARAMETER num_ctx 8192
EOF
# 2. 创建模型
ollama create bioinfo-helper -f Modelfile # 基于 Modelfile 创建自定义模型
# 3. 使用自定义模型
ollama run bioinfo-helper # 运行自定义模型
上传 GGUF 模型
# 如果你有自己的 GGUF 模型文件,可以直接导入
# 1. 上传 GGUF 文件到 Ollama
# 先计算文件的 SHA256 值
sha256sum my-model.gguf # 计算哈希值
# 2. 上传 blob
curl -T my-model.gguf \
http://localhost:11434/api/blobs/sha256:$(sha256sum my-model.gguf | cut -d' ' -f1)
# 3. 创建 Modelfile 指向这个 blob
cat > Modelfile << 'EOF'
FROM @sha256:上面计算的哈希值
TEMPLATE "{{ .System }}\n{{ .Prompt }}"
EOF
# 4. 创建模型
ollama create my-custom-model -f Modelfile
模型管理 API
import requests # 导入 HTTP 请求库
# 列出所有已下载的模型
models = requests.get("http://localhost:11434/api/tags").json() # 获取模型列表
for model in models["models"]:
print(f"{model['name']}: {model['size'] / 1e9:.1f}GB") # 打印模型名和大小
# 查看正在运行的模型
running = requests.get("http://localhost:11434/api/ps").json() # 获取运行中的模型
for model in running["models"]:
print(f"运行中: {model['name']}") # 打印运行中的模型名
# 删除模型
requests.delete(
"http://localhost:11434/api/delete",
json={"name": "旧模型名"} # 指定要删除的模型
)
# 查看模型详细信息
info = requests.post(
"http://localhost:11434/api/show",
json={"name": "qwen2.5:7b"} # 指定模型
).json()
print(info["parameters"]) # 查看模型参数
常见报错与解决
| 报错 | 原因 | 解决方案 |
|---|
| "connection refused" | Ollama 服务未启动 | 运行 ollama serve |
| "model not found" | 模型未下载 | 运行 ollama pull 模型名 |
| GPU 内存不足 | 模型太大 | 使用更小的模型或量化版本 |
| 响应很慢 | CPU 推理慢 | 确保 GPU 正在被使用(检查 ollama ps) |
| "context too long" | 输入文本太长 | 在请求中设置 num_ctx 参数增大上下文 |
| CORS 错误 | 浏览器跨域限制 | 设置 OLLAMA_ORIGINS=* 环境变量 |
速查表
| 命令/API | 说明 |
|---|
GET / | 健康检查 |
GET /api/tags | 列出所有模型 |
POST /api/chat | 对话(推荐) |
POST /api/generate | 文本生成 |
POST /api/embeddings | 生成嵌入向量 |
GET /api/ps | 查看运行中的模型 |
POST /api/pull | 下载模型 |
DELETE /api/delete | 删除模型 |
POST /api/create | 创建自定义模型 |
POST /v1/chat/completions | OpenAI 兼容对话 |
POST /v1/embeddings | OpenAI 兼容嵌入 |
与同类工具对比
| 对比维度 | Ollama API | OpenAI API | vLLM | llama.cpp server |
|---|
| 部署 | 本地一键启动 | 云端 | 需配置 GPU | 手动编译 |
| 价格 | 免费 | 按 token 收费 | 免费 | 免费 |
| 数据隐私 | 完全本地 | 数据上传 | 可本地 | 完全本地 |
| 模型管理 | 简单(pull/run) | 不需要 | 手动下载 | 手动下载 |
| OpenAI 兼容 | 支持 | 原生 | 支持 | 支持 |
| 性能 | 中等 | 最快 | 最高吞吐 | 最佳CPU性能 |
| 上手难度 | 最低 | 低 | 中 | 高 |
白话总结:Ollama API 就是你自己电脑上的"ChatGPT API"——用简单的 HTTP 请求就能调用本地模型,而且兼容 OpenAI 的 API 格式,意味着你原来写的 OpenAI 代码改一行地址就能用本地模型。完全免费、完全私密、完全离线。适合想在本地跑 AI 模型但不想写复杂代码的人。