Conversaciones de varias vueltas

Descubra cómo crear agentes que mantengan el contexto entre turnos de conversación.

Ejemplo de conversión múltiple de calculadora

En este ejemplo, mediante el parámetro session_id, el agente puede hacer referencia al contexto de las ejecuciones anteriores y mantener el contexto en varias vueltas de conversación.


Información: una ejecución de agente es el proceso de un agente que ejecuta una o más tareas en función de sus reglas e instrucciones definidas. En una conversación (también llamada sesión), cada vez que un usuario toma un turno (como hacer una pregunta o dar un comando), se llama una "ejecución de agente". Durante esta ejecución, es posible que el agente deba realizar varios pasos (como el uso de diferentes herramientas o la realización de varios cálculos) para completar la tarea y responder al usuario. Por lo tanto, un turno de usuario = una ejecución de agente, que puede implicar varios pasos para obtener la respuesta 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();
    }
}

Desglosemos el ejemplo:

  1. Primera vuelta: el agente procesa la consulta de usuario inicial para calcular la raíz cuadrada.
  2. ID de sesión: después de la primera respuesta, se captura el session_id de esa respuesta.
  3. Segunda vuelta: cuando el usuario pregunta a do the same thing for 81, el agente entiende el contexto porque session_id se transfiere a la segunda llamada.
  4. Sin session_id, el agente no entendería a qué se refiere "la misma cosa".

Funcionamiento

Cuando no transfiera el parámetro session_id, la ejecución iniciará una nueva sesión.

Al transferir el parámetro session_id, la ejecución volverá a utilizar la sesión especificada, en lugar de crear una nueva sesión.

Una sesión mantiene el contexto de la ejecución que inicia la sesión, así como cualquier ejecución que utilice el mismo session_id.