** Disclâmer: Não sou ótimo em escrever documentação, fique à vontade para abrir um problema se precisar de mais suporte sobre como usar **
Seu assistente pessoal. O Cyrano é um grande modelo de idioma que tem acesso a um conjunto de ferramentas que pode optar por usar sempre que forem necessárias para responder ao usuário. Seu nome vem do personagem de teatro francês Cyrano de Bergerac, de Edmond Rostand.
Cyrano usa os últimos modelos OpenAI: GPT-3.5-Turbo-0613 (mais rápido) ou GPT-4-0613 (mais inteligente). Eles têm acesso às funções do Openai. O repositório é baseado na estrutura de Langchain.
TODO: Adicione exemplos e/ou um vídeo
Cyrano usa o Python-Chess para manter um estado interno de tabuleiro de xadrez o tempo todo. Ao ouvir um xadrez se mover na linguagem natural na conversa, ela a traduz para a representação algébrica correspondente e a reproduz em seu quadro interno de python-chess. Ele usa o Stockfish por 0,1 segundo para decidir o que jogar em resposta. A placa é salva como um Fen em um arquivo JSON, para que você possa retomar seu jogo a qualquer momento no futuro.
Cyrano tem acesso a 3 ações relacionadas a xadrez:
A Cyrano armazena as últimas mensagens até uma certa quantidade de tokens (padrão 1500) em sua janela de contexto.
Com base nos agentes generativos de papel: simulacra interativo do comportamento humano por Park, et. al.
A memória de longo prazo usa uma loja de vetores ponderados no tempo. Sempre que a conversa excede 1500 tokens, as mensagens mais antigas são resumidas, vetorizadas (usando um modelo de Transformers de sentença) e armazenadas em um banco de dados de loja de vetores (QDRANT). Cada vez que a Cyrano armazena uma memória, ele as obtém em 10 em como são memoráveis. Cada memória é um texto curto, o vetor correspondente, o importância_score, um objeto CreateD_AT DateTime e um objeto Last_Acced_at DateTime.
Em tempo de execução, Cyrano busca as 5 principais memórias mais relevantes e as adiciona à última mensagem do usuário. Ao escolher as memórias mais relevantes, ele usa similaridade semântica, ponderada pela idade da memória, usando a fórmula: semantic_similarity + (1 - decay_rate) ** hours_passed . Para o qual semântico_similaridade é a distância cosseno entre os vetores, Decay_rate representa a rapidez com que as memórias perdem a relevância, e o HourS_Passed é o delta entre o presente e o último_AccedD_AT.
Você pode usar o Cyrano como um agente apenas de texto definindo a variável de som como false em src/main.py. I Você escolhe fazer isso, as entradas serão Python input() e saídas serão textos.
Se você optar por interagir com ele usando voz e ouvido, precisará usar o porco -espinho para a detecção de palavras de despertar. Para este equivalente "Alexa" ou "Hey Google", eu simplesmente escolhi "Cyrano". Sempre que você quiser interagir com o modelo, pode dizer o nome em voz alta, espere um sinal sonoro e comece a falar.
NOTA: A palavra despertar está atualmente com sotaque francês. Simplesmente regenere -o no site de porco -espinho em outro idioma, se necessário.
O som é gravado usando a biblioteca de SpeechRecognition. Depois de ouvir um silêncio, ele parará de gravar e enviará o arquivo de som para a API Whisper OpenAi, que enviará de volta o texto transcrito.
Cyrano pode usar 3 opções TTS:
pyttsx3, que é gratuito e tem uma voz robótica, mas aceitável, no Windows.
Google Cloud TTS TTS muito boa opção de qualidade/ preço IMO. Funciona bem em qualquer sistema operacional.
Onze laboratórios de melhor qualidade de som, mas a versão gratuita é limitada e a versão paga não oferece caracteres suficientes por mês.
Como eu precisava de Cyrano para correr em uma framboesa, queria boa qualidade e alto volume; portanto, não muito caro, eu escolhi o Google TTS. Deixei todas as funções para as 3 opções em SRC/Sound_Utils.py. Sinta -se à vontade para usar o que melhor lhe convier. Para o Google ou onze laboratórios, você precisará adicionar a chave da API no arquivo .env.
Clone o repositório e crie um arquivo .env com toda a API_KEY e um prompt do sistema contendo o seguinte:
Exemplo de prompt do sistema (a identidade do 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."
Chave da API OpenAI
Chave da API de pesquisa do Google
Optionnal: chave da API de pesquisa do google
Instale as bibliotecas necessárias: pip install -r requirements.txt
Inicie o aplicativo: python src/main.py
Ao iniciar o aplicativo, deve reproduzir algumas notas. Diga "Cyrano" Quando você quiser interagir com ele, um sinal sonoro notificará que está ouvindo e outro quando detectar um silêncio e parar de transcrever.