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:
- Primeira Giro: O agente processa a consulta inicial do usuário para calcular a raiz quadrada.
- ID da Sessão: Após a primeira resposta, o
session_id
dessa resposta é capturado. - Segunda Giro: Quando o usuário pergunta
do the same thing for 81
, o agente entende o contexto porque osession_id
é passado para a segunda chamada. - 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
.