当前位置: 首页 > news >正文

微软AutoGen高级功能——Serializing Components

介绍

大家好,博主又来给大家分享知识了!今天继续给大家分享微软AutoGen的高级功能:Serializing Components。那么这又是什么功能呢,我们直接进入主题。

Serializing Components

AutoGen提供了一个组件配置类,该类定义了将组件序列化/反序列化为声明式规范的行为。我们可以分别通过调用.dump_component().load_component()方法来实现这一点。这对于调试、可视化,甚至与他人分享你的工作成果都很有用。在本次分享中,我将演示如何将多个组件序列化为像JSON文件这样的声明式规范。

终止条件示例

在下面的演示中,我们将用Python定义终止条件(智能体团队"agent team"的一部分),将其导出为字典或JSON格式,并且还会演示如何从该字典或JSON中加载终止条件对象。

完整代码

from autogen_agentchat.conditions import MaxMessageTermination, StopMessageTermination

max_termination = MaxMessageTermination(5)
stop_termination = StopMessageTermination()

or_termination = max_termination | stop_termination

or_term_config = or_termination.dump_component()
new_or_termination = or_termination.load_component(or_term_config)
print("Config: ", or_term_config.model_dump_json())

运行结果 

Config:  {"provider":"autogen_agentchat.base.OrTerminationCondition","component_type":"termination","version":1,"component_version":1,"description":null,"label":"OrTerminationCondition","config":{"conditions":[{"provider":"autogen_agentchat.conditions.MaxMessageTermination","component_type":"termination","version":1,"component_version":1,"description":"Terminate the conversation after a maximum number of messages have been exchanged.","label":"MaxMessageTermination","config":{"max_messages":5}},{"provider":"autogen_agentchat.conditions.StopMessageTermination","component_type":"termination","version":1,"component_version":1,"description":"Terminate the conversation if a StopMessage is received.","label":"StopMessageTermination","config":{}}]}}

进程已结束,退出代码为 0

智能体示例

在下面的示例中,我们将用Python定义一个智能体,将其导出为字典或JSON格式,并且还会演示如何从该字典或JSON中加载智能体对象。

完整代码

from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient

# 创建一个使用OpenAI GPT-4o模型的智能体。
model_client = OpenAIChatCompletionClient(
    model="gpt-4o",
    # api_key="sk-...", # 如果已设置OPENAI_API_KEY环境变量,此步骤可选。
)
agent = AssistantAgent(
    name="assistant",
    model_client=model_client,
    handoffs=["flights_refunder", "user"],
    # tools=[], # 目前尚不支持对工具进行序列化。
    system_message="Use tools to solve tasks.",
)
user_proxy = UserProxyAgent(name="user")

user_proxy_config = user_proxy.dump_component()  # 转储组件;导出组件
up_new = user_proxy.load_component(user_proxy_config)  # 加载组件
print(user_proxy_config.model_dump_json())

运行结果

{"provider":"autogen_agentchat.agents.UserProxyAgent","component_type":"agent","version":1,"component_version":1,"description":"An agent that can represent a human user through an input function.","label":"UserProxyAgent","config":{"name":"user","description":"A human user"}}

进程已结束,退出代码为 0

我们还可以使用类似的方法对多模态网络冲浪智能体进行序列化。

完整代码

from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_ext.agents.web_surfer import MultimodalWebSurfer

# 创建一个使用OpenAI GPT-4o模型的智能体。
model_client = OpenAIChatCompletionClient(
    model="gpt-4o",
    # api_key="sk-...", # 如果已设置OPENAI_API_KEY环境变量,此步骤可选。
)

agent = MultimodalWebSurfer(
    name="web_surfer",
    model_client=model_client,
    headless=False,
)

web_surfer_config = agent.dump_component()  # 加载组件
print(web_surfer_config.model_dump_json())

运行结果

