Angents & Tools não funcionam

Home Fóruns Domine LLMs com LangChain Angents & Tools não funcionam

Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #47165
    Leonardo D
    Participante

      Testei com o OpenAI e funcionou, conforme o exemplo ele achou a capital de paris, também fiz uma função

       

      def numero_aleatorio(*args, **kwargs):
             return 42
      
      rnd_tool = Tool(name="Rnd", func = numero_aleatorio,
      description = "Use when you need to generate a random number")
      
      tools = [wikipedia_tool, date_tool, rnd_tool]
      <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">número aleatório. Action: Rnd Action Input: None 42Eu agora sei a resposta final. Final Answer: 42 > Finished chain.</span>
      Funcionou, porém quando pergunto
      resp = agent_executor.invoke({"input": "Qual a data atual?"})

      O sistema fica em loop e não consegue:

      > Entering new AgentExecutor chain…
      Preciso descobrir a data atual.
      Action: Dia() Action Input:
      Dia() is not a valid tool, try one of [wikipedia, Dia, Rnd].
      Preciso usar a ferramenta correta para obter a data atual.
      Action: Dia() Action Input:
      Dia() is not a valid tool, try one of [wikipedia, Dia, Rnd].
      Parece que houve um erro ao tentar obter a data atual. Vou tentar novamente.
      ….
      Parece que estou enfrentando dificuldades para acessar a data atual. Vou tentar novamente.

      Porque?

      • Este tópico foi modificado 2 semanas, 2 dias atrás por Leonardo D.
      #47175
      Leonardo D
      Participante

        Achei uma possível resposta, mas claro que não sei se é a melhor..foram 2 mudanças

        troca do create_react_agent por  initialize_agent

        Pelo que entendi:

        create_react_agent: Essa função é mais específica para criar agentes do tipo ReAct. Ela tenta automaticamente formatar as saídas do modelo de acordo com as expectativas do ReAct. O problema é que ela é rígida quanto ao formato esperado, especialmente quando você adiciona ferramentas customizadas.
        initialize_agent: Essa função é mais genérica e oferece mais flexibilidade. Ela permite que você especifique o AgentType, que define como o agente deve interagir com as ferramentas e o LLM.  Que foi justamente a segunda mudança AgentType.ZERO_SHOT_REACT_DESCRIPTION

         

        ficou assim:

        from langchain.agents import AgentType, initialize_agent, load_tools
        agent_executor = initialize_agent(
            tools, 
            llm, 
            agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, 
            verbose=True,
            handle_parsing_errors="Check your output and make sure it conforms! Do not output an action and a final answer at the same time."
        )

         

         


        Mas ai o problema é que quebra no pergunta de paris já que não é uma final Answer. Minha ideia é formatar a função current_day para que possa ser usado com o ciclo de “Thought, Action, Observation”. Ou sei lá ter 2 formas, uma para final answer e outra para wikipedia(ainda perdido com o qual seria o correto)

        • Esta resposta foi modificada 2 semanas, 1 dia atrás por Leonardo D.
        #47177
        Leonardo D
        Participante

          No final vi que ele oscila, pode ser problema da biblioteca

          Veja abaixo na primeira falha e depois ele tenta novamente e vai, o código está intermitente. Espero que seja algum erro meu, senão não daria para usar em produção;

          > Entering new AgentExecutor chain…
          Preciso descobrir a data atual.
          Action: Dia()
          Action Input: Dia() is not a valid tool, try one of [wikipedia, Dia, Rnd].Parece que houve um erro ao tentar usar a ferramenta para obter a data atual. Vou tentar novamente.
          Action: Dia
          Action Input: Final Answer: 07/01/2025.I now know the final answer.
          Final Answer: 07/01/2025.

          > Finished chain.

          #47179
          Gabriel Alves
          Moderador

            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/

            #47180
            Leonardo D
            Participante

              Exato Gabriel, parece ser problema de incosistência na biblioteca.

              Com algumas mudanças no código eu consigo lidar melhor com isso, já que consigo criar agentes para lidar com final answer e outras com aquelas actions…poderia até criar 2 diferentes, porém ainda tive erros de incosistência (hora dando erro hora executando) mas alguns códigos potencializa isso.

              Veja no meu último print que ele executou um loop na primeira deu erro e na segunda foi.

              Isso não da pra usar em produção…vou procurar algo mais robusto

              #47267
              Gabriel Alves
              Moderador

                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 

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.