Olá, é possível estabelecer uma ordem entre as tools ou terminando uma tool forçar chamar uma determinada tool na sequencia? Como faço isso?
Olá, é possível estabelecer uma ordem entre as tools ou terminando uma tool forçar chamar uma determinada tool na sequencia? Como faço isso?
Bom dia, Rafael! Sim, é possível definir uma ordem de execução entre as tools no LangChain. Para isso, você pode usar um fluxo de controle para forçar a execução das tools em uma sequência específica ou até mesmo condicionar a execução de uma tool dependendo do resultado de outra.
Aqui estão algumas abordagens que você pode usar para organizar e controlar a ordem das tools no LangChain:
Chain
ou SequentialChain
O LangChain oferece classes como Chain
ou SequentialChain
para organizar várias tools em uma sequência, onde a saída de uma tool é passada como entrada para a próxima. Isso ajuda a garantir que a execução siga uma ordem determinada.
Exemplo de uma cadeia simples de tools:
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
# Defina suas tools
tool1 = Tool(
name="Tool 1",
func=my_tool_1_function,
description="Esta é a primeira tool."
)
tool2 = Tool(
name="Tool 2",
func=my_tool_2_function,
description="Esta é a segunda tool."
)
# Defina o agente com uma sequência específica
tools = [tool1, tool2]
agent = initialize_agent(tools, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, llm=my_llm_model)
# Chame o agente e ele executará as tools na ordem
response = agent.run("Input message")
AgentExecutor
Caso você queira garantir que uma determinada tool seja chamada após o término de uma outra, você pode usar o AgentExecutor
para controlar a sequência. O AgentExecutor
permite que você defina um fluxo mais específico de execução.
Exemplo de uso do AgentExecutor
com execução sequencial:
from langchain.agents import AgentExecutor
from langchain.prompts import PromptTemplate
# Exemplo de definição de tools
tool1 = Tool(name="Tool 1", func=my_tool_1_function, description="Executa a primeira tarefa.")
tool2 = Tool(name="Tool 2", func=my_tool_2_function, description="Executa a segunda tarefa.")
tools = [tool1, tool2]
# Executor para executar as tools na ordem
agent_executor = AgentExecutor(
tools=tools,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
llm=my_llm_model,
)
# Executando as tools sequencialmente
response = agent_executor.invoke(input="Sua mensagem inicial")
Você também pode controlar manualmente a ordem de execução, verificando o resultado de uma tool antes de decidir se chama a próxima. Isso é útil se a execução de uma tool depende de condições ou do resultado de uma tool anterior.
Exemplo de controle manual:
result_1 = tool1.run(input_data)
if result_1: # Se a execução da primeira tool for bem-sucedida
result_2 = tool2.run(result_1) # Passe o resultado da tool 1 como entrada para a tool 2
Conditional Chains
Em alguns casos, você pode querer executar tools condicionalmente. Para isso, você pode usar uma cadeia condicional, onde você verifica o resultado da execução de uma tool e, dependendo desse resultado, chama outras tools. O LangChain permite configurar esse tipo de lógica condicional com base em parâmetros ou outputs.
Exemplo de execução condicional:
from langchain.chains import LLMChain
# Definir tools
tool1 = Tool(name="Tool 1", func=my_tool_1_function)
tool2 = Tool(name="Tool 2", func=my_tool_2_function)
# Lógica condicional para decidir qual tool chamar
result = tool1.run(input_data)
if result == "Condição atendida":
tool2.run(result)
Depois me fala se resolveu! ;)
obrigado!
Tamo junto!
pessoal, qual a diferença entre usar openai com thread e assistentes e o agentes?