OpenAI官宣将支持 JSON 结构化输出!吃瓜群众说 JSON 是啥?我要 GPT-5...

人工智能
如果做过程序员,应该知道模型的结构化输出对于程序是很重要的。因为程序的运行是结构化的,如果大模型能输出结构化的结果,我们就可以更好和程序相结合。

奥特曼在推文中表示[1]应广大用户的需求(这里的用户应该特指开发者),OpenAI 将支持结构化输出。

图片

对于吃瓜群众来说,有网友表示广大用户关心的问题是 GPT-5 和语音模式,不要试图愚弄人们[2]...。也有网友在下面继续回复 “不,结构化输出对于使用 LLM 进行可靠构建来说非常重要。”

图片图片

对于普通用户来讲,他们根本就不懂 JSON 格式,显然不需要关心,能通过自然语言进行交流就可以了。

如果做过程序员,应该知道模型的结构化输出对于程序是很重要的。因为程序的运行是结构化的,如果大模型能输出结构化的结果,我们就可以更好和程序相结合。

开发人员长期以来一直在通过开源工具、提示和反复重试请求来解决 LLM 在这方面的局限性,以确保模型输出符合与其系统互操作所需的格式。之前微软搞的开源项目 TypeSpec 也是来做类似的事情的。

OpenAI 在去年的 DevDay 上推出了 JSON 模式,但它不能保证模型的响应符合特定的架构。此次,OpenAI 推出的结构化输出是一项新功能[3],旨在确保模型生成的输出与开发人员提供的 JSON 架构完全匹配。

OpenAI 采用结构化输出的新模型是 gpt-4o-2024-08-06,对复杂 JSON 模式跟踪的评估中该模型获得了满分(100%),之前的 gpt-4-0613 得分不到 40%

图片图片

使用结构化输出的方式有两种:

1. 函数调用,通过设置 strict:true 参数,支持 gpt-4-0613 和 gpt-3.5-turbo-0613 及更高版本的模型

请求:

图片图片

响应:

图片图片

2. 新增 response_format 参数选项

请求:

图片图片

响应:

图片图片

原生支持 Node.js 和 Python SDK

OpenAI 提供的 Python 和 Node.js SDK 已更新,原生支持结构化输出。

例如,在 Node.js 中可以通过 Zod 这个库,来约束响应数据结构。如下所示:

import OpenAI from 'openai';
import z from 'zod';
import { zodFunction } from 'openai/helpers/zod';

const Table = z.enum(['orders', 'customers', 'products']);
const Column = z.enum([
    'id',
    'status',
    'expected_delivery_date',
    'delivered_at',
    'shipped_at',
    'ordered_at',
    'canceled_at',
]);
const Operator = z.enum(['=', '>', '<', '<=', '>=', '!=']);
const OrderBy = z.enum(['asc', 'desc']);

const DynamicValue = z.object({
    column_name: z.string(),
});

const Condition = z.object({
    column: z.string(),
    operator: Operator,
    value: z.union([z.string(), z.number(), DynamicValue]),
});

const QueryArgs = z.object({
    table_name: Table,
    columns: z.array(Column),
    conditions: z.array(Condition),
    order_by: OrderBy,
});

const client = new OpenAI();

const completion = await client.beta.chat.completions.parse({
    model: 'gpt-4o-2024-08-06',
    messages: [
        { role: 'system', content: 'You are a helpful assistant. The current date is August 6, 2024. You help users query for the data they are looking for by calling the query function.' },
        { role: 'user', content: 'look up all my orders in may of last year that were fulfilled but not delivered on time' }
    ],
    tools: [zodFunction({ name: 'query', parameters: QueryArgs })],
});
console.log(completion.choices[0].message.tool_calls[0].function.parsed_arguments);

参考资料

[1]奥特曼在推文中表示: https://x.com/sama/status/1820881534909300769

[2]有网友表示广大用户关心的问题是 GPT-5 和语音模式,不要试图愚弄人们: https://x.com/ai_for_success/status/1820883341748662513

[3]OpenAI 推出的结构化输出是一项新功能: https://openai.com/index/introducing-structured-outputs-in-the-api/

责任编辑:武晓燕 来源: 编程界
相关推荐

2024-08-07 12:34:29

2022-01-03 18:24:50

密码单词摩尔斯

2023-12-25 15:00:18

结构化布线光纤

2024-02-19 00:00:00

OpenAIChatGPT功能

2024-05-11 13:41:23

2024-05-30 13:13:43

2018-04-03 14:00:03

结构化数据非结构化数据数据库

2024-05-15 09:28:01

2018-03-08 14:30:30

区块链数字货币去中心化

2023-11-14 14:26:29

OpenAIGPT-5

2021-12-12 08:37:18

结构化数据非结构化数据数据

2024-04-02 11:37:59

2024-06-20 10:36:21

2023-06-14 16:15:54

网络结构化布线

2024-05-27 00:32:45

2019-07-24 15:33:55

大数据数据处理分析

2023-06-08 07:58:29

2024-02-19 08:19:25

结构化绑定C++17C++

2023-05-16 14:23:19

2019-09-10 10:19:50

非结构化数据数据智能
点赞
收藏

51CTO技术栈公众号