qinghuan
← 规定输出格式并检查 / 全部笔记

单元 10 / 规定输出格式并检查

P0 · 必会主线L1 · 基础

让 AI 按指定格式回答:结构化输出与校验

先约定模型返回哪些字段,再检查格式、业务范围和内容对错,让结果能直接用于应用。

本篇目录 · 按需要跳转

读完这篇,你能做什么

能将模型输出映射成 DTO,并让正常、缺信息和干扰输入得到合格对象或明确失败。

学习理由、准备要求与知识点

为什么学它

后端要保存和使用模型结果,就需要约定好的字段,也要明确无法解析或不符合业务规则时怎样返回失败。

先读这些内容

知识点清单

  • 业务字段设计
  • Java record 映射
  • 文本转换器边界
  • 供应商原生结构化支持
  • 解析失败
  • 字段与范围检查
  • 有限修复次数
  • 结构正确与事实正确

运行前先确认框架源码固定Spring AI 2.0.1;调用片段需要对应依赖。完整DTO验证算法使用Java17标准库,独立于模型服务运行。

01先弄懂它是什么

让模型生成练习题后,后端还要保存和展示它,最好先约定字段,避免从一大段话里猜题目在哪。本篇先定义 Quiz 包含 topic 和 items,每个 Item 包含 question 与 difficulty,再明确题目数量和难度范围。这就是结构化输出:把回答组织成程序可以检查、存储和展示的数据。

能转成 Java record,只说明数据形状能被读取,不代表内容已经合格。例如 difficulty 能成功解析成整数九十九,却超出了产品允许的一到三;两道题也可能都是字符串,但内容完全重复。Schema 负责规定数据结构,业务校验还要检查范围和重复,题目是否正确、引用能否支持答案则需要另行核对。

生成时限制格式,和生成后再读格式,是两个步骤。供应商提供的原生结构化模式,通常会在模型生成时施加接口支持的结构约束;文本转换器则等文字生成完,再尝试把它读成对象。例如转换器能读懂一份合法 JSON,并不代表它事先保证模型一定会写出合法 JSON。

各接口支持哪些 Schema 规则、拒绝或截断时怎样返回,需要按版本核对。客户端应记录使用的版本与能力配置,并为规则不支持、输出不完整等情况准备处理分支。

文中这几个词,先认一认

结构约束
程序能直接检查的数据要求,例如必须有哪些字段、字段是什么类型、能取什么范围。
语义验证
根据实际业务判断内容是否合理,例如题目数量对不对、是否重复、字段之间有没有矛盾。
有限修复
只允许在明确的次数和成本限制内尝试修正或重新生成;仍不合格就返回失败,避免无限重试。

还有陌生词?到术语小抄里看一个具体例子 ↗

02看看它怎么工作

先写好 DTO 和通过条件,再把格式要求放进提示,避免等答案回来才临时解释每个字段。收到响应后,按顺序检查是否正常结束、能否解析、结构是否符合要求、业务内容是否合理。每一层都返回固定的错误类型,排查时才能分清是模型没按格式写,还是应用自己的配置有问题。

本题聚合错误而非遇到第一个问题立即退出。topic空白、题目难度越界、问题重复可以一次返回,减少反复修复调用。错误使用items[i].difficulty这种路径标识,既便于开发者定位,也能生成受控反馈;不把堆栈、凭证或完整内部对象发给模型。

修复只针对允许改写的问题。格式缺逗号可以有限重试,权限拒绝或资料不足不应让模型“修复成成功”。通过验证后保存的是应用认可的DTO,原始输出在必要范围内脱敏保留以便排障。自动转换成功不能替代最终业务提交条件。

正在加载流程图…

图中状态只描述本篇可执行机制;业务调用仍需由外层应用负责。
查看流程图源码(Mermaid)
flowchart LR
  S["DTO 与验收规则"] --> P["格式提示或原生结构约束"]
  P --> R["完整模型响应"]
  R --> C["转换为对象"]
  C --> V["聚合业务校验"]
  V --> O["通过后展示"]
  V --> F["有限修复或失败"]

