{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 组件配置\n\nAutoGen组件能够以声明式的方式进行通用配置。这既支持基于配置的体验(如AutoGen Studio),也适用于许多其他场景。\n\n提供此功能的系统称为\"组件配置\"。在AutoGen中,组件就是可以从配置对象创建,并能转储为配置对象的实体。通过这种方式,您可以在代码中定义组件,然后从中获取配置对象。\n\n该系统是通用的,允许以相同方式配置AutoGen外部定义的组件(如扩展)。\n\n## 与状态有何不同?\n\n这是需要澄清的重要概念。当我们序列化对象时,必须包含构成该对象的所有数据(包括消息历史等)。从序列化状态反序列化时,必须得到完全相同的对象。但组件配置不同。\n\n组件配置应被视为对象的蓝图,可以多次复制以创建多个相同配置的实例。\n\n## 使用方法\n\n如果您有一个Python组件并想获取其配置,只需对其调用{py:meth}`~autogen_core.ComponentToConfig.dump_component`方法。生成的对象可以传回{py:meth}`~autogen_core.ComponentLoader.load_component`以恢复组件。\n\n### 从配置加载组件\n\n要从配置对象加载组件,可以使用{py:meth}`~autogen_core.ComponentLoader.load_component`方法。该方法接收配置对象并返回组件对象。建议在所需接口上调用此方法。例如加载模型客户端:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from autogen_core.models import ChatCompletionClient\n", "\n", "config = {\n", " \"provider\": \"openai_chat_completion_client\",\n", " \"config\": {\"model\": \"gpt-4o\"},\n", "}\n", "\n", "client = ChatCompletionClient.load_component(config)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 创建组件类\n\n要为给定类添加组件功能:\n\n1. 在类继承列表中添加{py:meth}`~autogen_core.Component`调用\n2. 实现{py:meth}`~autogen_core.ComponentToConfig._to_config`和{py:meth}`~autogen_core.ComponentFromConfig._from_config`方法\n\n例如:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from autogen_core import Component, ComponentBase\n", "from pydantic import BaseModel\n", "\n", "\n", "class Config(BaseModel):\n", " value: str\n", "\n", "\n", "class MyComponent(ComponentBase[Config], Component[Config]):\n", " component_type = \"custom\"\n", " component_config_schema = Config\n", "\n", " def __init__(self, value: str):\n", " self.value = value\n", "\n", " def _to_config(self) -> Config:\n", " return Config(value=self.value)\n", "\n", " @classmethod\n", " def _from_config(cls, config: Config) -> \"MyComponent\":\n", " return cls(value=config.value)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 密钥管理\n\n如果配置对象的字段是密钥值,应使用[`SecretStr`](https://docs.pydantic.dev/latest/api/types/#pydantic.types.SecretStr)标记,这将确保该值不会被转储到配置对象中。\n\n例如:\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pydantic import BaseModel, SecretStr\n", "\n", "\n", "class ClientConfig(BaseModel):\n", " endpoint: str\n", " api_key: SecretStr" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" } }, "nbformat": 4, "nbformat_minor": 2 }