Ollama Generate 端点

2026-10-29 19:01 更新

POST /api/generate 是 Ollama 最基础的推理端点:给一段提示词,返回续写结果。它没有对话概念,不维护多轮历史——需要对话请用 13.9 Ollama Chat 端点。

版本基线 v0.40.12,官方 docs.ollama.com/api/generate。

一、最小调用

curl http://localhost:11434/api/generate -d '{
  "model": "gemma4",
  "prompt": "Why is the sky blue?"
}'

返回:

{
  "model": "gemma4",
  "created_at": "2025-10-17T23:14:07.414671Z",
  "response": "Hello! How can I help you today?",
  "done": true,
  "done_reason": "stop",
  "total_duration": 174560334,
  "load_duration": 101397084,
  "prompt_eval_count": 11,
  "prompt_eval_duration": 13074791,
  "eval_count": 18,
  "eval_duration": 52479709
}

注意这是默认关闭流式后的形态。默认 stream: true,会返回 NDJSON 流。

二、请求字段

字段 类型 必填 说明
model string 是 模型名
prompt string 要续写的文本
suffix string Fill-in-the-middle 模型用,出现在 prompt 之后、生成之前
images string[] base64 编码图片,需模型支持图像输入
format string | object "json" 或 JSON schema
system string 系统提示词
stream boolean 默认 true
think boolean | string 思考控制,取值见 /api/show
raw boolean true 时不套用任何提示词模板,直接喂给模型
keep_alive string | number 模型驻留时长,0 表示用完即卸载
options object 运行时参数(temperature、num_ctx 等)
logprobs boolean 是否返回输出 token 的对数概率
top_logprobs integer 每个位置返回多少个最可能的 token

suffix 的用途

这是给 FIM(fill-in-the-middle)模型补中间内容用的。假设代码是 def foo(): <缺口> return x,把前文放 prompt、后文放 suffix,模型补中间。不搞代码补全的话用不到。

think 的取值规则

  • true:请求思考输出
  • false:不要思考输出
  • null:用模型默认
  • 字符串:模型自定义的档位名,必须与 /api/show 返回的完全一致
  • 不支持数字

三、响应字段

字段 说明
model 模型名
created_at ISO 8601 时间戳
response 生成的文本(流式时是增量片段)
thinking 思考输出(模型支持时才有)
done 是否结束
done_reason 停止原因,常见 stop / length
total_duration 总耗时(纳秒)
load_duration 模型加载耗时(纳秒)
prompt_eval_count 输入 token 数
prompt_eval_cached_count 命中缓存的输入 token 数
prompt_eval_duration 评估未缓存输入的耗时(纳秒)
eval_count 输出 token 数
eval_duration 生成 token 耗时(纳秒)
logprobs 开启时的对数概率信息

指标的详细用法见 13.4 Ollama API 用量。

四、三个实用场景

结构化输出

curl http://localhost:11434/api/generate -d '{
  "model": "gemma4",
  "prompt": "列出三种常见排序算法的名称和时间复杂度",
  "format": {
    "type": "object",
    "properties": {
      "algorithms": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": {"type": "string"},
            "complexity": {"type": "string"}
          },
          "required": ["name", "complexity"]
        }
      }
    },
    "required": ["algorithms"]
  },
  "stream": false
}'

format 传 schema 后,response 里就是符合该结构的 JSON 字符串。

控制上下文长度

curl http://localhost:11434/api/generate -d '{
  "model": "gemma4",
  "prompt": "长文本分析……",
  "options": { "num_ctx": 16384 }
}'

用完立刻释放显存

curl http://localhost:11434/api/generate -d '{
  "model": "gemma4",
  "prompt": "hi",
  "keep_alive": 0
}'

五、和 /api/chat 怎么选

维度 /api/generate /api/chat
输入 单个 prompt 字符串 messages 数组
多轮对话 不支持(要自己拼历史) 原生支持
适合 单次生成、补全、结构化抽取 对话、代理、工具调用
工具调用 无 支持 tools

简单判断:需要记住上下文的,一律用 chat。用 generate 自己拼历史容易出模板错误。

常见问题

现象 原因 处理
返回一堆行而非一个 JSON 默认流式 加 "stream": false
response 是空的 prompt 为空,或 raw: true 下模型无法续写 检查输入
format 输出不合法 JSON 模型能力不足 换更强模型,或降级到 "json"
输出被截断 达到 token 上限 调大 options.num_predict
显存爆了 num_ctx 太大 调小

动手试

## ① 非流式,看完整结构
curl -s http://localhost:11434/api/generate -d '{"model":"gemma4","prompt":"hi","stream":false}' | python -m json.tool

## ② 流式,看 NDJSON 形态
curl http://localhost:11434/api/generate -d '{"model":"gemma4","prompt":"数到5"}'

两次对比,就明白 stream 到底改了什么。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号