按顺序看,每一步做了什么

  1. 定义DTO、字段语义和明确数量范围。
  2. 确认当前接口支持的结构化方式并构造提示。
  3. 检查响应完整性后转换文本为对象。
  4. 聚合字段与跨字段业务错误,分类可修复项。
  5. 在有限预算内修复或明确失败,通过后再存储展示。

03对照实现代码

Spring AI 2.0.1 BeanOutputConverter 源码 (新标签页)↗

Spring AI 2.0.1,Git tag v2.0.1 · BeanOutputConverter.convert / generateSchema / getJsonMapper

下方为原创调用片段,需要Spring AI 2.0.1及配置匹配的依赖;validate是应用自己的业务验证函数。不是框架原样源码,完整Java17算法独立于框架运行。

核心机制代码 · java
record Quiz(String topic, List<Item> items) {}
record Item(String question, int difficulty) {}
BeanOutputConverter<Quiz> converter = new BeanOutputConverter<>(Quiz.class);
Quiz quiz = converter.convert(rawText); // 文本清洗并反序列化,失败会传播解析错误。
List<String> errors = validate(quiz); // 应用自行验证数量、范围与重复,非框架自动保证。
if (!errors.isEmpty()) throw new IllegalArgumentException(errors.toString());

该版本构造器从目标类型生成JSON Schema;convert先通过配置的文本清洗器处理文本,再交给JsonMapper按目标类型读取。类型映射和业务验收是不同步骤。

默认JsonMapper关闭未知属性失败,因此额外字段可能被忽略。若产品要求严格拒绝额外字段,要配置相应解析行为或单独做Schema验证,不能仅凭record就宣称严格契约。

生成Schema可以辅助提示或供应商支持的结构化能力,但不同模型和接口的原生支持范围不同。文本转换器仍可能收到无法解析的输出,调用方必须保留错误分支。

本篇算法接收已转换的对象,检查题目数量、难度与重复内容。它不检查答案事实,也不证明题目适合当前学生;这些需要资料支持及另外的评估。

代码先调用谁,再调用谁

  1. 目标Java类型生成Schema
  2. 模型返回原始文本
  3. convert清洗并反序列化
  4. 应用聚合业务错误
  5. 通过后形成待展示DTO

04动手写一个例子

练习题DTO错误聚合

输入Quiz对象,返回有序错误路径列表;topic非空,题目一到五个,问题非空,难度一到三,问题按strip后小写去重。程序不判断事实正确性。Java17 Main.java内置固定测试。

输入 1
topic=Java,问题A难度2
输出 1
无错误
输入 2
问题A难度9,第二题a难度1
输出 2
items[0].difficulty、items[1].duplicate

先验证容器层,null根对象或null题目列表不能继续遍历。列表存在时,即使数量错误仍检查其可访问元素,给出一次完整诊断。

对每个问题独立检查空白与难度,同时把规范化文本放入已见集合。只有非空问题才参与去重,避免让多个缺字段错误再衍生出没有意义的重复错误。

错误列表按固定遍历顺序产生,便于快照比较。难度验证不会修改原对象,重复问题也不自动删除,否则会偷偷改变请求的题数和对应答案位置。

为什么这样写是对的扫描前i道题后,错误列表包含这些题所有已定义的业务违规,seen恰好包含其中有效非空问题的规范化文本;输入DTO保持不变。

时间 平均O(C+n)额外空间 O(Cu+n)

n为题目数,C为所有问题与主题字符总量,Cu为不同规范化问题文本字符量。错误数量与n同阶,字符串规范化与哈希成本不能忽略。

保存为 Main.java,运行 javac --release 17 -encoding UTF-8 Main.java,再运行 java Main。程序包含固定输入自测,断言失败时会抛出错误。

