结构化输出与工具调用基础
这个主题开始把模型输出从“给人读的文本”推进到“给系统处理的数据”。
如果说前几个阶段关注“模型如何回答用户”,这一阶段关注的是“模型如何和软件系统协作”。当模型输出必须被代码继续处理时,自由文本就不够了;当模型需要查询天气、数据库或网页时,它也不能真的自己执行动作,而是需要应用提供工具、执行工具,再把结果交还给模型。
学习目标
完成这个主题后,你应该能够:
- 让模型按稳定 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。
阶段实践拆解
- 先做结构化输出:让模型返回固定 JSON,并用 Zod 或 JSON Schema 验证。
- 再做一个天气 Tool:定义输入参数、模拟或接入天气 API、返回结构化结果。
- 增加数据库查询 Tool:限制可查询范围,避免模型直接拼接危险 SQL。
- 增加网页搜索 Tool:处理空结果、超时、来源摘要和错误 schema。
- 串起 Tool Calling 闭环:模型发起工具调用,应用执行后把 tool result 追加回上下文。
- 实现最小 MCP Server:暴露一个 tool 和一个 resource,理解协议边界。
阶段实践
- 实现一个天气查询 Tool。
- 实现一个数据库查询 Tool。
- 实现一个网页搜索 Tool。
- 实现一个最小 MCP Server。
计划文章
- Function Calling 到底是什么
- 为什么 AI 能调用工具
- MCP 为什么会成为 AI 工具生态的重要协议