Impostazione ed esecuzione separazione

Informazioni sulla gestione dell'impostazione e dell'esecuzione dell'agente in produzione.

Perché separare il richiamo di setup ed run

Nel Passo 2 dell'esempio Quickstart, agent.setup() e agent.run() vengono scritti nello stesso script ed eseguiti nello stesso processo. Questo metodo è abbastanza buono per un rapido "Hello World".

Tuttavia, in produzione, è possibile incorporare questi richiami in flussi separati.

Il metodo agent.setup() deve essere richiamato solo quando sono presenti aggiornamenti alle istruzioni o agli strumenti. Ad esempio, è possibile attivare agent.setup() come parte della pipeline CI/CD o ogni volta che il cliente aggiorna le istruzioni o gli strumenti di un agente nei casi in cui la piattaforma consente agli agenti configurati dal cliente.

D'altra parte, agent.run() deve essere eseguito quando si ricevono richieste che devono essere gestite dall'agente. Ad esempio, è possibile attivare l'esecuzione come parte di un'applicazione Web o di un chatbot Slack o di altri flussi di gestione delle richieste dell'applicazione per gli utenti finali. Tali flussi non sono in genere il flusso di configurazione dell'agente.

Richiamo separato durante il riutilizzo del codice

Con ADK, è possibile richiamare agent.setup() e agent.run() separatamente nel contesto o nei flussi appropriati, utilizzando la stessa definizione di agente. Esempio:

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