{"provider":"autogen_ext.agents.web_surfer.MultimodalWebSurfer","component_type":"agent","version":1,"component_version":1,"description":"MultimodalWebSurfer is a multimodal agent that acts as a web surfer that can search the web and visit web pages.","label":"MultimodalWebSurfer","config":{"name":"web_surfer","model_client":{"provider":"autogen_ext.models.openai.OpenAIChatCompletionClient","component_type":"model","version":1,"component_version":1,"description":"Chat completion client for OpenAI hosted models.","label":"OpenAIChatCompletionClient","config":{"model":"gpt-4o"}},"description":"\n    A helpful assistant with access to a web browser.\n    Ask them to perform web searches, open pages, and interact with content (e.g., clicking links, scrolling the viewport, etc., filling in form fields, etc.).\n    It can also summarize the entire page, or answer questions based on the content of the page.\n    It can also be asked to sleep and wait for pages to load, in cases where the pages seem to be taking a while to load.\n    ","headless":false,"start_page":"https://www.bing.com/","animate_actions":false,"to_save_screenshots":false,"use_ocr":false,"to_resize_viewport":true}}

进程已结束,退出代码为 0

团队示例

在下面的示例中,我们将使用Python定义一个团队,将其导出为字典或JSON格式,并且还会演示如何从该字典或JSON中加载这个团队对象。

完整代码

from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_agentchat.conditions import MaxMessageTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient

# 创建一个使用OpenAI GPT-4o模型的智能体。
model_client = OpenAIChatCompletionClient(
    model="gpt-4o",
    # api_key="sk-...", # 如果已设置OPENAI_API_KEY环境变量,此步骤可选。
)
agent = AssistantAgent(
    name="assistant",
    model_client=model_client,
    handoffs=["flights_refunder", "user"],
    # tools=[], # 目前尚不支持对工具进行序列化。
    system_message="Use tools to solve tasks.",
)

team = RoundRobinGroupChat(participants=[agent], termination_condition=MaxMessageTermination(2))

team_config = team.dump_component()  # 加载组件
print(team_config.model_dump_json())

运行结果