Main.java · 完整可运行程序 · Java
import java.util.*;
public class Main {
    record Item(String question,int difficulty){}
    record Quiz(String topic,List<Item> items){}
    static List<String> validate(Quiz q){
        List<String> errors=new ArrayList<>();
        if(q==null)return List.of("quiz");
        if(q.topic()==null||q.topic().isBlank())errors.add("topic");
        if(q.items()==null){errors.add("items");return errors;} // 容器缺失后不可遍历。
        if(q.items().size()<1||q.items().size()>5)errors.add("items.size");
        Set<String> seen=new HashSet<>();
        for(int i=0;i<q.items().size();i++){
            Item x=q.items().get(i);String path="items["+i+"]";
            if(x==null){errors.add(path);continue;}
            if(x.question()==null||x.question().isBlank())errors.add(path+".question");
            else if(!seen.add(x.question().strip().toLowerCase(Locale.ROOT)))errors.add(path+".duplicate"); // 固定规范化规则。
            if(x.difficulty()<1||x.difficulty()>3)errors.add(path+".difficulty"); // 类型正确后仍检查业务范围。
        }
        return errors; // 只报告,不偷偷修改题目内容或顺序。
    }
    static void check(List<String> e,Quiz q){List<String>a=validate(q);if(!e.equals(a))throw new AssertionError(a);}
    public static void main(String[] args){
        check(List.of(),new Quiz("Java",List.of(new Item("A",2))));
        check(List.of("items[0].difficulty","items[1].duplicate"),new Quiz("Java",List.of(new Item("A",9),new Item(" a ",1))));
        check(List.of("items.size"),new Quiz("Java",List.of()));
        check(List.of("quiz"),null);
        check(List.of("topic","items"),new Quiz(" ",null));
        check(List.of("items[0].question","items[0].difficulty"),new Quiz("Java",List.of(new Item("",0))));
        System.out.println("PASS 6 tests");
    }
}

这些特殊情况也要试一试

  • null列表与空列表是不同错误位置。
  • 问题空白时不参与重复判断,避免噪声诊断。
  • 大小写规范化使用Locale.ROOT,不依赖机器区域设置。
进阶选读 · 后续再读:约束间依赖与最小修复

场景多个字段互相约束,修改一个字段会使另一个规则失效。

做法把规则依赖显式建模,修复后重跑全部相关校验;对需要取舍的修复给出候选与代价,不让模型直接覆盖已确认数据。

复杂度独立规则扫描可为线性;一般最小代价约束修复可能涉及组合搜索,不能保证简单线性求解。

好处与代价聚合错误减少往返,但一次给模型过多诊断可能增加复杂度;优先分层处理并限制总修复预算。

05项目里怎么用

对外返回统一错误DTO,区分解析失败、结构失败、业务失败和资料不足。前端可以展示重新生成或补资料入口,但不能把每类错误都改成“请稍后再试”。只有明确可恢复的情况才占用重试预算,避免模型在无资料条件下被迫编造答案。

对象转换器和JSON库版本应随应用依赖锁定。升级后测试未知字段、null、枚举越界和代码围栏包裹等样本,确认默认清洗与宽松解析行为是否变化。尤其不要把默认忽略额外字段误当成额外字段已经被严格拒绝。

结构化练习生成最终还需质量检查:题干是否自洽,答案是否由授权资料支持,难度标签是否符合可操作Rubric。机器校验适合做硬门槛,人工或经校准的评分适合补充开放质量,二者的通过含义应分别展示。

容易踩的坑

  • 把record映射成功称为所有业务规则通过。
  • 无限循环修复,忽略全任务预算。
  • 宽松解析忽略未知字段却宣称严格Schema。
  • 格式错误与资料不足使用同一种重试策略。

几种做法,怎么选

表格有四列,窄屏可左右滑动查看代价和适用条件。

方案优势代价与限制适用条件
文本转换器接入方式通用,便于Java映射可能解析失败且有清洗边界供应商能力不统一的客户端
原生结构化能力生成阶段约束更强支持Schema子集和接口各异已核对能力的模型服务
业务验证器规则确定,可给稳定错误路径不能直接判断开放事实正式数据入库前硬门槛

