组件配置#

AutoGen组件能够以声明性的方式进行通用配置。这支持基于配置的体验,比如AutoGen工作室,同时它也适用于许多其他场景。

提供该功能的系统称为“组件配置”。在AutoGen中,组件仅仅是一个可以从配置对象创建并且其本身也能够被转储为配置对象的东西。通过这种方式,你可以在代码中定义一个组件,然后从中获取配置对象。

该系统是通用的,允许在autogen之外定义的组件(如扩展)以相同的方式进行配置。

这与状态有何不同?#

这是一个需要澄清的重要点。当我们谈论序列化一个对象时,我们必须包含所有构成该对象本身的数据。包括消息历史等内容。当从序列化状态反序列化时,您必须得到完全相同的对象。这与组件配置的情况不同。

组件配置应被视为对象的蓝图,并且可以多次复制以创建同一配置对象的多个实例。

使用方法#

如果你在Python中有一个组件,并且想要获取它的配置,只需在其上调用dump_component()。生成的对象可以传回给load_component()以重新获取该组件。

从配置中加载组件#

要从配置对象加载组件,您可以使用 load_component() 方法。该方法将接收一个配置对象并返回一个组件对象。最好在您想要的接口上调用此方法。例如,要加载一个模型客户端:

from autogen_core.models import ChatCompletionClient

config = {
    "provider": "openai_chat_completion_client",
    "config": {"model": "gpt-4o"},
}

client = ChatCompletionClient.load_component(config)

创建一个组件类#

要为给定类添加组件功能:

  1. 在类继承列表中添加对Component()的调用。

  2. 实现 _to_config()_from_config() 方法

例如:

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)

秘密#

如果配置对象的字段是一个秘密值,应该使用SecretStr进行标记,这将确保该值不会被转储到配置对象中。

例如:

from pydantic import BaseModel, SecretStr


class ClientConfig(BaseModel):
    endpoint: str
    api_key: SecretStr