Conversazioni con più turni

Scopri come creare agenti che gestiscono il contesto nei vari turni di conversazione.

Esempio di spostamento multiplo della calcolatrice

In questo esempio, utilizzando il parametro session_id, l'agente può fare riferimento al contesto delle esecuzioni precedenti e mantenere il contesto in diversi turni di conversazione.


Informazioni: un'esecuzione agente è il processo di un agente che esegue uno o più task in base alle regole e istruzioni definite. In una conversazione (chiamata anche sessione), ogni volta che un utente prende un turno (come fare una domanda o dare un comando), si chiama "agent run". Durante questa esecuzione, l'agente potrebbe dover eseguire diversi passi (ad esempio utilizzare strumenti diversi o eseguire diversi calcoli) per completare l'attività e rispondere all'utente. Quindi, un turno utente = un agente eseguito, che può comportare diversi passaggi per ottenere la risposta finale.


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();
    }
}

Analizziamo l'esempio:

  1. Primo turno: l'agente elabora la query utente iniziale per il calcolo della radice quadrata.
  2. ID sessione: dopo la prima risposta, viene acquisito il valore session_id della risposta.
  3. Secondo turno: quando l'utente chiede a do the same thing for 81, l'agente capisce il contesto perché session_id viene passato alla seconda chiamata.
  4. Senza il session_id, l'agente non capirebbe a cosa si riferisce "la stessa cosa".

Funzionamento

Quando non si passa il parametro session_id, l'esecuzione avvierà una nuova sessione.

Quando si passa il parametro session_id, l'esecuzione riutilizzerà la sessione specificata anziché creare una nuova sessione.

Una sessione mantiene il contesto dell'esecuzione che avvia la sessione e qualsiasi esecuzione che utilizza lo stesso session_id.