Enmilocalfunciona

Thoughts, stories and ideas.

Conecta con ChatGPT desde Symfony en 10 minutos

Publicado por Ricardo López el

IAInteligencia ArtificialChat GPTSymfonyOpenAIAPI

Recientemente hemos hablado sobre cómo ChatGPT puede apoyar en la programación. Hoy continuamos con un caso práctico mostrando cómo conectar con ChatGPT mediante Symfony.

¿Qué prerrequisitos son necesarios?

  • tener instalado PHP 8.1 en el entorno de desarrollo
  • disponer de una cuenta de prueba (1 mes gratis) o de pago de ChatGPT de OpenAI

Además de Symfony, haremos uso de dos librerías que permiten interactuar con la API de Open AI: openai-php/symfony y openai-php/client

Veamos, paso a paso, cómo conectar con ChatGPT desde cero.

0:00
/
Caso práctico: conectar con ChatGPT desde Symfony en 10 minutos

Paso 1: Crear un proyecto Symfony Usa el comando de Symfony para crear un nuevo proyecto con la versión 6.2:

  • symfony new chatgpt-sf62 --version="6.2.*"

Paso 2: Modificar el archivo composer.json. Abre el archivo composer.json en la raíz de tu proyecto y asegúrate que “minimum-stability” tiene valor “dev” y “prefer-stable” tiene valor true:

"minimum-stability": "dev",  "prefer-stable": true,
composer.json

Esto configurará la estabilidad mínima a "dev" y preferirá paquetes estables en tus dependencias.

Paso 3: Añadir openai-php/symfony. Ejecuta el siguiente comando para añadir el paquete openai-php/symfony a tu proyecto:

  • composer require openai-php/symfony

Esto instalará el bundle de Symfony necesario para integrar la librería que usaremos para conectar con OpenAI desde la aplicación.

Paso 4: Registrar el bundle en config/bundles.php. Abre el archivo config/bundles.php y registra el bundle de OpenAI:

OpenAI\Symfony\OpenAIBundle::class => ['all' => true],
bundles.php

Esto cargará el bundle de OpenAI en tu aplicación Symfony.

Paso 5: Añadir openai-php/client A continuación, ejecuta el siguiente comando para añadir el cliente de OpenAI a tu proyecto:

  • composer require openai-php/client

Esto instalará el cliente de OpenAI que te permitirá interactuar con su API.

Paso 6: Añadir symfony/maker-bundle. Ejecuta el siguiente comando para añadir el paquete symfony/maker-bundle a tu proyecto:

  • composer require symfony/maker-bundle

Este paquete te proporcionará herramientas adicionales para generar código en tu aplicación Symfony.

Paso 7: Crear un controlador DemoController. Usa el siguiente comando para generar un controlador DemoController en tu proyecto:

  • php bin/console make:controller

Esto creará un controlador vacío que podrás usar para implementar tus endpoints.

Paso 8: Añadir la clave de la API de OpenAI al archivo .env.local:

Obtén tu clave de la API de OpenAI desde https://platform.openai.com/account/api-keys. Luego, añade la clave a tu archivo .env.local en tu proyecto Symfony de la siguiente manera:

OPENAI_API_KEY=tu-openai-api-key
.env.local

Esto permitirá que tu aplicación Symfony tenga acceso a la API de OpenAI.

Paso 9: Crear el primer endpoint con el listado de modelos disponibles:

Para comenzar, puedes crear un endpoint en tu proyecto Symfony que permita obtener un listado de los modelos disponibles en OpenAI. Puedes hacerlo en el controlador DemoController que creaste anteriormente. Aquí tienes un ejemplo de cómo implementarlo:

#[Route('/models', name: 'app_models')]  public function models(Client $openaiClient): JsonResponse  {      $list = $openaiClient->models()->list();        return $this->json($list);  }
/models - DemoController.php

En este ejemplo, se utiliza el servicio Client proporcionado por el paquete openai-php/client para interactuar con la API de OpenAI. Se utiliza el método list() del servicio models para obtener la lista de modelos disponibles en OpenAI. El resultado se devuelve en formato JSON utilizando el método json() del controlador.

Paso 10: Lanzar el servidor de forma local:

Puedes iniciar el servidor web local de Symfony para probar tus endpoints. Para ello, puedes utilizar el siguiente comando en la terminal:

  • symfony server:start --port=10101

