El pasado 20 de julio la comunidad técnica de Microsoft lanzaba esta noticia Function calling is now available in Azure OpenAI Service
¿Qué es Azure OpenAI Function Calling?
Un servicio que nos permite llamar a ChatCompletion indicándole un listado de funciones propias disponibles para ejecutar en caso de que la pregunta hecha por el usuario lo necesitara para generar la respuesta.
Las ventajas que se consiguen al incorporar funcions en las llamadas de Azure OpenAI Completions es que puedes inyectar información propia, exclusiva de tu negocio o del caso de uso a la conversación con GPT sin necesidad de tenerla pública ni compartida.
¿Por qué son necesarias las function calling?
Porque existen situaciones en las que las respuestas de chatCompletion no son las correctas o directamente no resuleven la pregunta del usuario.
Existen ciertas limitaciones de las llamadas básicas a Azure OpenAI:
No hay respuestas acotadas, las da en base a los datos e información con la que ha sido entrenada.
Puede no dar datos fiables en la respuesta, sufrir alucionaciones.
No accede a información en tiempo real.
Ejemplo de llamada directa a Azure OpenAI ChatCompletion que no responde lo que el usuario está pidiendo.
Cómo llamar a Azure OpenAI Function Calling
OpenAI Function Calling conecta GPT con herramientas o APIs externas mejorando las respuestas del usuario al incorporar tu propia fuente de datos y llamando a tus funciones solo cuando sea necesario.
Aquí podemos ver la arquitectura de las llamadas, el usuario hace una llamada a Azure OpenAI y le indica las funciones que tiene disponible. OpenAI puede contestar directamente o indicar que primero es necesario conocer la respuestas de una función con un determinado parámetro.
En este ejemplo el usuario pregunta por la temperatura en Chicago y le responde que para contestar será primero necesario llamar la función get_weather pasándole como parámetro Chicago.
Se hace una segunda llamada a OpenAI con la respuesta de la función para que la IA pueda contestar lo que el usuario le está pidiendo: En chicago hoy está soleado!
Basándonos en el ejemplo publicado por Microsoft vemos cómo sería la llamada en Python pasándole como parámetro un listado de funciones, en este caso search_hotels.
Es muy importante describir bien en lenguaje natural qué hace la función, qué información devuelve y para qué sirve cada propiedad/parámetro, es decir, completar bien los descriptions correspondientes:
Y aquí según la respuesta de la primera llamada, si es necesario ejecutar alguna función vemos como sería la segunda llamada:
Demo Azure Function Calling: Hotel Search Chatbot
En la siguiente imagen vemos una demo correspondiente a un chatbot de búsqueda de hoteles utilizando la API de OpenAI y Gradio. El chatbot puede procesar solicitudes de búsqueda de hoteles en función de la ubicación, el precio máximo y las características deseadas.
Se puede ver en la imagen cómo responde la IA a una pregunta que no necesita llamar a function calling y otra que sí, devolviendo un hotel con los parámetros de búsqueda requeridos.
Aquí podemos ver el código final de la demo Hotel Search Chatbot con Azure Function Calling https://github.com/MeryPonfe/AzureOpenAIFunctionCalling
* Hay que tener en cuenta que la llamada a Azure Function calling está disponible en la versión 2023-07-01-preview de la API y funciona con la versión 0613 de gpt-35-turbo, gpt-35-turbo-16k, gpt-4 y gpt-4-32k.
En el siguiente vídeo dejo la charla que di en el W4TT sobre Azure OpenAI Function Calling