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 官方文档。