Bootstrap

大模型Ollama RestAPI 详解

Ollama 是一个开源的本地化工具,允许用户在本地运行大型语言模型(如 LLaMA、Mistral、Gemma 等),并通过 REST API 与模型交互。以下是 Ollama REST API 的详细说明:

1. 安装与启动

  • 安装:从 Ollama 官网 下载对应系统的安装包。
  • 启动服务:
ollama serve  # 默认监听 11434 端口(http://localhost:11434)

2. API 认证(可选)

  • 默认无需认证,若需远程访问可设置环境变量启用基础认证:
export OLLAMA_HOST="0.0.0.0:11434"
export OLLAMA_BASIC_AUTH="username:password"

3. 核心 API 接口

(1) 列出本地模型

  • 端点:GET /api/tags
  • 功能:获取已下载的模型列表。
  • 示例:
curl http://localhost:11434/api/tags
```json
{
  "models": [
    {"name": "llama2", "modified_at": "2023-10-01T12:00:00Z", "size": 3823},
    {"name": "mistral", "modified_at": "2023-10-02T12:00:00Z", "size": 4012}
  ]
}

(2) 生成文本

  • 端点:POST /api/generate
  • 功能:根据提示生成文本(单轮对话)。
  • 请求参数:
{
  "model": "llama2",   // 模型名称
  "prompt": "为什么天空是蓝色的?",  // 输入提示
  "stream": false,     // 是否流式输出
  "temperature": 0.7,  // 控制随机性(0-1)
  "max_tokens": 100   // 最大生成 token 数
}
  • 示例:
curl -X POST http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "prompt": "解释量子力学的基本原理",
  "stream": false
}'
  • 响应:
{
  "response": "量子力学是研究微观粒子行为的物理学分支...",
  "created_at": "2023-10-01T12:00:00Z",
  "done": true
}

(3) 多轮对话

  • 端点:POST /api/chat
  • 功能:支持多轮上下文对话。
  • 请求参数:
{
  "model": "llama2",
  "messages": [
    {"role": "user", "content": "你好!"},
    {"role": "assistant", "content": "你好!有什么可以帮助你?"},
    {"role": "user", "content": "请写一首关于春天的诗"}
  ],
  "stream": true  // 流式输出适用于实时交互
}
  • 流式响应示例(分块返回):
{"message": {"role": "assistant", "content": "春"}, "done": false}
{"message": {"role": "assistant", "content": "天"}, "done": false}
{"done": true}

(4) 生成嵌入向量

  • 端点:POST /api/embeddings
  • 功能:获取文本的向量表示。
  • 请求参数:
{
  "model": "llama2",
  "prompt": "自然语言处理"
}
  • 响应:
{
  "embedding": [0.23, -0.54, 0.89, ...]  // 高维浮点数数组
}

(5) 模型管理

  • 拉取模型:POST /api/pull
{"name": "gemma:7b"}
  • 删除模型:DELETE /api/delete
{"name": "llama2:old-version"}

4. 高级用法

  • 流式处理:设置 stream: true 后,逐块接收响应,适用于实时显示生成内容。
  • 自定义模型:通过 Modelfile 创建自定义模型后,通过 API 调用。
  • 超时控制:客户端需处理长生成任务的超时机制。

5. 常见状态码

状态码含义
200请求成功
400参数错误
404模型不存在
500服务器内部错误

6. 客户端示例(Python)

import requests

response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "mistral",
        "prompt": "如何学习机器学习?",
        "stream": False
    }
)
print(response.json()["response"])

如需最新细节,请参考 Ollama 官方文档。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;