top of page

Construyendo un Asistente Conversacional con Streamlit y OpenAI: Una Introducción a Agentes de IA

  • Foto del escritor: Claudio Magagnotti
    Claudio Magagnotti
  • 25 may
  • 5 Min. de lectura

En el mundo de la ciberseguridad, donde la rapidez y precisión son clave, los asistentes conversacionales impulsados por IA están transformando cómo interactuamos con sistemas complejos. Como experto en IA y ciberseguridad, quiero compartir una solución minimalista pero poderosa: un asistente virtual con una interfaz gráfica en Streamlit y un backend basado en OpenAI, diseñado para soporte en entornos de seguridad. En esta entrada, te mostraré cómo construir un chat conversacional con agentes de IA, explicaré los conceptos detrás del código, y desglosaré cómo integrarlo con OpenAI, ya sea vía API directa, Azure OpenAI, o Azure API Management. ¡Empecemos!


¿Por qué IA y ciberseguridad?


La IA conversacional, como la ofrecida por OpenAI, permite automatizar tareas repetitivas, interpretar consultas en lenguaje natural, y escalar soluciones de soporte. En ciberseguridad, esto significa asistir a analistas de SOC (Security Operations Center) con respuestas rápidas sobre configuraciones, amenazas, o infraestructura, como en este caso, consultas sobre Cloudflare. Este proyecto es una prueba de concepto (POC) que combina:


  • Agentes de IA: Entidades autónomas que interpretan y ejecutan tareas específicas.

  • Interfaz gráfica con Python: Una UI amigable con Streamlit para interactuar con el usuario.

  • OpenAI como backend: Procesamiento de lenguaje natural con gpt-4o para respuestas inteligentes.


Conceptos clave

Antes de sumergirnos en el código, dejame explicarte los pilares técnicos:


  1. Inteligencia Artificial y Agentes de IA

    La IA conversacional usa modelos de lenguaje como gpt-4o para entender y generar texto. Un agente de IA es una capa superior: no solo responde, sino que decide qué hacer con una consulta, ya sea ejecutar una herramienta, transferir a otro agente (handoff), o responder directamente. En este proyecto, usamos el framework openai-agents, que estructura agentes con roles específicos (por ejemplo, un agente de soporte general y un especialista en Cloudflare). Los agentes son ideales para ciberseguridad, donde las consultas pueden requerir respuestas genéricas o especializadas.

  2. Interfaz con Python y Streamlit

    Streamlit es una librería de Python que permite crear aplicaciones web interactivas con pocas líneas de código. En este caso, usamos Streamlit para una UI de chat que captura prompts del usuario, muestra el historial, y presenta respuestas en Markdown. La integración asincrónica con Python (asyncio) asegura que las consultas a OpenAI no bloqueen la UI, critical para entornos de soporte en tiempo real.

  3. Modos de OpenAI

    OpenAI ofrece varias formas de integrar sus modelos:

    • API directa: Usá la API de OpenAI con una clave (OPENAI_API_KEY). Es simple, pero menos personalizable para entornos empresariales.

    • Cuenta en Azure (Azure OpenAI): Hospedá modelos de OpenAI en Azure, con autenticación vía Azure AD y control de cumplimiento (por ejemplo, GDPR). Requiere AZURE_OPENAI_API_KEY, ENDPOINT, y API_VERSION.

    • Azure API Management (APIM): Agrega una capa de gestión sobre Azure OpenAI, con claves de suscripción (AZURE_APIM_OPENAI_SUBSCRIPTION_KEY) y endpoints personalizados. Ideal para gobernanza y monitoreo en empresas. Este código soporta los tres modos, mostrando flexibilidad para entornos de ciberseguridad.

  4. Ciberseguridad en el diseño

    En ciberseguridad, la seguridad del código es clave. Usamos python-dotenv para almacenar claves en un archivo .env, evitando exponerlas en el código. La autenticación con Azure AD (via DefaultAzureCredential en otros contextos) y el uso de tracing (ConsoleSpanExporter) aseguran monitoreo y auditoría, esenciales para entornos SOC.


Requisitos

  • Python 3.8+.

  • Una API key de OpenAI o Azure OpenAI.

  • Dependencias: streamlit, openai, python-dotenv, agents (framework openai-agents).

  • Un archivo .env con las claves necesarias.


Configuración

  1. Crea un entorno virtual e instalá las dependencias:

python3 -m venv venv
source venv/bin/activate  # En Windows: venv\Scripts\activate
pip install streamlit openai python-dotenv openai-agents

