Saltar al contenido principal

Casos de uso

La función Structured Outputs permite que el modelo genere respuestas que se ajusten al JSON Schema que usted proporciona, lo que hace que los resultados generados sean más controlables y fáciles de analizar. Esta función no solo facilita el análisis y el procesamiento de la lógica posterior, sino que también ayuda a integrar los resultados en sistemas empresariales. Es adecuada para diversos escenarios de automatización y procesamiento de datos.

Modelos compatibles

Los siguientes modelos admiten salidas estructuradas:

Cómo usarlo

Agregue la siguiente información en la solicitud:
  • Configurar el parámetro: especifique el JSON Schema que definió mediante el parámetro response_format.
  • Guía en el prompt: indique al modelo en el prompt que genere una salida estructurada.

Ejemplo de uso

A continuación se proporciona un ejemplo completo de código en Python que muestra cómo usar la función Structured Outputs para generar una respuesta JSON que se ajuste al JSON Schema que usted proporciona.

1. Inicializar el cliente

Debe inicializar el cliente con su clave de API de 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. Definir el JSON Schema

Debe definir el JSON Schema. El siguiente ejemplo crea un JSON Schema para extraer información de gastos desde la entrada del usuario.
# Definir el prompt del sistema para el seguimiento de gastos.
system_prompt = """You are an expense tracking assistant.
Extract expense information from the user's input and format it according to the provided schema."""

# Definir el JSON Schema para la respuesta estructurada.
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. Realizar una solicitud de API

Cree una solicitud de API. Esta solicitud incluye el parámetro response_format, que especifica el JSON schema definido en el paso anterior.
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

# Analizar y embellecer el 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)
Salida:
{
  "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
}

Código completo

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"

# Ejemplo de salida estructurada con JSON Schema
# Este ejemplo crea un schema para extraer información de gastos

# Definir el prompt del sistema para el seguimiento de gastos
system_prompt = """You are an expense tracking assistant.
Extract expense information from the user's input and format it according to the provided schema."""

# Definir el JSON schema para la respuesta estructurada
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

# Analizar y embellecer el 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)