Vous avez peut-être entendu parler du célèbre Neurosama, ou Mu Jimeng de Chine. Voulez-vous également avoir votre propre image virtuelle AI pour vous accompagner pour diffuser, discuter et jouer à des jeux? L'open source Zerolan Live Robot travaille pour réaliser vos rêves! Et cela ne nécessite qu'une carte graphique de consommation!
Zerolan Live Robot est un robot de diffusion en direct multifonctionnel (AI Vtuber), qui peut lire automatiquement le barrage dans la salle de diffusion en direct de Bilibili, observer les fenêtres désignées de l'écran de l'ordinateur, comprendre son contenu d'écran, manipuler les personnages de jeu dans Minecraft et faire des réponses émotionnelles de chat vocal.
Ses projets associés Konekominecraftbot, Zerolan-Core, Zerolan-Data, Zerolan-UI.
Note
Ce projet est en cours de développement continu, la version actuelle est 2.0 . Vous pouvez suivre le compte Bilibili du développeur Akagawa Tsurumi_Channel. Il forme une fille de Cat Ai basée sur ce projet, et il diffusera les derniers progrès de temps en temps.
Ce qui suit indique brièvement ce que ce projet prend en charge:
| Soutenir les éléments | Contenu pris en charge |
|---|---|
| Plateforme de diffusion en direct | Bilibili | Tic |
| Modèle de grande langue | Thudm / GLM-4 | Thudm / chatGlm3 | QWEN / QWEN-7B-CHAT | 01ai / yi-6b-chat | Augmxnt / shisa-7b-v1 |
| Modèle de reconnaissance vocale automatique | iic / speech_paraformère_asr |
| Modèle de synthèse de la parole | RVC-BOSS / GPT-SOVITS |
| Modèle de sous-titre d'image | Salesforce / Blip-Image-Captioning-Garg |
| Modèle de reconnaissance des caractères optiques | paddlepaddle / paddleocr |
| Modèle de sous-titre vidéo | IIC / MULTI-MODAL_HITEA_VIDEO-CAPTIONING_BASE_EN |
| Outils appelés externes | Browser Firefox, Baidu Encyclopedia, Mengniang Encyclopedia |
| Plug-in de jeu | Minecraft |
Prudence
La version Zerolan Live Robot 2.0 est incompatible avec les anciennes versions 1.0, vous devrez donc peut-être reconfigurer l'environnement et installer les dépendances.
Le cadre Zerolan se compose de Zerolan Live Robot, Zerolan Core, Zerolan Data et Zerolan UI. Le tableau suivant décrit brièvement les utilisations de chaque projet:
| Nom du projet | utiliser |
|---|---|
| Robot en direct zerolan | Le cadre de contrôle du robot de diffusion en direct fait des réponses à l'action en collectant des données environnementales et une analyse complète. |
| Noyau zerolan | Les modules de base qui fournissent des services d'inférence AI pour les robots de diffusion en direct, tels que l'API Web basée sur les services de modèles de grands langues. |
| Données zerolan | Définit le format de données pour l'échange entre les services à l'aide de demandes de réseau. |
| Zerolan ui | L'interface GUI basée sur PYQT6 comprend des fenêtres pop-up et des sons invites, etc. |
Important
Cette étape est un must !
Veuillez vous déplacer ici pour terminer le déploiement de Zerolan Core, qui repose fortement sur ce service de base.
Exécutez la commande, qui crée un environnement virtuel et l'active, puis installe automatiquement les packages de dépendance requis par ce projet:
conda create --name ZerolanLiveRobot python=3.10
conda activate ZerolanLiveRobot
pip install -r requirements.txt Si vous êtes dans la branche de développement dev , vous devrez peut-être l'installer manuellement:
pip install git+https://github.com/AkagawaTsurunaki/zerolan-ui.git@dev
pip install git+https://github.com/AkagawaTsurunaki/zerolan-data.git@dev Recherchez le fichier de configuration resources/config.template.yaml , modifiez-le en config.yaml , puis modifiez-le dans la configuration dont vous avez besoin en fonction des commentaires du fichier de configuration.
Dans l'élément de configuration pipeline , vous devez noter que server_url doit contenir le protocole, la propriété intellectuelle et le numéro de port, tels que http://127.0.0.1:11001 , https://myserver.com:11451 , etc. Il s'agit de l'adresse réseau où vous déploiez le noyau Zerolan. Chaque type de modèle peut avoir un port différent.
Conseil
Le serveur peut-il avoir un seul port? Essayez ensuite de transmettre votre demande à l'aide de Nginx.
Dans l'élément de configuration service , vous devez noter que host ne doit inclure que l'adresse IP et port ne doit inclure que le numéro de port.
game.platform prend en charge minecraft , et le champ live_stream prend en charge bilibili , twitch et youtube .
Conseil
Obtenez la documentation qui peut être utilisée par la clé API de la plate-forme de diffusion en direct:
Bilibili: obtenez les informations requises pour la classe des informations d'identification
Twitch: Twitch Developers - Authentification
YouTube: Obtention d'autorisations d'autorisation
La valeur de character.chat.filter.strategy peut être default .
character.chat.filter.bad_words peut remplir une série de mots filtrants.
character.chat.injected_history Le tableau doit être d'un nombre uniforme, c'est-à-dire que ce doit être la fin du message auquel l'IA répond.
character.chat.max_history spécifie le nombre de messages conservés au maximum, c'est-à-dire la taille de la fenêtre de message.
character.speech.prompts_dir indique où vos fichiers audio TTS sont stockés, et votre nom de fichier doit être dans le format de [语言][情感标签]文本内容.wav . Par exemple [zh][开心]哇!今天真是一个好天气.wav ja zh en Les «étiquettes émotionnelles» sont arbitraires, tant que le modèle de grande langue peut être distingué; "Contenu texte" est le contenu texte représenté par les voix de cet audio.
Prudence
Il peut y avoir une fuite de mémoire dans le navigateur Microsoft Edge, donc ce projet n'est pas pris en charge.
La valeur facultative d' external_tool.browser.driver est firefox .
external_tool.browser.profile_dir doit s'assurer que sous le contrôle du sélénium, la connexion de votre compte et d'autres informations ne seront pas perdues. Laisser un programme vide détectera automatiquement l'emplacement (mais cela ne signifie pas qu'il sera certainement trouvé).
Conseil
Il est recommandé d'utiliser des outils de test API tels que Postman avant de commencer à tester si la connexion entre l'ordinateur exécutant ce projet et le noyau zerolan est normale. Zerolan Live Robot fournit des conseils lors des erreurs de connexion sur les pipelines, qui vous obligent toujours à dépanner manuellement.
Utilisez la commande suivante pour exécuter le programme principal de Zerolan Live Robot:
python main.pyNote
Cette étape est facultative .
Ce projet et Konekominecraftbot implémentent un ensemble d'interfaces qui peuvent contrôler les robots dans les jeux Minecraft à partir de ce projet. Si vous en avez besoin, veuillez déménager ici pour afficher les détails.
L'ancienne version de Zerolan Live Robot 1.0 a utilisé un sondage simple en seconde pour lire les informations sur l'environnement à partir de listes de cache dans chaque module de service. Dans l'ancienne version de Zerolan Live Robot 2.0, il a été transformé en un modèle de conception axé sur les événements .
Dans ce projet, le robot fonctionne lors de l'envoi et du traitement d'une série d'événements. En d'autres termes, sans événement, le robot ne répondra pas.
Chaque Event d'événement contient un nom d'événement, qui est essentiellement une chaîne. Tous les noms d'événements utilisés dans ce projet sont définis en common.enumerator.EventEnum , et vous pouvez également développer et ajouter vos propres noms d'événements. Prenons l'événement de traitement de la voix d'entrée de l'utilisateur à titre d'exemple, son événement est appelé EventEnum.SERVICE_VAD_SPEECH_CHUNK .
emitter est un objet global utilisé pour gérer l'envoi d'événements et l'exécution de l'écouteur. emitter a toujours le fil principal. Cependant, plusieurs threads s'exécuteront en même temps pendant l'ensemble du système en cours d'exécution, car chaque thread peut avoir sa propre instance de EventEmitter.
Utilisez le décorateur @emitter.on(EventEnum.某个事件) pour enregistrer rapidement un auditeur. L'auditeur peut être soit une fonction synchrone ou une fonction asynchrone. Lorsque nous devons envoyer un événement, nous pouvons utiliser la méthode asynchrone emitter.emit(EventEnum.某个事件, *args, **kwargs) .
Par exemple, lorsque le système détecte une voix humaine, l'événement SERVICE_VAD_SPEECH_CHUNK sera envoyé, et tous les auditeurs qui enregistrent cet événement seront appelés pour effectuer un traitement:
@ emitter . on ( EventEnum . SERVICE_VAD_SPEECH_CHUNK )
async def on_service_vad_speech_chunk ( speech : bytes , channels : int , sample_rate : int ):
response = ... # 假设这里获得了语音识别的结果
await emitter . emit ( EventEnum . PIPELINE_ASR , response ) # 发送自动语音识别事件L'auditeur ici est on_service_vad_speech_chunk , qui est essentiellement une fonction qui sera appelée lorsque SERVICE_VAD_SPEECH_CHUNK se produit et accepte plusieurs paramètres. Les paramètres ici sont complètement spécifiés par l'expéditeur d'événements.
Le pipeline est une mise en œuvre importante de la communication avec le noyau zerolan. L'utilisation de pipelines est très simple. Il vous suffit de passer dans un objet de configuration pour obtenir un objet de pipeline disponible. Ensuite, appelez la méthode predict ou stream_predict dans l'objet Pipeline pour utiliser le modèle AI dans Zerolan Core.
En prenant le modèle grand langage à titre d'exemple, spécifiez l'adresse du serveur cible (l'adresse de votre port ouverte Zerolan Core), transmettez LLMPipelineConfig à LLMPipeline pour établir le pipeline.
config = LLMPipelineConfig ( server_url = "..." )
llm = LLMPipeline ( config )
query = LLMQuery ( text = "你好,你叫什么名字?" , history = [])
prediction = llm . predict ( query )
print ( prediction . response )Cela devrait obtenir une réponse du modèle.
Si vous souhaitez connaître plus de détails d'implémentation, vous pouvez vérifier la définition des données dans Zerolan Data, qui peut également devoir être comprise en combinaison avec l'implémentation du pipeline et le contenu du fichier app.py dans le noyau Zerolan. Autrement dit, ils sont tous basés sur HTTP.
| Module | effet | Contenu pris en charge |
|---|---|---|
| navigateur | Contrôle du navigateur à base de sélénium | Le navigateur de Firefox s'ouvre, recherchez et fermez le navigateur |
| appareil | Microphone, capture d'écran, contrôle de haut-parleur | Testé sur Windows uniquement |
| filtre | Bloqueur de dialogue | Filtre de correspondance simple |
| jeu | Plugin de contrôle de jeu | Voir Konekominecraftbot pour plus de détails |
| live_stream | Lecture du barrage de la plate-forme de diffusion en direct | Bilibili, Twitch, YouTube |
| vad | Détection de l'audio de la voix humaine | Mécanisme de détection audio basé sur le seuil d'énergie |
Après le démarrage, le journal affiche "Dans son contexte, l'adresse demandée n'est pas valide".
Solution: vérifiez si la configuration de host est correcte dans le fichier de configuration. Si vous voulez un accès natif uniquement, spécifiez '127.0.0.1' .
Ce projet utilise la licence MIT, veuillez ne pas utiliser ce logiciel à des fins illégales.
N'hésitez pas à profiter de l'ouverture!
Licence MIT
Copyright (C) 2024 Akagawatsurunaki
Courriel : [email protected]
Github : akagawatsurunaki
Bilibili : Akagawa Tsurumi_Channel