Talk-Llama
(github.com/ggerganov)- Talk-Llama é um exemplo do
whisper.cppem que você fala no microfone pelo terminal, o Whisper converte a voz em texto e o LLaMA responde - A captura de áudio do microfone exige SDL2, e é necessário ativar a opção do CMake
WHISPER_SDL2=ONdurante a compilação - Ao executar, use
-mwpara especificar o modelo Whisper; para conversas em tempo real, os modelosbaseousmallsão recomendados - Em
-ml, especifique um modelo LLaMA compatível com ggml; a forma de preparar o modelo segue as instruções dollama.cpp - Se usar
--session FILE, é possível salvar e carregar o estado do modelo para manter o contexto em conversas longas ou em várias execuções
Exemplo de conversa por voz no terminal
whisper.cpp/examples/talk-llamaé um exemplo de conversa por voz com a IA LLaMA no terminal- Em uma demonstração de desempenho marcada em 2 de novembro de 2023, a execução aparece com a combinação Whisper Medium + LLaMA v2 13B Q8_0 em um M2 Ultra
- Uma demonstração anterior também é disponibilizada em vídeo como exemplo de execução em CPU
Fluxo de compilação e execução
whisper-talk-llamadepende da biblioteca SDL2 para capturar o áudio do microfone- Exemplos de instalação do SDL2 por sistema operacional:
- Linux da família Debian:
sudo apt-get install libsdl2-dev - Fedora Linux:
sudo dnf install SDL2 SDL2-devel - Mac OS:
brew install sdl2
- Linux da família Debian:
- Na compilação com CMake, ative a opção
WHISPER_SDL2=ONcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- O exemplo de execução especifica o modelo Whisper, o modelo LLaMA, o prompt e a quantidade de threads
./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Opções de modelo
- O argumento
-mwdefine o modelo Whisper a ser usado- Para uma experiência em tempo real, os modelos
baseousmallsão recomendados
- Para uma experiência em tempo real, os modelos
- O argumento
-mldefine o modelo LLaMA a ser usado- Para obter um modelo LLaMA compatível com
ggml, consulte as instruções do llama.cpp
- Para obter um modelo LLaMA compatível com
Continuidade de contexto com arquivo de sessão
whisper-talk-llamaoferece suporte a gerenciamento de sessão para conversas mais consistentes e contínuas- Isso permite manter o contexto de interações anteriores para entender e responder aos pedidos do usuário de forma mais natural
- O suporte a sessão é ativado com a opção de linha de comando
--session FILEna execução- Após cada interação, o estado do modelo do
whisper-talk-llamaé salvo no arquivo especificado - Se o arquivo não existir, ele será criado
- Se o arquivo já existir, o estado do modelo será carregado dele para retomar a sessão anterior
- Após cada interação, o estado do modelo do
- Isso é útil ao interagir com o assistant de IA em conversas longas ou ao longo de várias sessões, permitindo lembrar interações anteriores e fornecer respostas contextuais mais relevantes
- Exemplo de execução:
./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Saída de voz e feedback
- Para ouvir a resposta de texto gerada em forma de voz, é necessário um ferramenta de TTS
- Você pode usar o mecanismo de TTS que preferir e, conforme necessário, modificar o script speak
- A configuração padrão usa o
saydo macOS ou o SpeechSynthesizer do Windows - O texto informa que feedback pode ser enviado na GitHub Discussion #672
1 comentários
Opiniões no Hacker News
Interessante ver isso aqui :)
O desempenho do Apple Silicon provavelmente melhorou bastante em relação ao que aparece no vídeo. O whisper.cpp agora roda totalmente na GPU, e a velocidade de geração do llama.cpp também melhorou muito nos últimos meses
O desempenho de fato também é impressionante
Muito legal. Em um projeto recente, tentei conectar o Llama a um modelo de síntese de voz open source, e havia muitos elementos de engenharia interessantes
Pessoalmente, as ferramentas de auxílio à programação que considero mais úteis são as que reduzem o trabalho manual, em vez de tentar assumir o pensamento difícil ou a resolução de problemas — por exemplo, gerando argumentos e tipos a partir de docstrings, ou o contrário. Para tarefas mais complexas, percebi que é preciso dar ao assistente um ponto de partida bastante bom
Costumo falar sozinho enquanto programo, então, se uma ferramenta dessas pudesse incorporar o que eu digo em vetores de contexto para usar como entrada adicional e dar ao modelo um ponto de partida melhor, isso pareceria realmente futurista e útil. Demorei a adotar o Copilot e não o uso o tempo todo, mas ficaria curioso se alguém conhecer algo parecido
Se a proposta de pesos abertos virar realidade em até 270 dias, daqui a alguns meses isso pode acabar sendo proibido na prática
Pelo que encontrei, não há nada sobre proibir modelos com pesos abertos. Também não vejo muito motivo para que a recomendação final inclua “proibir”
Por exemplo, consigo imaginar recomendações favoráveis aos incumbentes, como tornar o ônus de adoção de modelos com pesos abertos pelo governo tão alto que comprar da OpenAI pareça muito mais atraente. Mas isso é diferente do que foi dito originalmente
A ordem executiva parece bem fácil de ler; deixei passar algo no texto?
https://www.whitehouse.gov/briefing-room/presidential-action...
Concordo que a forma como o escopo fica em aberto é preocupante, mas onde está a proibição de fato?
Ao executar
./talk-llamano Arch e no Debian, ocorre uma floating point exception. Também verifiqueisdl2libeffmpeg, e vi a issue relacionada (https://github.com/ggerganov/whisper.cpp/issues/1325), mas não consegui resolver. Mais alguém passa por isso?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
Não tenho certeza do que mudou, mas basicamente removi
ffmpegelibsdl2-deve rodeimakena raiz do repositório. Depois instaleilibsdl2effmpege rodeimake talk-llamaEm um i7-8550U de 4 núcleos com 16 GB de RAM, é bem lento
Na raiz do repositório, fiz mais ou menos isto:
$ sudo apt purge ffmpeg$ make clean$ git pull$ make$ sudo apt install libsdl2-dev$ make talk-llama$ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\nNão existe uma solução de conversão de texto em fala que receba o stream de texto e fale imediatamente, sem esperar o Llama terminar a geração?
Imagino que só seja possível se o modelo preencher o buffer rápido o suficiente para que o mecanismo de síntese de voz não pare
Será que dá para reduzir a latência não esperando a resposta completa do LLM terminar e, em vez disso, fazendo streaming da síntese de voz à medida que ela é gerada, em blocos de cerca de 6 tokens?
Dá para melhorar a detecção de fim de fala, que atualmente usa apenas um limite adaptativo básico, e também fazer um LLM pequeno gerar respostas rápidas genéricas enquanto um LLM maior calcula. A síntese de voz também pode ser transmitida em streaming por chunks ou por frases
Acho que uma das melhores versões open source desse tipo de chatbot é https://github.com/yacineMTB/talk. Hoje é bem provável que existam ainda mais projetos parecidos
Qual é a melhor interface de chat para Llama? Tenho uma 3090 e queria rodar um modelo no terminal para tarefas rápidas de programação
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
Parece ter sido feito para usar ElevenLabs e a API da OpenAI, mas talvez seja fácil configurá-lo para o Whisper.cpp e o Llama locais
Eles estão contratando e não há uma estratégia de monetização pública, então imagino que em breve haverá alguma mudança, como cobrar por parte dos recursos gratuitos ou limitá-los de propósito. Ainda assim, é difícil para apps leves para LLMs gratuitos que dependem totalmente do llama.cpp criarem aprisionamento a fornecedor. Se open source for mais importante que recursos, eu também recomendaria o ollama
Para perguntas técnicas, acho que o Wizard é o mais popular no momento
Estou bem satisfeito com o ollama para rodar LLMs open source locais, mas qual seria o equivalente para Whisper ou para modelos open source recentes de síntese de voz? Não conheço bem um projeto que torne tão simples configurar o Whisper localmente
Também achei o WhisperScript bem interessante: https://github.com/openai/whisper/discussions/1028
Dito isso, configurar o WhisperX não é tão difícil. Estas são anotações passo a passo que organizei alguns meses atrás: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
Para síntese de voz, o coqui tem a melhor experiência de usuário e os melhores modelos em vários idiomas, mas a qualidade não fica no mesmo nível dos provedores comerciais de síntese de voz
Alguém pode explicar de forma simples o que isto consegue fazer? Ele consegue aprender o contexto do chat e manter algum tipo de memória de longo prazo?
O limite de contexto do LLM depende do modelo e das configurações escolhidos pelo usuário. Por exemplo, varia conforme o modelo usado, como Llama 2, Wizard Vicuna etc., e conforme a forma como a janela de contexto foi configurada. Pode ser confuso porque o LLM não “responde” ao usuário exatamente; ele prevê a continuação mais plausível em um histórico de conversa entre o usuário e um assistant útil e, com isso, consegue fingir tão bem que é um assistant útil que acaba sendo de fato um assistant útil
Alterando o pipeline, esse tipo de comportamento também parece possível. A estrutura passaria a ser
reconhecimento de fala → Wrapper[Llama] → síntese de voz, e ficaria interessante se o Wrapper pudesse deixar o Llama fazer seu trabalho enquanto aplica processamento adicional ao texto de entradaO Wrapper poderia analisar a conversa e extrair elementos-chave como “o nome desta pessoa é Bob, homem, 35 anos, gosta de cachorros, prefere coisas organizadas, quer um lembrete para ligar para a filha às 17h, é um agente infiltrado da máfia antártica e prefere que falem com ele usando um forte sotaque polonês”, e agir de acordo com isso
Por exemplo, poderia criar um lembrete para as 17h via HomeAssistant, configurar o motor de síntese de voz com sotaque polonês e modificar o histórico inicial de conversa em execuções futuras. Algo como inserir o nome da pessoa no chat interno e fornecer um resumo compacto de seus interesses e personalidade na introdução prévia da próxima conversa
Assim, a interatividade surge por meio de ações executadas por outras ferramentas, e a continuidade também pode ser criada ao modificar o histórico da próxima conversa
Isto passa uma vibe de ELIZA muito forte