06检验是否读懂了

先自己想、自己写,再展开答案核对。场景题是假设的练习情境;遇到还没学过的内容,可以做完基础后再回来。

先用自己的话解释

01结构正确为什么仍会题目错误?

展开参考答案与推导

Schema关注表示形状,无法自动证明题干事实、答案来源和教学适合度,必须另做资料支持与质量评估。

02转换器默认忽略额外字段有什么影响?

展开参考答案与推导

多余数据可能被丢弃而不报错;若契约要求拒绝,应启用严格解析或独立校验,并用反例验证。

03有限修复需要哪些上限?

展开参考答案与推导

至少限制尝试次数、总时间和全任务用量,并明确哪些错误可修复;权限拒绝不能通过改写参数绕过。

换个情况,还会处理吗

01难度99成功转换成record,哪里补检查?

展开参考答案与推导

在应用验证层检查允许范围一到三,返回具体字段路径;类型反序列化只证明它可表示成整数。

02模型修复五次仍给截断JSON怎么办?

展开参考答案与推导

停止并返回明确失败,检查输出预算与任务规模;减少题数或要求用户补充,而不是无限消耗调用。

03题目重复但字段都齐全,怎样验收?

展开参考答案与推导

应用按已定义规范化规则去重检测,同时保留原文不自动删除,避免题数与答案索引错位。

写代码试一试

01空题目和非法难度应返回几项?

输入 / 条件
question="",difficulty=0
输出 / 预期
两项错误

提示 独立规则都检查。

展开参考答案与推导

分别报告question与difficulty,不能用else-if让第一个错误遮蔽另一个可诊断问题。

02为什么使用ROOT区域设置?

输入 / 条件
英文I在不同系统区域
输出 / 预期
规范化规则一致

提示 不要依赖默认Locale。

展开参考答案与推导

Locale.ROOT避免机器区域改变小写转换结果;更复杂的语言等价需要专门规范,而非假设简单小写足够。

03如何证明校验没有修改DTO?

输入 / 条件
两题重复
输出 / 预期
返回duplicate,仍有两题

提示 检查输入快照。

展开参考答案与推导

校验只收集错误;将列表内容与调用前比较,禁止在扫描时remove导致跳项和题目索引漂移。

商户项目 · 本篇加练

格式正确以后,还要核对每条结论

核查日期:2026-10-11。状态:新增教学练习未运行。

目标与前置知识

把结构化回答中的事实结论逐一关联到真实、正确且完整的依据。

前置:能校验 JSON 字段和类型;已读 FAQ 的引用核验练习。

按顺序完成

  1. 设计 claims 数组,每项包含 claimId、结论文本、证据 ID、证据版本、支持该结论的原句或受控存档位置。先校验字段,再逐项核对证据存在、实际进入本轮上下文、内容支持且归属正确。

  2. 用四个手写坏样例检查验证器:引用不存在的 A9;用 A1 支持配送结论;把营业时间证据挂到自取结论;回答中新加停车结论却不列证据。另加旧资料与今日工具冲突样例,验证它被标为矛盾而不是仅缺引用。

验收与交付

  • 能分别指出不存在、不支持、挂错和遗漏依据
  • 没有停车证据时输出资料不足,不将未知改成否定事实
  • Schema 通过后仍可因事实或权限失败而拒绝答案

本节为自拟验证器要求,尚未实现或运行;结构化输出不保证引用真实。

原始来源

商户项目 · 延伸练习 · 未运行

用旧请求和旧消费者检查 DTO 演进

核查日期:2026-10-16 18:06 JST;2026-10-16复核相关文档。AIP-180 状态为 Approved,侧栏日期为 2019-07-23,但正文变更记录已到 2025-10-21;JSON Schema 教程未标发布日期且跨草案讲解。尚未编译 DTO、运行校验器或接入模型,没有兼容通过率。

前置:三层校验、REST 输入输出约定与工具接口契约。冻结旧请求、旧消费者及其真实解析配置,再写新契约;不要只让新代码读取自己生成的新 JSON。

