Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Ordem das Tools

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?

4 respostas
solução!

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:

1. Usando 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")

2. Forçar a Execução de Tools Específicas Usando 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")

3. Controle Manual de Fluxo

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

4. Usando 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?