API FastAPI pour extraction et recherche web intelligente, propulsée par Albert API (LLM gouvernemental français).
/api/v1/extract - Extraction de contenu web
- Contenu nettoyé (texte, liens, images, métadonnées)
- Support JavaScript avec Playwright
- Réduction ~87% du HTML brut
/api/v1/vision - Analyse d'images
- OCR et extraction de texte
- Analyse de graphiques, diagrammes, cartes
- Description détaillée (logos, UI, photos)
/api/v1/search - Recherche web simple
- Résultats avec titre, URL, snippet
- Filtres par langue, période, domaine
- Intégration SearXNG
/api/v1/research/quick - Réponse rapide documentée
- Question factuelle → Réponse synthétique + sources citées
- 3-15 sources selon complexité
- Niveau de confiance (high/medium/low)
/api/v1/research/deep - Rapport de recherche complet
- Rapport structuré en sections avec bibliographie
- 10-50 sources analysées et croisées
- Mode streaming (SSE) ou JSON final
- Architecture 4 phases : Exploration → Planning → Construction → Cohérence
- Albert API (albert-code, albert-large) - Par défaut
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude 3)
- Docker & Docker Compose
- Clé API Albert: https://albert.api.etalab.gouv.fr
# 1. Cloner le repository
git clone https://github.com/nic01asFr/webtools.git
cd webtools
# 2. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec votre clé API Albert
# 3. Lancer avec Docker Compose
docker-compose up -d
# 4. Vérifier le déploiement
curl http://localhost:8000/healthCréez un fichier .env à la racine :
# API Configuration
API_TITLE=WebTools API
API_VERSION=2.0.0
API_HOST=0.0.0.0
API_PORT=8000
# LLM Configuration (Albert par défaut)
DEFAULT_LLM_PROVIDER=albert
DEFAULT_LLM_MODEL=albert-code
DEFAULT_LLM_API_KEY=votre_cle_api_albert_ici
DEFAULT_LLM_BASE_URL=https://albert.api.etalab.gouv.fr
# Logging
LOG_LEVEL=INFOAccédez à http://localhost:8000/docs pour la documentation Swagger UI complète.
Nouveau ! Consultez USE_CASES.md pour :
- 5 stratégies de sources (priority, exclusive, complement, whitelist, blacklist)
- 12+ patterns de chaînage d'endpoints (Search→Extract→Vision, etc.)
- Exemples JSON complets pour chaque cas d'usage
- Guide pour développeurs d'agents IA (orchestration, cache, parallélisation)
curl -X POST "http://localhost:8000/api/v1/extract" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article",
"clean_html": true,
"extract_images": true
}'Résultat :
{
"url": "https://example.com/article",
"title": "Titre de l'article",
"content": "Texte principal sans navigation ni publicités...",
"images": ["https://example.com/img1.jpg"],
"word_count": 1500
}curl -X POST "http://localhost:8000/api/v1/vision" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/chart.png",
"prompt": "Extraire les données de ce graphique"
}'Résultat :
{
"image_url": "https://example.com/chart.png",
"analysis": "Graphique en barres montrant l'évolution...",
"confidence": 0.95
}curl -X POST "http://localhost:8000/api/v1/search" \
-H "Content-Type: application/json" \
-d '{
"query": "FastAPI tutorial",
"max_results": 10,
"language": "fr"
}'Résultat :
{
"query": "FastAPI tutorial",
"results": [
{
"title": "FastAPI Documentation",
"url": "https://fastapi.tiangolo.com",
"snippet": "FastAPI is a modern web framework..."
}
],
"total": 10
}curl -X POST "http://localhost:8000/api/v1/research/quick" \
-H "Content-Type: application/json" \
-d '{
"query": "Quelle est la capitale du Japon?",
"max_sources": 5
}'Résultat :
{
"query": "Quelle est la capitale du Japon?",
"answer": "Tokyo est la capitale du Japon depuis 1868. [1][2]",
"sources": [
{
"title": "Tokyo - Wikipedia",
"url": "https://fr.wikipedia.org/wiki/Tokyo",
"relevance": 0.95
}
],
"confidence": "high"
}# Mode non-streaming (JSON final)
curl -X POST "http://localhost:8000/api/v1/research/deep" \
-H "Content-Type: application/json" \
-d '{
"topic": "Impact de l'\''IA sur l'\''emploi",
"max_sources": 20,
"stream": false
}'
# Mode streaming (progression temps réel)
curl -X POST "http://localhost:8000/api/v1/research/deep" \
-H "Content-Type: application/json" \
-d '{
"topic": "Impact de l'\''IA sur l'\''emploi",
"max_sources": 20,
"stream": true
}'Résultat :
{
"query": "Impact de l'IA sur l'emploi",
"report": {
"title": "Analyse de l'impact de l'IA sur le marché de l'emploi",
"sections": [
{
"title": "1. État actuel du marché",
"content": "L'intelligence artificielle transforme... [1][3]",
"subsections": [...]
},
{
"title": "2. Secteurs affectés",
"content": "Les secteurs les plus impactés incluent... [2][5]"
}
]
},
"bibliography": [
{
"id": 1,
"title": "AI Impact Study 2024",
"url": "https://..."
}
],
"metadata": {
"sources_analyzed": 25,
"research_time": "45s",
"confidence": "high"
}
}Webtools/
├── app/
│ ├── api/ # Endpoints FastAPI
│ │ ├── extract.py # /extract endpoint
│ │ ├── vision.py # /vision endpoint
│ │ ├── search.py # /search endpoint
│ │ └── research.py # /research/quick & /research/deep
│ ├── agents/ # Orchestration intelligente
│ │ └── intelligent_orchestrator.py # Deep research 4-phase
│ ├── core/ # Configuration et LLM
│ │ ├── config.py # Settings
│ │ ├── llm/ # Clients LLM multi-provider
│ │ └── content_cleaner.py # Nettoyage HTML avancé
│ ├── extractors/ # Stratégies d'extraction
│ │ ├── direct_extractor.py # Playwright
│ │ └── agent_extractor.py # Browser-use + LLM
│ ├── services/ # Services externes
│ │ └── searxng_service.py # Meta-search
│ └── main.py # Application FastAPI
├── docker-compose.yml
├── Dockerfile
└── pyproject.toml
Le endpoint /research/deep utilise une architecture 4-phase pour produire des rapports structurés :
Phase 1 : Exploration & Planning
- Exploration initiale restreinte (8 sources max)
- Évaluation du champ de recherche
- Création d'un plan détaillé (canvas) avec analyse de complexité 5D
Phase 2 : Construction Section-par-Section
- Recherches ciblées par section
- Extraction et nettoyage des sources
- Croisement des données inter-sections
- Synthèse qualitative avec instructions LLM précises
Phase 3 : Cohérence Globale
- Analyse des intersections entre sections
- Stratégie adaptative (≤10 sections : directe, >10 : distribuée)
- Application d'améliorations prioritaires
Phase 4 : Finalisation
- Assemblage du rapport complet
- Génération de la bibliographie
- Traces complètes du processus
Documentation complète : DEEP_RESEARCH_ARCHITECTURE.md
| Endpoint | Méthode | Description | Temps Moyen |
|---|---|---|---|
/api/v1/extract |
POST | Extraire le contenu d'une URL | 2-30s |
/api/v1/vision |
POST | Analyser une image | 1-10s |
/api/v1/search |
POST | Recherche web simple | 1-5s |
/api/v1/research/quick |
POST | Réponse rapide documentée | 15-60s |
/api/v1/research/deep |
POST | Rapport complet structuré | 30-300s |
/health |
GET | Health check global | <1s |
/docs |
GET | Documentation Swagger UI | - |
| Opération | Temps Moyen | Sources |
|---|---|---|
| Extraction simple | 2-5s | 1 |
| Extraction avec agent | 10-30s | 1 |
| Research quick | 15-60s | 3-15 |
| Research deep (simple) | 30-90s | 10-20 |
| Research deep (complexe) | 90-300s | 20-50 |
| Vision OCR | 3-5s | - |
| Vision description | 6-10s | - |
.env avec vos clés API.
Le fichier .gitignore est configuré pour exclure :
.env- Fichiers de secrets
- Cache Python
- Logs
- URL spécifique à extraire ? →
/extract - Image à analyser ? →
/vision - Chercher des pages sur un sujet ? →
/search - Question factuelle rapide ? →
/research/quick - Rapport approfondi structuré ? →
/research/deep
WebTools offre 5 stratégies de sources et 12+ patterns de chaînage pour s'adapter à vos besoins :
| Stratégie | Description | Cas d'usage |
|---|---|---|
| Recherche ouverte | Web automatique | Questions générales |
priority |
Sources fiables prioritaires + web si incomplet | Documentation officielle + compléments |
exclusive |
UNIQUEMENT sources fournies, pas de web | Réglementation, conformité légale |
complement |
Web + ajout URLs spécifiques | Tutoriels + doc officielle |
whitelist |
Limiter à domaines de confiance | Sources gouvernementales uniquement |
blacklist |
Exclure domaines non fiables | Éviter forums/blogs/opinions |
- Search → Extract → Vision : Données visuelles (graphiques, tableaux)
- Search (dorking) → Quick (exclusive) : Découverte sources + réponse 100% fiable
- Extract (links) → Quick (priority) : Documentation officielle + compléments web
- Vision (OCR) → Extract → Quick : Pipeline complet depuis screenshot
📖 Guide complet avec exemples JSON : USE_CASES.md
- Swagger UI Interactive :
/docs - ReDoc :
/redoc - 📚 Guide Cas d'Usage et Patterns :
USE_CASES.md - Guide Architecture Deep Research :
DEEP_RESEARCH_ARCHITECTURE.md - Guide Endpoints Détaillé :
ENDPOINTS_GUIDE.md - Changelog :
CHANGELOG.md - Guide Agent IA :
AI_AGENT_GUIDE.md
Les contributions sont les bienvenues ! Pour contribuer :
- Fork le projet
- Créer une branche (
git checkout -b feature/amazing) - Commit les changements (
git commit -m 'Add amazing feature') - Push la branche (
git push origin feature/amazing) - Ouvrir une Pull Request
MIT License
- FastAPI - Framework web moderne
- Playwright - Automation navigateur
- Albert API - LLM gouvernemental français
- SearXNG - Meta-moteur de recherche
- GitHub: @nic01asFr
- Repository: webtools
Fait avec ❤️ en France 🇫🇷