65.9K
CodeProject 正在变化。 阅读更多。
Home

从 AI 平台检索 JSON 响应

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2024 年 9 月 8 日

CPOL

7分钟阅读

viewsIcon

8859

从四个领先的 AI 平台 - OpenAI、Groq、Gemini 和 Mistral 获取干净、结构化的数据

引言

 

在本文中,我们将探讨四个领先的 AI 平台 - OpenAI、Groq、Gemini 和 Mistral 如何处理 JSON 格式的响应。了解这一点是获取 AI 响应中干净、结构化数据的关键。

为什么这很重要?JSON 是应用程序之间数据交换最广泛使用的格式之一。通过结构化输出,您可以确保 AI 响应始终遵循您指定的 JSON 模式,从而避免出现键丢失或值无效等问题。

  • 轻松提取数据
  • 精确地制定查询
  • 在您的 UI 中以最大的控制力显示模型输出

无论您是经验丰富的开发人员,还是刚开始进行 AI 集成,本指南都将帮助您掌握 AI 平台中的 JSON,使您的应用程序更可靠、更高效。

JSON 及其在 AI API 中的重要性

JSON(JavaScript 对象表示法)就像一种通用的数据语言。您可以将其视为一种以人类和计算机都能轻松读取的格式组织信息的方式。以下是它在 AI 领域日益重要的原因:

  1. 易于阅读:人类和机器都可以快速理解。
  2. 灵活:它可以轻松处理复杂的数据结构。
  3. 语言友好:大多数编程语言都可以直接使用 JSON。
  4. 轻量级:它不会给您的数据增加不必要的负担。
 { 
   "name": "John Doe", 
   "age": 30, 
   "skills": ["Python", "AI", "JSON"] 
}

AI 平台青睐 JSON

AI 平台之所以拥抱 JSON,是因为

  • 它使将 AI 集成到应用程序中更加顺畅。
  • 可以确切地指定您想要什么数据以及如何获取。
  • 它减少了 AI 与您的应用程序之间的错误和误解。

从 LLM 获取 JSON 的最佳实践

当您尝试从 AI API 获取 JSON 数据时,有一些技巧可以让您的工作变得更加轻松。遵循这些技巧,您将很快成为从 AI 获取干净、有用 JSON 的专家!

 

特定于平台的指南

OpenAI - JSON 的结构化输出

OpenAI 提供了两种强大的方法来生成结构化的 JSON 响应:JSON 模式和更高级的结构化输出功能。JSON 模式可确保响应为 JSON 格式,而结构化输出则通过保证遵守特定的 JSON 模式,更进一步。此较新功能适用于 GPT-4 及其变体等最新模型,为开发人员提供了对 AI 生成内容结构的精确控制。通过使用结构化输出,您可以为所需的 JSON 响应定义精确的模式,从而大大减少后处理和验证的需要。

如何使用结构化输出

  1. 定义您的模式:使用 Pydantic (Python) 或 Zod (JavaScript) 定义数据结构。

Python Pydantic

class BookReview(BaseModel):
    title: str
    author: str
    rating: int
    summary: str
    tags: List[str]

class Books(BaseModel):
    book_reviews: List[BookReview]

 

Javascript Zod

const WeatherForecast = z.object({
 location: z.string(),
 date: z.string(),
 temperature: z.number(),
 conditions: z.string(),
 precipitation: z.number(),
})
  1. 安装必需的包:pydantic, openai
  2. 进行 API 调用:使用 OpenAI SDK 中的 parse 方法获取结构化响应。
  3. 处理响应:API 返回与您的模式匹配的解析数据。

 

Python 示例

from pydantic import BaseModel
from openai import OpenAI

client = OpenAI(
    api_key=”OPENAI API key”
)

class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]

completion = client.beta.chat.completions.parse(
    model="gpt-4o-2024-08-06",
    messages=[
        {"role": "system", "content": "Extract the event information."},
        {"role": "user", "content": "Alice and Bob are going to a science fair on Friday."},
    ],
    response_format=CalendarEvent,
)

event = completion.choices[0].message.parsed

print(event)
print(event.name)

# Output
# name='Science Fair' date='Friday' participants=['Alice', 'Bob']
# 'Science Fair'

 

Javascript 示例

import OpenAI from "openai";
import { zodResponseFormat } from "openai/helpers/zod";
import { z } from "zod";

const openai = new OpenAI({
    apiKey: OPENAI_API_KEY
});

const CalendarEvent = z.object({
  name: z.string(),
  date: z.string(),
  participants: z.array(z.string()),
});

