RAG local directement sur les jeux plein écran
Apparemment, qui peut encore être surpris par une énième surcouche pour LLM ?
🎮 Le projet GameWikiTooltip avec ce flux utilisateur : tu joues à Elden Ring ou Helldivers 2, tu appuies sur Ctrl+Q, une superposition transparente apparaît par-dessus le jeu. À l'intérieur — un navigateur avec un wiki ou un chatbot qui répond aux questions sur les builds et les mécanismes, en s'appuyant sur une base de guides YouTube parsés.
Il vaut la peine de regarder les sources non seulement pour les fonctionnalités gaming, mais aussi pour les solutions architecturales :
▪️ Pipeline de recherche raisonnable. Pas juste un prompt aveugle dans le LLM. Recherche hybride implémentée : FAISS pour la sémantique +
bm25s (implémentation rapide en Rust) pour le matching lexical précis. Les résultats sont fusionnés via Reciprocal Rank Fusion (RRF), et par-dessus, un Intent Reranker personnalisé est ajouté pour distinguer les requêtes de mécanismes des demandes de conseils de build.▪️ Hooks Win32 profonds. Dans les jeux plein écran, les bindings standard des bibliothèques échouent à cause de l'interception de l'entrée par le jeu (DirectInput/RawInput). Ici, une interception stricte des raccourcis globaux est implémentée via
ctypes (RegisterHotKey) et le filtrage des messages natifs Windows directement dans la boucle d'événements de Qt.▪️ Intégration PyQt6 et asyncio. La douleur éternelle des développeurs desktop : comment faire cohabiter la boucle d'événements de Qt avec l'asynchronisme de Python pour que l'UI ne se fige pas lors des requêtes réseau au LLM. Ici, cela est élégamment résolu via qasync.
▪️ Reconnaissance vocale hors ligne. Pour ne pas taper pendant le combat, un
vosk local est intégré, qui écoute le microphone dans un thread séparé et envoie le texte dans l'entrée.Un plus supplémentaire pour l'architecture : le parsing des guides YouTube, le chunking et les embeddings sont déportés dans une étape hors ligne, et à l'exécution, l'application ne fait que lancer une recherche légère sur les vecteurs locaux et envoyer le contexte à Gemini Flash 2.5 Lite pour la génération finale de la réponse.
Mais si les sources ne vous intéressent pas, cela peut être utile dans les jeux pour son usage direct 😏
#bon_open_source
Commentaires
0Aucun commentaire pour le moment.
Connectez-vous pour participer à la discussion.