Ollama接口调用与流式输出示例
本文演示如何调用 ollama 的 `/api/generate`,对照单个 JSON 与 `application/x-ndjson` 两种返回,并检查错误响应。
完成后,你将掌握如何向自己的机器发送生成请求、区分普通与流式返回,以及检查错误响应。开始前,需要一个正在运行的 ollama 服务、终端里的 curl,以及至少一个本地可用模型。以下使用原生基址 http://localhost:11434/api;Ollama API 概览还列出 OpenAI 兼容基址 http://localhost:11434/v1,并说明 API 未严格版本化、但预期保持稳定和向后兼容,示例模型采用 llama3.2,请先确认本地确有该模型。
准备条件:确认 ollama 服务
文中的 localhost 代表实际运行服务的主机。如果从另一台电脑直接调用,需要按实际部署换成该主机的可达地址,不要把本地示例地址当成远程服务器地址。
Linux 环境中如果服务尚未运行,可以执行:
ollama serve
该命令启动本地服务;Ollama Linux 文档将其列为手动安装后的启动方式。
如果服务已经运行,可以跳过这一步。示例假定本地已有 llama3.2;如果模型列表中没有它,请换成实际可用的模型名称,其余请求字段保持不变。
操作步骤
- 发送普通响应请求。
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false
}'
按 Ollama API 文档,POST /api/generate 默认采用流式返回,而 stream:false 会改为单个响应对象;模型名采用 model:tag,省略 tag 时默认为 latest,options 可逐请求传递 temperature 等模型参数,keep_alive 控制请求结束后模型的内存保留时间且默认值为 5m,最终流式对象还包含统计信息。
- 发送流式请求。
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?"
}'
与上一条相比,这里只删除了 stream 字段;运行后继续执行下一节的内容类型和结束对象检查。
- 准备错误检查请求。
curl http://localhost:11434/api/generate -d '{
"prompt": "Why is the sky blue?"
}'
这条请求故意省略 model,专门用于后面的参数错误检查,不要把它当作正常生成请求。
怎么确认成功
先在 HTTP 客户端中分别运行前两条完整请求。按照 Ollama 流式输出文档,设置 stream:false 后应取得 application/json 格式的单个响应对象;默认流式请求则返回 application/x-ndjson,每个换行分隔的对象都是一项响应。
普通响应可以作为一个完整 JSON 对象解析;流式响应则应逐行解析,不要把整段终端输出交给同一个 JSON 解析器。具体生成文字会随输入和模型变化,因此不要把某一句固定文本当成成功标准。
流式请求也不要收到第一项就立即结束读取。Ollama 用量文档说明,使用量字段位于 done 为 true 的最后一个 chunk;客户端应继续读取到这个结束对象,再关闭连接或完成本轮任务。
常见出错点
运行参数错误检查请求后,先看 HTTP 状态,再看正文结构。Ollama 错误文档说明,错误以 application/json 返回,消息位于 error 属性;如果错误发生在流已经开始后,正文会改为带 error 的 NDJSON 对象,已经发送的 HTTP 状态不会改变。
| 状态码 | 文档含义 | 处理重点 |
|---|---|---|
200 |
成功 | 继续检查正文类型;流式请求还要读取到结束对象 |
400 |
缺少参数或 JSON 无效 | 补齐 model,并检查引号、花括号和逗号 |
404 |
模型不存在 | 将示例名称换成本地实际存在的 model:tag |
429 |
请求过多 | 根据 error 和当前错误文档判断是否重试,不套用未记录的固定次数 |
500 |
内部服务错误 | 根据错误消息和当前官方文档继续定位 |
502 |
网关错误 | 保留错误正文,并按当前错误文档检查对应服务状态 |
错误对象的结构如下,其中 YOUR_VALUE 代表服务端返回的具体错误消息:
{"error":"YOUR_VALUE"}
客户端应从 error 属性读取错误消息;使用流式返回时,还要在处理每一行内容前先检查该属性,不能只依赖 HTTP 状态码。
本文步骤根据正文所链接的官方文档整理,未在本站自有机器上运行;请按当前版本核对后再执行。