Skip to content

alibia-phanuel/boot-ia-cours

Repository files navigation

🤖 RAG Assistant - Chatbot Intelligent avec IA

Une application RAG (Retrieval-Augmented Generation) moderne permettant de poser des questions intelligentes sur vos documents PDF. Construite avec les dernières technologies web et IA.

RAG Assistant Demo

Note : Ce projet est un proof-of-concept focalisé sur l'apprentissage et la compréhension des systèmes RAG. L'authentification n'a pas été implémentée volontairement pour se concentrer sur l'aspect technique du RAG.

✨ Fonctionnalités

  • 📄 Upload de documents PDF - Importez vos documents pour les interroger
  • 💬 Chat intelligent - Posez des questions en langage naturel
  • 🔍 Recherche contextuelle - Réponses basées sur le contenu de vos documents
  • 🎨 Interface moderne - Design épuré et responsive
  • Performance optimale - Réponses rapides grâce à Neon Database
  • 🧠 Embeddings vectoriels - Utilise Google text-embedding-004 (768 dimensions)
  • 🚀 Recherche HNSW - Algorithme optimisé pour la recherche sémantique

🛠️ Stack Technique

Frontend

  • React - Bibliothèque UI
  • Next.js - Framework React avec SSR
  • TypeScript - Typage statique
  • Tailwind CSS - Styling moderne

Backend & IA

  • Vercel AI SDK - Intégration IA simplifiée
  • Google AI - Modèle de langage Gemini
  • Google text-embedding-004 - Génération d'embeddings (768D)

Base de données & ORM

  • Neon - PostgreSQL serverless avec pgvector
  • Drizzle ORM - ORM TypeScript moderne et performant

🚀 Démarrage Rapide

Prérequis

Node.js 18+ 
npm ou yarn
Compte Neon Database (avec extension pgvector)
Clé API Google AI

Installation

  1. Cloner le repository
git clone https://github.com/votre-username/rag-assistant.git
cd rag-assistant
  1. Installer les dépendances
npm install
# ou
yarn install
  1. Configuration des variables d'environnement

Créez un fichier .env.local à la racine du projet :

# Neon Database (avec pgvector activé)
DATABASE_URL=your_neon_database_url

# Google AI
GOOGLE_AI_API_KEY=your_google_ai_api_key

# Next.js
NEXT_PUBLIC_APP_URL=http://localhost:3000
  1. Initialiser la base de données
npm run db:push
# ou
yarn db:push
  1. Lancer l'application
npm run dev
# ou
yarn dev

Ouvrez http://localhost:3000 dans votre navigateur.

📁 Structure du Projet

rag-assistant/
├── app/                    # Routes Next.js App Router
│   ├── api/               # API Routes
│   │   └── chat/          # Route API du chat
│   ├── chat/              # Page de chat
│   ├── types/             # Définitions TypeScript
│   ├── upload/            # Page d'upload
│   │   ├── actions.ts     # Server Actions
│   │   └── page.tsx       # Interface d'upload
│   ├── favicon.ico
│   ├── globals.css
│   ├── layout.tsx         # Layout principal
│   └── page.tsx           # Page d'accueil
├── components/            # Composants React
│   └── ui/               # Composants UI (shadcn/ui)
├── lib/                   # Utilitaires et configurations
│   ├── chunking.ts        # Découpage de documents
│   ├── db-config.ts       # Configuration Drizzle
│   ├── db-schema.ts       # Schéma de la base de données
│   ├── embeddings.ts      # Génération d'embeddings
│   ├── search.ts          # Recherche vectorielle
│   └── utils.ts           # Fonctions utilitaires
├── migrations/            # Migrations SQL Drizzle
│   ├── 0000_narrow_network.sql
│   └── 0001_burly_sersi.sql
├── public/                # Fichiers statiques
├── .clerk/                # Config Clerk (non utilisé)
├── .next/                 # Build Next.js
├── node_modules/
├── .env.local             # Variables d'environnement
├── .eslintrc.json
├── .gitignore
├── components.json        # Config shadcn/ui
├── drizzle.config.ts      # Config Drizzle
├── next-env.d.ts
├── next.config.ts
├── package.json
├── postcss.config.mjs
├── README.md
└── tsconfig.json

