# 📋 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Ă©.*