Conversas de vários turnos

Saiba como criar agentes que mantêm o contexto em turnos de conversa.

Exemplo de vários giros da calculadora

Neste exemplo, usando o parâmetro session_id, o agente pode fazer referência ao contexto de execuções anteriores e manter o contexto em várias voltas de conversa.


Informações: uma execução de agente é o processo de um agente executando uma ou mais tarefas com base em suas regras e instruções definidas. Em uma conversa (também chamada de sessão), cada vez que um usuário faz uma curva (como fazer uma pergunta ou dar um comando), ela é chamada de "execução de agente". Durante essa execução, o agente pode precisar executar várias etapas (como usar diferentes ferramentas ou fazer vários cálculos) para concluir a tarefa e responder ao usuário. Assim, um usuário turn = uma execução de agente, que pode envolver várias etapas para obter a resposta final.


Python

calculator_multi_turns.py

from oci.addons.adk import Agent, AgentClient
from oci.addons.adk.tool.prebuilt import CalculatorToolkit

def main():

    client = AgentClient(
        auth_type="api_key",
        profile="DEFAULT",
        region="us-chicago-1"
    )

    agent = Agent(
        client=client,
        agent_endpoint_id="ocid1.genaiagentendpoint...",
        instructions="You perform calculations using tools provided.",
        tools=[CalculatorToolkit()]
    )

    agent.setup()

    # First turn (here we start a new session)
    input = "What is the square root of 256?"
    response = agent.run(input, max_steps=3)
    response.pretty_print()

    # Second turn (here we use the same session from last run)
    input = "do the same thing for 81"
    response = agent.run(input, session_id=response.session_id, max_steps=3)
    response.pretty_print()

if __name__ == "__main__":
    main()

Java

CalculateAgentMultiTurn.java

package demos.multiTurn;

import com.oracle.bmc.ConfigFileReader;
import com.oracle.bmc.adk.agent.Agent;
import com.oracle.bmc.adk.agent.RunOptions;
import com.oracle.bmc.adk.client.AgentClient;
import com.oracle.bmc.adk.run.RunResponse;
import demos.singleTurnSingleTool.CalculateAgent.SimpleCalculatorToolkit;
import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
import com.oracle.bmc.auth.SessionTokenAuthenticationDetailsProvider;

import java.util.Arrays;

public class CalculateAgentMultiTurn {
  public static void main(String[] args) throws Exception {
    final String configLocation = "~/.oci/config";
    final String configProfile = "DEFAULT";
    final String agentEndpointId = "ocid1.genaiagentendpoint...";

    BasicAuthenticationDetailsProvider authProvider =
            new SessionTokenAuthenticationDetailsProvider(
                    ConfigFileReader.parse(configLocation, configProfile));

    AgentClient agentClient = AgentClient.builder()
            .authProvider(authProvider)
            .region("us-chicago-1")
            .build();

    Agent agent = Agent.builder()
        .client(agentClient)
        .agentEndpointId(agentEndpointId)
        .instructions("You perform calculations using tools provided.")
        .tools(Arrays.asList(new SimpleCalculatorToolkit()))
        .build();

      agent.setup();

      // First turn (here we start a new session)
      String input = "What is the sum of 2 and 3?";
      final Integer maxStep = 3;
      RunOptions runOptions = RunOptions.builder().maxSteps(maxStep).build();
      RunResponse response = agent.run(input, runOptions);
      response.prettyPrint();

      // Second turn (here we use the same session from last run)
      input = "Do the same thing for 3 and 5.";
      runOptions.setSessionId(response.getSessionId());
      response = agent.run(input, runOptions);
      response.prettyPrint();
    }
}

Vamos dividir o exemplo:

  1. Primeira Giro: O agente processa a consulta inicial do usuário para calcular a raiz quadrada.
  2. ID da Sessão: Após a primeira resposta, o session_id dessa resposta é capturado.
  3. Segunda Giro: Quando o usuário pergunta do the same thing for 81, o agente entende o contexto porque o session_id é passado para a segunda chamada.
  4. Sem o session_id, o agente não entenderia a que "a mesma coisa" se refere.

Como Funciona

Quando você não informar o parâmetro session_id, a execução iniciará uma nova sessão.

Quando você passar o parâmetro session_id, a execução reutilizará a sessão especificada, em vez de criar uma nova sessão.

Uma sessão mantém o contexto da execução que inicia a sessão, bem como todas as execuções que usam a mesma session_id.