Forum Replies Created
- AuthorPosts
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 January de 2025 at 13:27 in reply to: 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
Olá Carlos!
Você está executando localmente ou no Colab? Se for em sua máquina, poderia me informar a sua versão do LangChain?
E peço também por gentiliza se puder postar aqui a mensagem de erro completa que aparece ao fazer a importação, para verificarmos melhor
Olá!
Pela descrição do erro parece ser algo local, então sugiro primeiro testar em uma guia anônima ou outro navegador para descartar problemas relacionados a extensões como AdBlock. Se apresentar o mesmo problema em outros navegadores então sugiro desabilitar temporariamente softwares que poderiam impedir o carregamento, conforme os exemplos citados.
Outra coisa que pode resolver nesses casos é trocar o DNS no seu computador, vi alguns relatos de que isso resolveu esse mesmo problema. Veja se não está o DNS do Google (8.8.8.8), se sim experimente trocar pelo do Cloudflare (1.1.1.1).
Se ainda assim não funcionar, pode ser um bloqueio na rede do seu trabalho, já que mencionou estar acessando de lá. Muitas empresas bloqueiam o acesso a sites de vídeos populares como Vimeo (que é onde estão hospedadas as aulas da plataforma) ou YouTube. Nesse caso, pode ser bom verificar com o suporte técnico ou testar a conexão em outra rede se for possível.
Que ótimo =)
Disponha!
Isso, por essas razões pode ocorrer falha em algumas execuções, onde a LLM “se perde”
Você pode tentar usar o LangGraph conforme comentei, ou ainda dar uma olhada em serviços como o Crew AI, que é uma opção que tem sido bastante usada para criação de agentes mais complexos. Portanto pode ser algo mais robusto e confiável para ser usada em produção, além de mais completo que o LangChain devido à sua melhor integração com modelos open source
Caso deseje focar em modelos open source, também sugiro dar uma olhada no Llama Index
Que ótimo que conseguiu descobrir
Esse problema deve ocorrer porque alguns PDFs possuem conteúdos mal formatados ou usam codificação que dificulta a extração adequada do texto, resultando em palavras juntas ou sem espaçamento. Talvez quando você abriu o PDF com o Word e salvou novamente, o Word automaticamente reformatou o texto e com isso corrigiu essas inconsistências.
Para evitar isso no futuro, você pode usar ferramentas como PyPDF2 ou pdfplumber para inspecionar e corrigir problemas nos arquivos antes de carregá-los com o PyPDFLoader. Ou ainda, converter em um arquivo de texto ou outro formato legível antes de enviar o conteúdo para o RAG.
Se quiser também pode testar outros loaders de PDF que o LangChain suporta, como PyMuPDFLoader ou PDFMinerLoader. Mais informações aqui: https://python.langchain.com/docs/integrations/document_loaders/
Para lidar com PDFs com formatos inconsistentes, o uso de serviços como o Unstructured (que o LangChain também suporta) pode ser uma ótima solução para extrair textos de maneira mais robusta. Para mais informações sobre ele veja https://python.langchain.com/docs/integrations/document_loaders/unstructured_file/ – aliás também deixamos comentários sobre no final do Colab do projeto 03 (aqui)
Olá Tatiane!
Você pode usar o programa labelImg, que permite fazer as anotações de modo bastante prático. Na aula “Criação do seu dataset de imagens manualmente” tem uma explicação detalhada mostrando como pode usar.
Caso use o modelo YOLOv8 ou versão superior eu recomendo usar a plataforma roboflow, que oferece uma ferramenta gratuita para anotação e costuma ser mais prático pois gera em uma interface unificada os arquivos de anotação no formato para essa versão do YOLO – veja aqui a explicação de como usar https://roboflow.com/how-to-label/yolov8
Olá Leonardo!
Se entendi corretamente, inicialmente não estava funcionando, mas depois você executou o mesmo código com a mesma pergunta e funcionou. Isso pode estar relacionado à própria biblioteca e não a um erro na programação. Fiz algumas pesquisas e há diversos relatos da comunidade sobre inconsistências no LangChain, especialmente quando ele entra em loops infinitos, mesmo com tudo configurado corretamente.
Embora o LangChain seja excelente para lidar com várias funções de LLMs, ele apresenta algumas limitações para a implementação nativa de agentes, deixando a desejar em certos quesitos. Por isso, para tentar resolver eu recomendo antes experimentar mudar o prompt do sistema para ficar de acordo com o seu objetivo específico, dá para testar desse modo antes e ver se apresenta melhoras.
Parece que recentemente os autores da biblioteca passaram a mudar um pouco o foco, fazendo com que o melhor modo de implementar agentes no ecossistema LangChain seja através do LangGraph, que é uma extensão da biblioteca justamente voltada para a criação de agentes personalizáveis.
Para adaptar é necessário algumas modificações, esse artigo aqui explica bem e detalha exatamente essas mudanças: https://python.langchain.com/docs/how_to/migrate_agent/
Opa, parece ser algo que afeta a pré-visualização somente, mas para garantir você consegue me passar a versão do LangChain e a versão do Streamlit que tem instalado em sua máquina local? Para eu tentar reproduzir o problema daqui, já que em meus ambientes está funcionando conforme esperado
- AuthorPosts