📌 一、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
}


🛠️ 六、请求参数详解(通用)

参数名类型说明
modelstring模型名称,如 llama2mistralqwen
promptstring单轮对话输入(仅 /generate 使用)
messageslist聊天消息历史(仅 /chat 使用)
streamboolean是否流式输出
temperaturefloat采样温度,0~1,越高越随机
top_pfloat样本过滤概率阈值,常用于控制生成质量
repeat_penaltyfloat避免重复生成的惩罚参数(默认为 1.1 左右)
num_predictint最大生成 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)