Respostas no Fórum
- AutorPosts
Olá Celso! Pode ser um bug da biblioteca no Colab, testei agora o código com a versão mais recente e funcionou corretamente. Testei o mesmo código da seção (link aqui)
Tente desinstalar o bitsandbytes e instalar novamente de outro modo, segue o comando abaixo:
!pip uninstall bitsandbytes
!python -m pip install bitsandbytes --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui
E reinicie a sessão do Colab logo após executar o comando (provavelmente ele vai pedir automaticamente, daí basta clicar no botão que aparecer na tela para reiniciar)
Caso não funcione, outro comando que costuma resolver é esse:
!pip install bitsandbytes-cuda110 bitsandbytes
(execute bem no começo do Colab e reinicie a sessão antes)
Teste e me avise se não funcionar
Olá Douglas,
Obrigado pela sua sugestão! Essa funcionalidade já está no planejamento de futuras atualizações. No entanto, devido a limitações no player de vídeo, ainda não foi possível implementá-la de modo que afete todas as aulas, mas a intenção é sim adicioná-la assim que viável.
11 de março de 2025 às 18:36 em resposta a: detecção de faces com CNN não executando (erro cudaOccupancy…) #48457Oi Paulo! Ainda não, não há uma correção por parte dos desenvolvedores da biblioteca que torne compatível com a versão CUDA do Colab. Recomendamos usar a alternativa com o HOG, que possui maior compatibilidade entre sistemas e performa bem. Se preferir o CNN, pode tentar executar em ambiente local ou em outro cloud provider que não seja o Colab.
Olá, obrigado pelo comentário! O histórico foi adicionado à pipeline na chain de contextualização (que tem o objetivo de utilizar as mensagens anteriores e a última pergunta feita para reformulá-la, caso faça referência a informações já mencionadas no histórico). Dessa forma, se a pergunta do usuário depender de algo do histórico, o modelo poderá reconstruí-la corretamente antes da busca nos documentos. Mas reforçar o histórico na chain de perguntas & respostas pode ser bom nessa situação que você citou.
Como esse projeto foca em interações com documentos/PDFs, o principal objetivo é contextualizar a resposta com base nas informações recuperadas e no histórico do chat relacionado a esses documentos. No entanto, sua adaptação faz bastante sentido se a intenção for criar um chatbot que precise lembrar de informações gerais que o usuário forneceu durante a conversa e que não estão de nenhum modo relacionados ao conteúdo ou tema dos PDFs carregados.
Olá Michael!
O history_aware_retriever sempre retorna documentos porque seu comportamento padrão é recuperar informações mesmo que a similaridade com a consulta seja baixa, e como o objetivo do projeto é conversar com documentos então é esperado que sempre haja algum PDF para ser consultado como referência. Para filtrar apenas documentos realmente relevantes, você pode alterar parâmetros do search_kwargs do retriever: ajustar k (número de documentos retornados) e fetch_k (número de documentos inicialmente buscados) pode ajudar a filtrar melhor as respostas (por exemplo, diminuir k para 1 retornaria apenas o documento mais relevante). O código usa o método mmr para recuperação, mas você pode customizar os parâmetros para melhorar a relevância dos resultados. Você pode ainda testar outros métodos de busca, como similarity ou similarity_score_threshold, dependendo do comportamento desejado para o retriever.
Outra opção seria filtrar a resposta com base na pontuação de similaridade (score) que é obtida entre a pergunta e os documentos. Você poderia definir um limiar (threshold) de similaridade para filtrar apenas os documentos que tenham uma pontuação acima de um determinado valor.
Exemplo:
query = "A pergunta aqui..." docs_and_scores = faiss_index.similarity_search_with_score(query, k=5) threshold = 0.7 # ajuste conforme necessário relevant_docs = [doc for doc, score in docs_and_scores if score > threshold]
Quanto a transformar o retriever em uma Tool dentro de um Agent, isso pode ser uma abordagem válida, especialmente se você implementar um mecanismo de decisão que primeiro classifique a intenção da pergunta antes de buscar documentos. Outra alternativa seria adicionar um filtro semântico antes de exibir os resultados, como um reranker (ex: Cohere Rerank) ou um modelo de classificação treinado para validar se os documentos são realmente úteis para a consulta. Ou ainda, simplesmente pedir para a própria LLM classificar se é uma pergunta que deve ser consultada em arquivos ou não. Isso pode evitar buscas irrelevantes sem precisar modificar toda a estrutura do pipeline.
25 de fevereiro de 2025 às 14:47 em resposta a: detecção de faces com CNN não executando (erro cudaOccupancy…) #48100Disponha =)
Abraços!
25 de fevereiro de 2025 às 11:48 em resposta a: detecção de faces com CNN não executando (erro cudaOccupancy…) #48098Olá Martony!
Esse erro parece ser devido a uma incompatibilidade recente envolvendo esse método do dlib, que ainda não há uma solução oficial dos autores mas estamos a procura de uma alternativa. Por enquanto, para esses exemplos de detecção de faces você pode estar usando o HOG mesmo ao invés desse método com CNN, que é bem próximo e bastante eficaz, muito usado para detecção ainda por ser mais rápido que CNN ao mesmo tempo que é mais robusto que o haarcascade.
Olá Michael! O método from_youtube_url() não detecta automaticamente o idioma das legendas. Você precisa especificar o idioma desejado usando o parâmetro language. Se não for definido, o loader tentará buscar as legendas no idioma padrão do vídeo ou as automáticas, caso estejam disponíveis.
Portanto, se você precisar de legendas em um idioma específico, pode usar o parâmetro language ao inicializar o YoutubeLoader, conforme exemplo no Colab oficial desse projeto.
Para vídeos armazenados localmente, o LangChain não possui um loader específico como o YoutubeLoader. No entanto, você pode usar bibliotecas como MoviePy ou FFmpeg para extrair o áudio do vídeo e, em seguida, aplicar a transcrição do áudio (speech-to-text) com ferramentas como o Google Speech-to-Text Audio Transcripts ou o Whisper da OpenAI (ambas podem ser integradas com o LangChain). Isso permite transcrever o áudio local e processá-lo da mesma forma que faria com vídeos do YouTube.
Como alternativa, você também pode integrar outras APIs específicas para isso, como a AssemblyAI ou Deepgram, que oferecem transcrição e análise de vídeos/áudios com suporte a múltiplos idiomas.
Olá!
O método bind_tools() é utilizado para preparar a LLM para reconhecer e utilizar as tools específicas. Ele permite que o modelo entenda a estrutura e os parâmetros delas, como nome, descrição e os argumentos esperados. Essa preparação é importante porque alguns modelos precisam ser explicitamente habilitados para usar tools, garantindo que a chamada dessa ferramenta ocorra de forma correta e eficiente.
Cada provedor de modelo (OpenAI, Anthropic, etc.) tem um formato específico para representar tools; o bind_tools() converte para o formato específico do modelo. Aqui tem mais explicações sobre, caso queira saber mais.
Embora você tenha notado que o modelo ainda conseguiu acessar as tools sem usar bind_tools(), isso pode ocorrer devido à capacidade intrínseca do modelo de inferir a lógica de uso dessas ferramentas. Modelos mais avançados podem ser mais flexíveis e capazes de lidar com chamadas de tools de maneira intuitiva, mas se usarmos o bind_tools() é mais garantido de aumentar a precisão e a compatibilidade, especialmente quando estamos usando várias tools.
Além disso, bind_tools() ajuda a garantir que os argumentos da tool sejam gerados no formato correto, reduzindo erros de formatação e melhorando a estruturação das saídas. Portanto, mesmo que em testes simples o uso de bind_tools() não pareça essencial, ele é uma prática recomendada que prepara o sistema para interações mais sofisticadas e robustas.
Olá Michael!
O problema que você está enfrentando é um tanto comum ao trabalhar com modelos menores, como o Llama 3.1 8B, que podem não ter capacidade suficiente para lidar com o mecanismo ReAct de forma eficiente. É um modelo bem menor (8B) comparado aos mais atuais com maior capacidade de raciocínio, ou seja, tem limitações nessa capacidade. Para que funcione sem problemas, o ReAct exige que o modelo não apenas gere respostas, mas também raciocine passo a passo e interaja com ferramentas (tools), o que pode ser desafiador para modelos com menos parâmetros.
Para contornar essa limitação, o que eu faria é continuar usando via provedor de modelos como o Groq ou OpenRouter, acaba funcionando bem com menos esforço. Caso continue usando esse mesmo modelo com menos parâmetros, você pode utilizar agents sem o mecanismo ReAct, optando por abordagens mais diretas, como o uso de Zero-Shot Agents ou ainda codificar um agente customizado. Essas abordagens simplificam o processo de interação com as tools, reduzindo a complexidade do raciocínio necessário.
O Zero-Shot Agent não exige múltiplas iterações de pensamento/ação, em vez de simular um raciocínio passo a passo ele tenta resolver a tarefa diretamente com o contexto que possui.
Quanto ao código, aqui tem um exemplo completo e a explicação. Hoje é recomendado usar o LangGraph para isso, que faz parte do ecossistema LangChain.
Obs: Tentar implementar um agente que requer uma ampla variedade de ferramentas ou raciocínio complexo pode não levar a resultados bem-sucedidos, mesmo se fizermos esforços extensivos de engenharia de prompt. Pode ser que modificando muito o prompt você consiga melhorar significativamente os resultados, mas há um momento em que não se melhora mais, é necessário testar novos modelos. Portanto, pode ser interessante ainda antes de mudar o código testar outros modelos menores e que sejam suportados pelo hardware local, já que podem ter capacidade da reasoning superior mesmo sendo menores (como o DeepSeek 7B).
Olá Michael!
Sim é possível customizar esse prompt, note que na aula foi baixado o PromptTemplate “hwchase17/react” através do método hub.pull mas você poderia defini-lo manualmente (caso sua intenção seja modificar as instruções no prompt) ou até baixar outro template (por exemplo hwchase17/react-chat ou outro dentro do Hub do LangChain).
Esse prompt usado foi projetado para seguir o ciclo completo de Thought/Action/Action Input/Observation, o que é essencial para a lógica de raciocínio iterativo dos agentes ReAct. Embora haja alguma flexibilidade para adaptar o prompt, remover ou omitir essas etapas pode comprometer a eficácia do agente na resolução de problemas complexos. No entanto, você pode ajustar o comportamento do agente para reduzir ou limitar o número de iterações.
Para fazer o agente realizar apenas uma iteração, você pode modificar o prompt ou controlar a lógica de execução. Uma ideia seria ajustar o prompt para que o agente saiba que deve fornecer a resposta final após a primeira observação – por exemplo, após o bloco Observation, você pode incluir instruções explícitas como: “Agora, com base na observação acima, forneça a resposta final diretamente.” Outra abordagem seria controlar isso no código, ajustando via parâmetros (max_iterations ou max_steps) no agente LangChain para limitar o ciclo a uma única rodada.
Olá Gabrielli!
Ainda esse semestre vamos lançar o curso novo sobre LLMs com outros projetos práticos, então já aproveito para te adiantar essa informação aqui. Em um dos projetos será usado o LangFlow, porém ele não será tanto o foco do curso (já que a ideia é ter tempo para mostrar também algumas outras abordagens modernas para criação de agentes). Usar pela API pode ser meio chato mesmo devido a alguns detalhes que podem não estar muito claros na documentação, mas caso você tenha alguma dúvida específica referente ao uso pode publicar aqui que eu talvez consiga te auxiliar nesse sentido
18 de janeiro de 2025 às 13:27 em resposta a: Erro no módulo de segmentação de imagens do curso de visão computacional. #47524Olá Fernando! Quais erros que aparecem para você? Eu tentei rodar o mesmo código (Colab aqui) e funcionou normalmente. Verifique se após executar os comandos de instalação (!pip install…) você reiniciou a sessão, pois se não reiniciar então o programa vai usar a versão da biblioteca que foi atribuída anteriormente. Provavelmente o Colab mostra automaticamente um botão para você reiniciar, mas se não aparecer então selecione a opção no menu do topo: Ambiente de execução > Reiniciar sessão
Obrigado pela contribuição, Leonardo!
Pois é então parece ser bloqueio na própria rede mesmo, em algumas empresas é bem comum bloquearem sites conhecidos de hospedagem de vídeos, talvez valha a pena perguntar se há a possibilidade de adicionar uma exceção ou alguma configuração que libere o acesso nesse caso. Se não tiver como, então se possível acesse pela rede móvel e assim deverá conseguir visualizar normalmente
- AutorPosts