Separación de configuración y ejecución

Obtenga información sobre el manejo de la configuración y ejecución del agente en producción.

Por qué separar la invocación de setup y run

En el paso 2 del ejemplo Inicio rápido, agent.setup() y agent.run() se escriben en la misma secuencia de comandos y se ejecutan en el mismo proceso. Este método es lo suficientemente bueno para un rápido "Hello World".

Sin embargo, en producción, puede que desee embeber estas llamadas en flujos independientes.

El método agent.setup() solo se debe llamar cuando hay actualizaciones de las instrucciones o las herramientas. Por ejemplo, puede disparar agent.setup() como parte de su pipeline de integración y despliegue continuos, o cada vez que el cliente actualice las instrucciones o herramientas de un agente en los casos en que su plataforma permita agentes configurados por el cliente.

Por otro lado, agent.run() debe ejecutarse cuando reciba solicitudes que gestione el agente. Por ejemplo, puede disparar la ejecución como parte de una aplicación web o de un chatbot de Slack u otros flujos de manejo de solicitudes de aplicación para los usuarios finales. Estos flujos no suelen ser el flujo de configuración del agente.

Separar llamada al reutilizar código

Con ADK, puede llamar a agent.setup() y agent.run() por separado en su contexto o flujos adecuados, al tiempo que utiliza la misma definición de agente. Ejemplo:

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();
    }
  }
}