Configuración del Entorno de Desarrollo
Antes de empezar a implementar la salida estructurada, es necesario configurar el entorno de desarrollo. Esto incluye la instalación de las bibliotecas necesarias y la configuración de las credenciales de la API de OpenAI.
-
Instalación de Bibliotecas: Utiliza el gestor de paquetes pip para instalar las bibliotecas necesarias:
pip install openai pydantic
-
Configuración de Credenciales: Define la clave de la API de OpenAI como una variable de entorno:
export OPENAI_API_KEY='tu_clave_de_api'
Una vez configurado el entorno, podrás empezar a utilizar la salida estructurada en tus proyectos.
Ejemplo de Código: Obtención de Datos con Pydantic
Pydantic es una biblioteca de Python que facilita la definición y validación de modelos de datos. Se integra perfectamente con la API de OpenAI para la obtención de salida estructurada. A continuación, se muestra un ejemplo de cómo utilizar Pydantic para definir un esquema JSON y obtener datos de la API:
from openai import OpenAI
from pydantic import BaseModel, Field
client = OpenAI()
class TicketResolution(BaseModel):
description: str = Field(description="Description of the step taken.")
action: str = Field(description="Action taken to resolve the issue.")
class Steps(BaseModel):
steps: list[TicketResolution] = Field(description="The final message that will be send to the customer.")
def get_ticket_resolution_pydantic(query: str):
completion = client.chat.completions.create(
model="gpt-4-turbo-preview",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": query},
],
response_format= {"type": "json_object"},
)
response = client.beta.chat.completions.create(
model="gpt-4-turbo-preview",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": query},
],
response_format= {"type": "json_object", "schema": Steps.model_json_schema()},
)
return completion.choices[0].message.content
system_prompt = """You are an AI customer care assistent. You will be provided with a customer inquiry,
and your goal is to respond with a structured solution, including the steps taken to resolve the issue and the final resolution.
For each step, provide a description and the action taken."""
query = """Hi, I'm having trouble with my recent order, I received the wrong item and need to return it for a refund.
Can you help me with the return process and let me know when I can expect my refund?"""
print(get_ticket_resolution_pydantic(query))
En este ejemplo, se define un modelo Pydantic llamado TicketResolution
con los campos description
y action
. Luego, se utiliza la API de OpenAI para obtener datos que se ajusten a este modelo. Pydantic se encarga de validar y convertir los datos, lo que simplifica el procesamiento y la manipulación de la información.
Ejemplo de Código: Obtención de Datos con Esquema JSON
Si prefieres no utilizar Pydantic, puedes definir el esquema JSON directamente y utilizarlo con la API de OpenAI. A continuación, se muestra un ejemplo de cómo hacerlo:
from openai import OpenAI
client = OpenAI()
def get_ticket_response_json(query):
completion = client.chat.completions.create(
model="gpt-4-turbo-preview",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": query},
],
response_format= {"type": "json_object", "schema": json_schema},
)
return completion.choices[0].message.content
json_schema = {
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Description of the step taken."
},
"action": {
"type": "string",
"description": "Action taken to resolve the issue."
}
},
"required": [
"description",
"action"
]
}
}
},
"required": [
"steps"
]
}
system_prompt = """You are an AI customer care assistent. You will be provided with a customer inquiry,
and your goal is to respond with a structured solution, including the steps taken to resolve the issue and the final resolution.
For each step, provide a description and the action taken."""
query = """Hi, I'm having trouble with my recent order, I received the wrong item and need to return it for a refund.
Can you help me with the return process and let me know when I can expect my refund?"""
print(get_ticket_response_json(query))
En este ejemplo, se define un esquema JSON que describe la estructura de los datos deseados. Luego, se utiliza este esquema con la API de OpenAI para obtener resultados que se ajusten a la estructura definida. Aunque este enfoque requiere más configuración manual, ofrece un control total sobre el formato de los datos.