一、为什么要先懂一点 HTTP?

Ollama 提供了 **HTTP API**,我们可以用代码(Python / curl)给它发请求,然后拿到模型的回答。  
如果你不懂 HTTP,可能会遇到:

- 分不清 'GET' 和 'POST',不知道用哪个。
- 看到 '400 Bad Request' 不知道错在哪。
- 不知道 '200'、'404'、'500' 这些数字什么意思。

 二、HTTP 基础知识

2.1 什么是 HTTP?

HTTP,全称为超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。它是客户端和服务器之间进行通信的规则集合,允许将超文本标记语言(HTML)文档从Web服务器传输到Web浏览器。简而言之,HTTP是Web浏览器和Web服务器之间的“语言”,使得用户能够浏览网页、下载文件、提交表单等。

比如:- 你发一个''请求''(比如“请帮我生成一段文字”)。
           - 服务器返回一个 **响应**(模型生成的文字)。

2.2 一个 HTTP 请求包含什么?

2.2.1. HTTP 请求结构

组成部分 作用 例子
请求行 声明方法、资源路径、HTTP版本 POST /api/generate HTTP/1.1
请求头 附加信息(类型、认证、客户端信息等) Content-Type: application/json
Authorization: Bearer xxx
请求体 实际发送的数据(通常只有 POST/PUT 才有) {"model":"qwen2.5:7b","prompt":"你好"}

💡 小贴士:GET 请求一般没有请求体,参数直接拼在 URL 问号后面,如 /api/tags?limit=10


2.2.2 GET vs POST 对比(重点!Ollama 常用 POST)

