Some checks failed
SourceFinder CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
SourceFinder CI/CD Pipeline / Unit Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Integration Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Performance Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Code Coverage Report (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (16.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (18.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (20.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Regression Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Audit (push) Has been cancelled
SourceFinder CI/CD Pipeline / Notify Results (push) Has been cancelled
- Architecture modulaire avec injection de dépendances - Système de scoring intelligent multi-facteurs (spécificité, fraîcheur, qualité, réutilisation) - Moteur anti-injection 4 couches (preprocessing, patterns, sémantique, pénalités) - API REST complète avec validation et rate limiting - Repository JSON avec index mémoire et backup automatique - Provider LLM modulaire pour génération de contenu - Suite de tests complète (Jest) : * Tests unitaires pour sécurité et scoring * Tests d'intégration API end-to-end * Tests de sécurité avec simulation d'attaques * Tests de performance et charge - Pipeline CI/CD avec GitHub Actions - Logging structuré et monitoring - Configuration ESLint et environnement de test 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
457 lines
14 KiB
Markdown
457 lines
14 KiB
Markdown
# 📋 CAHIER DES CHARGES - SourceFinder
|
||
|
||
## 🎯 1. CONTEXTE & OBJECTIFS
|
||
|
||
### 1.1 Présentation du projet
|
||
**Service** : SourceFinder - Service de recherche et scoring d'actualités
|
||
**Client principal** : PublicationAutomator (Autocollant.fr)
|
||
**Problématique** : Fournir des actualités pertinentes, scorées et sécurisées pour génération de contenu
|
||
**Solution** : API de recherche intelligente avec stock réutilisable et protection anti-injection
|
||
|
||
### 1.2 Objectifs business
|
||
- **API réutilisable** : Service multi-clients pour différents projets de contenu
|
||
- **Qualité garantie** : Sources vérifiées, scoring intelligent, anti-duplication
|
||
- **Performance** : Réponses < 5 secondes, stock pré-constitué
|
||
- **Sécurité** : Protection anti-prompt injection sur sources externes
|
||
- **Extensibilité** : Ajout facile de nouvelles sources et critères de scoring
|
||
|
||
### 1.3 Positionnement microservice
|
||
**Responsabilité unique** : Sourcing, scoring, stockage et fourniture d'actualités
|
||
**Indépendance** : Développement, déploiement et scaling autonomes
|
||
**API-first** : Interface standardisée pour multiples clients
|
||
|
||
## 🔧 2. SPÉCIFICATIONS TECHNIQUES
|
||
|
||
### 2.1 Stack technique
|
||
**Backend** : Node.js + Express.js
|
||
**Architecture** : Ultra-modulaire avec interfaces strictes et composants interchangeables
|
||
**News Provider** : LLM par défaut (OpenAI/Claude), scraping/hybride disponibles via configuration
|
||
**Stockage** : JSON par défaut, interface modulaire pour MongoDB/PostgreSQL
|
||
**Architecture stockage** : Pattern Repository avec adaptateurs interchangeables
|
||
**Cache** : Redis pour performance
|
||
**Monitoring** : Logs structurés + métriques API
|
||
|
||
### 2.2 Architecture modulaire
|
||
```
|
||
[Client Request] → [Rate Limiting] → [Authentication] → [NewsSearchService]
|
||
↓
|
||
[INewsProvider] ← [Dependency Injection] → [IScoringEngine] → [IStockRepository]
|
||
↓ ↓ ↓
|
||
[LLMProvider*] [BasicScoring*] [JSONRepository*]
|
||
[ScrapingProvider] [MLScoring] [MongoRepository]
|
||
[HybridProvider] [LLMScoring] [PostgreSQLRepo]
|
||
|
||
* = Implémentation par défaut
|
||
```
|
||
|
||
## 📊 3. SYSTÈME DE SCORING INTELLIGENT
|
||
|
||
### 3.1 Formule de scoring
|
||
```
|
||
Score_Final = (Spécificité_race × 0.4) + (Fraîcheur × 0.3) + (Qualité_source × 0.2) + (Anti_duplication × 0.1)
|
||
```
|
||
|
||
### 3.2 Spécificité race (40% du score)
|
||
- **Race exacte mentionnée** : 100 points
|
||
- **Groupe/famille race** : 70 points (ex: Bergers, Terriers)
|
||
- **Taille similaire** : 50 points (grands chiens si race grande)
|
||
- **Usage similaire** : 40 points (chiens de garde, chasse, etc.)
|
||
- **Générique chiens** : 25 points
|
||
- **Animaux domestiques** : 10 points
|
||
|
||
### 3.3 Fraîcheur (30% du score)
|
||
- **< 7 jours** : 100 points
|
||
- **7-30 jours** : 70 points
|
||
- **30-90 jours** : 40 points
|
||
- **90-180 jours** : 20 points
|
||
- **> 180 jours** : 5 points
|
||
|
||
### 3.4 Qualité source (20% du score)
|
||
- **Sources premium** : 100 points (clubs officiels, vétérinaires, études)
|
||
- **Sources spécialisées** : 80 points (magazines élevage, sites race)
|
||
- **Médias animaliers** : 60 points (30 Millions d'Amis, Wamiz)
|
||
- **Presse généraliste** : 40 points (Le Figaro, 20 Minutes)
|
||
- **Blogs/forums** : 20 points (avec validation renforcée)
|
||
|
||
### 3.5 Anti-duplication (10% du score)
|
||
- **URL jamais utilisée** : 100 points
|
||
- **Domaine peu utilisé** : 70 points (< 3 usages)
|
||
- **Source recyclable** : 50 points (> 90 jours depuis dernier usage)
|
||
- **Source récemment utilisée** : 10 points
|
||
|
||
## 🛡️ 4. PROTECTION ANTI-PROMPT INJECTION
|
||
|
||
### 4.1 Problématique sécurité
|
||
**Risque** : Sources web peuvent contenir des prompts cachés pour manipuler les LLM
|
||
**Impact** : Génération de contenu non conforme, failles sécurité
|
||
**Particulièrement critique** : Sources spécialisées (blogs élevage, forums)
|
||
|
||
### 4.2 Système de protection multicouches
|
||
|
||
#### Layer 1: Content Preprocessing
|
||
```javascript
|
||
function sanitizeContent(rawContent) {
|
||
// Suppression instructions suspectes
|
||
const dangerousPatterns = [
|
||
/ignore\s+previous\s+instructions/i,
|
||
/you\s+are\s+now/i,
|
||
/forget\s+everything/i,
|
||
/new\s+instructions:/i,
|
||
/system\s+prompt:/i
|
||
];
|
||
|
||
return cleanContent;
|
||
}
|
||
```
|
||
|
||
#### Layer 2: Pattern Detection
|
||
**Patterns suspects** :
|
||
- Instructions directes : "You are now...", "Ignore previous..."
|
||
- Redirections : "Instead of writing about dogs, write about..."
|
||
- Code injections : Scripts, balises, commandes système
|
||
- Métaprompts : "This is a test", "Output JSON format"
|
||
|
||
#### Layer 3: Semantic Validation
|
||
**Vérifications** :
|
||
- Le contenu parle-t-il vraiment de la race mentionnée ?
|
||
- Y a-t-il des incohérences flagrantes ?
|
||
- Le ton correspond-il au site source ?
|
||
- Présence d'éléments hors contexte ?
|
||
|
||
#### Layer 4: Source Scoring
|
||
**Pénalités automatiques** :
|
||
- Détection prompt injection : -50 points
|
||
- Contenu incohérent : -30 points
|
||
- Source non fiable historiquement : -20 points
|
||
|
||
## 🗄️ 5. SYSTÈME DE STOCK INTELLIGENT
|
||
|
||
### 5.1 Architecture stockage modulaire
|
||
```javascript
|
||
// Interface NewsStockRepository (adaptable JSON/MongoDB/PostgreSQL)
|
||
{
|
||
id: String,
|
||
url: String (unique),
|
||
title: String,
|
||
content: String,
|
||
content_hash: String,
|
||
|
||
// Classification
|
||
race_tags: [String], // ["352-1", "bergers", "grands_chiens"]
|
||
angle_tags: [String], // ["legislation", "sante", "comportement"]
|
||
universal_tags: [String], // ["conseils_proprietaires", "securite"]
|
||
|
||
// Scoring
|
||
freshness_score: Number,
|
||
quality_score: Number,
|
||
specificity_score: Number,
|
||
reusability_score: Number,
|
||
final_score: Number,
|
||
|
||
// Usage tracking
|
||
usage_count: Number,
|
||
last_used: Date,
|
||
created_at: Date,
|
||
expires_at: Date,
|
||
|
||
// Metadata
|
||
source_domain: String,
|
||
source_type: String, // "premium", "standard", "fallback"
|
||
language: String,
|
||
status: String // "active", "expired", "blocked"
|
||
}
|
||
|
||
// Implémentation par défaut: JSON files avec index en mémoire
|
||
// Migration possible vers MongoDB/PostgreSQL sans changement de code métier
|
||
```
|
||
|
||
### 5.2 Catégories de stock
|
||
#### 🥇 Premium Stock
|
||
**Sources** : Études vétérinaires, recherches officielles, clubs de race
|
||
**Caractéristiques** : Haute qualité, evergreen content, réutilisables
|
||
**Usage** : Limité à 3 fois, rotation 180 jours
|
||
**Exemples** : Études comportementales, guides officiels FCI
|
||
|
||
#### 🥈 Standard Stock
|
||
**Sources** : News spécialisées, magazines élevage, sites vétérinaires
|
||
**Caractéristiques** : Qualité correcte, actualités temporaires
|
||
**Usage** : 2-3 fois, rotation 90 jours
|
||
**Exemples** : Actualités clubs, événements canins, nouvelles recherches
|
||
|
||
#### 🥉 Fallback Stock
|
||
**Sources** : Conseils généraux, presse généraliste adaptée
|
||
**Caractéristiques** : Générique, toujours utilisable
|
||
**Usage** : Illimité avec variations, rotation 30 jours
|
||
**Exemples** : Conseils éducation, sécurité générale
|
||
|
||
### 5.3 Stratégie de constitution du stock
|
||
**Collecte proactive** : 20-30 sources/jour en background
|
||
**Équilibrage** : 50% spécialisées, 30% générales, 20% fallback
|
||
**Couverture** : Minimum 50 sources par race populaire
|
||
**Refresh** : Scanning quotidien nouvelles sources + nettoyage expiré
|
||
|
||
## 🔍 6. SYSTÈME DE SOURCING
|
||
|
||
### 6.1 Stratégie de recherche en cascade
|
||
#### Étape 1 : Sources spécialisées race (priorité)
|
||
**Recherche** : "[nom_race] actualité 2025", "[race] étude"
|
||
**Sources** :
|
||
- Clubs de race officiels (.org)
|
||
- Associations cynophiles nationales
|
||
- Magazines spécialisés (Atout Chien, Rustica)
|
||
- Forums modérés de race
|
||
|
||
#### Étape 2 : Sources animalières générales
|
||
**Recherche** : "chien [caractéristique] actualité", "[groupe_race] news"
|
||
**Sources** :
|
||
- 30 Millions d'Amis (.com)
|
||
- Wamiz (.com)
|
||
- Sites vétérinaires (.vet)
|
||
- Blogs reconnus éleveurs
|
||
|
||
#### Étape 3 : Fallback généraliste
|
||
**Recherche** : "animaux domestiques", "propriétaires chiens"
|
||
**Sources** :
|
||
- Google News API
|
||
- Grands médias (adaptés)
|
||
- Sites conseils généralistes
|
||
|
||
### 6.2 Configuration sources
|
||
```javascript
|
||
// config/sources.json
|
||
{
|
||
"premium": [
|
||
{
|
||
"domain": "centrale-canine.fr",
|
||
"type": "official",
|
||
"weight": 100,
|
||
"scraping_rules": {...},
|
||
"rate_limit": "1req/5min"
|
||
}
|
||
],
|
||
"specialized": [...],
|
||
"fallback": [...]
|
||
}
|
||
```
|
||
|
||
## 🔌 7. APIS EXPOSÉES
|
||
|
||
### 7.1 API principale de recherche
|
||
```http
|
||
GET /api/v1/news/search
|
||
```
|
||
|
||
**Paramètres** :
|
||
```javascript
|
||
{
|
||
race_code: "352-1", // Obligatoire
|
||
product_context: "security_plate", // Optionnel
|
||
min_score: 200, // Défaut: 150
|
||
max_age_days: 30, // Défaut: 90
|
||
max_results: 5, // Défaut: 3
|
||
categories: ["legislation", "health"], // Optionnel
|
||
exclude_domains: ["example.com"], // Optionnel
|
||
include_stock: true // Utiliser stock existant
|
||
}
|
||
```
|
||
|
||
**Réponse** :
|
||
```javascript
|
||
{
|
||
"status": "success",
|
||
"results": [
|
||
{
|
||
"title": "Nouvelle réglementation Bergers Allemands",
|
||
"url": "https://example.com/article",
|
||
"content": "...",
|
||
"score": 287,
|
||
"breakdown": {
|
||
"specificity": 100,
|
||
"freshness": 85,
|
||
"quality": 80,
|
||
"anti_duplication": 22
|
||
},
|
||
"metadata": {
|
||
"publish_date": "2025-09-10",
|
||
"source_domain": "centrale-canine.fr",
|
||
"categories": ["legislation"],
|
||
"estimated_reading_time": "3min"
|
||
}
|
||
}
|
||
],
|
||
"search_metadata": {
|
||
"total_found": 12,
|
||
"search_time_ms": 450,
|
||
"sources_searched": 8,
|
||
"from_stock": 2,
|
||
"from_live": 3
|
||
}
|
||
}
|
||
```
|
||
|
||
### 7.2 API de stock management
|
||
```http
|
||
GET /api/v1/stock/status # État du stock
|
||
POST /api/v1/stock/refresh # Force refresh
|
||
DELETE /api/v1/stock/cleanup # Nettoyage expiré
|
||
GET /api/v1/stock/race/{code} # Stock par race
|
||
```
|
||
|
||
### 7.3 API de monitoring
|
||
```http
|
||
GET /api/v1/health # Health check
|
||
GET /api/v1/metrics # Métriques performance
|
||
GET /api/v1/sources/status # État sources
|
||
```
|
||
|
||
## ⚙️ 8. WORKFLOW DE TRAITEMENT
|
||
|
||
### 8.1 Traitement requête en temps réel
|
||
```
|
||
1. Validation paramètres (race_code valide, etc.)
|
||
2. Recherche stock existant (filtrage par critères)
|
||
3. Si stock insuffisant → Recherche live sources
|
||
4. Scoring batch tous résultats trouvés
|
||
5. Anti-injection validation top résultats
|
||
6. Tri par score décroissant
|
||
7. Retour résultats + mise à jour stock
|
||
8. Logging usage pour anti-duplication
|
||
```
|
||
|
||
### 8.2 Background processing
|
||
```
|
||
Cron daily 02:00 : Stock refresh & cleanup
|
||
Cron hourly : Sources health check
|
||
Cron 4x/day : New sources discovery
|
||
Real-time : Usage tracking updates
|
||
```
|
||
|
||
## 📊 9. MÉTRIQUES & MONITORING
|
||
|
||
### 9.1 KPIs opérationnels
|
||
**Performance** :
|
||
- Temps réponse API < 5 secondes (95e percentile)
|
||
- Uptime > 99.5%
|
||
- Taux succès recherche > 90%
|
||
|
||
**Qualité** :
|
||
- Score moyen résultats > 200 points
|
||
- Taux détection prompt injection < 1%
|
||
- Couverture stock : 50+ sources par race populaire
|
||
|
||
**Usage** :
|
||
- Requêtes/jour par client
|
||
- Distribution scores retournés
|
||
- Top races/contextes demandés
|
||
|
||
### 9.2 Alertes automatiques
|
||
**Critique** :
|
||
- API down > 2 minutes
|
||
- Aucun résultat pour race populaire
|
||
- Détection prompt injection > 5% sur 1h
|
||
|
||
**Warning** :
|
||
- Stock < 10 sources pour race
|
||
- Performance dégradée > 10 secondes
|
||
- Source premium indisponible
|
||
|
||
## 🚀 10. PLANNING DE DÉVELOPPEMENT
|
||
|
||
### 10.1 Phase 1 - Core API (2 semaines)
|
||
**Système de scoring** (25h)
|
||
- Implémentation algorithme scoring
|
||
- Base de données MongoDB/PostgreSQL
|
||
- Configuration sources initiales
|
||
- API recherche basique
|
||
|
||
**Protection anti-injection** (20h)
|
||
- Patterns detection engine
|
||
- Content sanitization
|
||
- Validation sémantique basique
|
||
- Tests sécurité
|
||
|
||
**Stock management** (15h)
|
||
- Base de données stock
|
||
- Logique réutilisation
|
||
- CRUD APIs stock
|
||
- Nettoyage automatique
|
||
|
||
### 10.2 Phase 2 - Sources avancées (2 semaines)
|
||
**Web scraping robuste** (30h)
|
||
- Multi-sources scraping
|
||
- Rate limiting intelligent
|
||
- Error handling & retry
|
||
- Proxies rotation
|
||
|
||
**Recherche en cascade** (20h)
|
||
- Spécialisées → générales → fallback
|
||
- Optimisation performance
|
||
- Parallélisation searches
|
||
- Fallback automatique
|
||
|
||
**API complète** (15h)
|
||
- Paramètres avancés
|
||
- Monitoring endpoints
|
||
- Documentation OpenAPI
|
||
- Rate limiting clients
|
||
|
||
### 10.3 Phase 3 - Production (1 semaine)
|
||
**Monitoring & alertes** (15h)
|
||
- Métriques temps réel
|
||
- Dashboard opérationnel
|
||
- Alertes automatiques
|
||
- Logs structurés
|
||
|
||
**Performance & scale** (10h)
|
||
- Cache Redis
|
||
- Optimisations requêtes
|
||
- Tests charge
|
||
- Déploiement production
|
||
|
||
## 💰 11. BUDGET & RESSOURCES
|
||
|
||
### 11.1 Coûts opérationnels estimés
|
||
**Infrastructure** :
|
||
- Serveur Node.js : ~30€/mois
|
||
- Base données MongoDB Atlas : ~25€/mois
|
||
- Redis cache : ~15€/mois
|
||
|
||
**APIs externes** :
|
||
- Google News API : ~50€/mois
|
||
- Proxies web scraping : ~40€/mois
|
||
|
||
**Total mensuel** : ~160€/mois
|
||
|
||
### 11.2 Temps de développement
|
||
**Développement initial** : 125h sur 5 semaines
|
||
**Tests & validation** : 20h
|
||
**Documentation** : 10h
|
||
**Total** : 155h
|
||
|
||
## 🎯 12. CRITÈRES DE RÉUSSITE
|
||
|
||
### 12.1 Objectifs quantifiés
|
||
**Performance** :
|
||
- API réponse < 5s (95e percentile)
|
||
- Uptime > 99.5%
|
||
- 50+ sources par race populaire en stock
|
||
|
||
**Qualité** :
|
||
- Score moyen > 200 points
|
||
- 90% requêtes avec résultats pertinents
|
||
- < 1% détection prompt injection
|
||
|
||
**Business** :
|
||
- Support PublicationAutomator (1 article/jour)
|
||
- Architecture prête 2+ clients additionnels
|
||
- Extensible nouvelles sources facilement
|
||
|
||
### 12.2 Validation technique
|
||
**Tests sécurité** : Résistance prompt injection validée
|
||
**Tests performance** : Load testing 100 req/min
|
||
**Tests intégration** : PublicationAutomator end-to-end
|
||
**Documentation** : APIs documentées OpenAPI/Swagger
|
||
|
||
---
|
||
|
||
*SourceFinder est conçu comme un service réutilisable de haute qualité, sécurisé et performant, capable de supporter multiple clients avec des besoins variés de contenu automatisé.* |