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:
- Primera vuelta: el agente procesa la consulta de usuario inicial para calcular la raíz cuadrada.
- ID de sesión: después de la primera respuesta, se captura el
session_idde esa respuesta. - Segunda vuelta: cuando el usuario pregunta a
do the same thing for 81, el agente entiende el contexto porquesession_idse transfiere a la segunda llamada. - 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.