OpenAI 通过强大的结构化输出功能增强了其 API

介绍

可以通过打开/关闭 JSON 模式或使用函数调用来创建先前结构化的输出。

大型语言模型 (LLM) 与一般的对话式 UI 非常相似,擅长处理以自然语言呈现的非结构化数据。首先对这些非结构化输入进行组织和处理,然后将其重新转换为自然语言作为结构化响应。

之前有两个选项可用:JSON 模式和函数调用...

OpenAI JSON 模式

启用 OpenAI 的 JSON 模式并不能确保输出遵循特定的预定义 JSON 架构。它只能保证 JSON 有效且解析时不会出错。

OpenAI 的 JSON 模式的挑战在于每次推理时 JSON 输出都具有很大的可变性,因此无法预定义一致的 JSON 模式。

函数调用

需要澄清的是,聊天完成 API 本身不会调用任何函数,但模型可以生成 JSON 输出,您可以在代码中使用该输出来触发函数调用。

在 API 中引入结构化输出

去年,OpenAI 推出了JSON 模式,作为开发人员使用其模型构建可靠应用程序的宝贵工具。

尽管 JSON 模式增强了模型生成有效 JSON 输出的能力,但正如我在之前的文章中强调的那样,它并不能确保响应遵循特定的架构。这使得该功能更具实验性 ,而非可用于 生产的 功能。

现在,OpenAI 在 API 中引入了结构化输出,这是一项新功能,旨在保证模型生成的输出与开发人员提供的 JSON 模式完全匹配。

结构化输出有两种格式:函数调用 和参数的新选项response_format

函数调用 Python 示例

以下函数调用示例的 Python 代码可以按原样复制并粘贴到笔记本中:

复制代码
# Install the requests library if not already installed
!pip install requests

import requests
import json

# Define your OpenAI API key
api_key = '<You API Key Goes Here>'

# Define the API endpoint
url = "https://api.openai.com/v1/chat/completions"

# Define the headers with the API key
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}

# Define the data for the API request
data = {
    "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": [
        {
            "type": "function",
            "function": {
                "name": "query",
                "description": "Execute a query.",
                "strict": True,
                "parameters": {
                    "type": "object",
                    "properties": {
                        "table_name": {
                            "type": "string",
                            "enum": ["orders"]
                        },
                        "columns": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "enum": [
                                    "id",
                                    "status",
                                    "expected_delivery_date",
                                    "delivered_at",
                                    "shipped_at",
                                    "ordered_at",
                                    "canceled_at"
                                ]
                            }
                        },
                        "conditions": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "column": {
                                        "type": "string"
                                    },
                                    "operator": {
                                        "type": "string",
                                        "enum": ["=", ">", "<", ">=", "<=", "!="]
                                    },
                                    "value": {
                                        "anyOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "number"
                                            },
                                            {
                                                "type": "object",
                                                "properties": {
                                                    "column_name": {
                                                        "type": "string"
                                                    }
                                                },
                                                "required": ["column_name"],
                                                "additionalProperties": False
                                            }
                                        ]
                                    }
                                },
                                "required": ["column", "operator", "value"],
                                "additionalProperties": False
                            }
                        },
                        "order_by": {
                            "type": "string",
                            "enum": ["asc", "desc"]
                        }
                    },
                    "required": ["table_name", "columns", "conditions", "order_by"],
                    "additionalProperties": False
                }
            }
        }
    ]
}

# Make the API request
response = requests.post(url, headers=headers, data=json.dumps(data))

# Print the response
print(response.status_code)
print(response.json())

最后

JSON 是构建和交换 AI 代理及其交互功能之间的数据的重要工具,可确保跨各种系统和平台的清晰、一致和可靠的通信。

相关推荐
User_芊芊君子2 分钟前
CANN_PTO_ISA虚拟指令集全解析打造跨平台高性能计算的抽象层
人工智能·深度学习·神经网络
初恋叫萱萱5 分钟前
CANN 生态安全加固指南:构建可信、鲁棒、可审计的边缘 AI 系统
人工智能·安全
机器视觉的发动机11 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
铁蛋AI编程实战14 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
HyperAI超神经19 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
JoySSLLian32 分钟前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
BestSongC33 分钟前
行人摔倒检测系统 - 前端文档(1)
前端·人工智能·目标检测
模型时代40 分钟前
Anthropic明确拒绝在Claude中加入广告功能
人工智能·microsoft
夕小瑶43 分钟前
OpenClaw、Moltbook爆火,算力如何48小时内扩到1900张卡
人工智能
一枕眠秋雨>o<1 小时前
透视算力:cann-tools如何让AI性能调优从玄学走向科学
人工智能