Separando Configuração e Execução

Saiba mais sobre como lidar com a configuração do agente e executá-la em produção.

Por que separar a configuração e a chamada de execução

Na Etapa 2 do exemplo Início Rápido, o agent.setup() e o agent.run() são gravados no mesmo script e executados no mesmo processo. Este método é bom o suficiente para um rápido "Hello World".

No entanto, na produção, talvez você queira incorporar essas invocações em fluxos separados.

O método agent.setup() só precisa ser chamado quando houver atualizações nas instruções ou nas ferramentas. Por exemplo, você pode acionar agent.setup() como parte do seu pipeline de CI/CD ou toda vez que seu cliente atualizar as instruções ou ferramentas de um agente nos casos em que sua plataforma permite agentes configurados pelo cliente.

Por outro lado, o agent.run() precisa ser executado quando você recebe solicitações a serem tratadas pelo agente. Por exemplo, você pode acionar a execução como parte de um aplicativo Web ou de um chatbot do Slack ou de outros fluxos de tratamento de solicitações de aplicativos para os usuários finais. Esses fluxos geralmente não são o fluxo de configuração do agente.

Separar chamada durante a reutilização do código

Com o ADK, você pode chamar agent.setup() e agent.run() separadamente em seu contexto ou fluxos apropriados, usando a mesma definição de agente. Exemplo:

Python

agent_def.py

# Shared agent definition component using ADK
# To be imported and used by agent_setup.py and agent_run.py

@tool
def get_weather(location: str) -> Dict[str, str]:
    """Get the weather for a given location"""
    return {"location": location, "temperature": 72, "unit": "F"}

client = AgentClient(
    auth_type="api_key",
    profile="DEFAULT",
    region="us-chicago-1",
)

weather_agent = Agent(
    client=client,
    agent_endpoint_id="YOUR_AGENT_ENDPOINT_ID",
    instructions="You perform weather queries using tools.",
    tools=[get_weather]
)

agent_setup.py

# The setup code
# Invoke when agent definition changes

from agent_def import weather_agent

weather_agent.setup()

agent_run.py

# The run code
# Invoke when there's a request to handle

from agent_def import weather_agent

input = "Is it cold in Seattle?"
response = agent.run(input)
response.pretty_print()

Java

WeatherAgentSetup.java

package demos.weather;

import com.oracle.bmc.ConfigFileReader;
import com.oracle.bmc.adk.agent.Agent;
import com.oracle.bmc.adk.client.AgentClient;
import com.oracle.bmc.adk.tools.Param;
import com.oracle.bmc.adk.tools.Tool;
import com.oracle.bmc.adk.tools.Toolkit;
import com.oracle.bmc.auth.BasicAuthenticationDetailsProvider;
import com.oracle.bmc.auth.SessionTokenAuthenticationDetailsProvider;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Collections;

public class WeatherAgentSetup {
  public static class WeatherToolkit extends Toolkit {

    /**
     * Get the weather for a given location.
     *
     * @param location The location to get the weather for.
     * @return A map containing the weather information.
     */

    @Tool(name = "getWeather", description = "Get weather of a given location")
    public static Map<String, String> getWeather(
            @Param(description = "The location") String location) {
      Map<String, String> weather = new HashMap<>();
      weather.put("location", location);
      weather.put("temperature", "72");
      weather.put("unit", "F");
      return weather;
    }
  }

  public static Agent setupWeatherAgent() {
    // Initialize the AgentClient

    final String configLocation = "~/.oci/config";
    final String configProfile = "DEFAULT";

    BasicAuthenticationDetailsProvider authProvider =
            new SessionTokenAuthenticationDetailsProvider(
                    ConfigFileReader.parse(configLocation, configProfile));

    AgentClient agentClient = AgentClient.builder()
            .authProvider(authProvider)
            .region("us-chicago-1")
            .build();

    Agent weatherAgent = Agent.builder()
            .client(agentClient)
            .agentEndpointId("YOUR_AGENT_ENDPOINT_ID")
            .instructions("You perform weather queries using tools.")
            .tools(Arrays.asList(new WeatherToolkit()))
            .build();

    return weatherAgent;
  }
}

WeatherAgentSetupRunner.java


package demos.weather;

public class WeatherAgentSetupRunner {

  public static void main(String[] args) {
    try {
      // Create and set up the weather agent
      WeatherAgentSetup.setupWeatherAgent().setup();

      System.out.println("Weather agent setup completed.");
    } catch (Exception e) {
      System.err.println("Failed to set up the weather agent: " + e.getMessage());
      e.printStackTrace();
    }
  }
}

WeatherAgentRun.java

package demos.weather;

import com.oracle.bmc.adk.agent.Agent;
import com.oracle.bmc.adk.utils.RunResponse;

public class WeatherAgentRun {

  public static void main(String[] args) {
    try {
      // Create the agent instance
      Agent weatherAgent = WeatherAgentSetup.setupWeatherAgent().setup();

      // Input prompt
      String input = "Is it cold in Seattle?";

      // Run the agent with the input
      RunResponse response = weatherAgent.run(input);

      // Print the result
      response.prettyPrint();

    } catch (Exception e) {
      System.err.println("Failed to run the weather agent: " + e.getMessage());
      e.printStackTrace();
    }
  }
}