{"provider":"autogen_agentchat.teams.RoundRobinGroupChat","component_type":"team","version":1,"component_version":1,"description":"A team that runs a group chat with participants taking turns in a round-robin fashion\n    to publish a message to all.","label":"RoundRobinGroupChat","config":{"participants":[{"provider":"autogen_agentchat.agents.AssistantAgent","component_type":"agent","version":1,"component_version":1,"description":"An agent that provides assistance with tool use.","label":"AssistantAgent","config":{"name":"assistant","model_client":{"provider":"autogen_ext.models.openai.OpenAIChatCompletionClient","component_type":"model","version":1,"component_version":1,"description":"Chat completion client for OpenAI hosted models.","label":"OpenAIChatCompletionClient","config":{"model":"gpt-4o"}},"tools":[],"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,"description":"An unbounded chat completion context that keeps a view of the all the messages.","label":"UnboundedChatCompletionContext","config":{}},"description":"An agent that provides assistance with ability to use tools.","system_message":"Use tools to solve tasks.","model_client_stream":false,"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,"description":"Terminate the conversation after a maximum number of messages have been exchanged.","label":"MaxMessageTermination","config":{"max_messages":2}}}}

进程已结束,退出代码为 0

说明

如果大家在运行上述代码的时候有AutoGen相关的提示或报错(例如:该参数不存在,没有此类方法等),请尝试更新一下AutoGen,博主在分享这篇博文的时候,AutoGen的版本是0.4.6稳定版

安装或更新命令

pip install -U "autogen-agentchat" "autogen-ext[openai,azure]"

另外大家要根据业务需求,设置使用的LLM,不一定要按照我给大家分享代码中的设置来,如果只是为了测试并看运行结果可直接复制粘贴代码(完整代码)。 

结束

好了,本次的全部内容就分享到这,本次的分享的内容不是很多,但是还是希望大家能够理解并运用到实际项目开发过程中,或者给大家一个思路和方案,这也是博主分享的目的。为了能让大家更好的理解本次分享的内容,博主继续帮助大家整理Serializing Components的知识:

在微软AutoGen中,“Serializing Components(组件序列化)” 是一项重要的功能特性。

概念基础:序列化是将对象(这里的组件可以是智能体、工具、记忆模块等各种 AutoGen 中的实体)的状态信息转换为一种可存储或可传输格式(如 JSON、字节流等)的过程。通过这种转换,能够以一种方便的方式保存组件的当前状态,以便后续可以重新创建或恢复该组件的状态。

具体组件的序列化

  • 智能体序列化:AutoGen中的智能体(如用户智能体、助手智能体等)维护着许多状态信息,如对话历史、当前任务状态、配置参数等。序列化智能体就是把这些信息转化为特定格式保存起来。例如,在一个聊天场景中,智能体与用户进行了多轮对话,通过序列化可以保存对话的整个上下文和智能体的相关状态,以便后续恢复对话场景或在不同环境中复用该智能体的状态。
  • 记忆模块序列化:记忆模块用于存储与交互相关的历史信息和上下文数据。对记忆模块进行序列化,可以把这些重要的记忆数据持久化保存,方便在后续的交互中重新加载使用,从而保持交互的连贯性和智能体对历史信息的利用能力。

应用场景

  • 持久化存储:可以将组件的状态保存到磁盘或其他存储介质中,以便在系统重启或后续使用时恢复组件的状态,避免重复设置和初始化。
  • 分布式系统通信:在分布式系统中,不同节点之间可能需要共享组件的状态。通过序列化,组件可以以一种通用的格式在节点之间传输,然后在接收端通过反序列化恢复组件,实现组件状态的共享和协作。
  • 调试和日志记录:序列化后的组件状态可以用于调试,开发人员可以保存特定时刻组件的状态,以便分析问题。同时,也可以记录组件状态的变化过程作为日志,用于后续的审查和分析。

实现方式:AutoGen通常会提供相应的方法(如.dump_component()用于序列化,.load_component()用于反序列化)和配置类来支持组件的序列化和反序列化操作。这些方法和类会处理对象到特定格式(如JSON)的转换以及从该格式恢复对象的细节。

大家理解了吗?我相信目前有很多小伙伴都在使用或正在研究这个功能,希望博主这次的分享对你们有所帮助。微软AutoGen的高级功能,博主目前就更新到这了。希望大家都能理解博主分享的这几篇高级功能的内容。博主还是那句话:请大家多去大胆的尝试和使用,成功总是在不断的失败中试验出来的,敢于尝试就已经成功了一半。这次分享就到这了,如果大家对博主分享的内容感兴趣或有帮助,请点赞和关注。大家的点赞和关注是博主持续分享的动力🤭,博主也希望让更多的人学习到新的知识。

相关文章:

  • 【原创】springboot+vue考试考场座位安排管理系统设计与实现
  • 【架构设计】微服务架构模型:常见模型的对比和分析
  • 更高效实用 vscode 的常用设置
  • 全排列(力扣46)
  • RFM模型-数据清洗
  • 基于mediapipe深度学习的手势数字识别系统python源码
  • 20250214实测飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1的USB2.0的速度为29.0 MB/s
  • 香港VPS服务器如何排查和修复 MySQL 数据库连接失败的问题
  • 从图像中提取的每行数字作为一张完整的图片,而不是每个数字单独成为一张图片
  • 教程:使用 Vue 3 和 arco 实现表格合并
  • MySQL 数据库定时任务及进阶学习
  • UE_C++ —— Metadata Specifiers
  • Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
  • 【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件
  • mysql开启gtid并配置主从
  • Windows 11 下 Ollama 安装与 OpenWebUI 调用 DeepSeek-R1 的详细指南
  • 100N03-ASEMI豆浆机专用MOS管100N03
  • qt QOpenGLContext详解
  • 数字电路-基础逻辑门实验
  • 【Elasticsearch】runtime_mappings搜索请求中定义运行时字段
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查
  • 湃书单|澎湃新闻编辑们在读的14本书:后工作时代
  • 中国科学院院士、我国航天液体火箭技术专家朱森元逝世
  • 外交部:各方应为俄乌双方恢复直接对话创造条件
  • 奥迪车加油时频繁“跳枪”维修两年未解决,4S店拒退换:可延长质保