Ollama System One 端点

2026-10-29 19:01 更新

/v1/systemone 是个特殊端点:它不做文本生成,只做分类、判断、打分。你给它一段状态和若干问题,它返回答案和概率分布。

版本基线 v0.40.12,官方 docs.ollama.com/api/systemone。需要 Ollama v0.35.0+;用云端模型需 v0.40.5+。

一、它解决什么问题

普通生成模型回答「这段工单属于哪个类别」时,你会得到一段自然语言。要拿到结构化结果得靠 JSON schema + 后处理,还要担心模型自由发挥。

System One 直接返回标签和概率:

{
  "label": {
    "choice": "bug",
    "probabilities": { "billing": 0.0125, "bug": 0.9781, "account": 0.0093 },
    "confidence": 0.8906
  }
}

一次前向传播就给出概率分布,比生成式分类更快、更稳定,而且概率可用于阈值判断和人工复核分流。

二、最小调用

curl http://localhost:11434/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "nimble",
    "state": "Our checkout has returned 500 errors since 9am.",
    "questions": {
      "label": {
        "type": "choice",
        "instructions": "Which label fits this ticket?",
        "criteria": {
          "billing": "Payments and refunds",
          "bug": "Software errors",
          "account": "Login and account access"
        }
      }
    }
  }'

返回:

{
  "model": "nimble",
  "answers": {
    "label": {
      "type": "choice",
      "choice": "bug",
      "probabilities": {
        "billing": 0.0125,
        "bug": 0.9781,
        "account": 0.0093
      },
      "confidence": 0.8906
    }
  },
  "usage": { "input_tokens": 174, "output_tokens": 1 }
}

三、请求字段

字段 类型 必填 说明
model string 是 System One 模型,如 nimble、clef:cloud
state string | object | array 是 待判断的状态,不是对话消息
questions object 是 命名问题集合,key 为你自定的名字
images string[] base64 图片,所有问题共享(需视觉模型)
keep_alive string | number 模型驻留时长

state 的三种形态

可以是字符串、对象或数组。对象/数组会被序列化成 JSON 文本处理。关键是:它不会被当成对话消息或多媒体输入——不要指望模型「理解上下文」,它只判断这一段状态。

questions 可以是多个

"questions": {
  "category": { "type": "choice", "criteria": {...} },
  "urgent":   { "type": "noul" },
  "priority": { "type": "score" }
}

官方提到三类问题:choice(选择)、noul(是/否)、score(打分)。

重要限制:答案不会传递给后续问题。每个问题独立基于 state 判断,不能做「先分类再按类别细分」的链式推理。

四、规模限制

这是落地前必须算清楚的:

本地请求

项 限制
文本 + schema(不含图片) 64 KiB
整个请求(含 base64 和 JSON) 32 MiB
输入 必须完整装入已加载的上下文窗口
截断 永不截断,超了直接失败

Nimble 和 Tev 还需要两个 token 位置用于打分。

「输入永不截断」这点与 embed 端点相反:这里宁可报错也不静默丢数据。

云端请求

项 限制
问题数量 最多 64 个
问题命名 最多 100 字符,仅限 ASCII 字母/数字/_/./-
图片 最多 4 张,每张 ≤ 4 MiB 且 ≤ 16 兆像素,总计 ≤ 8 MiB
请求体 ≤ 13 MiB
上下文 65536 token

云端模型需要付费计划或购买 usage credits。

五、明确不支持的

流式、视频、工具调用、生成控制(temperature 等)都不支持。

它是一次性的判断调用,只返回一个 JSON。这个设计取舍很明确:牺牲灵活性换确定性和速度。

六、典型用法

工单自动分类 + 置信度分流

import requests, os

def classify(text, model="nimble"):
    r = requests.post("http://localhost:11434/v1/systemone", json={
        "model": model,
        "state": text,
        "questions": {
            "category": {
                "type": "choice",
                "instructions": "这条工单属于哪一类?",
                "criteria": {
                    "billing": "付款与退款",
                    "bug": "软件错误",
                    "account": "登录与账号",
                },
            }
        },
    }, headers={"Authorization": f"Bearer {os.environ.get('OLLAMA_API_KEY','')}"})
    r.raise_for_status()
    a = r.json()["answers"]["category"]
    # 置信度低于阈值转人工
    return (a["choice"], a["confidence"]) if a["confidence"] >= 0.75 else ("needs_review", a["confidence"])

print(classify("支付页面一直报错,扣款了但订单没生成"))

用 confidence 做阈值分流是这类模型最有价值的地方:高置信自动路由,低置信转人工,比纯生成式方案更可控。

垃圾内容判断

curl http://localhost:11434/v1/systemone -H 'Content-Type: application/json' -d '{
  "model": "nimble",
  "state": "限时优惠!点击链接领取 iPhone 17",
  "questions": { "is_spam": { "type": "noul" } }
}'

七、和普通 chat 的取舍

维度 System One 普通 chat
输出 标签 + 概率 自然语言
速度 一次前向,快 逐 token 生成,慢
确定性 高 受采样影响
多问题 支持(各自独立) 要额外约束
流式 / 工具 不支持 支持
适合 分类、判断、打分 生成、对话、代理

判断标准很简单:要文本用 chat,要标签用 systemone。

常见问题

现象 原因 处理
404 Ollama 版本太低 升级(本地 ≥0.35.0 / 云端 ≥0.40.5)
413 或报输入过大 超过 64 KiB / 13 MiB 裁短 state
输入被拒 超上下文窗口(此处不截断) 精简输入或换更大上下文的模型
模型不支持 decision 用了普通生成模型 换 nimble / tev / clef 等
想流式返回 设计上不支持 改用 chat
402 云端需付费 购买 credits

动手试

## ① 先确认模型支持 decision 能力
curl -s http://localhost:11434/api/show -d '{"model":"nimble"}' | python -c "
import sys,json;print(json.load(sys.stdin).get('capabilities'))"

## ② 跑一次三分类
curl -s http://localhost:11434/v1/systemone -H 'Content-Type: application/json' -d '{
  "model": "nimble",
  "state": "我的账号登录不进去了,提示密码错误",
  "questions": { "label": { "type": "choice",
    "criteria": { "billing": "付款退款", "bug": "软件故障", "account": "登录账号" } } }
}' | python -m json.tool

第一条返回里有 decision 才能用这个端点。

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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号