Desde el lanzamiento de ChatGPT, muchas personas sienten la necesidad de hacer preguntas a Siri que solo ChatGPT podría responder. En este artículo se mostrará cómo crear un asistente de voz con la capacidad de responder a preguntas utilizando la API de OpenAI y GPT-3 en conjunto con Python.

Además, al final se proporcionarán ideas para convertir este programa en un negocio de software como servicio. A lo largo del proceso se explicarán cada línea de código de forma clara y concisa, para que incluso si eres nuevo en Python o inteligencia artificial, puedas seguir la explicación sin problemas.

Importación y configuración: bibliotecas esenciales y acceso a la API

En este apartado se abordarán los detalles esenciales para comenzar a desarrollar un asistente virtual basado en Python y la API de OpenAI. Se abordarán las razones detrás de la elección de las librerías fundamentales y se proporcionarán detalles sobre la configuración del acceso a la API.

Importando las bibliotecas esenciales

Uno de los primeros pasos para el desarrollo de un asistente esencial es la importación de las bibliotecas que brindan las funcionalidades específicas necesarias para llevar a cabo las tareas esperadas. En este proyecto, se requieren tres bibliotecas fundamentales:

import openai
import pyttsx3
import speech_recognition as sr

OpenAI

La elegante y sofisticada biblioteca OpenAI permite la interacción con el avanzado sistema de procesamiento de lenguaje natural (NLP en inglés) conocido como GPT-3 y GPT-4 (para este tutorial usaremos GPT-3, pero si lo quieres probar con GPT-4 y tienes acceso a su API, cambia simplemente el nombre del modelo por gpt-4) , proporcionando una amplia gama de posibilidades para generar respuestas en lenguaje natural a partir de preguntas o entradas del usuario.

PyTTSX3

La biblioteca PyTTSX3 es una versátil y eficiente solución para convertir texto en voz, permitiendo así una fácil interacción auditiva entre el usuario y el asistente virtual. Esta biblioteca, especialmente diseñada para ser independiente de la plataforma, garantiza la misma experiencia de usuario en diferentes entornos de desarrollo y sistemas operativos.

SpeechRecognition

La biblioteca SpeechRecognition, conocida también como Speech to Text, es una herramienta poderosa y precisa para transcribir el audio grabado del usuario a texto, lo cual esencialmente transforma la entrada de voz en información fácilmente procesable por GPT-3.

Configuración del acceso a la API de OpenAI

Para utilizar las impresionantes habilidades de GPT-3, es necesario configurar adecuadamente el acceso a la API de OpenAI. Esto se logra a través de la clave de API proporcionada por OpenAI al registrarse en su sitio web.

openai.api_key = "your_openai_api_key"

Mediante esta simple línea de código, se establece el vínculo entre tu proyecto en Python y la API de OpenAI. Asegúrate de reemplazar "your_openai_api_key" con tu clave de API personal, y así disfrutar de las asombrosas capacidades de GPT-3 en tu propio asistente virtual.

En resumen

En el apartado "Importación y configuración: bibliotecas esenciales y acceso a la API", se cubren los aspectos fundamentales para comenzar a desarrollar un asistente virtual en Python que aproveche las habilidades de GPT-3 para generar respuestas en lenguaje natural.

Haber comprendido la importancia y las capacidades de cada una de estas tres bibliotecas esenciales, así como la configuración adecuada del acceso a la API de OpenAI, te permite encaminarte de forma efectiva en el desarrollo de un asistente virtual innovador, dinámico e inteligente.

Funciones para transcribir audio a texto y generar respuestas

En este apartado se profundizará en las funciones que permiten transcribir el audio a texto y generar respuestas utilizando la API de GPT-3. Estas funciones son fundamentales para proporcionar una experiencia interactiva y de alta calidad en el asistente virtual.

Transcripción de audio a texto

La capacidad para convertir el habla en un formato legible es esencial en el funcionamiento del asistente virtual. La función transcribeAudioToText, previamente introducida, se encarga de esta tarea vital.

def transcribeAudioToText(file_name):
  # Aquí va el contenido de la función

Utilizando el objeto Recognizer

El primer paso en la transcripción del audio es crear una instancia del objeto Recognizer de la librería speech_recognition. Este objeto es necesario para llevar a cabo el reconocimiento de voz en el archivo de audio proporcionado y prepararlo para la transcripción.

r = sr.Recognizer()

Abriendo y grabando el archivo de audio

Una vez creada la instancia del objeto Recognizer, es necesario abrir y grabar el contenido del archivo de audio. Para ello, se utiliza la declaración with junto con la clase AudioFile de la librería speech_recognition.

with sr.AudioFile(file_name) as source:
  audio = r.record(source)

Transcribiendo el audio

Con el audio almacenado en la variable audio, ahora es posible realizar la transcripción a texto utilizando el método recognize_google() del objeto Recognizer:

text = r.recognize_google(audio)

Este método convertirá automáticamente el contenido del archivo de audio en una cadena de texto, que será devuelta por la función transcribeAudioToText.

Generando respuestas con GPT-3

Después de convertir el audio a texto, el siguiente paso es generar una respuesta adecuada y relevante para la pregunta formulada por el usuario. La función generate_response facilita esta tarea utilizando la API de GPT-3.

def generate_response(prompt):
  # Aquí va el contenido de la función

Preparando la petición a GPT-3

Para hacer una solicitud a la API de GPT-3, se utiliza el método openai.Completion.create(). Este método proporciona una serie de parámetros que pueden ser ajustados según las necesidades, como el nombre del modelo de GPT-3 (davinci-codex), la temperatura (un valor que influye en la creatividad del texto generado) y el número máximo de tokens (longitud máxima del texto).

