Komponentenkonfiguration#
AutoGen-Komponenten können deklarativ auf generische Weise konfiguriert werden. Dies dient der Unterstützung von konfigurationsbasierten Erlebnissen wie AutoGen Studio, ist aber auch für viele andere Szenarien nützlich.
Das System, das dies bereitstellt, wird als „Komponentenkonfiguration“ bezeichnet. In AutoGen ist eine Komponente einfach etwas, das aus einem Konfigurationsobjekt erstellt werden kann und selbst in ein Konfigurationsobjekt gedumpt werden kann. Auf diese Weise können Sie eine Komponente im Code definieren und dann das Konfigurationsobjekt daraus abrufen.
Dieses System ist generisch und ermöglicht die Konfiguration von Komponenten, die außerhalb von AutoGen selbst definiert sind (z. B. Erweiterungen), auf die gleiche Weise.
Wie unterscheidet sich dies von Zuständen?#
Dies ist ein sehr wichtiger Punkt, der geklärt werden muss. Wenn wir über die Serialisierung eines Objekts sprechen, müssen wir *alle* Daten einschließen, die dieses Objekt ausmachen. Dazu gehören Dinge wie der Nachrichtenverlauf usw. Beim Deserialisieren aus einem serialisierten Zustand müssen Sie exakt dasselbe Objekt zurückerhalten. Dies ist bei der Komponentenkonfiguration nicht der Fall.
Die Komponentenkonfiguration sollte als Blaupause für ein Objekt betrachtet werden und kann mehrmals verwendet werden, um viele Instanzen desselben konfigurierten Objekts zu erstellen.
Verwendung#
Wenn Sie eine Komponente in Python haben und die Konfiguration dafür abrufen möchten, rufen Sie einfach dump_component() darauf auf. Das resultierende Objekt kann zurück an load_component() übergeben werden, um die Komponente wieder zu erhalten.
Laden einer Komponente aus einer Konfiguration#
Um eine Komponente aus einem Konfigurationsobjekt zu laden, können Sie die Methode load_component() verwenden. Diese Methode nimmt ein Konfigurationsobjekt und gibt ein Komponentenobjekt zurück. Es ist am besten, diese Methode für die gewünschte Schnittstelle aufzurufen. Zum Beispiel, um einen Modellclient zu laden
from autogen_core.models import ChatCompletionClient
config = {
"provider": "openai_chat_completion_client",
"config": {"model": "gpt-4o"},
}
client = ChatCompletionClient.load_component(config)
Erstellen einer Komponentenklasse#
Um einer gegebenen Klasse Komponentenfunktionalität hinzuzufügen
Fügen Sie einen Aufruf von
Component()in die Vererbungsliste der Klasse ein.Implementieren Sie die Methoden
_to_config()und_from_config()
Zum Beispiel
from autogen_core import Component, ComponentBase
from pydantic import BaseModel
class Config(BaseModel):
value: str
class MyComponent(ComponentBase[Config], Component[Config]):
component_type = "custom"
component_config_schema = Config
def __init__(self, value: str):
self.value = value
def _to_config(self) -> Config:
return Config(value=self.value)
@classmethod
def _from_config(cls, config: Config) -> "MyComponent":
return cls(value=config.value)
Geheimnisse#
Wenn ein Feld eines Konfigurationsobjekts ein geheimer Wert ist, sollte es mit SecretStr markiert werden. Dies stellt sicher, dass der Wert nicht in das Konfigurationsobjekt gedumpt wird.
Zum Beispiel
from pydantic import BaseModel, SecretStr
class ClientConfig(BaseModel):
endpoint: str
api_key: SecretStr