AI接口教程:用JSON结构化输出和函数调用连接业务系统

作者:

在

一句话结论:让 AI 接入业务系统时,应把“回答问题”和“调用工具”分开设计:结构化输出负责稳定传递数据,函数调用负责请求外部系统执行动作,最终结果必须由程序校验。

本文参考 OpenAI 的 Structured Outputs 与 Function Calling 官方文档,适合做客服分流、内容发布、订单查询等原型。工具调用不是让模型直接操作服务器,而是由应用定义工具、校验参数并执行。

两种能力的区别

能力 用途 程序要做什么
结构化输出 把回答变成固定 JSON 按 Schema 校验字段和类型
函数调用 让模型请求查询或动作 校验参数、执行函数、返回结果

结构化输出示例

请把用户问题分类为 JSON:
{
  "intent": "article_search | article_feedback | human_help",
  "keywords": ["关键词"],
  "needs_human": true,
  "reason": "不超过 50 字"
}
规则:只能使用列出的 intent;无法判断时使用 human_help。

生产接口中不要只依靠提示词约束格式,应使用当前 SDK 支持的 JSON Schema,并处理拒答、截断、解析失败和字段缺失。Schema 的键名和描述要有业务含义,不能把所有可能情况都塞成一个字符串。

函数调用的闭环

  1. 应用把工具名称、参数 Schema 和用户问题交给模型。
  2. 模型返回工具调用请求,而不是直接执行。
  3. 应用验证参数、权限和资源范围,再调用真实函数。
  4. 应用把工具结果回传给模型,让它生成用户可读的答复。
  5. 记录调用日志,并对写入、删除、付款等高风险动作增加人工确认。

安全设计要点

工具参数不能绕过权限检查;用户输入不能直接拼接 SQL、Shell 或文件路径;写操作要做幂等、审计和超时;外部结果也要当作不可信数据处理。模型说“已发布”不等于系统真的发布,界面应以工具实际返回的状态为准。

常见问题

结构化输出等于函数调用吗?

不等于。前者约束数据格式,后者建立模型与应用函数之间的交互流程。

模型会自动执行函数吗?

不会。应用需要接收调用请求、校验并执行,之后再把结果返回给模型。

为什么还要做 Schema 校验?

提示词不是程序级约束,Schema 和代码校验能更早发现类型、枚举和字段问题。

哪些工具需要人工确认?

发布、删除、付款、改权限和发送外部消息等不可逆或高影响动作,建议确认后执行。

如何开始做第一个原型?

先做只读查询,固定 3 个测试问题,记录成功和失败,再逐步加入写操作。

\n

信息来源与说明

本文参考 OpenAI Structured Outputs 指南和 OpenAI Function Calling 指南整理。接口参数和 SDK 写法应以当前官方文档为准。