const completion = await openai.beta.chat.completions.parse({
  model: "gpt-4o-2024-08-06",
  messages: [
    { role: "system", content: "Extract the event information." },
    { role: "user", content: "Alice and Bob are going to a science fair on Friday." },
  ],
  response_format: zodResponseFormat(CalendarEvent, "event"),
});

const event = completion.choices[0].message.parsed;

console.log(event)

// Output
// {
//     name: 'Science Fair',
//     date: 'Friday',
//     participants: [ 'Alice', 'Bob' ]
// }

重要说明:

  • 适用于 GPT-4o 模型(2024-07-18 及更高版本的 gpt-4o-mini)
  • 用于构建与用户的模型响应,而不是用于函数调用
  • 您的模式中的所有字段都必须是必需的

通过使用结构化输出,您可以确保您的 AI 响应始终是您需要的格式,从而使您的应用程序更加健壮且易于开发。

Groq - JSON 模式

Groq 提供“JSON 模式”,可确保所有聊天完成均为有效的 JSON。以下是如何有效地使用它:

主要特点

  1. 保证有效的 JSON:JSON 模式中的所有响应都是有效的 JSON。
  2. 美化打印的 JSON:建议以获得最佳效果。
  3. 模型性能:Mixtral > Gemma > Llama 用于 JSON 生成。

如何使用 JSON 模式

  1. 启用 JSON 模式:在您的聊天完成请求中设置“response_format”:{“type”:“json_object”}。
  2. 描述 JSON 结构:在系统提示中包含所需 JSON 结构的描述。
  3. 处理错误:如果 JSON 生成失败,Groq 会返回一个代码为 json_validate_failed 的 400 错误。

Python 示例

from typing import List, Optional
import json
from pydantic import BaseModel
from groq import Groq

groq = Groq(
   api_key=GROQ_API_KEY
)

class Ingredient(BaseModel):
   name: str
   quantity: str
   quantity_unit: Optional[str]

class Recipe(BaseModel):
   recipe_name: str
   ingredients: List[Ingredient]
   directions: List[str]

chat_completion = groq.chat.completions.create(
   messages=[
       {
           "role": "system",
           "content": "You are a recipe database that outputs recipes in JSON.\n The JSON object must use the schema: {json.dumps(Recipe.model_json_schema(), indent=2)}"
       },
       {
           "role": "user",
           "content": "Fetch a recipe for apple pie"
       }
   ],
   model="llama3-8b-8192",
   temperature=0,
   stream=False,
   response_format={"type": "json_object"}
)

recipe = Recipe.model_validate_json(chat_completion.choices[0].message.content)
print(recipe)

 

重要说明:

  • JSON 模式不支持流式传输。
  • 为获得最佳效果,请保持提示简洁。
  • 使用 Pydantic 模型定义和验证 JSON 模式。

通过使用 JSON 模式,您可以确保您的 Groq API 响应始终为有效的 JSON 格式,从而更轻松地将 AI 生成的内容集成到您的应用程序中。

Gemini - JSON 输出

Google 的 Gemini API 提供了强大的功能来生成结构化的 JSON 输出,非常适合需要标准化数据格式的应用程序。

主要特点

  1. 可配置输出:Gemini 可以设置为生成 JSON 格式的响应。
  2. 模式定义:支持定义 JSON 模式以实现一致的输出结构。
  3. 灵活的实现:适用于 Gemini 1.5 Flash 和 Gemini 1.5 Pro 模型。

如何为 JSON 结构化提示

  1. 在提示中指定格式:在提示中清晰地描述所需的 JSON 结构。
  2. 使用模式定义:对于 Gemini 1.5 Pro,使用 response_schema 字段进行更精确的控制。

Python 代码示例

import google.generativeai as genai
import os
import typing_extensions as typing

# Configure the API
genai.configure(api_key=API_KEY)

# Define the JSON schema
class Recipe(typing.TypedDict):
    recipe_name: str

# Initialize the model
model = genai.GenerativeModel('gemini-1.5-pro',
                              generation_config={
                                  "response_mime_type": "application/json",
                                  "response_schema": list[Recipe]
                              })

# Generate JSON content
prompt = "List 5 popular cookie recipes"
response = model.generate_content(prompt)
print(response.text)

 

最佳实践

  1. 清晰的模式定义:始终清晰地定义预期的 JSON 结构。
  2. 使用适当的模型:根据您的需求在 Gemini 1.5 Flash 和 Pro 之间进行选择。
  3. 验证输出:始终验证收到的 JSON 以确保其符合您的要求。
  4. 错误处理:实现健壮的错误处理,以应对 JSON 生成可能失败的情况。
  5. 迭代改进:测试并改进您的提示以获得所需的输出一致性。

