** Disclamer: je ne suis pas génial pour écrire la documentation, n'hésitez pas à ouvrir un problème si vous avez besoin de plus de soutien sur la façon d'utiliser **
Votre assistant personnel. Cyrano est un modèle de langue large qui a accès à un ensemble d'outils qu'il peut choisir d'utiliser chaque fois qu'ils sont nécessaires pour répondre à l'utilisateur. Son nom vient du personnage de théâtre français Cyrano de Bergerac par Edmond Rostand.
Cyrano utilise les derniers modèles OpenAI: GPT-3.5-Turbo-0613 (plus rapide) ou GPT-4-0613 (plus intelligent). Ils ont accès aux fonctions OpenAI. Le repo est basé sur le cadre de Langchain.
TODO: ajouter des exemples et / ou une vidéo
Cyrano utilise Python-Chess pour garder un état interne de la carte d'échecs à tout moment. Lorsque vous entendez un échec dans le langage naturel dans la conversation, il le traduit par la représentation algébrique correspondante et la joue sur sa carte interne de python. Il utilise Stockfish pendant 0,1 seconde pour décider quoi jouer en réponse. Le conseil d'administration est ensuite enregistré en tant que FEN dans un fichier JSON afin que vous puissiez reprendre votre jeu à tout moment à l'avenir.
Cyrano a accès à 3 actions liées aux échecs:
Cyrano stocke les derniers messages jusqu'à une certaine quantité de jetons (par défaut 1500) dans sa fenêtre de contexte.
Basé sur les agents génératifs de papier: simulacra interactif du comportement humain par parc, et. al.
La mémoire à long terme utilise un magasin vectoriel pondéré dans le temps. Chaque fois que la conversation dépasse 1500 jetons, les messages les plus anciens sont résumés, vectorisés (à l'aide d'un modèle de transformateurs de phrase) et stockés dans une base de données de magasin vectoriel (QDRANT). Chaque fois que Cyrano stocke une mémoire, il les marque sur 10 sur leur mémorable. Chaque mémoire est un texte court, le vecteur correspondant, l'importance_score, un objet DateTime Created_at et un objet DateTime Last_AccessEd_at.
Au moment de l'exécution, Cyrano récupère les 5 meilleurs souvenirs les plus pertinents et les ajoute au dernier message utilisateur. Lors du choix des souvenirs les plus pertinents, il utilise une similitude sémantique, pondérée par l'âge de la mémoire, en utilisant la formule: semantic_similarity + (1 - decay_rate) ** hours_passed . Pour laquelle Semantic_similarity est la distance du cosinus entre les vecteurs, Decay_Rate représente la rapidité avec laquelle les souvenirs perdent la pertinence, et les heures_passed est le delta entre le présent et last_accessed_at.
Vous pouvez utiliser Cyrano comme agent de texte uniquement en définissant la variable sonore sur FALSE dans src / main.py. I Vous choisissez de le faire, les entrées seront Python input() et les sorties seront des textes.
Si vous choisissez d'interagir avec lui à l'aide de la voix et de l'oreille, vous devrez utiliser le porc-épic pour la détection des mots de sillage. Pour cet équivalent "Alexa" ou "Hey Google", j'ai simplement choisi "Cyrano". Chaque fois que vous souhaitez interagir avec le modèle, vous pouvez dire son nom à haute voix, attendre un bip et commencer à parler.
Remarque: Le mot de réveil est actuellement défini avec un accent français. Régénérez-le simplement à partir du site Web de Porcupine dans une autre langue si nécessaire.
Le son est enregistré à l'aide de la bibliothèque SpeechRecognition. Après avoir entendu un silence, il cessera d'enregistrer et envoie le fichier son à l'API Openai Whisper qui renverra le texte transcrit.
Cyrano peut utiliser 3 options TTS:
pyttsx3 qui est gratuit et a une voix robotique mais acceptable sur Windows.
Google Cloud TTS très bonne qualité / Option de prix IMO. Fonctionne bien sur n'importe quel système d'exploitation.
Eleven Labs meilleure qualité sonore, mais la version gratuite est limitée et la version payante n'offre pas suffisamment de caractère par mois.
Comme j'avais besoin de Cyrano pour fonctionner sur une framboise, je voulais une bonne qualité et un volume élevé, donc pas trop cher, j'ai choisi Google TTS. J'ai laissé toutes les fonctions pour les 3 options dans src / son_utils.py. N'hésitez pas à utiliser celui qui vous convient le mieux. Pour Google ou Eleven Labs, vous devrez ajouter la clé API dans le fichier .env.
Clone le repo, puis créez un fichier .env avec tous les API_KEY et une invite système contenant les éléments suivants:
Exemple d'invite du système (l'identité du modèle):
SYS_PROMPT="You are Cyrano, a personal assistant with the personality of Cyrano de Bergerac. Today's date is {current_date}. You're on {user_name}'s desk. {user_description}. {user_name}'s messages are recorded in sound and then transcribed into text. It may happen that the sound is incorrectly transcribed. You regularly reply in a sarcastic and humorous manner."
Clé API Openai
Clé de recherche Google Search
OptionNal: Google Search API Key
Installez les bibliothèques requises: pip install -r requirements.txt
Lancez l'application: python src/main.py
Lors du démarrage, l'application doit jouer quelques notes. Dites "Cyrano" lorsque vous voulez interagir avec lui, un bip avertira qu'il est à l'écoute et un autre lorsqu'il détecte un silence et cesse de transcrire.