AG2-Agent entwickeln

AG2, eine Community-Fork des ursprünglichen AutoGen, ist ein Open-Source-Framework zum Erstellen von KI-gestützten Agenten. Auf dieser Seite erfahren Sie, wie Sie einen Agenten mithilfe der frameworkspezifischen AG2-Vorlage (die Klasse AG2Agent im Vertex AI SDK for Python) entwickeln. Der Agent gibt den Wechselkurs zwischen zwei Währungen an einem bestimmten Datum zurück. Gehen Sie wie folgt vor:

  1. Ausführbares Programm definieren und konfigurieren
  2. Tool definieren und verwenden
  3. Optional: Orchestrierung anpassen

Hinweise

Prüfen Sie, ob Ihre Umgebung eingerichtet ist. Folgen Sie dazu der Anleitung unter Umgebung einrichten.

Schritt 1: Ausführbares Programm definieren und konfigurieren

Geben Sie die Modellversion an, die verwendet werden soll.

model = "gemini-1.5-flash-001"

Geben Sie den Namen für das ausführbare Programm an.

runnable_name = "Get Exchange Rate Agent"

Optional: Konfigurieren Sie das Modell.

from google.cloud.aiplatform.aiplatform import initializer

llm_config = {
    "config_list": [{
        "project_id":       initializer.global_config.project,
        "location":         initializer.global_config.location,
        "model":            "gemini-1.5-flash-001",
        "api_type":         "google",
    }]
}

Weitere Informationen zum Konfigurieren des Modells in AG2 finden Sie unter Detaillierte Informationen zur Modellkonfiguration.

Optional: Konfigurieren Sie die Sicherheitseinstellungen des Modells. Das folgende Beispiel zeigt, wie Sie die Sicherheitseinstellungen konfigurieren können:

from vertexai.generative_models import HarmBlockThreshold, HarmCategory

safety_settings = {
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
}

for config_item in llm_config["config_list"]:
    config_item["safety_settings"] = safety_settings

Weitere Informationen zu den Optionen für Sicherheitseinstellungen in Gemini finden Sie unter Sicherheitsattribute konfigurieren.

Erstellen Sie einen AG2Agent mithilfe der Modellkonfigurationen:

agent = agent_engines.AG2Agent(
    model=model,                  # Required.
    runnable_name=runnable_name,  # Required.
    llm_config=llm_config,        # Optional.
)

Wenn Sie in einer interaktiven Umgebung arbeiten (z.B. in einem Terminal oder Colab-Notebook), können Sie eine Abfrage als Zwischentestschritt ausführen:

response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=1)

print(response)

Die Antwort ist ein Python-Dictionary, das dem folgenden Beispiel ähnelt:

{'chat_id': None,
 'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
   'role': 'user',
   'name': 'Exchange Rate Agent'}],
 'summary': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
 'cost': {'usage_including_cached_inference': {'total_cost': 5.2875e-06,
   'gemini-1.5-flash-001': {'cost': 5.2875e-06,
    'prompt_tokens': 34,
    'completion_tokens': 62,
    'total_tokens': 96}},
  'usage_excluding_cached_inference': {'total_cost': 5.2875e-06,
   'gemini-1.5-flash-001': {'cost': 5.2875e-06,
    'prompt_tokens': 34,
    'completion_tokens': 62,
    'total_tokens': 96}}},
 'human_input': []}

(Optional) Erweiterte Anpassungen

In der AG2Agent-Vorlage wird standardmäßig api_type=="google" verwendet, da es Zugriff auf alle grundlegenden Modelle bietet, die in Google Cloudverfügbar sind. Wenn Sie ein Modell verwenden möchten, das nicht über api_type=="google" verfügbar ist, können Sie den Parameter llm_config anpassen.

Eine Liste der in AG2 unterstützten Modelle und ihrer Funktionen finden Sie unter Modellanbieter. Die unterstützten Werte für llm_config= sind für jedes Chatmodell spezifisch. Weitere Informationen finden Sie in der entsprechenden Dokumentation.

Gemini

Standardmäßig installiert.

Wird in der AG2Agent-Vorlage verwendet, wenn Sie das llm_config-Argument weglassen, z. B.

