+
Skip to content

elimorals/Agente_AI_JW

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chatbot RAG Multi-Colección con Gemini y ChromaDB

Este proyecto implementa un chatbot avanzado utilizando la técnica de Retrieval Augmented Generation (RAG). Permite realizar preguntas en lenguaje natural sobre un corpus de documentos distribuidos en múltiples colecciones de ChromaDB, obteniendo respuestas generadas por el modelo Gemini de Google AI, fundamentadas en la información recuperada.

Características Principales

  • Retrieval Augmented Generation (RAG): Combina la potencia de los modelos de lenguaje grandes (LLMs) con la recuperación de información específica de bases de datos vectoriales.
  • Multi-Colección: Capaz de consultar simultáneamente múltiples colecciones de documentos almacenadas en ChromaDB. Incluye una configuración especial para una colección "biblia" en una instancia/directorio de ChromaDB separada.
  • Retriever Paralelo Personalizado: Utiliza un ParallelEnsembleRetriever para ejecutar búsquedas en las diferentes colecciones de ChromaDB de forma concurrente, optimizando el tiempo de recuperación.
  • Modelo LLM Gemini: Integra el modelo gemini-2.5-flash-lite-preview-06-17 (configurable) de Google AI para la generación de respuestas.
  • Embeddings Locales: Emplea jinaai/jina-embeddings-v2-base-es (configurable) para generar embeddings de las consultas, ejecutándose localmente (CPU/GPU).
  • Interfaz de Usuario con Gradio: Proporciona una interfaz web interactiva y amigable construida con Gradio para facilitar la interacción con el chatbot.
  • Logging Detallado: Registra interacciones del chat, llamadas al LLM (con prompts, respuestas, tokens, duración, documentos recuperados) y feedback del usuario en una base de datos SQLite (rag_monitoring.db) para monitoreo y análisis.
  • Mecanismo de Feedback: Permite a los usuarios valorar las respuestas (útil/no útil) y dejar comentarios, que se almacenan para futuras mejoras.
  • Configurable: Parámetros clave como modelos, rutas de ChromaDB, y comportamiento de búsqueda son fácilmente ajustables a través de config_ui.py.

Arquitectura del Pipeline

  1. Entrada del Usuario: El usuario introduce una pregunta a través de la interfaz de Gradio.
  2. Generación de Embedding de Consulta: La pregunta del usuario se transforma en un vector (embedding) utilizando el modelo de embeddings local (jinaai/jina-embeddings-v2-base-es).
  3. Recuperación Paralela:
    • El ParallelEnsembleRetriever (definido en custom_retriever.py) toma el embedding de la consulta.
    • Lanza búsquedas de similitud en paralelo a través de todas las colecciones de ChromaDB configuradas en config_ui.py.
    • Cada sub-retriever (uno por colección) devuelve los k documentos más relevantes (SEARCH_K_PER_COLLECTION).
  4. Agregación de Contexto: Los documentos recuperados de todas las colecciones se combinan para formar el contexto.
  5. Formateo del Prompt: La pregunta original y el contexto recuperado se insertan en una plantilla de prompt (definida en prompt_template.txt).
  6. Generación de Respuesta por LLM: El prompt formateado se envía al modelo Gemini (ChatGoogleGenerativeAI).
  7. Respuesta al Usuario: La respuesta generada por Gemini, junto con las fuentes de los documentos recuperados, se muestra en la interfaz de Gradio.
  8. Logging:
    • La interacción del usuario y la respuesta del asistente se registran en la tabla chat_interactions.
    • Los detalles de la llamada al LLM (incluyendo el prompt, la respuesta cruda, los documentos recuperados, tokens, duración) se registran en llm_calls mediante SQLiteLoggingCallbackHandler.
    • Cualquier feedback del usuario (like/dislike, comentarios) se registra en user_feedback.

Tecnologías Utilizadas

  • Python 3.9+
  • LangChain: Framework para construir aplicaciones con LLMs.
    • langchain_community.vectorstores.Chroma
    • langchain.chains.RetrievalQA
    • langchain_google_genai.ChatGoogleGenerativeAI
    • langchain_huggingface.HuggingFaceEmbeddings
    • langchain_core.callbacks
  • Google Generative AI SDK: Para interactuar con los modelos Gemini.
  • ChromaDB: Base de datos vectorial para almacenar y buscar embeddings de documentos.
  • Hugging Face Transformers & Sentence Transformers: Para el modelo de embeddings local.
  • Gradio: Para crear la interfaz de usuario web.
  • SQLite3: Para el logging de datos.
  • Dotenv: Para la gestión de variables de entorno (API Keys).
  • Torch: Para inferencia de embeddings (con soporte CUDA opcional).

Prerrequisitos

  • Python 3.9 o superior.
  • pip para instalar paquetes.
  • Git para clonar el repositorio.
  • Una clave API de Google AI válida (para Gemini).
  • (Opcional pero recomendado) Una GPU NVIDIA con CUDA configurado si deseas acelerar la generación de embeddings.

Instalación y Configuración

  1. Clonar el Repositorio:

    git clone <[URL_DEL_REPOSITORIO](https://github.com/elimorals/Agente_AI_JW.git)>
    cd <Agente_AI_JW>
  2. Crear un Entorno Virtual (Recomendado):

    python -m venv venv
    source venv/bin/activate  # En Linux/macOS
    # venv\Scripts\activate    # En Windows
  3. Instalar Dependencias: Crea un archivo requirements.txt con las siguientes dependencias (o las que detectes necesarias de los imports):

    langchain
    langchain-community
    langchain-google-genai
    langchain-huggingface
    chromadb
    sentence-transformers
    torch --index-url https://download.pytorch.org/whl/cu118 # o cpuonly si no tienes GPU
    gradio
    python-dotenv
    # Añade otras si son necesarias, ej: transformers

    Luego instala:

    pip install -r requirements.txt

    Nota sobre Torch: Ajusta el comando de instalación de torch según tu sistema (CPU, o versión específica de CUDA). Visita pytorch.org para obtener el comando correcto.

  4. Configurar ChromaDB:

    • Este pipeline espera que las bases de datos ChromaDB ya existan y estén pobladas con los embeddings de tus documentos.
    • Asegúrate de que los directorios especificados en config_ui.py existan y contengan las bases de datos ChromaDB:
      • CHROMA_PERSIST_DIR = "chroma_db_por_documento" (para colecciones generales)
      • BIBLIA_CHROMA_PERSIST_DIR = "biblia" (para la colección 'biblia')
    • Las colecciones listadas en TARGET_COLLECTION_NAMES deben existir dentro de estos directorios.
  5. Configurar la Clave API de Google:

    • Crea un archivo .env en la raíz del proyecto.
    • Añade tu clave API de Google:
      GOOGLE_API_KEY="TU_API_KEY_DE_GOOGLE_AI"
      
    • El script UI.py cargará esta variable de entorno.
  6. Plantilla de Prompt:

    • Asegúrate de que el archivo prompt_template.txt exista en la raíz del proyecto y contenga la plantilla de prompt deseada. Debe incluir las variables {context} y {question}. Ejemplo:
      Eres un asistente útil que responde preguntas basándose únicamente en el siguiente contexto. Si la respuesta no se encuentra en el contexto, di "No tengo suficiente información para responder a esa pregunta según los documentos proporcionados.". No inventes información. Cita las fuentes si es posible.
      
      Contexto:
      {context}
      
      Pregunta: {question}
      
      Respuesta:

Ejecución de la Aplicación

Una vez completada la instalación y configuración:

python UI.py

About

Agente de AI alimentado por un RAG con las publicaciones de JW.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载