- Descripción
- Características Principales
- Estructura del Proyecto
- Requisitos Previos
- Instalación
- Configuración
- Uso
- Herramientas Disponibles
- Sistema de Búsqueda
- Arquitectura del Sistema
- Componentes Principales
- Flujo de Trabajo
- APIs y Servicios Integrados
- Manejo de Errores y Logging
- Optimización y Caché
- Contribución
- Licencia
- Contacto
OmniChat es un laboratorio completo de herramientas de Inteligencia Artificial que integra múltiples capacidades de procesamiento de lenguaje natural, visión por computadora y búsqueda web. Diseñado como una plataforma modular y extensible, OmniChat permite a los usuarios interactuar con diversos modelos de lenguaje y herramientas especializadas a través de una interfaz unificada y amigable.
El proyecto implementa una arquitectura flexible que facilita la integración de nuevos modelos y servicios, con un enfoque en la robustez, la eficiencia y la experiencia de usuario. OmniChat utiliza Streamlit como framework principal para su interfaz, lo que permite una rápida iteración y desarrollo de nuevas funcionalidades.
- Chatbot Básico: Interacción simple con modelos de lenguaje para consultas generales.
- Chatbot con Memoria: Un asistente que recuerda conversaciones previas y proporciona respuestas acordes.
- Chatbot con Acceso a Internet: Capacidad de responder preguntas sobre eventos actuales mediante búsqueda web.
- Chat con Documentos: Permite al chatbot acceder a documentos personalizados, respondiendo preguntas basadas en la información contenida.
- Chat con Base de Datos SQL: Interactúa con bases de datos SQL mediante comandos conversacionales simples.
- Chat con Sitios Web: Permite al chatbot interactuar con contenidos de sitios web.
- Chat Multimodal: Analiza imágenes y responde preguntas sobre ellas usando modelos multimodales gratuitos.
- OCR con Mistral AI: Extrae texto de imágenes y documentos PDF utilizando la API de OCR de Mistral AI.
- Múltiples Proveedores de Búsqueda:
- DuckDuckGo API como método principal
- DuckDuckGo HTML como primer respaldo
- Google PSE API como segundo respaldo
- Exa API como tercer respaldo
- Cambio Transparente: Transición automática entre métodos cuando uno falla
- Priorización de Métodos Gratuitos: Uso de APIs pagas solo cuando es necesario
- Manejo Robusto de Errores: Recuperación automática ante fallos de API
- Modelos de OpenAI: Acceso a GPT-4o-mini y otros modelos
- Modelos de OpenRouter: Soporte para modelos multimodales gratuitos
- Mistral AI: Integración para OCR y procesamiento de documentos
- Selección Flexible: Interfaz para elegir entre diferentes modelos disponibles
- OCR Avanzado: Extracción de texto de imágenes y PDFs
- Soporte para Múltiples Formatos: PDF, JPG, PNG
- Preservación de Estructura: Mantiene el formato del texto extraído
- Descarga de Resultados: Exportación en múltiples formatos (TXT, JSON, Markdown)
- Diseño Limpio y Moderno: Interfaz intuitiva basada en Streamlit
- Barra Lateral Informativa: Acceso rápido a configuraciones y recursos
- Visualización de Resultados: Presentación clara de respuestas y datos
- Experiencia Responsiva: Adaptación a diferentes dispositivos y tamaños de pantalla
OmniChat/
│
├── Inicio.py # Punto de entrada principal y página de inicio
├── utils.py # Funciones de utilidad y configuración
├── sidebar_info.py # Información de la barra lateral
├── streaming.py # Manejo de streaming para respuestas de chat
├── search_services.py # Servicios de búsqueda web con respaldo
├── custom_callbacks.py # Callbacks personalizados para LangChain
│
├── pages/ # Páginas de la aplicación
│ ├── 1_💬_Chatbot_Basico.py # Chatbot simple
│ ├── 2_🧠_Chatbot_Memoria.py # Chatbot con memoria de conversación
│ ├── 3_🌐_Chatbot_Acceso_Internet.py # Chatbot con búsqueda web
│ ├── 4_📄_Chat_Documentos.py # Chat con documentos
│ ├── 5_📊_Chat_SQL.py # Chat con bases de datos SQL
│ ├── 6_🔗_Chat_Sitios_Web.py # Chat con sitios web
│ ├── 7_🖼️_Chat_Multimodal.py # Chat con capacidades multimodales
│ └── 8_🔍_OCR_Mistral.py # OCR con Mistral AI
│
├── .streamlit/ # Configuración de Streamlit
│ ├── config.toml # Configuración general de Streamlit
│ └── secrets.toml # Almacenamiento seguro de claves API (no incluido en el repositorio)
│
├── assets/ # Recursos estáticos
│ └── profile.jpg # Imagen de perfil para la barra lateral
│
├── scripts/ # Scripts de utilidad
│ ├── clean_cache.py # Script para limpiar la caché de Python
│ ├── force_restart.py # Script para reiniciar la aplicación
│ └── restart_app.py # Script para reiniciar la aplicación de manera limpia
│
├── .gitignore # Archivos y directorios ignorados por Git
└── requirements.txt # Dependencias de Python
- Python 3.8+
- Streamlit 1.44.0+
- Conexión a Internet (para búsqueda web y APIs externas)
- Claves API para servicios externos (opcional, según las funcionalidades que se deseen utilizar)
-
Clona el repositorio:
git clone https://github.com/bladealex9848/OmniChat.git cd OmniChat -
Crea y activa un entorno virtual:
python -m venv venv source venv/bin/activate # En Windows usa `venv\Scripts\activate` -
Instala las dependencias:
pip install -r requirements.txt -
Configura tus claves API (opcional): Crea un archivo
.streamlit/secrets.tomly añade tus claves API:OPENAI_API_KEY = "tu_clave_openai_aqui" MISTRAL_API_KEY = "tu_clave_mistral_aqui" OPENROUTER_API_KEY = "tu_clave_openrouter_aqui" GOOGLE_PSE_API_KEY = "tu_clave_google_pse_aqui" GOOGLE_PSE_ID = "tu_id_google_pse_aqui" EXA_API_KEY = "tu_clave_exa_aqui" TAVILY_API_KEY = "tu_clave_tavily_aqui" YOU_API_KEY = "tu_clave_you_aqui"
OmniChat está diseñado para funcionar con configuración mínima. Las principales opciones de configuración se encuentran en:
- Archivo
.streamlit/config.toml: Configuración general de la interfaz de Streamlit. - Archivo
.streamlit/secrets.toml: Almacenamiento seguro de claves API. - Interfaz de usuario: Muchas opciones se pueden configurar directamente desde la barra lateral de la aplicación.
Para iniciar la aplicación, ejecuta:
streamlit run Inicio.py
Luego, abre tu navegador y ve a http://localhost:8501.
La interfaz principal te permitirá:
- Navegar entre las diferentes herramientas disponibles a través de la barra lateral.
- Interactuar con los diferentes chatbots y herramientas.
- Configurar opciones específicas para cada herramienta.
- Ver información sobre el desarrollador y recursos útiles.
Un chatbot simple que permite interactuar con modelos de lenguaje para consultas generales. Ideal para preguntas y respuestas básicas sin necesidad de contexto adicional.
Una versión mejorada del chatbot básico que mantiene el contexto de la conversación, permitiendo referencias a mensajes anteriores y una experiencia más natural.
Un chatbot potenciado con capacidad de búsqueda web, ideal para responder preguntas sobre eventos actuales, noticias recientes o información que requiere datos actualizados.
Permite cargar documentos (PDF, TXT) y hacer preguntas sobre su contenido. El sistema analiza los documentos y proporciona respuestas basadas en la información contenida en ellos.
Interfaz conversacional para interactuar con bases de datos SQL. Permite realizar consultas en lenguaje natural que se traducen a SQL y ejecutan contra la base de datos.
Permite analizar y extraer información de sitios web específicos, respondiendo preguntas basadas en el contenido de las páginas web.
Chatbot con capacidad para procesar y analizar imágenes, utilizando modelos multimodales gratuitos de OpenRouter como Llama 4 Maverick/Scout y Qwen 2.5 VL.
Herramienta especializada para extraer texto de imágenes y documentos PDF utilizando la API de OCR de Mistral AI, con preservación de la estructura del texto.
OmniChat implementa un sistema de búsqueda web con respaldo automático y transparente:
- DuckDuckGo API (método principal)
- DuckDuckGo HTML (respaldo gratuito)
- Google PSE API (primera API de respaldo)
- Exa API (segunda API de respaldo)
El sistema cambia automáticamente entre métodos de búsqueda cuando uno falla, sin mostrar errores al usuario. Prioriza los métodos gratuitos y solo utiliza las APIs como respaldo si es necesario.
Si todos los métodos fallan, el sistema proporcionará una respuesta basada en información básica almacenada, indicando que puede no estar completamente actualizada.
OmniChat utiliza una arquitectura modular basada en componentes, donde cada herramienta funciona como un módulo independiente pero integrado en la plataforma principal. La aplicación se construye sobre Streamlit, aprovechando su capacidad para crear interfaces interactivas rápidamente.
- Interfaz de Usuario: Implementada con Streamlit para una experiencia interactiva y responsiva.
- Módulos de Chat: Implementaciones específicas para diferentes tipos de chatbots y herramientas.
- Sistema de Búsqueda: Arquitectura con múltiples proveedores y mecanismos de respaldo.
- Integración de APIs: Conexiones a servicios externos como OpenAI, Mistral y OpenRouter.
- Utilidades Comunes: Funciones compartidas para manejo de sesiones, streaming y configuración.
- Punto de entrada principal de la aplicación.
- Implementa la página de inicio con información general.
- Configura la estructura básica de la interfaz.
- Contiene funciones de utilidad compartidas por múltiples componentes.
- Implementa la configuración de modelos de lenguaje.
- Proporciona decoradores y helpers para la interfaz de usuario.
- Gestiona la información mostrada en la barra lateral.
- Implementa la presentación de información del autor y enlaces útiles.
- Implementa el sistema de búsqueda web con múltiples proveedores.
- Gestiona la lógica de respaldo y recuperación ante fallos.
- Cada archivo implementa una herramienta específica.
- Contienen clases que encapsulan la lógica de cada funcionalidad.
- Utilizan componentes comunes para mantener consistencia.
- El usuario accede a la aplicación a través de la página principal.
- Navega a la herramienta deseada utilizando la barra lateral.
- Interactúa con la herramienta seleccionada (chat, carga de documentos, etc.).
- La aplicación procesa las entradas del usuario y genera respuestas utilizando los modelos y servicios apropiados.
- Los resultados se muestran en la interfaz de manera clara y organizada.
- El usuario puede continuar la interacción o cambiar a otra herramienta según sus necesidades.
OmniChat integra varios servicios externos para proporcionar sus funcionalidades:
- OpenAI: Para modelos de lenguaje como GPT-4o-mini.
- Mistral AI: Para OCR y procesamiento de documentos.
- OpenRouter: Para acceso a modelos multimodales gratuitos.
- Servicios de Búsqueda: DuckDuckGo, Google PSE, Exa, etc.
- LangChain: Framework para integración de componentes de IA.
Cada servicio se configura y utiliza de manera modular, permitiendo añadir nuevos servicios o reemplazar los existentes con facilidad.
OmniChat implementa un sistema robusto de manejo de errores:
- Mensajes de Error Informativos: Guía clara para el usuario cuando ocurren problemas.
- Recuperación Automática: Mecanismos de respaldo para servicios que fallan.
- Validación de Entradas: Prevención de errores mediante validación previa.
- Logging Estructurado: Registro de eventos y errores para diagnóstico.
Para mejorar el rendimiento, OmniChat utiliza varias técnicas de optimización:
- Caché de Sesión: Almacenamiento de resultados frecuentes para reducir llamadas a APIs.
- Inicialización Eficiente: Uso de decoradores como
@st.cache_resourcepara componentes pesados. - Carga Diferida: Inicialización de recursos solo cuando son necesarios.
- Streaming de Respuestas: Presentación progresiva de respuestas largas para mejorar la experiencia de usuario.
Las contribuciones son bienvenidas. Por favor, sigue estos pasos:
- Haz fork del repositorio.
- Crea una nueva rama (
git checkout -b feature/NuevaFuncionalidad). - Realiza tus cambios y haz commit (
git commit -m 'Añadir nueva funcionalidad'). - Push a la rama (
git push origin feature/NuevaFuncionalidad). - Abre un Pull Request.
Este proyecto incluye git hooks para validar el código antes de commit y push. Los hooks realizan las siguientes validaciones:
- Detectan claves API expuestas en el código
- Verifican que no haya archivos grandes (>10MB)
- Verifican que no haya conflictos de merge sin resolver
- Verifican que los archivos Python no tengan errores de sintaxis
- Verifican que requirements.txt y README.md estén actualizados
Para instalar los hooks solo en este repositorio, ejecuta:
./scripts/install-git-hooks.shPara instalar los hooks globalmente en tu sistema (afectará a todos los repositorios Git actuales y futuros), ejecuta:
./scripts/install-global-git-hooks.shEsto instalará los hooks en ~/.git-hooks/ y configurará Git para usar esta ubicación en todos los repositorios. Solo necesitas ejecutar este script una vez en tu equipo.
Este proyecto está licenciado bajo la Licencia MIT - vea el archivo LICENSE para más detalles.
Alexander Oviedo Fadul