agent = agent_engines.AG2Agent(
    model=model,                # Required.
    runnable_name=runnable_name # Required.
)

Anthropic

Folgen Sie zuerst der Anleitung, um ein Konto einzurichten und das Paket zu installieren.

Als Nächstes definieren Sie einen llm_config:

llm_config = {
    "config_list": [{
        "model": "claude-3-5-sonnet-20240620",            # Required.
        "api_key": "ANTHROPIC_API_KEY",  # Required.
        "api_type": "anthropic",                          # Required.
     }]
}

Verwenden Sie ihn abschließend in der AG2Agent-Vorlage mit dem folgenden Code:

agent = agent_engines.AG2Agent(
    model="claude-3-5-sonnet-20240620",             # Required.
    runnable_name=runnable_name,                    # Required.
    llm_config=llm_config,                          # Optional.
)

OpenAI

Sie können OpenAI in Verbindung mit der ChatCompletions API von Gemini verwenden.

Definieren Sie zuerst eine llm_config:

import google.auth
from google.cloud.aiplatform.aiplatform import initializer

project = initializer.global_config.project
location = initializer.global_config.location
base_url = f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project}/locations/{location}/endpoints/openapi"

# Note: the credential lives for 1 hour by default.
# After expiration, it must be refreshed.
creds, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)

llm_config = {
    "config_list": [{
        "model": "google/gemini-1.5-flash-001",  # Required.
        "api_type": "openai",                    # Required.
        "base_url": base_url,                    # Required.
        "api_key": creds.token,                  # Required.
    }]
}

Verwenden Sie ihn abschließend in der AG2Agent-Vorlage mit dem folgenden Code:

agent = agent_engines.AG2Agent(
    model="google/gemini-1.5-flash-001",  # Or "meta/llama3-405b-instruct-maas".
    runnable_name=runnable_name,          # Required.
    llm_config=llm_config,                # Optional.
)

Schritt 2: Tool definieren und verwenden

Nachdem Sie Ihr Modell definiert haben, definieren Sie im nächsten Schritt die Tools, die Ihr Modell für Logik verwendet. Ein Tool kann ein AG2-Tool oder eine Python-Funktion sein.

Wenn Sie eine Funktion definieren, ist es wichtig, Kommentare hinzuzufügen, die die Parameter der Funktion, ihre Funktionsweise und die Rückgabe der Funktion vollständig und klar beschreiben. Anhand dieser Informationen wird im Modell ermittelt, welche Funktion verwendet werden soll. Sie müssen Ihre Funktion auch lokal testen, um sicherzustellen, dass sie funktioniert.

Verwenden Sie den folgenden Code, um eine Funktion zu definieren, die einen Wechselkurs zurückgibt:

def get_exchange_rate(
    currency_from: str = "USD",
    currency_to: str = "EUR",
    currency_date: str = "latest",
):
    """Retrieves the exchange rate between two currencies on a specified date.

    Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
    exchange rate data.

    Args:
        currency_from: The base currency (3-letter currency code).
            Defaults to "USD" (US Dollar).
        currency_to: The target currency (3-letter currency code).
            Defaults to "EUR" (Euro).
        currency_date: The date for which to retrieve the exchange rate.
            Defaults to "latest" for the most recent exchange rate data.
            Can be specified in YYYY-MM-DD format for historical rates.

    Returns:
        dict: A dictionary containing the exchange rate information.
            Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
                "rates": {"EUR": 0.95534}}
    """
    import requests
    response = requests.get(
        f"https://api.frankfurter.app/{currency_date}",
        params={"from": currency_from, "to": currency_to},
    )
    return response.json()

Wenn Sie die Funktion vor der Verwendung in Ihrem Agenten testen möchten, führen Sie Folgendes aus:

get_exchange_rate(currency_from="USD", currency_to="SEK")

Die Antwort sollte in etwa so aussehen:

{'amount': 1.0, 'base': 'USD', 'date': '2024-02-22', 'rates': {'SEK': 10.3043}}

Wenn Sie das Tool in der AG2Agent-Vorlage verwenden möchten, fügen Sie es der Liste der Tools unter dem tools=-Argument hinzu:

