{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 序列化组件\n\nAutoGen 提供了一个 {py:class}`~autogen_core.Component` 配置类,用于定义将组件序列化/反序列化为声明式规范的行为。我们可以分别通过调用 `.dump_component()` 和 `.load_component()` 来实现这一点。这对于调试、可视化甚至与他人分享您的工作非常有用。在本笔记本中,我们将演示如何将多个组件序列化为声明式规范(如 JSON 文件)。\n\n\n```{warning}\n\n仅从可信来源加载组件。\n\n对于序列化的组件,每个组件都实现了其序列化和反序列化的逻辑——即如何生成声明式规范以及如何将其转换回对象。\n\n在某些情况下,创建对象可能包括执行代码(例如序列化的函数)。仅从可信来源加载组件。\n\n```\n\n\n### 终止条件示例\n\n在下面的示例中,我们将在 Python 中定义终止条件(代理团队的一部分),将其导出为字典/JSON,并演示如何从字典/JSON 加载终止条件对象。\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Config: {\"provider\":\"autogen_agentchat.base.OrTerminationCondition\",\"component_type\":\"termination\",\"version\":1,\"component_version\":1,\"description\":null,\"config\":{\"conditions\":[{\"provider\":\"autogen_agentchat.conditions.MaxMessageTermination\",\"component_type\":\"termination\",\"version\":1,\"component_version\":1,\"config\":{\"max_messages\":5}},{\"provider\":\"autogen_agentchat.conditions.StopMessageTermination\",\"component_type\":\"termination\",\"version\":1,\"component_version\":1,\"config\":{}}]}}\n" ] } ], "source": [ "from autogen_agentchat.conditions import MaxMessageTermination, StopMessageTermination\n", "\n", "max_termination = MaxMessageTermination(5)\n", "stop_termination = StopMessageTermination()\n", "\n", "or_termination = max_termination | stop_termination\n", "\n", "or_term_config = or_termination.dump_component()\n", "print(\"Config: \", or_term_config.model_dump_json())\n", "\n", "new_or_termination = or_termination.load_component(or_term_config)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 代理示例\n\n在下面的示例中,我们将在 Python 中定义一个代理,将其导出为字典/JSON,并演示如何从字典/JSON 加载代理对象。\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from autogen_agentchat.agents import AssistantAgent, UserProxyAgent\n", "from autogen_ext.models.openai import OpenAIChatCompletionClient\n", "\n", "# 创建一个使用 OpenAI GPT-4o 模型的代理。\n", "model_client = OpenAIChatCompletionClient(\n", " model=\"gpt-4o\",\n", " # api_key=\"YOUR_API_KEY\",\n", ")\n", "agent = AssistantAgent(\n", " name=\"assistant\",\n", " model_client=model_client,\n", " handoffs=[\"flights_refunder\", \"user\"],\n", " # tools=[], # 目前不支持序列化工具\n", " system_message=\"Use tools to solve tasks.\",\n", ")\n", "user_proxy = UserProxyAgent(name=\"user\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"provider\":\"autogen_agentchat.agents.UserProxyAgent\",\"component_type\":\"agent\",\"version\":1,\"component_version\":1,\"description\":null,\"config\":{\"name\":\"user\",\"description\":\"A human user\"}}\n" ] } ], "source": [ "user_proxy_config = user_proxy.dump_component() # 转储组件\n", "print(user_proxy_config.model_dump_json())\n", "up_new = user_proxy.load_component(user_proxy_config) # 加载组件" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"provider\":\"autogen_agentchat.agents.AssistantAgent\",\"component_type\":\"agent\",\"version\":1,\"component_version\":1,\"description\":null,\"config\":{\"name\":\"assistant\",\"model_client\":{\"provider\":\"autogen_ext.models.openai.OpenAIChatCompletionClient\",\"component_type\":\"model\",\"version\":1,\"component_version\":1,\"config\":{\"model\":\"gpt-4o\"}},\"handoffs\":[{\"target\":\"flights_refunder\",\"description\":\"Handoff to flights_refunder.\",\"name\":\"transfer_to_flights_refunder\",\"message\":\"Transferred to flights_refunder, adopting the role of flights_refunder immediately.\"},{\"target\":\"user\",\"description\":\"Handoff to user.\",\"name\":\"transfer_to_user\",\"message\":\"Transferred to user, adopting the role of user immediately.\"}],\"model_context\":{\"provider\":\"autogen_core.model_context.UnboundedChatCompletionContext\",\"component_type\":\"chat_completion_context\",\"version\":1,\"component_version\":1,\"config\":{}},\"description\":\"An agent that provides assistance with ability to use tools.\",\"system_message\":\"Use tools to solve tasks.\",\"reflect_on_tool_use\":false,\"tool_call_summary_format\":\"{result}\"}}\n" ] } ], "source": [ "agent_config = agent.dump_component() # 转储组件\n", "print(agent_config.model_dump_json())\n", "agent_new = agent.load_component(agent_config) # 加载组件" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "类似的方法可用于序列化 `MultiModalWebSurfer` 智能体。\n\n```python\nfrom autogen_ext.agents.web_surfer import MultimodalWebSurfer\n\nagent = MultimodalWebSurfer(\n name=\"web_surfer\",\n model_client=model_client,\n headless=False,\n)\n\nweb_surfer_config = agent.dump_component() # 转储组件\nprint(web_surfer_config.model_dump_json())\n\n```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 团队示例\n\n在下面的示例中,我们将用Python定义一个团队,将其导出为字典/JSON格式,并演示如何从字典/JSON加载团队对象。\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"provider\":\"autogen_agentchat.teams.RoundRobinGroupChat\",\"component_type\":\"team\",\"version\":1,\"component_version\":1,\"description\":null,\"config\":{\"participants\":[{\"provider\":\"autogen_agentchat.agents.AssistantAgent\",\"component_type\":\"agent\",\"version\":1,\"component_version\":1,\"config\":{\"name\":\"assistant\",\"model_client\":{\"provider\":\"autogen_ext.models.openai.OpenAIChatCompletionClient\",\"component_type\":\"model\",\"version\":1,\"component_version\":1,\"config\":{\"model\":\"gpt-4o\"}},\"handoffs\":[{\"target\":\"flights_refunder\",\"description\":\"Handoff to flights_refunder.\",\"name\":\"transfer_to_flights_refunder\",\"message\":\"Transferred to flights_refunder, adopting the role of flights_refunder immediately.\"},{\"target\":\"user\",\"description\":\"Handoff to user.\",\"name\":\"transfer_to_user\",\"message\":\"Transferred to user, adopting the role of user immediately.\"}],\"model_context\":{\"provider\":\"autogen_core.model_context.UnboundedChatCompletionContext\",\"component_type\":\"chat_completion_context\",\"version\":1,\"component_version\":1,\"config\":{}},\"description\":\"An agent that provides assistance with ability to use tools.\",\"system_message\":\"Use tools to solve tasks.\",\"reflect_on_tool_use\":false,\"tool_call_summary_format\":\"{result}\"}}],\"termination_condition\":{\"provider\":\"autogen_agentchat.conditions.MaxMessageTermination\",\"component_type\":\"termination\",\"version\":1,\"component_version\":1,\"config\":{\"max_messages\":2}}}}\n" ] } ], "source": [ "from autogen_agentchat.agents import AssistantAgent, UserProxyAgent\n", "from autogen_agentchat.conditions import MaxMessageTermination\n", "from autogen_agentchat.teams import RoundRobinGroupChat\n", "from autogen_ext.models.openai import OpenAIChatCompletionClient\n", "\n", "# 创建一个使用OpenAI GPT-4o模型的智能体。\n", "model_client = OpenAIChatCompletionClient(\n", " model=\"gpt-4o\",\n", " # api_key=\"YOUR_API_KEY\",\n", ")\n", "agent = AssistantAgent(\n", " name=\"assistant\",\n", " model_client=model_client,\n", " handoffs=[\"flights_refunder\", \"user\"],\n", " # tools=[], # 序列化工具暂不支持\n", " system_message=\"Use tools to solve tasks.\",\n", ")\n", "\n", "team = RoundRobinGroupChat(participants=[agent], termination_condition=MaxMessageTermination(2))\n", "\n", "team_config = team.dump_component() # 转储组件\n", "print(team_config.model_dump_json())\n", "\n", "await model_client.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.11.9" } }, "nbformat": 4, "nbformat_minor": 2 }