Lokaler RAG direkt über Vollbildspielen

Man könnte meinen, wen überrascht man heutzutage noch mit einem weiteren LLM-Wrapper?
🎮 Das Projekt GameWikiTooltip mit folgendem Benutzerablauf: Du spielst Elden Ring oder Helldivers 2, drückst Strg+Q, und über dem Spiel erscheint ein transparentes Overlay. Darin befindet sich ein Browser mit Wiki oder ein Chatbot, der Fragen zu Builds und Mechaniken beantwortet, basierend auf einer Datenbank geparster YouTube-Guides.

Es lohnt sich, den Quellcode nicht nur wegen der Gaming-Features anzusehen, sondern auch wegen der architektonischen Entscheidungen:

▪️ Vernünftige Suchpipeline. Nicht nur ein blinder Prompt an das LLM. Implementiert ist eine hybride Suche: FAISS für Semantik + bm25s (schnelle Rust-Implementierung) für exaktes lexikalisches Matching. Die Ergebnisse werden durch Reciprocal Rank Fusion (RRF) zusammengeführt, und obendrauf kommt ein benutzerdefinierter Intent Reranker, um Mechanik-Anfragen von Bitten um Build-Empfehlungen zu unterscheiden.
▪️ Tiefe Win32-Hooks. In Vollbildspielen fallen Standard-Bibliotheksbindungen aufgrund der Eingabeübernahme durch das Spiel (DirectInput/RawInput) aus. Hier wird ein harter Hook globaler Tastenkombinationen über ctypes (RegisterHotKey) und Filterung nativer Windows-Nachrichten direkt in der Qt-Event-Loop implementiert.
▪️ Integration von PyQt6 und asyncio. Der ewige Schmerz von Desktop-Entwicklern: Wie bringt man die Qt-Event-Loop mit der Python-Asynchronität zusammen, damit die UI bei Netzwerkanfragen an das LLM nicht einfriert? Hier wird dies elegant mit qasync gelöst.
▪️ Offline-Spracherkennung. Um während des Kampfes nicht tippen zu müssen, wird lokales vosk verwendet, das in einem separaten Thread das Mikrofon abhört und den Text in das Eingabefeld einfügt.

Ein besonderes Plus für die Architektur: Das Parsen von YouTube-Guides, Chunking und Embeddings werden in einem Offline-Schritt erledigt, während die Anwendung zur Laufzeit nur eine leichte Suche über lokale Vektoren durchführt und den Kontext an Gemini Flash 2.5 Lite zur endgültigen Antwortgenerierung sendet.

Aber wenn Sie sich nicht für den Quellcode interessieren, kann es in Spielen auch direkt nützlich sein 😏

#годный_опенсорс