Plataforma web para la generación automática de contenido para redes sociales y divulgación científica utilizando modelos de lenguaje grande (LLMs) y técnicas de Retrieval-Augmented Generation (RAG).
- Plataformas soportadas: LinkedIn, Twitter, Instagram, Blog
- Personalización avanzada: Audiencias (juvenil, general, técnica) e idiomas (español, inglés, francés)
- Modelos LLM: Integración con Groq. Se han actualizado los modelos para usar las últimas versiones de producción, reemplazando los obsoletos
llama3-8b-8192ygemma2-9b-itporllama-3.1-8b-instantyllama-3.3-70b-versatile. - Generación de imágenes: Integración con Stability AI para contenido visual
- RAG para redes sociales: Contenido enriquecido con fuentes científicas para mayor precisión
- Fuentes académicas: Búsqueda automática en ArXiv
- Procesamiento inteligente: Embeddings con HuggingFace y búsqueda semántica con ChromaDB Cloud
- Doble flujo RAG: Sistema científico tradicional y RAG social para contenido adaptado a redes
- Contenido riguroso: Generación basada en documentos científicos reales
- Metadatos detallados: Información completa de fuentes y relevancia
- Almacenamiento persistente: ChromaDB Cloud para gestión escalable de vectores
- Autenticación segura: JWT con bcrypt para hashing de contraseñas
- API RESTful: Endpoints organizados y documentados
- Base de datos: Supabase con esquemas optimizados
- Almacenamiento: Cloudinary para gestión de imágenes como CDN(Content Delivery Network)
- Monitoreo: Integración con LangSmith para logs y trazabilidad
-
Integración de Hugging Face para Generación de Imágenes:
- Se ha reemplazado la API de Fal AI por la Inference API de Hugging Face para la generación de imágenes.
- Utiliza el modelo
black-forest-labs/FLUX.1-devpara imágenes de alta calidad. - Implementa post-procesado de imágenes (redimensionamiento automático, persistencia dual de original y redimensionada) para una visualización responsive y optimizada en el frontend.
-
Actualización de Modelos de Lenguaje (LLMs) de Groq:
- Los modelos obsoletos
llama3-8b-8192ygemma2-9b-ithan sido reemplazados por las versiones de producción recomendadas:llama-3.1-8b-instantyllama-3.3-70b-versatile.
- Los modelos obsoletos
-
Centralización de la Configuración de Modelos:
- Se ha refactorizado el código para centralizar los nombres de los modelos de texto y de imagen en
server/config/settings.py. - Esto mejora la mantenibilidad y reduce la probabilidad de errores al actualizar modelos en el futuro.
- Se ha refactorizado el código para centralizar los nombres de los modelos de texto y de imagen en
- FastAPI: Framework web moderno y rápido
- LangChain: Orquestación de LLMs y RAG
- Groq: Inferencia de modelos de lenguaje
- Supabase: Base de datos PostgreSQL como servicio
- Cloudinary: Almacenamiento y optimización de imágenes
- ChromaDB Cloud: Vector database persistente para búsqueda semántica
- HuggingFace: Modelos de embeddings
- Docker: Containerización para despliegue simplificado
- HTML5/CSS3/JavaScript: Interfaz web responsiva
- Jinja2: Motor de plantillas
- FastAPI StaticFiles: Servido de archivos estáticos
- ArXiv API: Acceso a documentos científicos
- Stability AI: Generación de imágenes
- ChromaDB Cloud: Almacenamiento persistente de vectores
- LangSmith: Monitoreo y logging
PROYECTO_LLMS_05/
├── client/ # Frontend (HTML, CSS, JS)
│ ├── static/
│ │ ├── css/
│ │ ├── generated_images/ # Imágenes generadas por la IA (ejemplos)
│ │ │ ├── image_..._orig.png
│ │ │ └── image_..._w768.png
│ │ ├── img/ # Logos y recursos gráficos
│ │ └── js/
│ └── templates/ # Plantillas HTML
│
├── server/ # Backend
│ ├── chroma_db/ # Configuración de conexión a bbdd vectorial
│ ├── config/settings.py # Configuración centralizada (API Keys, Modelos)
│ ├── generators/ # Generadores de contenido
│ │ ├── image.py # Lógica para generar imágenes (Hugging Face, Stability AI)
│ │ └── text.py # Lógica para generar texto (Groq)
│ ├── models/ # Modelos Pydantic para validación de datos
│ ├── prompts/ # Plantillas de prompts para los LLMs
│ │ ├── prompts.py
│ │ └── prompts_rag.py
│ ├── RAG/ # Lógica de Retrieval-Augmented Generation
│ │ ├── initialize_db.py # Script para inicializar la BBDD de vectores
│ │ ├── rag_chain.py # Cadena RAG principal
│ │ └── vector_db.py # Abstracción para la BBDD de vectores
│ ├── routes/ # Endpoints de la API (FastAPI)
│ ├── services/ # Lógica de negocio y orquestación
│ ├── utils/ # Funciones de utilidad
│ │ ├── image_processor.py # Utilidades para post-procesado de imágenes
│ │ └── translate.py # Utilidades de traducción
│ └── main.py # Punto de entrada de la aplicación
│
├── .env.example
├── requirements.txt
└── README.md
- Docker y Docker Compose (recomendado) o Python 3.8+
- Cuentas en Supabase, Groq, Stability AI, Cloudinary y ChromaDB Cloud
git clone <repository-url>
cd PROYECTO_LLMS_05Copiar .env.example a .env y completar:
# Supabase Configuration
SUPABASE_URL=your_supabase_url_here
SUPABASE_KEY=your_supabase_anon_key_here
# JWT Configuration
SECRET_KEY=your_super_secret_jwt_key_change_this
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# Groq API
GROQ_API_KEY=your_groq_api_key_here
#LANGSMITH
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
LANGSMITH_API_KEY=your_langsmith_api_key_here
LANGSMITH_PROJECT="your_langsmith_project_name_here"
#Image
STABILITY_API_KEY=your_stability_api_key_here
# Coudinary
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name_here
CLOUDINARY_API_KEY=your_cloudinary_api_key_here
CLOUDINARY_API_SECRET=your_cloudinary_api_secret_here
# Chroma
CHROMA_API_KEY='your_chroma_api_key_here'
CHROMA_TENANT='your_chroma_tenant_here'
CHROMA_DATABASE='your_chroma_database_here'docker-compose up --buildLa aplicación estará disponible en http://localhost:8000
git clone <repository-url>
cd PROYECTO_LLMS_05pip install -r requirements.txt(Usar la misma configuración que en la Opción 1)
uvicorn server.main:app --reloadCrear las siguientes tablas:
-- Tabla de usuarios
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR UNIQUE NOT NULL,
password_hash VARCHAR NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Tabla de posts de redes sociales
CREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
platform VARCHAR NOT NULL,
audience VARCHAR NOT NULL,
language VARCHAR NOT NULL,
model VARCHAR NOT NULL,
text_content TEXT NOT NULL,
image_url VARCHAR,
created_at TIMESTAMP DEFAULT NOW()
);
-- Tabla de posts científicos
CREATE TABLE science_posts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
topic VARCHAR NOT NULL,
audience VARCHAR NOT NULL,
language VARCHAR NOT NULL,
model VARCHAR NOT NULL,
max_docs INTEGER NOT NULL,
text_content TEXT NOT NULL,
sources JSONB NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);# Registro
POST /api/auth/register
{
"email": "usuario@email.com",
"password": "contraseña"
}
# Login
POST /api/auth/login
{
"email": "usuario@email.com",
"password": "contraseña"
}# Contenido para redes sociales
POST /api/content/generate
Authorization: Bearer <token>
{
"platform": "linkedin",
"topic": "inteligencia artificial",
"audience": "técnica",
"language": "es",
"model": "llama-3.1-8b-instant",
"include_image": true,
"image_prompt": "AI technology concept"
}
# Contenido científico
POST /api/science/generate
Authorization: Bearer <token>
{
"topic": "machine learning",
"audience": "general",
"language": "es",
"model": "llama-3.1-8b-instant",
"max_docs": 5
}
# Explicaciones científicas para RRSS
POST /api/explain
Authorization: Bearer <token>
{
"topic": "quantum computing",
"platform": "linkedin",
"audience": "técnica",
"language": "es"
}- Orlando Alcalá
- Andrea Alonso
- Nhoeli Salazar
- Juan Domingo
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crear una rama para tu feature (
git checkout -b feature/nueva-caracteristica) - Commit tus cambios (
git commit -m 'Agregar nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Abrir un Pull Request