📌 一、Ollama API 简介
- Ollama 在运行时会自动监听本地接口:
http://localhost:11434
- 提供 REST 风格的 API,便于程序调用模型进行推理
- 适用于 Python、Node.js、Go 等后端环境
🧩 二、主要 API 接口一览
接口路径 | 功能说明 |
---|---|
POST /api/generate | 文本生成,进行对话/回答 |
POST /api/chat | 多轮对话接口(支持聊天上下文) |
GET /api/tags | 获取已安装模型列表 |
POST /api/pull | 拉取模型(等价于 ollama pull ) |
DELETE /api/delete | 删除模型 |
POST /api/create | 通过 Modelfile 创建自定义模型 |
GET /api/show | 显示模型元信息(参数、系统提示等) |
🧪 三、最常用接口:文本生成(/api/generate
)
🔧 请求格式(非流式):
curl http://localhost:11434/api/generate \
-d '{
"model": "llama2",
"prompt": "介绍一下万里长城的历史。",
"stream": false
}'
📤 返回格式:
{
"model": "llama2",
"created_at": "2025-04-17T13:01:00Z",
"response": "万里长城是中国古代的防御工程...",
"done": true
}
🌊 四、流式输出模式(stream = true)
适合构建对话框“打字机”式输出效果。
示例(stream 模式):
curl http://localhost:11434/api/generate \
-d '{
"model": "mistral",
"prompt": "请讲个笑话。",
"stream": true
}'
会逐块输出 JSON:
{"response":"一个","done":false}
{"response":"程序员","done":false}
{"response":"走进酒吧...","done":false}
{"done":true}
🤖 五、多轮对话接口(/api/chat
)
适用于传入完整聊天上下文:
示例:
curl http://localhost:11434/api/chat \
-d '{
"model": "llama2",
"messages": [
{"role": "system", "content": "你是一个历史专家。"},
{"role": "user", "content": "介绍一下秦始皇"},
{"role": "assistant", "content": "秦始皇是中国第一个皇帝..."},
{"role": "user", "content": "他是如何统一六国的?"}
],
"stream": false
}'
响应:
{
"message": {
"role": "assistant",
"content": "秦始皇通过战争和政治手段统一六国..."
},
"done": true
}
🛠️ 六、请求参数详解(通用)
参数名 | 类型 | 说明 |
---|---|---|
model | string | 模型名称,如 llama2 、mistral 、qwen |
prompt | string | 单轮对话输入(仅 /generate 使用) |
messages | list | 聊天消息历史(仅 /chat 使用) |
stream | boolean | 是否流式输出 |
temperature | float | 采样温度,0~1,越高越随机 |
top_p | float | 样本过滤概率阈值,常用于控制生成质量 |
repeat_penalty | float | 避免重复生成的惩罚参数(默认为 1.1 左右) |
num_predict | int | 最大生成 token 数(默认 128) |
🧬 七、示例:Python 调用 Ollama API
import requests
url = 'http://localhost:11434/api/chat'
payload = {
"model": "llama2",
"messages": [
{"role": "system", "content": "你是一个编程专家"},
{"role": "user", "content": "Python 怎么写装饰器?"}
],
"stream": False
}
res = requests.post(url, json=payload)
print(res.json()["message"]["content"])
🧱 八、API 使用场景案例
应用场景 | 使用接口 | 描述 |
---|---|---|
构建聊天网页助手 | /chat | 与 WebUI 或 JS 框架前端集成 |
脚本自动问答工具 | /generate | 输入脚本、提问、解析回应 |
本地知识库问答系统 | /chat + RAG | 搭配 LangChain / LlamaIndex 使用 |
文本总结批处理工具 | /generate | 提交长文本,获得总结/分类等 |
语言风格训练助手 | /chat + prompt | 控制系统提示词,生成指定风格文本 |
🔗 九、与 LangChain 集成(简要)
from langchain_community.llms import Ollama
llm = Ollama(model="llama2", base_url="http://localhost:11434")
print(llm("讲个冷笑话"))
🔐 十、安全性提示
- Ollama 默认仅监听本地 (
localhost
),不会暴露网络端口,安全性高 - 如需远程访问,请设置反向代理 + 身份认证(如 Nginx + Basic Auth)
发表回复