Cuando hablamos de integrar FastAPI con modelos de Machine Learning (ML) y APIs como Cohere, estamos ante la oportunidad de crear aplicaciones web potentes que aprovechan la inteligencia artificial para ofrecer servicios innovadores, como diagnósticos médicos o asistentes conversacionales. Este tipo de integración no solo mejora la experiencia del usuario, sino que también permite crear aplicaciones que responden de manera inteligente a consultas complejas, adaptándose al contexto de la conversación o a la información proporcionada.
Uno de los ejemplos más comunes de integración es la creación de un sistema de diagnóstico médico basado en IA. Para lograrlo, primero debemos configurar un endpoint que reciba los síntomas como parámetros y devuelva un diagnóstico utilizando un modelo de Machine Learning. Este tipo de endpoints se pueden implementar fácilmente utilizando FastAPI, que es conocido por su rapidez y eficiencia en la creación de APIs.
En el código proporcionado, se muestra cómo configurar un endpoint GET /diagnosis en FastAPI que recibe los síntomas de un paciente como parámetros. Los síntomas se manejan como objetos dinámicos generados con la ayuda de la biblioteca Pydantic. Este enfoque permite que el número de parámetros sea flexible, ya que puede ser modificado fácilmente dependiendo de la cantidad de síntomas que queramos incluir en la consulta. En este caso, se restringe el modelo para aceptar solo los primeros diez síntomas de una lista predefinida.
El código de la integración con FastAPI comienza con la creación de un modelo de síntomas mediante la función create_model de Pydantic. Esto se hace utilizando un diccionario donde cada clave corresponde a un síntoma, y el valor asociado es un booleano que indica si el síntoma está presente o no. Luego, se crea el endpoint /diagnosis que recibe estos parámetros, los convierte en un arreglo y los pasa al modelo de ML para obtener el diagnóstico. El modelo de ML, que es un modelo de predicción previamente entrenado, devuelve un conjunto de posibles enfermedades, que se devuelven como una respuesta estructurada.
Este tipo de integración es útil para cualquier aplicación que necesite una interfaz rápida y eficiente para hacer predicciones basadas en un conjunto de datos. Al integrar FastAPI con modelos de ML, como en el ejemplo anterior, podemos crear aplicaciones interactivas que permitan a los usuarios ingresar datos y recibir respuestas precisas en tiempo real.
Además de la integración de modelos ML en FastAPI, existe la posibilidad de utilizar otras APIs poderosas como Cohere para crear aplicaciones más sofisticadas. Cohere ofrece modelos de lenguaje avanzados, capaces de comprender y generar texto de forma similar a como lo haría un ser humano. Esta API es particularmente útil para crear chatbots o asistentes virtuales que responden a consultas de manera fluida y natural.
En el caso de Cohere, la integración con FastAPI permite crear un chatbot especializado, como un asistente culinario que sugiere recetas italianas. Para ello, se utiliza un modelo de Cohere entrenado en comprensión y generación de texto. La configuración del chatbot comienza con la creación de un mensaje del sistema que define el comportamiento del asistente, especificando que debe actuar como un chef experto en la cocina italiana. Luego, mediante el uso de la API de Cohere, se envía la consulta del usuario al modelo, que responde con sugerencias y consejos culinarios.
El proceso de integración con Cohere es sencillo. Después de obtener una clave API desde el dashboard de Cohere, es necesario cargarla en el entorno de la aplicación y configurarla utilizando una librería como python-dotenv. Esto permite acceder a las variables de entorno de manera segura. Una vez configurado el cliente de Cohere, podemos enviar consultas al modelo, definir el comportamiento del chatbot y gestionar la conversación en curso. Este tipo de funcionalidad es ideal para aplicaciones que requieren interacción en lenguaje natural, como asistentes virtuales o sistemas de recomendación.
Por último, una parte fundamental de la integración de FastAPI con Cohere y otros modelos de ML es garantizar la correcta gestión de los datos. Es esencial asegurarse de que las claves API no sean expuestas en el código fuente, especialmente si se utiliza un sistema de control de versiones como Git. Además, se deben instalar y configurar correctamente todas las dependencias necesarias para que la integración sea exitosa. Las bibliotecas principales que se requieren incluyen fastapi, uvicorn, cohere, y python-dotenv, que son fundamentales para la correcta ejecución de la aplicación.
El entendimiento y la capacidad para gestionar estos aspectos es crucial para poder desarrollar aplicaciones basadas en IA que sean escalables y seguras. La correcta configuración del entorno de desarrollo, así como la integración efectiva con modelos y APIs, permitirá crear aplicaciones poderosas que no solo responden a las necesidades del usuario, sino que también se adaptan a su contexto de manera inteligente.
¿Cómo desarrollar middleware para modificar respuestas y manejar CORS en FastAPI?
El desarrollo de middleware para modificar las respuestas HTTP es una de las herramientas más útiles al trabajar con aplicaciones web. En el contexto de FastAPI, podemos implementar middleware personalizado que permita modificar los encabezados de las respuestas antes de que se envíen al cliente. Esto es especialmente útil cuando necesitamos agregar información adicional, como encabezados personalizados, o realizar ajustes de seguridad o personalización a nivel de respuesta.
Para comenzar, es necesario crear la clase ExtraHeadersResponseMiddleware, que manejará la adición de encabezados personalizados a la respuesta. Esta clase debe recibir dos parámetros: el objeto app de FastAPI (o cualquier aplicación ASGI) y una lista de encabezados en forma de tuplas. La estructura básica de esta clase podría verse así:
Dentro de esta clase, el método __call__ es el encargado de interceptar la respuesta y agregar los encabezados antes de enviarla al cliente. Además, debemos asegurarnos de que la lógica de este middleware solo se aplique a solicitudes HTTP, ya que las conexiones WebSocket o las solicitudes de otro tipo no deben ser procesadas de la misma manera. El código de esta parte sería el siguiente:
Una vez que el middleware haya sido definido, la siguiente etapa es modificar el objeto send, que se encarga de enviar el mensaje al cliente. Esto se hace mediante la creación de una función send_with_extra_headers, que será una versión modificada del método send original, añadiendo los nuevos encabezados antes de pasar el mensaje al siguiente middleware o al cliente:
El último paso consiste en agregar el middleware a la instancia de FastAPI. Esto se logra mediante el método add_middleware, pasando el middleware recién creado junto con los encabezados a agregar a las respuestas. Un ejemplo de cómo hacer esto sería:
Al probar esta implementación, si ejecutamos el servidor y consultamos los encabezados de la respuesta, deberíamos ver los nuevos encabezados añadidos a los predeterminados, como "new-header" y "another-header". Así, hemos creado un middleware que permite modificar las respuestas de nuestra API.
Manejo de CORS con Middleware
El manejo adecuado de CORS (Cross-Origin Resource Sharing) es un aspecto crucial cuando se desarrollan APIs, especialmente si estas están destinadas al uso público. CORS es una política de seguridad implementada por los navegadores web para evitar que sitios maliciosos hagan solicitudes no autorizadas a APIs que están hospedadas en diferentes orígenes.
Para manejar CORS en FastAPI, podemos utilizar el middleware CORSMiddleware proporcionado por Starlette. Este middleware permite especificar qué orígenes están autorizados a hacer solicitudes a la API, qué métodos HTTP son aceptados y qué encabezados pueden ser enviados con las solicitudes. La configuración básica para permitir solicitudes CORS de cualquier origen podría ser la siguiente:
Si bien en desarrollo es común permitir todos los orígenes y métodos, en producción es esencial configurar estos parámetros con más rigor para asegurar que solo los orígenes de confianza puedan acceder a la API.
Además de configurar el middleware de CORS, podemos realizar pruebas prácticas usando una página HTML simple que haga solicitudes a nuestra API. Al abrir la página en un navegador y enviar una solicitud, se puede observar cómo, si CORS no está configurado correctamente, el navegador bloquea la solicitud con un mensaje de error indicando que la política de CORS no permite el acceso desde el origen indicado.
Es crucial comprender que, al permitir CORS, se deben evaluar cuidadosamente los orígenes y los métodos permitidos, ya que una configuración demasiado permisiva podría abrir la puerta a ataques de tipo cross-site scripting (XSS) u otros riesgos de seguridad. Es recomendable que en ambientes de producción se limite el acceso a dominios específicos y se ajusten los parámetros de CORS en consecuencia.
Restricción de solicitudes entrantes desde dominios específicos
En términos de seguridad, restringir las solicitudes a ciertos orígenes o hosts es una práctica importante para proteger nuestras aplicaciones contra ataques de DNS rebinding y otras amenazas. FastAPI ofrece una solución en forma de TrustedHostMiddleware, que nos permite especificar qué hosts están permitidos para interactuar con la API. Cualquier solicitud proveniente de un host no autorizado será rechazada.
La implementación de este middleware en FastAPI es sencilla. Al agregar el TrustedHostMiddleware a nuestra aplicación, podemos definir una lista de hosts confiables desde los cuales se aceptarán solicitudes. Si una solicitud proviene de un origen no autorizado, FastAPI la rechazará con un error 400. A continuación se muestra cómo se puede agregar este middleware:
En este ejemplo, solo las solicitudes provenientes de localhost o example.com serán aceptadas. Las solicitudes de otros dominios serán rechazadas, lo que refuerza la seguridad de la aplicación al evitar accesos no autorizados desde dominios desconocidos.
Es importante tener en cuenta que la restricción de solicitudes debe implementarse de forma cuidadosa, especialmente en aplicaciones de producción, para no bloquear tráfico legítimo. La configuración de hosts debe actualizarse cada vez que se agregue un nuevo dominio autorizado o se cambie la infraestructura de la aplicación.
¿Cómo se diseñan los elementos estructurales de acero en relación con la estabilidad y resistencia de vigas?
¿Qué revela la identidad profesional de los agregadores en el periodismo digital?
¿Qué son las magnetars y cómo afectan al universo?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский