Passer au contenu principal

Cas d’utilisation

La fonctionnalité Structured Outputs permet aux modèles de générer des réponses conformes au JSON Schema que vous fournissez, ce qui rend les résultats générés plus contrôlables et plus faciles à analyser. Cette fonctionnalité facilite l’analyse et le traitement par la logique en aval, et permet également d’intégrer les résultats dans des systèmes métier. Elle convient à divers scénarios d’automatisation et de traitement de données.

Modèles pris en charge

Les modèles suivants prennent en charge les sorties structurées :

Méthode d’utilisation

Ajoutez les informations suivantes à la requête :
  • Définir le paramètre : spécifiez le JSON Schema que vous avez défini via le paramètre response_format.
  • Guidage par prompt : guidez le modèle dans le prompt afin qu’il produise une sortie structurée.

Exemple d’utilisation

Vous trouverez ci-dessous un exemple complet de code Python montrant comment utiliser la fonctionnalité Structured Outputs pour générer une réponse JSON conforme au JSON Schema que vous fournissez.

1. Initialiser le client

Vous devez initialiser le client avec votre clé API JieKou AI.
from openai import OpenAI

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "qwen/qwen-2.5-72b-instruct"

2. Définir le JSON Schema

Vous devez définir le JSON Schema. L’exemple suivant crée un JSON Schema qui extrait des informations de dépenses à partir de la saisie utilisateur.
# Définir l’invite système pour le suivi des dépenses.
system_prompt = """You are an expense tracking assistant.
Extract expense information from the user's input and format it according to the provided schema."""

# Définir le JSON Schema pour la réponse structurée.
response_format = {
    "type": "json_schema",
    "json_schema": {
        "name": "expense_tracking_schema",
        "schema": {
            "type": "object",
            "properties": {
                "expenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "description": {
                                "type": "string",
                                "description": "Description of the expense"
                            },
                            "amount": {
                                "type": "number",
                                "description": "Amount spent in dollars"
                            },
                            "date": {
                                "type": "string",
                                "description": "When the expense occurred"
                            },
                            "category": {
                                "type": "string",
                                "description": "Category of expense (e.g., food, office, travel)"
                            }
                        },
                        "required": [
                            "description",
                            "amount"
                        ]
                    }
                },
                "total": {
                    "type": "number",
                    "description": "Total amount of all expenses"
                }
            },
            "required": [
                "expenses",
                "total"
            ],
        },
    },
}

3. Envoyer une requête API

Créez une requête API. Cette requête inclut le paramètre response_format, qui spécifie le JSON schema défini à l’étape précédente.
chat_completion = client.chat.completions.create(
    model=model,
    messages=[
        {
            "role": "system",
            "content": system_prompt,
        },
        {
            "role": "user",
            "content": """I spent $120 on dinner at an Italian restaurant last Friday with my colleagues.
Also bought office supplies for $45 on Monday.""",
        },
    ],
    max_tokens=1024,
    temperature=0.8,
    stream=False,
    response_format=response_format,
)

response_content = chat_completion.choices[0].message.content

# Analyser et mettre en forme le JSON
try:
    json_response = json.loads(response_content)
    prettified_json = json.dumps(json_response, indent=2)
    print(prettified_json)
except json.JSONDecodeError:
    print("Could not parse response as JSON. Raw response:")
    print(response_content)
Sortie :
{
  "expenses": [
    {
      "date": "2023-03-17",
      "description": "Dinner at Italian restaurant",
      "amount": 120,
      "category": "Food & Dining"
    },
    {
      "date": "2023-03-13",
      "description": "Office supplies",
      "amount": 45,
      "category": "Office Supplies"
    }
  ],
  "total": 165
}

Code complet

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "qwen/qwen-2.5-72b-instruct"

# Exemple de sortie structurée avec JSON Schema
# Cet exemple crée un schema destiné à extraire des informations de dépenses

# Définir l’invite système pour le suivi des dépenses
system_prompt = """You are an expense tracking assistant.
Extract expense information from the user's input and format it according to the provided schema."""

# Définir le JSON schema pour la réponse structurée
response_format = {
    "type": "json_schema",
    "json_schema": {
        "name": "expense_tracking_schema",
        "schema": {
            "type": "object",
            "properties": {
                "expenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "description": {
                                "type": "string",
                                "description": "Description of the expense"
                            },
                            "amount": {
                                "type": "number",
                                "description": "Amount spent in dollars"
                            },
                            "date": {
                                "type": "string",
                                "description": "When the expense occurred"
                            },
                            "category": {
                                "type": "string",
                                "description": "Category of expense (e.g., food, office, travel)"
                            }
                        },
                        "required": [
                            "description",
                            "amount"
                        ]
                    }
                },
                "total": {
                    "type": "number",
                    "description": "Total amount of all expenses"
                }
            },
            "required": [
                "expenses",
                "total"
            ],
        },
    },
}

chat_completion = client.chat.completions.create(
    model=model,
    messages=[
        {
            "role": "system",
            "content": system_prompt,
        },
        {
            "role": "user",
            "content": """I spent $120 on dinner at an Italian restaurant last Friday with my colleagues.
Also bought office supplies for $45 on Monday.""",
        },
    ],
    max_tokens=1024,
    temperature=0.8,
    stream=False,
    response_format=response_format,
)

response_content = chat_completion.choices[0].message.content

# Analyser et mettre en forme le JSON
try:
    json_response = json.loads(response_content)
    prettified_json = json.dumps(json_response, indent=2)
    print(prettified_json)
except json.JSONDecodeError:
    print("Could not parse response as JSON. Raw response:")
    print(response_content)