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:
- Primo turno: l'agente elabora la query utente iniziale per il calcolo della radice quadrata.
- ID sessione: dopo la prima risposta, viene acquisito il valore
session_id
della risposta. - 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. - 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
.