agent = agent_engines.AG2Agent(
    model=model,                 # Required.
    runnable_name=runnable_name, # Required.
    tools=[get_exchange_rate],   # Optional.
)

Sie können den Agenten lokal testen, indem Sie Testabfragen an ihn senden. Führen Sie den folgenden Befehl aus, um den Agenten lokal mit US-Dollar und schwedischen Kronen zu testen:

response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=2)

Die Antwort ist ein Wörterbuch, das in etwa so aussieht:

{'chat_id': None,
 'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': '',
   'tool_calls': [{'id': '2285',
     'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
      'name': 'get_exchange_rate'},
     'type': 'function'}],
   'role': 'assistant'},
  {'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
   'tool_responses': [{'tool_call_id': '2285',
     'role': 'tool',
     'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
   'role': 'tool',
   'name': 'user'},
  {'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
   'role': 'user',
   'name': 'Get Exchange Rate Agent'},
  {'content': 'What is the exchange rate from US dollars to Swedish currency?',
   'role': 'assistant',
   'name': 'user'},
  {'content': '',
   'tool_calls': [{'id': '4270',
     'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
      'name': 'get_exchange_rate'},
     'type': 'function'}],
   'role': 'assistant'},
  {'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
   'tool_responses': [{'tool_call_id': '4270',
     'role': 'tool',
     'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
   'role': 'tool',
   'name': 'user'},
  {'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
   'role': 'user',
   'name': 'Get Exchange Rate Agent'}],
 'summary': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
 'cost': {'usage_including_cached_inference': {'total_cost': 0.0002790625,
   'gemini-1.5-flash-001': {'cost': 0.0002790625,
    'prompt_tokens': 757,
    'completion_tokens': 34,
    'total_tokens': 791}},
  'usage_excluding_cached_inference': {'total_cost': 0.0002790625,
   'gemini-1.5-flash-001': {'cost': 0.0002790625,
    'prompt_tokens': 757,
    'completion_tokens': 34,
    'total_tokens': 791}}},
 'human_input': []}

Schritt 3: Orchestrierung anpassen

Alle AG2-Agents implementieren die ConversableAgent-Schnittstelle, die Eingabe- und Ausgabeschemata für die Orchestrierung bereitstellt. Für den AG2Agent muss ein ausführbares Programm erstellt werden, damit er auf Abfragen reagieren kann. Standardmäßig erstellt AG2Agent ein solches ausführbares Programm, indem das Modell mit Tools verknüpft wird.

Sie können die Orchestrierung anpassen, wenn Sie (i) einen Assistant-Agenten implementieren möchten, der eine Aufgabe mithilfe eines Modells löst, (ii) einen User-Proxy-Agenten implementieren möchten, der Code ausführen und den anderen Agenten Feedback geben kann, oder (iii) einen Reasoning-Agenten implementieren möchten, der eine Aufgabe mithilfe eines Modells und eines Gedankenbaums löst. Dazu müssen Sie beim Erstellen von AG2Agent das ausführbare Standardprogramm überschreiben, indem Sie das runnable_builder=-Argument mit einer Python-Funktion der folgenden Signatur angeben:


def runnable_builder(
    **runnable_kwargs,
):

So haben Sie verschiedene Möglichkeiten, die Orchestrierungslogik anzupassen.

Assistant Agent

Wenn Sie einen Assistant-Kundenservicemitarbeiter ohne Orchestration erstellen möchten, können Sie im einfachsten Fall runnable_builder durch AG2Agent überschreiben.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.AssistantAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

User Proxy Agent

Im einfachsten Fall können Sie runnable_builder durch AG2Agent überschreiben, um einen Assistant-Kundenservicemitarbeiter ohne Orchestration zu erstellen.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.UserProxyAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

Reasoning Agent

Im einfachsten Fall können Sie runnable_builder durch AG2Agent überschreiben, um einen Inferenz-Agenten ohne Orchestrierung zu erstellen.

def runnable_builder(**kwargs):
    from autogen import agentchat

    return agentchat.ReasoningAgent(**kwargs)

agent = agent_engines.AG2Agent(
    model=model,
    runnable_name=runnable_name,
    runnable_builder=runnable_builder,
)

Nächste Schritte