AIP-180分别讨论源码、传输和语义兼容;新增请求必填字段、改名或改变默认行为都可能破坏旧调用。它是以 protobuf/JSON 为主要背景的设计指南,并非 Java 项目的自动兼容证明。JSON Schema 对象规则也不等于 Jackson 的实际反序列化设置。本节沿用已经授权的输出字段,不用兼容性理由放宽权限。

  1. 为请求新增可选 includeHours:旧请求不发送它时保持原行为,显式 false 与 true 按新契约处理。新响应增加获准的 hoursSummary 后,让冻结的旧消费者读取;若旧 schema 禁止额外字段,记录失败并选择版本化或迁移。既有名称字段不能顺便停发或改名。
  2. 对必需的 merchantId 分别送缺失、null 和有效值;对可选营业摘要送缺失、null、空字符串。先写每种情况允许与否及业务含义,再对照 schema、Java 映射和业务层。没有营业信息不能默认变成“已关闭”或“全天营业”。
  3. 冻结只认识 OPEN、CLOSED 的旧消费者,再返回 TEMPORARILY_UNAVAILABLE,观察实际解析。未知状态采用预先约定的未知展示或安全错误,不自动映射成 OPEN。若设计 UNKNOWN 回退,保留可诊断的原类别;工具输入遇到不支持枚举时仍可明确拒绝,不照搬响应兼容政策。

提交生产者/消费者版本、schema 方言、字段方向、实际 JSON、校验器与序列化配置、解析结果和最终业务含义。至少覆盖“旧请求到新服务”和“旧消费者读新响应”;部署顺序还会出现新消费者读旧服务时,再增加该组合。HTTP 请求、HTTP 响应、工具输入 schema、工具结果四个边界分别记录,不能只比较 JSON 字符串相同。

独立练习使用自己命名的新增字段及状态,运行前写预期,保留失败对照和语义断言。依赖版本、生成工具 schema 和宽松解析设置仍待核实;字段名没变,也不能证明默认值和业务含义没变。

↑ 返回延伸练习目录

商户项目 · 延伸练习 · 未运行

结构化修复后,再核对商户、金额与证据

原核查:2026 年 10 月 19 日 18:08 JST;2026 年 10 月 20 日复核 Spring AI Structured Output 与 Schema Validation and Self-Correction。页面标 2.0.1,准确发布日期未标明。以下格式修复、Java 映射与模型调用练习均未运行。

适用:商户回答已经映射为 Java 类型,准备开启格式修复时。先完成三层校验和逐项结论与证据核验,固定请求 ID、商户、工具结果与来源版本。这里继续检查重新生成时事实有没有变化,沿用已有权限和输出范围。

Schema Validation and Self-Correction说明,validateSchema() 会按 JSON Schema DRAFT_2020_12 校验完整响应,把校验错误加入提示后再次请求模型;该模式不支持流式校验,文档说明会累计各次校验尝试的 token usage。Structured Output中的供应商原生格式约束属于请求侧,两者可组合,但要核对提供方支持。

默认次数仍须在实施时确认。 同一校验文档同时使用“3 attempts”和“3 retry attempts”两种表述,配置示例使用 maxRepeatAttempts。本节不据此猜测默认总请求数;接入时需对照所用版本实现及实际调用记录,分别数清初次请求与重试。现有入门课中“最多一次格式修复”是应用自定预算,也不能自动等同于框架默认值。

请求确定的商户 ID、有效来源版本和工具返回金额都是受约束事实。每次重新生成的候选都要重新经过 schema、业务约束与证据校验;上一个候选已核验过的事实,不能为新候选自动背书。只有满足全部交付条件才形成最终回答,修复失败应安全退出,不能静默变成缺字段的成功对象。这是应用验收设计,框架的格式校验不负责保证这些业务条件。

独立练习:格式通过后,事实有没有变

  1. 固定请求为商户 1001,证据为 JPY 300。假模型先返回不符合 schema 的结构;修复候选改为 schema 合法、但商户为 1002 或金额为 500 的对象。预期这类候选不能交付,记录修复后的事实差异,并仍关联原请求与原证据。另设返回 1001、JPY 300 且各项校验通过的正常对照,不能把修复路径全部拒绝。若应用允许继续纠正,仍计入同一业务请求的有限预算;它不能通过更换请求 ID 开启无穷循环。
  2. 让假模型持续返回错误类型,记录首调、每次修复和最终失败,核对配置与实际总次数,失败后不得再追加模型请求。另设一次修复成功的序列,核对能取得的累计 usage,不能只用最后一次用量代表全流程。缺失用量标未知,不补零;只有 token 数量而没有有效计价依据时,不换算费用。格式修复次数与传输重试、工具循环分别计数,不能假定它们已自动合并。

交付请求和尝试关联、schema 与模型版本、每次失败类别、事实差异、是否交付、停止原因及可取得的累计用量。诊断日志只保留复核所需内容,错误反馈也遵守数据最小化约定。先写预期,实际结果留空。

本节只复核文档,没有调用模型、修改 advisor 配置或运行 Java;不存在修复成功率和成本结论。具体 API、异常出口、总尝试次数及其与既有预算的组合,仍需在项目版本上验证。

↑ 返回延伸练习目录

读完之后,独立完成

课后作业:自己做一遍

本篇共 10 道作业,先完成 8 道基础与综合任务,再按前置知识挑战进阶题。其中包含 1 道思维拓展,试着换个条件,看看原来的办法是否还管用。不附参考答案。

这次练什么

能将模型输出映射成 DTO,并让正常、缺信息和干扰输入得到合格对象或明确失败。

本篇重点加练

字段合法与事实可靠需要分别验证,结构化输出不能替代业务证据检查。

  • 字段与范围检查
  • 结构正确与事实正确

重点内容会多练几次。先说清楚怎么做,再试试空数据、出错或条件改变时会发生什么。

先自己做,卡住时记下问题,再回来查。问答题写清“为什么、什么时候适用”;动手题留下输入、输出和运行步骤,方便下次重做。

基础必做

  1. 作业 01原理问答

    为学习任务设计包含标题、优先级、截止日期和来源的业务契约,并画出JSON到Java record的映射;自行规定缺失、空值和空白字段的语义。

    提交内容
    一份独立书面回答或标注图,包含自造例子、概念边界及判断依据。
    怎样算完成
    • 逐项回应题目要求,区分事实、假设与个人判断。
    • 能用自己的例子解释适用条件,记录尚未弄懂的点。

    练到的知识点业务字段设计 · Java record 映射

  2. 作业 02代码推演

    对普通文本转换器与供应商原生结构化输出分别画调用时序;列出你需要核验的能力条件,说明应用的哪些检查仍须独立执行。

    提交内容
    手工推演记录,写明输入约定、中间状态、最终判断;可运行时附程序对照记录。
    怎样算完成
    • 推演包含中间过程,数据形状、单位、顺序或状态前后一致。
    • 主动检查至少一个边界或异常条件,能解释手算与运行差异。

    练到的知识点文本转换器边界 · 供应商原生结构化支持

  3. 作业 03原理问答

    为“来源编号、章节、结论”三个字段制定相互约束,说明逐字段类型正确后还有哪些跨字段关系需要验证。

    提交内容
    概念或合同说明、关系图与自造案例,明确事实、假设和适用条件。
    怎样算完成
    • 关键概念有明确边界,能用案例检验声明。
    • 未获证据支持的假设单独标注。

    练到的知识点字段与范围检查 · 结构正确与事实正确