response = openai.Completion.create(
  engine="text-davinci-codex",
  prompt=prompt,
  max_tokens=4000,
  temperature=0.5
)

Procesando la respuesta de GPT-3

Una vez ejecutada la petición, la función generate_response recibirá los resultados del modelo GPT-3. Estos resultados incluyen la respuesta generada en función del texto de entrada proporcionado. La función generate_response devuelve esta información para ser utilizada posteriormente en el programa.

return response.choices[0].text.strip()

La habilidad para convertir el audio a texto y generar respuestas coherentes y relevantes utilizando GPT-3 es crucial en la creación de un asistente virtual eficiente y preciso. Con la implementación de estas funciones, se garantiza una experiencia más interactiva y enriquecedora para el usuario.

Estructurando la lógica del programa: Una sinfonía de código

Antes de sumergirnos en el fascinante flujo de la lógica del programa, es esencial establecer una base sólida que permita que los componentes funcionen en armonía. Esto se logra diseñando cuidadosamente la estructura central de tu programa, creando un marco donde se puedan definir y gestionar los diferentes pasos del proceso. Tal como un director de orquesta da forma a una sinfonía, tu programa debe llevar al usuario a través de una experiencia armoniosa.

La función principal: Un corazón que late

Un punto crucial para estructurar de manera adecuada la lógica del código es definir una función principal, también conocida como main. Esta función puede ser vista como el corazón del programa, donde todo el flujo vital de la lógica se llevará a cabo. Aquí es donde se conectan los diferentes componentes y funciones para cooperar en una serie de pasos cuidadosamente coreografiados.

def main():
    # Aquí va el contenido de la función

Un bucle infinito: El alma del asistente virtual

Una vez establecido el núcleo de nuestra función principal, es hora de dar vida al programa, permitiendo que respire y siga fluyendo. Esto se logra mediante un bucle while que se ejecuta de manera constante hasta que decidamos detenerlo. La instrucción while True le da a nuestro programa la habilidad de escuchar, responder y volver a escuchar, acercándolo cada vez más a un asistente virtual con vida propia.

while True:
    # Aquí va el contenido del bucle

La señal del usuario: Clave para el inicio de la interacción

La comunicación es una parte vital para que un asistente interactúe con sus usuarios, ¿qué mejor manera de comenzar la conversación que presentando una invitación amistosa? Imprime un mensaje en pantalla amigable sugerido al usuario que diga Genius antes de grabar sus preguntas. Así, se establece el punto inicial de nuestra comunicación bidireccional, cimentando la relación entre el sistema y el usuario.

print("Di 'Genius' para empezar a grabar tu pregunta.")

Escuchar, comprender y actuar: La esencia de la interacción

Una vez que el usuario ha iniciado la interacción, es hora de volver a nuestro bucle while en la función principal e implementar la captura de preguntas del usuario. El objetivo es permitir que el programa, a través del asistente virtual, escuche cuidadosamente las preguntas del usuario y las comprenda correctamente.

with sr.Microphone() as source:
    print("Escuchando...")
    audio = r.listen(source)
    print("Reconociendo...")
    text = r.recognize_google(audio, language="es-ES").lower()

El programa procede a escuchar, reconocer y capturar el audio de la pregunta del usuario en un segmento de texto, que será procesado con las capacidades majestuosas de GPT-3.

La respuesta, sabiduría compartida

Una vez que ha sido procesada y entendida la pregunta del usuario, es momento de brindar una respuesta, compartiendo la sabiduría obtenida por la grandiosa API de GPT-3, conformada por una maravillosa mezcla de conocimiento y comprensión contextual.

response = generate_response(text)
print(response)

Tu voz es mi voz, una conexión simbiótica

Finalmente, no podemos olvidar el elemento más importante: la comunicación con el usuario a través de la voz. La función speakText tiene el honor de desempeñar este papel crucial, conectando las respuestas generadas por el programa con los oídos del usuario, sellando así la interacción y solidificando la experiencia.

speakText(response)

La función speakText() convierte el texto de la respuesta en voz utilizando la biblioteca pyttsx3 previamente importada y configurada.  Esta función se encarga de transformar el texto en un habla comprensible para el usuario a través de la interacción con el asistente virtual.

def SpeakText(command):
    # Initialize the engine
    engine = pyttsx3.init()
    engine.say(command)
    engine.runAndWait()

En última instancia, estos tres pasos en conjunto respaldan una plataforma de asistente de voz sólida, intuitiva e interactiva que combina Python y GPT-3 de una manera versátil y efectiva. La generación y reproducción de respuestas es un atributo clave en el éxito y la funcionalidad del asistente virtual, mejorando la experiencia del usuario de manera sorprendente e infinitamente adaptable.

Y así quedaría el código completo:

import openai
import pyttsx3
import speech_recognition as sr

openai.api_key = "your_openai_api_key"

def transcribeAudioToText(file_name):
  r = sr.Recognizer()
  with sr.AudioFile(file_name) as source:
  audio = r.record(source)
  text = r.recognize_google(audio)
  return text


def generate_response(prompt):
  response = openai.Completion.create(
      engine="text-davinci-codex",
      prompt=prompt,
      max_tokens=4000,
      temperature=0.5
  )
  return response.choices[0].text.strip()  
  
  
def SpeakText(command):
  # Initialize the engine
  engine = pyttsx3.init()
  engine.say(command)
  engine.runAndWait()
    

def main():
  while True:
    print("Di 'Genius' para empezar a grabar tu pregunta.")
    with sr.Microphone() as source:
      print("Escuchando...")
      audio = r.listen(source)
      print("Reconociendo...")
      text = r.recognize_google(audio, language="es-ES").lower()
      response = generate_response(text)
      print(response)
      speakText(response)
Comparte esta publicación