从 HTTP 到 Ollama API的学习笔记
HTTP,全称为超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。它是客户端和服务器之间进行通信的规则集合,允许将超文本标记语言(HTML)文档从Web服务器传输到Web浏览器。简而言之,HTTP是Web浏览器和Web服务器之间的“语言”,使得用户能够浏览网页、下载文件、提交表单等。比如:- 你发一个''请求''(比如“请帮我生成一段文
一、为什么要先懂一点 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/jsonAuthorization: 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,循环读取行 |
五、参考资料
-
Ollama API 官方文档(英文,例子很清晰)
-
MDN HTTP 教程(中文,详细)
-
B站视频《一小时全面入门 HTTP 协议》(搜一下就有)
我还在学习中,很多地方理解得不一定准确。如果如果有不准确的地方,欢迎大家在评论区指出,我会认真修正的!也希望能和同样对 AI 感兴趣的同学多多交流~ 🤝,最后如果对你有帮助,点个赞就是对我最大的鼓励~ ❤️
更多推荐


所有评论(0)