🔧 Fonctionnement Technique

Pipeline RAG

  1. Ingestion - Les PDFs sont uploadés et convertis en texte
  2. Chunking - Le texte est divisé en segments logiques (via lib/chunking.ts)
  3. Embedding - Chaque segment est transformé en vecteur 768D avec Google text-embedding-004 (via lib/embeddings.ts)
  4. Stockage - Les vecteurs sont stockés dans Neon PostgreSQL avec l'extension pgvector
  5. Retrieval - Recherche de similarité cosinus avec index HNSW (via lib/search.ts)
  6. Generation - Le LLM Gemini génère une réponse contextuelle basée sur les chunks pertinents

Architecture

User → Upload PDF → Text Extraction → Chunking
                                         ↓
                                    Embeddings
                                         ↓
                                   Neon Database (pgvector)
                                         
User → Question → Similarity Search → Context → LLM → Response

📊 Schéma de Base de Données

// documents
id: string
userId: string
filename: string
content: text
uploadedAt: timestamp

// chunks
id: string
documentId: string
content: text
embedding: vector(1536)
position: integer

// conversations
id: string
userId: string
createdAt: timestamp

// messages
id: string
conversationId: string
role: enum('user', 'assistant')
content: text
createdAt: timestamp

🎯 Cas d'Usage

  • 📚 Recherche documentaire - Trouvez rapidement des informations dans vos documents
  • 📖 Résumés automatiques - Obtenez des synthèses de vos PDFs
  • 💼 Assistant professionnel - Interrogez vos rapports, contrats, manuels
  • 🎓 Aide aux études - Posez des questions sur vos cours et livres

🔒 Sécurité

  • Authentification requise pour toutes les opérations
  • Isolation des données par utilisateur
  • Validation des uploads de fichiers
  • Rate limiting sur les requêtes API
  • Sanitization des entrées utilisateur

🚀 Déploiement

Vercel (Recommandé)

# Installer Vercel CLI
npm i -g vercel

# Déployer
vercel

Configurez les variables d'environnement dans le dashboard Vercel.

Docker

# Build
docker build -t rag-assistant .

# Run
docker run -p 3000:3000 --env-file .env.local rag-assistant

📈 Performance

  • ⚡ Temps de réponse moyen : < 2s
  • 📦 Taille du bundle : ~150KB (gzipped)
  • 🎯 Score Lighthouse : 95+
  • 🔄 Support du streaming des réponses

🤝 Contribution

Les contributions sont les bienvenues ! Pour contribuer :

  1. Forkez le projet
  2. Créez une branche (git checkout -b feature/amazing-feature)
  3. Committez vos changements (git commit -m 'Add amazing feature')
  4. Pushez vers la branche (git push origin feature/amazing-feature)
  5. Ouvrez une Pull Request

📝 Roadmap

  • Support multi-langues
  • Upload de documents Word/Excel
  • Partage de conversations
  • Exportation des chats en PDF
  • Mode collaboratif
  • API publique
  • Application mobile

📄 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

👨‍💻 Auteur

Votre Nom

🙏 Remerciements

  • Vercel pour l'AI SDK
  • Neon pour la database serverless
  • La communauté open source

⭐ Si ce projet vous a aidé, n'hésitez pas à lui donner une étoile !

📞 Contact

Pour toute question ou opportunité professionnelle :

💼 Disponible pour des opportunités freelance et CDI

About

Une application RAG (Retrieval-Augmented Generation) moderne permettant de poser des questions intelligentes sur vos documents PDF. Construite avec les dernières technologies web et IA.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors