Home › Fóruns › Domine LLMs com LangChain › Angents & Tools não funcionam
Marcado: ReAct (LangChain – agentes e tools)
- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 1 semana, 6 dias atrás por Gabriel Alves.
- AutorPosts
- 7 de janeiro de 2025 às 12:09 #47165
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.
7 de janeiro de 2025 às 19:39 #47175Achei 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_DESCRIPTIONficou 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.
7 de janeiro de 2025 às 20:39 #47177No 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.
8 de janeiro de 2025 às 09:19 #47179Olá 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/
8 de janeiro de 2025 às 09:24 #47180Exato 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
10 de janeiro de 2025 às 13:40 #47267Isso, 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
- AutorPosts
- Você deve fazer login para responder a este tópico.