Nota: El framework openai-agents no está en PyPI, así que asumimos que está disponible en tu entorno o como paquete propietario. Si usás una versión estándar, podés reemplazar agents con langchain o similar.

  1. Configurá el archivo .env: Crea un archivo .env en la raíz del proyecto con las siguientes claves (ajustá según tu modo de OpenAI):

OPENAI_API_KEY=tu-api-key-aqui
AZURE_OPENAI_API_KEY=tu-azure-api-key
AZURE_OPENAI_API_VERSION=2024-08-01-preview
AZURE_OPENAI_ENDPOINT=https://<tu-aoai>.openai.azure.com
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_APIM_OPENAI_SUBSCRIPTION_KEY=tu-apim-key
AZURE_APIM_OPENAI_API_VERSION=2024-08-01-preview
AZURE_APIM_OPENAI_ENDPOINT=https://<tu-apim>.azure-api.net/<suffix>/api/

Para esta entrada, usaremos la API directa de OpenAI para simplicidad.

  1. Crea los archivos: Guardá el código en agent.py, ui.py, y .env.


Código

Aquí está el código mínimo para un asistente conversacional con agentes de IA, usando Streamlit y OpenAI.


Lo explico paso a paso

agent.py: Este archivo define los agentes de IA y la lógica para procesar consultas.

Explicación:

  • Imports y configuración: Importamos librerías esenciales (openai, agents, dotenv) y configuramos el logging para depuración. load_dotenv() carga las claves del .env.

  • Cliente OpenAI: Creamos un cliente asincrónico (AsyncOpenAI) con la clave OPENAI_API_KEY. También configuramos tracing con ConsoleSpanExporter para monitorear interacciones.

  • Agentes: Definimos dos agentes:

    • customer_service_agent: Soporte general para analistas de soporte, con un handoff al agente de Cloudflare si se menciona "Cloudflare".

    • cloudflare_agent: Especialista en Cloudflare. Cada agente usa gpt-4o y el framework openai-agents para estructurar instrucciones y handoffs.

  • Handoff: La función agent_handoff_message_filter limpia mensajes antes de transferirlos entre agentes, usando handoff_filters.remove_all_tools.

  • Procesamiento: get_response es una función asincrónica que toma una consulta, el historial, y un agente, ejecuta el modelo con Runner.run, y devuelve la respuesta y el historial actualizado.


ui.py: Este archivo crea la interfaz gráfica con Streamlit.

Explicación:

  • Streamlit Setup: st.sidebar crea una barra lateral con el título y el ID de la conversación. st.session_state inicializa variables como chat_id, history, agent, y messages.

  • Historial de mensajes: Un bucle muestra los mensajes del historial usando st.chat_message y st.markdown.

  • Manejo de entrada: handle_user_input es una función asincrónica que:

    • Agrega el mensaje del usuario al historial.

    • Llama a get_response para procesar la consulta.

    • Actualiza el estado con el nuevo agente, historial, y respuesta.

    • Muestra la respuesta del asistente.

  • Ejecución asincrónica: run_async permite correr funciones asincrónicas (handle_user_input) en Streamlit, que no soporta asyncio nativamente.

  • Entrada del usuario: st.chat_input captura el prompt del usuario y ejecuta handle_user_input.


.env: Almacena las claves de configuración de forma segura.

Ejemplo de .env:

OPENAI_API_KEY=tu-api-key-aqui

Explicación:

  • Contiene claves para OpenAI, Azure OpenAI, o Azure APIM. Para esta entrada, usamos solo OPENAI_API_KEY por simplicidad.

  • python-dotenv carga estas claves en agent.py, siguiendo prácticas de ciberseguridad para evitar exponerlas.


Cómo ejecutar

  1. Guardá agent.py, ui.py, y .env en un directorio.

  2. Instalá las dependencias:

pip install streamlit openai openai-agents python-dotenv
  1. Configurá tu .env con una API key válida.

  2. Corre la app:

streamlit run ui.py
  1. Abrí http://localhost:8501 en tu navegador.


Conclusión

Este asistente es una prueba de cómo la IA conversacional puede potenciar al equipo asistiendo a los analistas con respuestas rápidas y precisas. Como experto en IA y ciberseguridad, diseñé este POC para ser simple pero escalable, con una arquitectura modular que permite agregar más agentes o herramientas (por ejemplo, para gestionar recursos de Azure). La integración de Streamlit y OpenAI muestra cómo Python puede unir IA y UX en minutos.

¿Querés llevarlo al siguiente nivel? Explorá Azure API Management para gobernanza empresarial o agregá herramientas específicas de ciberseguridad. Visitá mi repositorio en GitHub para el código completo, y dejá tus comentarios para futuras entradas.


 
 
 

Comentarios

Obtuvo 0 de 5 estrellas.
Aún no hay calificaciones

Agrega una calificación
bottom of page