Tager: JsonOutput 到 Tools Intro

目录

从 JSON Object 到 Tools:大语言模型工程接口的演进#

为什么需要结构化输出#

OpenAI 文档中有一句适合作为本章开场的话:

“JSON is one of the most widely used formats in the world for applications to exchange data.”

这句话的关键点是:JSON 不是为了大语言模型发明的,它本来就是现代软件系统之间交换数据的通用格式。Web API、数据库中间层、前后端通信、配置文件、日志系统、消息队列,都大量依赖 JSON。问题在于,大语言模型原本输出的是自然语言文本,而不是程序可以稳定消费的数据对象。

早期 LLM 应用的典型形态是:

应用程序发送 prompt
模型返回一段自然语言
应用程序尝试解析这段自然语言

这在聊天场景中没有问题,但在工程系统中会很脆弱。因为下游程序真正需要的是字段、类型、枚举、数组、对象,而不是“看起来像答案”的文本。

例如一个信息抽取任务,用户希望从简历中抽取:

{
  "name": "Alice",
  "email": "[email protected]",
  "years_of_experience": 5,
  "skills": ["Python", "React", "SQL"]
}

如果模型返回:

姓名是 Alice,邮箱是 [email protected],大概有 5 年经验,技能包括 Python、React 和 SQL。

人类当然能读懂,但程序不能稳定消费。程序要继续做正则、字符串切割、异常处理、补字段、类型转换。这样一来,LLM 的输出就没有真正进入软件系统的“类型世界”。

因此,结构化输出的第一层价值是:把模型输出从“人读的文本”转成“程序读的数据”。

OpenAI 官方文档对 Structured Outputs 的定义是:让模型生成始终符合开发者提供的 JSON Schema 的响应,从而避免遗漏必需字段或生成无效枚举值。它列出的优势包括类型安全、可程序化检测拒绝、更少依赖强提示词来维持格式一致性。

参考来源:OpenAI Structured Outputs 文档

从 JSON Object 到 Tools 的完整演进图#

可以把整条演进线压缩成七个阶段:

阶段 1:Natural Language Output
  模型返回自由文本。
  适合聊天,不适合程序消费。

阶段 2:Prompt-only JSON
  用 prompt 要求模型输出 JSON。
  解决部分格式问题,但不稳定。

阶段 3:JSON Mode
  平台保证输出是 valid JSON。
  解决 parseability,但不保证业务 schema。

阶段 4:Structured Outputs / JSON Schema
  平台保证 schema adherence。
  输出成为类型安全的数据对象。

阶段 5:Tools / Function Calling
  模型不只是返回数据,而是请求外部动作。
  JSON Schema 成为函数参数契约。

阶段 6:ReAct-style Tool Use
  推理与行动交替。
  Tool result 成为 observation。

阶段 7:Agent Loop
  多轮感知、决策、工具调用、反馈和终止。
  系统从问答模型变成任务执行体。

这条路线可以用一句话概括:

JSON Object 是数据格式。
JSON Schema 是数据契约。
Structured Outputs 是生成时结构保证。
Tools 是动作契约。
Agent Loop 是围绕动作契约展开的执行系统。

参考来源:OpenAI Structured OutputsOpenAI Function CallingGemini Structured Outputs vs Function CallingReAct 论文

三类能力的边界对比#

能力 解决的问题 输出对象 是否执行外部动作 典型场景
JSON Mode 保证输出是合法 JSON JSON 文本 简单结构化返回
Structured Outputs 保证输出符合 JSON Schema 类型安全对象 信息抽取、分类、UI 生成、结构化报告
Tools / Function Calling 让模型请求外部能力 工具调用请求 是,由 runtime 执行 查数据库、搜索、代码执行、调用业务 API
Agent Loop 多步执行与反馈修正 多轮 tool call + tool result 复杂任务执行、自动化办公、代码修改、数据分析

关键区别是:

Structured Outputs:
  控制最终回答的形状。

Tools:
  控制模型请求动作的形状。

Agent Loop:
  控制动作、观察、再决策的过程。

参考来源:Gemini Structured outputs vs function callingOpenAI Structured Outputs:function calling vs response_formatOpenAI Function Calling

HomeWork#

  1. 调用任意模型, 返回一个固定的Json Schema
  2. 制作 Read / Write / Update / List 三个工具, 并且验证使用
  3. 尝试基于以上四个工具, 实现一个最小版本的 Agent