Mistral - JSON 输出

Mistral 提供了一种直接的方法来生成结构化的 JSON 输出,非常适合需要标准化数据格式的应用程序。

Mistral 的 JSON 格式化方法

  1. JSON 模式:通过在 API 请求中将 response_format 设置为 {“type”:“json_object”} 来启用。
  2. 明确的指示:始终在您的提示中包含对 JSON 输出的明确请求。
  3. 模型兼容性:所有 Mistral 模型均可通过 API 使用 JSON 模式。

优化 JSON 响应的技巧

  1. 具体化:在您的提示中清晰地定义所需的 JSON 结构。
  2. 保持简洁:请求简短的 JSON 对象,以防止输出过长。
  3. 验证输出:始终检查返回的 JSON 的正确性和结构。
  4. 迭代改进:测试并调整您的提示以获得一致的结果。

分步指南及代码示例

import os
from mistralai import Mistral

# Set up API key and model
api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"

# Initialize Mistral client
client = Mistral(api_key=api_key)

# Define the message requesting JSON output
messages = [
    {
        "role": "user",
        "content": "What is the best French meal? Return the name and ingredients in a short JSON object."
    }
]

# Request chat completion with JSON format
chat_response = client.chat.complete(
    model=model,
    messages=messages,
    response_format={"type": "json_object"}
)

# Print the JSON response
print(chat_response.choices[0].message.content)

 

预期输出

{
  "name": "Coq au Vin",
  "ingredients": ["chicken", "red wine", "bacon", "mushrooms", "onions", "garlic", "chicken broth", "thyme", "bay leaf", "flour", "butter", "olive oil", "salt", "pepper"]
}

 

跨 AI 平台比较 JSON 输出

在生成结构化的 JSON 输出方面,每个 AI 平台都有自己的方法。以下是 OpenAI、Groq、Gemini 和 Mistral 的比较:

JSON 结构和格式化

  1. OpenAI:使用具有精确模式遵循的“结构化输出”功能。
  2. Groq:提供“JSON 模式”,可保证有效的 JSON 响应。
  3. Gemini:提供灵活的 JSON 输出,并提供模式定义选项。
  4. Mistral:实现简单的 JSON 模式以实现结构化输出。

优点和缺点

 

        OpenAI

       Groq

      Gemini

       Mistral

  • 精确的模式控制
  • 类型安全和明确的拒绝
  • 更复杂的设置

 

  • 简单的 JSON 模式激活
  • 支持美化打印的 JSON
  • 仅限于特定模型(Mixtral > Gemma > Llama)

 

  • 灵活的模式定义(类型提示或 protobuf)
  • 适用于 Flash 和 Pro 模型
  • 可能需要更多的提示工程才能获得一致性
  • 直接的实现
  • 适用于所有 Mistral 模型
  • 需要在提示中明确要求 JSON

 

 

选择合适的平台

  1. 最大化控制:OpenAI 的结构化输出提供最精确的模式遵循。
  2. 简化:Mistral 和 Groq 提供简单易于实现的 JSON 模式。
  3. 灵活性:Gemini 在控制和易用性之间取得了良好的平衡,并提供了简单和复杂模式的选项。
  4. 性能:考虑使用 Mixtral 模型的 Groq 以获得最佳 JSON 生成速度。

选择平台时,请考虑您对模式复杂性、实现简易性以及对 JSON 输出所需控制级别的具体需求。始终跨不同平台测试输出,以确保它们满足您的应用程序在结构、一致性和准确性方面的要求。

结论

正如我们所探讨的,AI 驱动的 JSON 生成正在改变开发人员与 AI 模型交互和利用 AI 模型的方式。从 OpenAI 的结构化输出到 Groq 的 JSON 模式,Gemini 的灵活模式以及 Mistral 的直接方法,每个平台都提供创建结构化数据的独特功能。

展望未来,我们可以期待更复杂的 JSON 生成技术,包括:

  • 增强的模式验证和错误处理
  • 定义复杂、嵌套结构的更直观的方法
  • 提高生成输出的一致性和可靠性
  • 与数据验证和转换管道集成

AI API 响应的未来在于为开发人员提供更大的控制力、灵活性和效率来处理结构化数据。随着这些技术的发展,它们将能够将 AI 功能更无缝地集成到各种应用程序和服务中。

我们鼓励您尝试跨不同 AI 平台的这些 JSON 生成技术。通过这样做,您不仅可以增强您的应用程序,还可以为 AI 驱动的数据结构化的持续发展做出贡献。在获得 JSON 后,您可以利用它进行数据集成,或通过将 JSON 转换为 PDF 或 Word 来创建文档。

© . All rights reserved.