综合应用

  1. 作业 04面试场景

    给解析器依次输入截断JSON、额外字段、负数时长和合法但日期倒置的数据;为每种失败定义错误分类及用户可见信息,记录判断依据。

    提交内容
    场景分析与决策记录,包含信息缺口、约束、备选方案和验证计划。
    怎样算完成
    • 方案回应给定约束,列出至少一种替代方案及代价。
    • 每项关键结论说明所需证据,不能核实的部分明确标注。

    练到的知识点解析失败 · 字段与范围检查

  2. 作业 05编程实践

    实现最多两次修复的任务解析入口,以假模型返回序列驱动测试;加入结构合法但引用不存在的样本,证明系统会独立检查业务事实。

    提交内容
    可复现的最小程序或实验材料、自写测试、环境说明与运行记录;题目允许纸面实验时提交完整案例表。
    怎样算完成
    • 提交物按说明可以重现;测试覆盖正常、边界与失败场景。
    • 运行证据与断言能核验声明的行为,注明模拟与真实执行范围。

    练到的知识点有限修复次数 · 结构正确与事实正确

  3. 作业 06排错实验

    构造一条不能通过不断改格式解决的输入,观察修复循环如何退出;保留每次输入输出摘要、失败类型和总调用次数。

    提交内容
    最小故障输入、复现步骤、观测记录、定位依据及回归用例。
    怎样算完成
    • 其他人可按记录复现故障,并区分现象与已验证原因。
    • 定位过程有观测依据,回归用例可以再次暴露原问题。

    练到的知识点业务字段设计 · 解析失败 · 有限修复次数

  4. 作业 07编程实践

    实现本地回答接收器,以固定来源表为独立依据,输入包含正确引用、错章节引用、已经失效的引用和空结论;提交你定义的错误分类及测试依据。

    提交内容
    可复现的小程序或题目允许的离线实验、自写测试、输入和运行记录。
    怎样算完成
    • 输入、环境和运行过程可重现,测试覆盖声明的重点条件。
    • 验证目标由合同确定,模拟结果不冒充真实服务证据。

    练到的知识点字段与范围检查 · 结构正确与事实正确

  5. 作业 08面试场景

    接收器校验时资料为v2,展示前资料已变为v3。设计从模型结果、校验记录到展示的版本契约,列出哪些状态允许直接使用、哪些还需检查。

    提交内容
    场景评审记录,包含约束、备选方案、未决信息和验证计划。
    怎样算完成
    • 方案回应题目约束,取舍能对应到可核验的事实。
    • 给出失败或条件变化时的检查方式。

    练到的知识点字段与范围检查 · 结构正确与事实正确

进阶挑战 · 掌握前置后选做

  1. 作业 09设计评审

    设计从契约v1升级到v2的兼容实验:新增一个条件必填字段并改变一项范围约束,给出历史结果回放与回滚计划。

    提交内容
    设计评审文档或对照实验报告,包含前置条件、方案取舍、验收证据与尚未验证的范围。
    怎样算完成
    • 比较使用一致条件与事先声明的标准,记录失败与未知结果。
    • 说明方案的适用前提、未覆盖风险及后续验证方法。

    练到的知识点Java record 映射 · 供应商原生结构化支持 · 字段与范围检查

思维拓展

先写出你的猜想,再用例子或实验验证。答案可以不同,但要说清依据、适用情况,以及还有什么没弄懂。

  1. 作业 10思维拓展 · 跨域迁移

    将结构与事实分离的校验思想迁移到“模型生成SQL查询计划”的场景,只做纸面设计或只读本地样例,界定新增的权限、语义与执行证据。

    提交内容
    原场景与目标场景的对应表、可迁移的机制、不能迁移的前提及验证设计。
    怎样算完成
    • 逐项核对两种场景的前提,不只比较相似术语。
    • 至少一个不能直接迁移的边界有具体检验方法。

    练到的知识点字段与范围检查 · 结构正确与事实正确

完成后,再检验一次

给每题标记“独立完成 / 查阅后完成 / 尚未完成”。查过资料或没做出的题,记下卡在哪里。隔一天换一组输入再试,能解释结果和出错原因,再把这个知识点标为掌握。

继续阅读

先看能帮你完成当前练习的部分。例子跑通后,再读更深入的解释。

打开资料库,找下一份学习材料 ↗