Esto iniciará el servidor en el puerto 10101. Puedes cambiar el puerto si lo deseas. Asegúrate de que tu proyecto Symfony esté configurado correctamente y que puedas acceder a los endpoints en tu navegador o en una herramienta para hacer pruebas de API como Postman.

Paso 11: Crear un endpoint con ejemplo de completions:

Completions es una de las funciones principales de la API de ChatGPT. Permite a los usuarios obtener un texto que continúa de forma coherente el texto que se ha indicado en la entrada de texto inicial o "prompt".

A continuación, puedes crear un nuevo endpoint en tu controlador DemoController para realizar completions con la API de OpenAI. Aquí tienes un ejemplo de cómo hacerlo:

#[Route('/completion', name: 'app_completion', methods: ["POST"])]  public function completion(Client $openaiClient, Request $request): JsonResponse  {      $content = json_decode($request->getContent(), false);      $completion = $content->completion;        $result = $openaiClient->completions()->create(          [             'model' => 'text-davinci-003',             'prompt' => $completion,          ]      );        return $this->json(          [              'question' => $completion,              'response' => $result['choices'][0]['text'],          ]      );  }
/completion - DemoController.php

En este ejemplo, se utiliza el servicio Client para interactuar con la API de OpenAI. Se obtiene el contenido del cuerpo de la solicitud HTTP utilizando $request->getContent(), se decodifica el contenido JSON utilizando json_decode(), y se obtiene el texto de completions del campo completion del contenido decodificado.

Luego, se utiliza el método create() del servicio completions para crear una solicitud de completions a OpenAI. Se especifica el modelo a utilizar, en este caso text-davinci-003, y se pasa el texto de completions como el prompt de la solicitud. El resultado de la solicitud se devuelve en formato JSON utilizando el método json() del controlador.

Llamada a /completion desde Postman

Paso 12: Crear un endpoint con la función de Chat:

En el controlador del endpoint /chat, puedes ajustar los parámetros de la conversación según tus necesidades. Por ejemplo, puedes definir mensajes de sistema adicionales para dar instrucciones específicas al modelo, o ajustar la temperatura y la cantidad de respuestas generadas para controlar la creatividad del modelo. Puedes consultar la openai-php/client para obtener más información sobre los parámetros disponibles y cómo usarlos.

#[Route('/chat', name: 'app_chat', methods: ["POST"])]  public function chat(Client $openaiClient, Request $request): JsonResponse  {      $content = json_decode($request->getContent(), false);      $question = $content->question;         $response = $openaiClient->chat()->create(          [              'model' => 'gpt-3.5-turbo',              'messages' => [                  [                      'role' => 'user',                      'content' => $question                  ],              ],          ]      );        return $this->json(          [             'question' => $question,             'response' => $response['choices'][0]['message']["content"],          ]      );  }
/chat - DemoController.php

Paso 13: Una vez que hayas implementado el endpoint de chat, puedes probarlo utilizando herramientas como Postman o cURL para enviar peticiones POST con mensajes de prueba y obtener respuestas del modelo de lenguaje en función de la conversación que hayas definido en los mensajes. Asegúrate de ajustar los mensajes y parámetros de conversación según tus necesidades y revisar la documentación de OpenAI para obtener más detalles sobre cómo utilizar el modelo de lenguaje ChatGPT.

Llamada a /chat desde Postman

Conclusiones

Esta pequeña guía sirve como un primer contacto para hacer uso de la API de ChatGPT desde Symfony. A partir de aquí puedes comenzar a analizar cómo puedes hacer uso de ChatGPT en tus proyectos.

Recuerda seguir las mejores prácticas de seguridad y manejo de datos al utilizar modelos de lenguaje en producción. Esto incluye proteger tus claves de API de OpenAI, manejar adecuadamente los datos de entrada y salida del modelo, y cumplir con las regulaciones y políticas de privacidad aplicables. Asegúrate de realizar pruebas exhaustivas y tener en cuenta las implicaciones éticas y legales al utilizar inteligencia artificial en tu aplicación.

¡Y eso es todo! Ahora tienes varios endpoints funcionales en Symfony que utiliza el cliente de OpenAI para interactuar con el modelo de lenguaje ChatGPT. Puedes ajustar los parámetros y mensajes de entrada según tus necesidades y utilizar esta funcionalidad en tu aplicación web para obtener respuestas generadas por inteligencia artificial en tiempo real. ¡Esperamos que esta guía te sea útil para usar ChatGPT con openai-php/client y openai-php/symfony!