对比项 GET POST
主要用途 获取数据(读操作) 提交数据(写操作)
参数位置 URL 查询字符串(?key=value 请求体(相对安全)
能否缓存 能(浏览器/代理自动缓存) 默认不能,需手动设置
长度限制 有(浏览器/服务器限制,一般 2KB~8KB) 无(可传输大文件)
幂等性 是(多次请求结果相同) 否(多次提交可能产生多个资源)
Ollama 中的例子 GET /api/tags(查看已安装模型列表) POST /api/generate(让模型生成文本)

✅ 调用 Ollama 让模型回答问题,必须用 POST。


2.2.3 请求地址组成(以 http://www.baidu.com:80/s?wd=AI 为例)

部分 说明 例子
协议 通信规则,常见 http / https http
域名/IP 服务器地址 www.baidu.com
端口 服务入口,http默认80,https默认443,Ollama 默认端口是 11434 :80(可省略)
路径 具体资源接口 /s(百度搜索接口)
查询参数 GET 附带的键值对,以 ? 开头,& 分隔 ?wd=AI

2.2.4 请求-响应

【请求阶段】 客户端 → 服务端
    1. 拼接请求地址:协议 + 主机 + 端口 + 路径 + 参数(协议+IP地址+端口+接口地址)
    2. 选择方法:GET(取) / POST(发)
    3. 添加请求头:Content-Type, Authorization 等
    4. 填入请求体(POST时)
    
【响应阶段】 服务端 → 客户端
    1. 解析状态码:200/400/500...
    2. 读取响应头(类型、长度等)
    3. 提取响应体中的实际数据(例如模型生成的文本)

2.2.5 HTTP 状态码速查(调试 API )

分类 状态码 含义 常见原因(Ollama 场景)
✅ 成功 200 OK 一切正常,返回数据 调用成功,收到模型回复
🧭 重定向 302 Found 资源临时移动 少见于本地 Ollama
❌ 客户端错误 400 Bad Request 请求格式错误 JSON 语法错误、字段名写错(如 "modle"
❌ 客户端错误 404 Not Found URL 不存在 把 /api/generate 写成了 /v1/generate
❌ 客户端错误 405 Method Not Allowed 请求方法错误 用 GET 请求只支持 POST 的接口
❌ 客户端错误 413 Payload Too Large 请求体过大 输入的 prompt 太长
🔥 服务器错误 500 Internal Server Error 服务器内部错误 Ollama 服务挂了,尝试 ollama serve
🔥 服务器错误 503 Service Unavailable 服务不可用 模型未加载或名字写错,先 ollama pull <模型名>

📌 记忆口诀
2xx 舒服,3xx 迷路,4xx 我糊涂,5xx 服务器想哭


🧠 附:Ollama 常用 API 速记

操作 方法 URL 请求体示例
查看已安装模型 GET /api/tags
生成文本 POST /api/generate {"model": "qwen2.5:7b", "prompt": "你好", "stream": false}
对话模式 POST /api/chat {"model": "qwen2.5:7b", "messages": [{"role": "user", "content": "你好"}]}
拉取模型 POST /api/pull {"name": "qwen2.5:7b"}

三、Ollama API 实战

3.1 准备工作

1. 安装 Ollama:去 [ollama.com](https://ollama.com) 下载安装(支持 Windows / macOS / Linux)。
2. 下载一个模型(比如qwen2.5:7b,约 4.7GB):

bash

ollama pull qwen2.5:7b
3. 确保服务运行:安装后 Ollama 一般会自动在后台运行。

3.2 调用生成接口('/api/generate')

用 curl 测试(直接复制到终端)

bash

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "为什么天空是蓝色的?",
  "stream": false
}'

你会得到一个 JSON,里面的"response"就是模型的回答。

用 Python 调用(更常用)

python

import requests

url = "http://localhost:11434/api/generate"
data = {
    "model": "qwen2.5:7b",
    "prompt": "用一句话解释什么是神经网络",
    "stream": False
}

resp = requests.post(url, json=data)
print(resp.json()["response"])

> 记得先 pip install requests 哦。

3.3 多轮对话('/api/chat')

如果想让模型记住上下文(像 ChatGPT 那样),用' /api/chat',需要自己维护消息历史。

python

chat_data = {
    "model": "qwen2.5:7b",
    "messages": [
        {"role": "user", "content": "我叫小明,喜欢打篮球"}
    ],
    "stream": False
}

resp = requests.post("http://localhost:11434/api/chat", json=chat_data)
reply = resp.json()["message"]["content"]
print(reply)

# 第二轮:把历史带上
chat_data["messages"].append({"role": "assistant", "content": reply})
chat_data["messages"].append({"role": "user", "content": "那我擅长什么运动?"})

resp2 = requests.post("http://localhost:11434/api/chat", json=chat_data)
print(resp2.json()["message"]["content"])

⚠️注意:Ollama 不会自动保存历史,需要我们自己在代码里维护 'messages' 列表。

3.4 流式输出(打字机效果)

设置"stream":'true',模型会一个字一个字地返回。

python

resp = requests.post(
    "http://localhost:11434/api/generate",
    json={"model": "qwen2.5:7b", "prompt": "讲个笑话", "stream": True},
    stream=True
)

for line in resp.iter_lines():
    if line:
        chunk = line.decode('utf-8')
        # 每行类似 {"response":"哈","done":false}
        print(chunk)

3.5 其他常用 API

端点 方法 作用
/api/tags GET 查看已下载的模型列表
/api/show POST 查看某个模型的详细信息
/api/pull POST 下载新模型(同 ollama pull
/api/delete DELETE 删除模型(释放硬盘)

示例:查看模型列表

bash

curl http://localhost:11434/api/tags

四、小结(回忆一下)

知识点 一句话版
HTTP 请求结构 请求行 + 请求头 + 请求体
GET vs POST 取数据用 GET,提交数据用 POST
常见状态码 200 成功,400 我写错,500 服务器崩
Ollama 生成接口 POST /api/generate + JSON 包含 model 和 prompt
多轮对话 用 /api/chat,自己维护 messages 数组
流式输出 加 "stream": true,循环读取行

五、参考资料


我还在学习中,很多地方理解得不一定准确。如果如果有不准确的地方,欢迎大家在评论区指出,我会认真修正的!也希望能和同样对 AI 感兴趣的同学多多交流~ 🤝,最后如果对你有帮助,点个赞就是对我最大的鼓励~ ❤️

Logo

免费领 100 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