跳转至

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/completionsOpenAI 兼容对话
POST /v1/embeddingsOpenAI 兼容嵌入

与同类工具对比

对比维度Ollama APIOpenAI APIvLLMllama.cpp server
部署本地一键启动云端需配置 GPU手动编译
价格免费按 token 收费免费免费
数据隐私完全本地数据上传可本地完全本地
模型管理简单(pull/run)不需要手动下载手动下载
OpenAI 兼容支持原生支持支持
性能中等最快最高吞吐最佳CPU性能
上手难度最低

白话总结:Ollama API 就是你自己电脑上的"ChatGPT API"——用简单的 HTTP 请求就能调用本地模型,而且兼容 OpenAI 的 API 格式,意味着你原来写的 OpenAI 代码改一行地址就能用本地模型。完全免费、完全私密、完全离线。适合想在本地跑 AI 模型但不想写复杂代码的人。