结构化输出与工具调用基础

这个主题开始把模型输出从“给人读的文本”推进到“给系统处理的数据”。

如果说前几个阶段关注“模型如何回答用户”,这一阶段关注的是“模型如何和软件系统协作”。当模型输出必须被代码继续处理时,自由文本就不够了;当模型需要查询天气、数据库或网页时,它也不能真的自己执行动作,而是需要应用提供工具、执行工具,再把结果交还给模型。

学习目标

完成这个主题后,你应该能够:

  • 让模型按稳定 JSON 或 Schema 输出结果,并理解解析失败时的修复策略。
  • 设计适合模型选择和调用的 Tool 名称、描述、参数和返回值。
  • 区分 Function Calling、Tool Calling、Structured Output 和 MCP 的边界。
  • 实现“模型选择工具,应用执行工具,模型继续回答”的完整闭环。
  • 为工具调用增加 timeout、permission、错误返回和可观测日志。

关键概念

Structured Output 是让模型输出符合某种结构约束的数据,例如 JSON object、数组或嵌套对象。它的目标是让输出可以被程序稳定解析,而不是只适合人阅读。

Schema 是模型和应用之间的契约。字段名、类型、是否必填、枚举值和嵌套结构越清晰,模型越容易生成可执行、可验证的数据。

Function Calling 更像一种接口约定:模型决定要调用哪个函数,并生成参数;应用负责真正执行函数。模型不会直接访问网络、数据库或文件系统。

Tool Calling 是更通用的工具调用模式。工具可以是函数、外部 API、数据库查询、浏览器动作,也可以来自 MCP Server。

MCP 提供一种把工具、资源和 Prompt 暴露给模型客户端的协议化方式。它让工具生态不再只绑定某一个应用内部实现。

Tool Calling 流程

这张图强调一个核心事实:模型只负责“提出工具调用意图和参数”,真正执行动作的是应用。权限、审计、错误处理和重试都必须放在应用侧。

核心主题

  • Structured Output:JSON 输出、Schema 约束、类型稳定性、可解析结果。
  • JSON Mode:输出约束、解析、修复和错误处理。
  • Schema 设计:Zod、JSON Schema、required、enum、nested object、array。
  • Function Calling:模型选择工具、生成参数,应用执行工具。
  • Tool Calling:定义工具、执行工具、追加工具结果、继续生成。
  • Tool 工程设计:名称、描述、输入输出 schema、错误 schema、timeout、permission。
  • MCP 基础:MCP Client、MCP Server、tools、resources、prompts。

阶段实践拆解

  1. 先做结构化输出:让模型返回固定 JSON,并用 Zod 或 JSON Schema 验证。
  2. 再做一个天气 Tool:定义输入参数、模拟或接入天气 API、返回结构化结果。
  3. 增加数据库查询 Tool:限制可查询范围,避免模型直接拼接危险 SQL。
  4. 增加网页搜索 Tool:处理空结果、超时、来源摘要和错误 schema。
  5. 串起 Tool Calling 闭环:模型发起工具调用,应用执行后把 tool result 追加回上下文。
  6. 实现最小 MCP Server:暴露一个 tool 和一个 resource,理解协议边界。

阶段实践

  • 实现一个天气查询 Tool。
  • 实现一个数据库查询 Tool。
  • 实现一个网页搜索 Tool。
  • 实现一个最小 MCP Server。

计划文章

  • Function Calling 到底是什么
  • 为什么 AI 能调用工具
  • MCP 为什么会成为 AI 工具生态的重要协议