** Declámer: No soy excelente para escribir documentación, no dude en abrir un problema si necesita más apoyo sobre cómo usar **
Tu asistente personal. Cyrano es un modelo de idioma grande que tiene acceso a un conjunto de herramientas que puede elegir usar cuando sean necesarios para responder al usuario. Su nombre proviene del personaje del teatro francés Cyrano de Bergerac de Edmond Rostand.
Cyrano usa los últimos modelos Operai: GPT-3.5-TURBO-0613 (más rápido) o GPT-4-0613 (más inteligente). Tienen acceso a funciones de OpenAI. El repositorio se basa en el marco Langchain.
TODO: Agregar ejemplos y/o un video
Cyrano usa Python-Chass para mantener un estado interno de la junta de ajedrez en todo momento. Al escuchar un movimiento de ajedrez en el lenguaje natural en la conversación, lo traduce a la representación algebraica correspondiente y la juega en su tablero interno de Python-Spell. Utiliza Stockfish durante 0.1 segundos para decidir qué jugar en respuesta. El tablero se guarda como un fen en un archivo JSON para que pueda reanudar su juego en cualquier momento en el futuro.
Cyrano tiene acceso a 3 acciones relacionadas con el ajedrez:
Cyrano almacena los últimos mensajes hasta una cierta cantidad de tokens (predeterminado 1500) en su ventana de contexto.
Basado en el documento de los agentes generativos: simulacros interactivos del comportamiento humano por Park, et. Alabama.
La memoria a largo plazo utiliza una tienda vectorial ponderada en el tiempo. Cada vez que la conversación excede los 1500 tokens, los mensajes más antiguos se resumen, vectorizan (utilizando un modelo de transformadores de oraciones) y se almacenan en una base de datos de vectores (QDRANT). Cada vez que Cyrano almacena un recuerdo, los obtiene de 10 sobre cuán memorables son. Cada memoria es un texto corto, el vector correspondiente, la importancia_score, un objeto creado_at dateTime y un objeto de datetime de Last_Acced_at.
En tiempo de ejecución, Cyrano obtiene los 5 recuerdos más relevantes y los agrega al último mensaje de usuario. Al elegir los recuerdos más relevantes, utiliza similitud semántica, ponderada por la edad de la memoria, usando la fórmula: semantic_similarity + (1 - decay_rate) ** hours_passed . Para el cual Semantic_Similarity es la distancia coseno entre los vectores, Decay_Rate representa la rapidez con que las memorias pierden relevancia, y Sours_Passed es el delta entre el presente y last_acciss_at.
Puede usar Cyrano como agente solo de texto configurando la variable de sonido en falso en src/main.py. Yo eliges hacerlo, las entradas serán Python input() y las salidas serán textos.
Si elige interactuar con ella usando voz y oído, deberá usar puercopine para la detección de palabras de estampado. Para este equivalente "Alexa" o "Hey Google", simplemente elegí "Cyrano". Siempre que desee interactuar con el modelo, puede decir su nombre en voz alta, espere un pitido y comience a hablar.
Nota: La palabra de estela se establece actualmente con un acento francés. Simplemente regenerarlo desde el sitio web de puercoespín en otro idioma si es necesario.
El sonido se graba utilizando la biblioteca SpeechRecognition. Después de escuchar un silencio, dejará de grabar y enviará el archivo de sonido a la API OpenAI Whisper que enviará el texto transcrito.
Cyrano puede usar 3 opciones TTS:
PYTTSX3, que es gratuito y tiene una voz robótica pero aceptable en Windows.
Google Cloud TTS Opción de muy buena calidad/ precio IMO. Funciona bien en cualquier sistema operativo.
Once Labs mejor calidad de sonido, pero la versión gratuita es limitada y la versión pagada no ofrece suficiente carácter por mes.
Como necesitaba que Cyrano se ejecutara en una frambuesa, quería buena calidad y alto volumen, por lo que no demasiado caro, elegí Google TTS. Dejé todas las funciones para las 3 opciones en SRC/Sound_utils.py. Siéntase libre de usar el que mejor le convenga. Para Google o Once Labs, deberá agregar la clave API en el archivo .env.
Clone el repositorio, luego cree un archivo .env con todos los api_key y un indicador del sistema que contiene lo siguiente:
Ejemplo de indicación del sistema (la identidad del modelo):
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."
Clave de API de OpenAI
Clave de API de búsqueda de Google
Opcionnal: clave de API de búsqueda de Google
Instale las bibliotecas requeridas: pip install -r requirements.txt
Inicie la aplicación: python src/main.py
Al comenzar la aplicación, debe jugar algunas notas. Diga "Cyrano" Cuando desee interactuar con él, un pitido notificará que está escuchando y otro cuando detecta un silencio y deja de transcribir.