tools 工具 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 API OpenAI API vLLM llama.cpp server 部署 本地一键启动 云端 需配置 GPU 手动编译 价格 免费 按 token 收费 免费 免费 数据隐私 完全本地 数据上传 可本地 完全本地 模型管理 简单(pull/run) 不需要 手动下载 手动下载 OpenAI 兼容 支持 原生 支持 支持 性能 中等 最快 最高吞吐 最佳CPU性能 上手难度 最低 低 中 高
白话总结 :Ollama API 就是你自己电脑上的"ChatGPT API"——用简单的 HTTP 请求就能调用本地模型,而且兼容 OpenAI 的 API 格式,意味着你原来写的 OpenAI 代码改一行地址就能用本地模型。完全免费、完全私密、完全离线。适合想在本地跑 AI 模型但不想写复杂代码的人。