top of page
  • Foto del escritorMaría Soto

Crea tu asistente virtual con Azure OpenAI GPT 4 32k

Actualizado: 3 jul 2023


El pasado 3 de Junio tuvo lugar la 5ª edición de Anfitrionas: hablemos de tecnología, organizado por Women for Technical Talks (W4TT), un grupo de mujeres al que pertenezco cuyo objetivo es potenciar las capacidades de mujeres de carreras STEM para aumentar nuestra participación como ponentes de charlas técnicas y dar visibilidad al talento femenino.


En esta edición repetí como ponente en el track de desarrollo, esta vez hablando sobre Azure OpenAI GPT 4. Mostré una sencilla prueba de concepto con Java Script llamando al modelo de lenguaje GPT 4 32K de Azure Opena AI para ver su potencial en el uso de un chatbot inteligente que nos pueda asesorar sobre un conjunto de productos determinados en base a los gustos del usuario.


La primera ventaja o diferenciación que nos ofrece el modelo escogido es la cantidad de tokens o información que nos permite enviar por llamada, hasta hace poco teníamos una limitación de 4.046 tokens con GPT3, pero con el anuncio de GPT 4 tenemos dos modelos disponibles 8k y 32k, lo que nos permite enviar y procesar una gran cantidad de información, entre ella, un conjunto de datos correspondiente a los productos que queremos vender.


Existe otro modelo reciente que ha sacado Azure OpenAI, GPT 3.5 Turbo de 16K, pero cuando impartí la sesión todavía no estaba disponible.



Para lograr que la IA actúe como un asistente especializado en un área en concreto (moda en este ejemplo) y solo informe al usuario de los productos de "mi tienda" hice lo siguiente desde el prompt:


1. Por un lado le indicamos con System el rol que debe tomar la IA:

const conversacion = [{
  role: "system",
  content: "Eres un asistente de moda especializado en un cojunto de productos, tu objetivo es venderlos. Productos: " + productos + ". Haz las preguntas necesarias al usuario para que puedas proponerle el producto más adecuado a sus necesidades y gustos. No propongas nada que no esté en la lista de productos que te he pasado. "
}];

2. Por otro lado, la información de los productos la estructuré y envié de esta forma:

const productos="VESTIDO LARGO PUNTO FLORES ##TALLAS S, M, L## 59,95 EUR ## Vestido de cuello redondo y manga sisa. Forro interior. Cierre en espalda con abertura y botón.##https://www.zara.com/es/es/vestido-largo-punto-flores-p02142085.html?v1=244511057;VESTIDO MIDI ESTAMPADO FLORAL##TALLAS XS,S, M, L, XL##39,95 EUR ## Vestido de cuello solapa con escote pico y manga corta acabada en vuelta con trabilla y botón. Cintura elástica con cinturón del mismo tejido. Bolsillos delanteros de plastrón. Cierre frontal con botones. ##https://www.zara.com/es/es/vestido-midi-estampado-floral-p03401243.html?v1=258547846;";

En la constante productos almaceno el conjunto de información correspondiente a los supuestos vestidos que tengo disponibles, cada vestido está compuesto por: nombre del producto, tallas disponibles, precio, descripción y url. GPT 4 es tan potente que sin decirle yo nada detecta que cada vez que se encuentra ## está indicando un nuevo campo o atributo de un determinado vestido y cuando hay un ; indica que hay un nuevo producto.


Y para informar a la IA del contexto de la conversión voy almacenando los pares preguntas y respuestas en el array conversacion, de modo que le voy enviando en el siguiente prompt todo el histórico de la conversación.


  1. Rol user con la nueva pregunta del usuario:

conversacion.push({
      role: "user",
      content: query
    });


2. Rol assistant con la respuesta de la IA ante la pregunta anterior:

   conversacion.push({
      role: "assistant",
      content: response
    });


Y aquí la llamada al modelo de lenguaje GTP4 con el servicio de chat de Azure Open AI:


async function generateContent(prompt) {
 
  // Crea la solicitud HTTP al API de OPENAI DE AZURE

  return fetch("https://msoto-openai.openai.azure.com/openai/deployments/GPT4/chat/completions?api-version=2023-03-15-preview", {
    method: 'POST',
    body: JSON.stringify({
    messages: prompt,
      max_tokens: 30024,
      temperature: 0.5,
      top_p: 1,
      frequency_penalty: 0,
      presence_penalty: 0
    }),
    headers: {
      "Content-Type": "application/json",
      "api-key": apiKey
    }
  }).then(res => res.json());
}

Dejo aquí la charla completa que explico todo en 20 minutos!



bottom of page