---
title: "决策模型和结构化输出有什么区别？用了 JSON Schema 还需要它吗"
description: "结构化输出保证 JSON 格式合法，但不告诉你答案有多确定。看 enum、boolean、评分字段怎么换成决策模型问题，拿到每个选项的概率。"
canonical: "https://system-one.dev/zh-CN/blog/decision-model-vs-structured-output"
language: "zh-CN"
---

# 决策模型和结构化输出有什么区别？用了 JSON Schema 还需要它吗

**决策模型和结构化输出有什么区别？** 结构化输出让大模型生成符合 JSON Schema 的结果，保证格式合法，但不保证内容正确，也不给出每个选项的概率。决策模型只回答你预先定义的问题：选一项、打个分或判断是否，并返回每个选项的概率。前者适合抽取和生成字段，后者适合分类、路由和检查。

**用了 JSON Schema 还需要决策模型吗？** 如果 schema 里有 enum、boolean 或评分字段，并且你想按确定程度决定下一步，可以把这些字段换成决策模型的 Choice、Noul、Score 问题。需要生成文字或抽取任意内容的字段，继续用结构化输出。两者可以在同一流程里先后使用。

## 结构化输出保证什么，不保证什么

OpenAI 文档说，结构化输出能确保模型总是生成符合你给的 JSON Schema 的回答，不会漏掉必填字段，也不会编出无效的 enum 值。<small>来源：[OpenAI 结构化输出文档](https://developers.openai.com/api/docs/guides/structured-outputs) · 2026-10-12</small>

这解决的是**格式**问题。它不保证的是：

- **值是否正确**：字段合法，不代表选对了类别。
- **有多确定**：你拿到一个 enum 值，但不知道模型有多确定。
- **边界情况**：OpenAI 文档也写明，模型拒答或达到 max tokens 上限时，回答可能不符合 schema，需要单独处理。<small>来源：[OpenAI 结构化输出文档](https://developers.openai.com/api/docs/guides/structured-outputs) · 2026-10-12</small>

## 决策模型返回的是什么

决策模型的接口是“state 加问题进，答案和概率出”，不生成文本。state 就是你要它判断的那段内容（文本或 JSON）。问题有三种：

- **Choice**：选一项，返回每个选项的概率和置信度。
- **Score**：按有序量表打个分，返回每一档的概率。
- **Noul**：判断是否，返回“是”的概率。

<small>来源：[System One 决策原语](https://docs.system-one.dev/zh-CN/docs/primitives) · 2026-10-12</small>

想先了解这类模型，见 [决策模型是什么？](https://system-one.dev/zh-CN/blog/what-is-a-decision-model)。

## 字段对照：你的 schema 里哪些能换


| 原来的 schema 字段 | 换成什么 | 说明 |
| --- | --- | --- |
| `enum`（从几个类别里选一个）<br><small>[System One 决策原语](https://docs.system-one.dev/zh-CN/docs/primitives) · 2026-10-18</small> | Choice | 最多 255 个选项 |
| `boolean`（是或否）<br><small>[System One 决策原语](https://docs.system-one.dev/zh-CN/docs/primitives) · 2026-10-18</small> | Noul | 返回“是”的概率 |
| 评分字段（比如 1–5 分）<br><small>[System One 决策原语](https://docs.system-one.dev/zh-CN/docs/primitives) · 2026-10-18</small> | Score | 最多 10 个等级 |
| 自由文本、摘要、抽取出的名字和数字<br><small>[System One 决策原语](https://docs.system-one.dev/zh-CN/docs/primitives) · 2026-10-18</small> | 不能换 | 继续用结构化输出 |


判断标准很简单：答案能不能事先列出来。能列出来的，交给决策模型；列不出来的，交给大模型生成。

## “confidence”字段的问题

很多人会在 schema 里加一个 `confidence` 字段，让大模型自己报一个 0 到 1 的数。这个数和其他字段一样，是模型生成出来的。

决策模型的概率是按选项给出的：每个选项一个概率，由模型对这些选项的判断直接得出，不是模型写出来的一段文本。

这里只讲机制差别，不说哪个更准。不管用哪种，阈值都要在自己的标注数据上验证。

## 改写示例：一个工单分类 schema

原来的 schema 有 3 个字段：类别（enum）、是否紧急（boolean）、回复草稿（string）。前两个字段换成一个决策模型请求里的 Choice 和 Noul，回复草稿仍交给大模型。

> 以下代码都是**示意代码**，没有经过实际运行测试。

**改写前：一个 JSON Schema**

```ts
// 示意代码，未经测试
const ticketSchema = {
  type: 'object',
  properties: {
    category: { type: 'string', enum: ['billing', 'bug', 'account', 'other'] },
    urgent: { type: 'boolean' },
    replyDraft: { type: 'string' },
  },
  required: ['category', 'urgent', 'replyDraft'],
  additionalProperties: false,
};
```

**改写后：判断交给决策模型，回复仍交给大模型**

```ts
// 示意代码，未经测试
import { choice, booleanQuestion } from '@system-one-ai/core';
import type { EvaluationClient } from '@system-one-ai/core';

const ticketQuestions = {
  category: choice('Choose the category of this support ticket.', {
    billing: 'Payments, invoices, and refunds',
    bug: 'The product is broken or behaves unexpectedly',
    account: 'Login, profile, or permission issues',
    other: 'None of the above',
  }),
  urgent: booleanQuestion('Does this ticket need a response within one hour?'),
};

export async function classifyTicket(client: EvaluationClient, ticket: string) {
  const result = await client.evaluate({ state: { ticket }, questions: ticketQuestions });
  return {
    category: result.answers.category.choice,
    categoryConfidence: result.answers.category.confidence,
    urgentProbability: result.answers.urgent.probability,
  };
}

// 回复草稿：选定类别后，再用大模型的结构化输出生成，schema 只保留 replyDraft
```

`client` 的创建方式见 [决策模型是什么？](https://system-one.dev/zh-CN/blog/what-is-a-decision-model)。模型 ID 从 `GET /v1/models` 读取，不要手抄。

## 组合用法：先判断，再生成

1. 决策模型先判断：属于哪个分支、要不要转人工。
2. 置信度够高，进入对应分支；不够高，转人工或交给大模型。
3. 进入分支后，再用结构化输出生成该分支需要的内容，比如回复草稿。

阈值用自己的标注样本定。更多组合方式见 [Jev 和 ChatGPT 有什么区别](https://system-one.dev/zh-CN/blog/jev-vs-chatgpt)、[Agent 工具路由](https://system-one.dev/zh-CN/blog/agent-tool-routing) 和 [用决策模型给 Agent 评估做第一道关](https://system-one.dev/zh-CN/blog/llm-as-a-judge-alternative)。

## 费用怎么算

每 4KB 算一块，不足 4KB 也按一块；费用 = 块数 × 问题数 × 模型单价。

| 模型 | 每个问题每块积分 |
|---|---|
| Jev | 1 |
| Clef Flash | 3 |
| Clef Omni | 4 |
| Clef | 6 |
| Decider | 1 |

<small>来源：[system-one.dev 定价](https://system-one.dev/zh-CN/pricing) · 2026-10-12</small>

- 块数按整个请求的字节算，一个汉字约占 3 字节。
- 一个请求里问的问题越多，费用按问题数相乘。上面的改写示例问了 2 个问题，费用就是 2 × 块数 × 单价。
- 大模型按 token 计费，和这里的计费方式不同，不能直接比单价。请用自己的典型请求分别算。

新账号注册即送 100 积分，积分不会过期。怎么选模型，见 [Jev、Clef、Clef Flash、Clef Omni、Decider 怎么选](https://system-one.dev/zh-CN/blog/jev-vs-clef)。

想试一下？[在线试用（需登录）](https://system-one.dev/zh-CN/demo)。

## 相关阅读

- [决策模型是什么？](https://system-one.dev/zh-CN/blog/what-is-a-decision-model)
- [Jev 和 ChatGPT 有什么区别](https://system-one.dev/zh-CN/blog/jev-vs-chatgpt)
- [Jev、Clef、Clef Flash、Clef Omni、Decider 怎么选](https://system-one.dev/zh-CN/blog/jev-vs-clef)
- [system-one.dev 定价](https://system-one.dev/zh-CN/pricing)

核验日期：2026-10-12


## 常见问题

### 结构化输出和决策模型有什么区别？

结构化输出保证生成的 JSON 格式合法；决策模型只回答预先定义的问题，并返回每个选项的概率。

### 用了 JSON Schema 还需要决策模型吗？

如果你需要按确定程度决定下一步，可以把 enum、boolean、评分字段换成决策模型问题。现在够用就不必换。

### 让大模型在 JSON 里输出 confidence 字段可靠吗？

那个数是模型生成出来的。决策模型的概率按选项给出。两者都要在自己的标注数据上验证阈值。

### 哪些字段不适合换？

自由文本、摘要、抽取出的名字和数字。这些事先列不出答案，继续用结构化输出。

### 两者怎么组合？

先用决策模型判断分支和是否转人工，再用结构化输出生成该分支需要的内容。

### 怎么计费、怎么试？

每 4KB 算一块，不足 4KB 也按一块；费用 = 块数 × 问题数 × 模型单价。新账号注册即送 100 积分。[在线试用（需登录）](https://system-one.dev/zh-CN/demo)。
