Ollama API 交互

Ollama 提供了基于 HTTP 的 API,允许开发者通过编程方式与模型进行交互。

本文将详细介绍 Ollama API 的详细使用方法,包括请求格式、响应格式以及示例代码。

1. 启动 Ollama 服务

在使用 API 之前,需要确保 Ollama 服务正在运行。可以通过以下命令启动服务:

复制代码
ollama serve

默认情况下,服务会运行在 http://localhost:11434

2. API 端点

Ollama 提供了以下主要 API 端点:

生成文本(Generate Text)

  • 端点POST /api/generate

  • 功能:向模型发送提示词(prompt),并获取生成的文本。

  • 请求格式

    复制代码
    {
      "model": "<model-name>",  // 模型名称
      "prompt": "<input-text>", // 输入的提示词
      "stream": false,          // 是否启用流式响应(默认 false)
      "options": {              // 可选参数
        "temperature": 0.7,     // 温度参数
        "max_tokens": 100       // 最大 token 数
      }
    }
  • 响应格式

    复制代码
    {
      "response": "<generated-text>", // 生成的文本
      "done": true                    // 是否完成
    }

聊天(Chat)

  • 端点POST /api/chat

  • 功能:支持多轮对话,模型会记住上下文。

  • 请求格式

    复制代码
    {
      "model": "<model-name>",  // 模型名称
      "messages": [             // 消息列表
        {
          "role": "user",       // 用户角色
          "content": "<input-text>" // 用户输入
        }
      ],
      "stream": false,          // 是否启用流式响应
      "options": {              // 可选参数
        "temperature": 0.7,
        "max_tokens": 100
      }
    }
  • 响应格式

    复制代码
    {
      "message": {
        "role": "assistant",    // 助手角色
        "content": "<generated-text>" // 生成的文本
      },
      "done": true
    }
  • 端点GET /api/tags

  • 功能:列出本地已下载的模型。

  • 响应格式

    复制代码
    {
      "models": [
        {
          "name": "<model-name>", // 模型名称
          "size": "<model-size>", // 模型大小
          "modified_at": "<timestamp>" // 修改时间
        }
      ]
    }
  • 端点POST /api/pull

  • 功能:从模型库中拉取模型。

  • 请求格式

    复制代码
    {
      "name": "<model-name>" // 模型名称
    }
  • 响应格式

    复制代码
    {
      "status": "downloading", // 下载状态
      "digest": "<model-digest>" // 模型摘要
    }

3. 使用示例

生成文本

使用 curl 发送请求:

案例
复制代码
curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-coder",
  "prompt": "你好,你能帮我写一段代码吗?",
  "stream": false
}'

多轮对话

使用 curl 发送请求:

案例
复制代码
curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-coder",
  "messages": [
    {
      "role": "user",
      "content": "你好,你能帮我写一段 Python 代码吗?"
    }
  ],
  "stream": false
}'

列出本地模型

使用 curl 发送请求:

复制代码
curl http://localhost:11434/api/tags

拉取模型

使用 curl 发送请求:

案例
复制代码
curl http://localhost:11434/api/pull -d '{
  "name": "deepseek-coder"
}'

4. 流式响应

Ollama 支持流式响应(streaming response),适用于实时生成文本的场景。

启用流式响应

在请求中设置 "stream": true,API 会逐行返回生成的文本。

案例
复制代码
curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-coder",
  "prompt": "你好,你能帮我写一段代码吗?",
  "stream": true
}'

响应格式

每行返回一个 JSON 对象:

案例
复制代码
{
  "response": "<partial-text>", // 部分生成的文本
  "done": false                 // 是否完成
}

5. 编程语言示例

Python 使用 requests 库与 Ollama API 交互

案例
复制代码
import requests

# 生成文本
response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "deepseek-coder",
        "prompt": "你好,你能帮我写一段代码吗?",
        "stream": False
    }
)
print(response.json())

Python 多轮对话

案例
复制代码
response = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "deepseek-coder",
        "messages": [
            {
                "role": "user",
                "content": "你好,你能帮我写一段 Python 代码吗?"
            }
        ],
        "stream": False
    }
)
print(response.json())

JavaScript 使用 fetch API 与 Ollama 交互

案例
复制代码
// 生成文本
fetch("http://localhost:11434/api/generate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "deepseek-coder",
    prompt: "你好,你能帮我写一段代码吗?",
    stream: false
  })
})
  .then(response => response.json())
  .then(data => console.log(data));

JavaScript多轮对话

案例
复制代码
fetch("http://localhost:11434/api/chat", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "deepseek-coder",
    messages: [
      {
        role: "user",
        content: "你好,你能帮我写一段 Python 代码吗?"
      }
    ],
    stream: false
  })
})
  .then(response => response.json())
  .then(data => console.log(data));

相关推荐
小鹿的工作手帐35 分钟前
有鹿机器人:为城市描绘清洁新图景的智能使者
人工智能·科技·机器人
TechubNews2 小时前
香港数字资产交易市场蓬勃发展,监管与创新并驾齐驱
人工智能·区块链
DogDaoDao3 小时前
用PyTorch实现多类图像分类:从原理到实际操作
图像处理·人工智能·pytorch·python·深度学习·分类·图像分类
小和尚同志3 小时前
450 star 的神级提示词管理工具 AI-Gist,让提示词不再吃灰
人工智能·aigc
金井PRATHAMA4 小时前
大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
人工智能·自然语言处理
大学生毕业题目4 小时前
毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·cnn·pyqt·电塔·危险物品
星期天要睡觉4 小时前
深度学习——卷积神经网络CNN(原理:基本结构流程、卷积层、池化层、全连接层等)
人工智能·深度学习·cnn
哈基鑫5 小时前
支持向量机(SVM)学习笔记
人工智能·机器学习·支持向量机
fsnine5 小时前
深度学习——优化函数
人工智能·深度学习·cnn
2501_924877216 小时前
强逆光干扰漏检率↓78%!陌讯多模态融合算法在光伏巡检的实战优化
大数据·人工智能·算法·计算机视觉·目标跟踪