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

Autogen_core: Message and Communication

目录

    • 完整代码
    • 代码解释
      • 1. 消息的数据类:
      • 2. 创建代理人(MyAgent):
      • 3. 创建和运行代理人的运行时环境:
      • 4. 根据发送者路由消息的代理(RoutedBySenderAgent):
      • 5. 创建和运行带路由的代理:
      • 6. 内外代理的通信(InnerAgent 和 OuterAgent)
      • 7. 运行内外代理
      • 8. 消息广播
        • 1. ReceivingAgent:接收消息的代理
        • 2. BroadcastingAgent:发布消息的代理
        • 3. 注册代理并处理消息
        • 4. 默认主题与订阅
        • 5. 注册代理并启动消息发布
    • 类似例子

完整代码

from dataclasses import dataclass@dataclass
class TextMessage:content: strsource: str@dataclass
class ImageMessage:url: strsource: str
from autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handlerclass MyAgent(RoutedAgent):@message_handlerasync def on_text_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you said {message.content}!")@message_handlerasync def on_image_message(self, message: ImageMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you sent me {message.url}!")
runtime = SingleThreadedAgentRuntime()
await MyAgent.register(runtime, "my_agent", lambda: MyAgent("My Agent"))
AgentType(type='my_agent')
runtime.start()
agent_id = AgentId("my_agent", "default")
await runtime.send_message(TextMessage(content="Hello, World!", source="User"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="User"), agent_id)
await runtime.stop_when_idle()
Hello, User, you said Hello, World!!
Hello, User, you sent me https://example.com/image.jpg!
class RoutedBySenderAgent(RoutedAgent):@message_handler(match=lambda msg, ctx: msg.source.startswith("user1"))  # type: ignoreasync def on_user1_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello from user 1 handler, {message.source}, you said {message.content}!")@message_handler(match=lambda msg, ctx: msg.source.startswith("user2"))  # type: ignoreasync def on_user2_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello from user 2 handler, {message.source}, you said {message.content}!")@message_handler(match=lambda msg, ctx: msg.source.startswith("user2"))  # type: ignoreasync def on_image_message(self, message: ImageMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you sent me {message.url}!")
runtime = SingleThreadedAgentRuntime()
await RoutedBySenderAgent.register(runtime, "my_agent", lambda: RoutedBySenderAgent("Routed by sender agent"))
runtime.start()
agent_id = AgentId("my_agent", "default")
await runtime.send_message(TextMessage(content="Hello, World!", source="user1-test"), agent_id)
await runtime.send_message(TextMessage(content="Hello, World!", source="user2-test"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="user1-test"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="user2-test"), agent_id)
await runtime.stop_when_idle()
Hello from user 1 handler, user1-test, you said Hello, World!!
Hello from user 2 handler, user2-test, you said Hello, World!!
Hello, user2-test, you sent me https://example.com/image.jpg!
from dataclasses import dataclassfrom autogen_core import MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handler@dataclass
class Message:content: strclass InnerAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> Message:return Message(content=f"Hello from inner, {message.content}")class OuterAgent(RoutedAgent):def __init__(self, description: str, inner_agent_type: str):super().__init__(description)self.inner_agent_id = AgentId(inner_agent_type, self.id.key)@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:print(f"Received message: {message.content}")# Send a direct message to the inner agent and receves a response.response = await self.send_message(Message(f"Hello from outer, {message.content}"), self.inner_agent_id)print(f"Received inner response: {response.content}")
runtime = SingleThreadedAgentRuntime()
await InnerAgent.register(runtime, "inner_agent", lambda: InnerAgent("InnerAgent"))
await OuterAgent.register(runtime, "outer_agent", lambda: OuterAgent("OuterAgent", "inner_agent"))
runtime.start()
outer_agent_id = AgentId("outer_agent", "default")
await runtime.send_message(Message(content="Hello, World!"), outer_agent_id)
await runtime.stop_when_idle()
Received message: Hello, World!
Received inner response: Hello from inner, Hello from outer, Hello, World!
from autogen_core import RoutedAgent, message_handler, type_subscription@type_subscription(topic_type="default")
class ReceivingAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:print(f"Received a message: {message.content}")
from autogen_core import TopicIdclass BroadcastingAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:await self.publish_message(Message("Publishing a message from broadcasting agent!"),topic_id=TopicId(type="default", source=self.id.key),)
from autogen_core import TypeSubscriptionruntime = SingleThreadedAgentRuntime()# Option 1: with type_subscription decorator
# The type_subscription class decorator automatically adds a TypeSubscription to
# the runtime when the agent is registered.
await ReceivingAgent.register(runtime, "receiving_agent", lambda: ReceivingAgent("Receiving Agent"))# Option 2: with TypeSubscription
await BroadcastingAgent.register(runtime, "broadcasting_agent", lambda: BroadcastingAgent("Broadcasting Agent"))
await runtime.add_subscription(TypeSubscription(topic_type="default", agent_type="broadcasting_agent"))# Start the runtime and publish a message.
runtime.start()
await runtime.publish_message(Message("Hello, World! From the runtime!"), topic_id=TopicId(type="default", source="default")
)
await runtime.stop_when_idle()
Received a message: Hello, World! From the runtime!
Received a message: Publishing a message from broadcasting agent!
from autogen_core import DefaultTopicId, default_subscription@default_subscription
class BroadcastingAgentDefaultTopic(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:# Publish a message to all agents in the same namespace.await self.publish_message(Message("Publishing a message from broadcasting agent!"),topic_id=DefaultTopicId(),)
runtime = SingleThreadedAgentRuntime()
await BroadcastingAgentDefaultTopic.register(runtime, "broadcasting_agent", lambda: BroadcastingAgentDefaultTopic("Broadcasting Agent")
)
await ReceivingAgent.register(runtime, "receiving_agent", lambda: ReceivingAgent("Receiving Agent"))
runtime.start()
await runtime.publish_message(Message("Hello, World! From the runtime!"), topic_id=DefaultTopicId())
await runtime.stop_when_idle()
Received a message: Hello, World! From the runtime!
Received a message: Publishing a message from broadcasting agent!

代码解释

1. 消息的数据类:

from dataclasses import dataclass@dataclass
class TextMessage:content: strsource: str@dataclass
class ImageMessage:url: strsource: str

这段代码定义了两个数据类:TextMessage 和 ImageMessage。它们分别用于表示文本消息和图片消息。

  • TextMessage 包含两个字段:content(消息内容)和 source(发送者)。
  • ImageMessage 包含 url(图片的链接地址)和 source(发送者)。

2. 创建代理人(MyAgent):

from autogen_core import AgentId, MessageContext, RoutedAgent, SingleThreadedAgentRuntime, message_handlerclass MyAgent(RoutedAgent):@message_handlerasync def on_text_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you said {message.content}!")@message_handlerasync def on_image_message(self, message: ImageMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you sent me {message.url}!")

MyAgent 继承自 RoutedAgent 类,并定义了两个消息处理器:

  • on_text_message:处理 TextMessage 消息,打印出发送者和内容。
  • on_image_message:处理 ImageMessage 消息,打印出发送者和图片的链接地址。

3. 创建和运行代理人的运行时环境:

runtime = SingleThreadedAgentRuntime()
await MyAgent.register(runtime, "my_agent", lambda: MyAgent("My Agent"))
runtime.start()
agent_id = AgentId("my_agent", "default")
await runtime.send_message(TextMessage(content="Hello, World!", source="User"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="User"), agent_id)
await runtime.stop_when_idle()

这段代码启动了一个单线程的运行时环境 SingleThreadedAgentRuntime

  • 注册了 MyAgent 代理,代理名称为 my_agent
  • 使用 runtime.send_message 向代理发送了一条文本消息和一条图片消息。
  • 最后,运行时环境会在空闲时停止。

4. 根据发送者路由消息的代理(RoutedBySenderAgent):

class RoutedBySenderAgent(RoutedAgent):@message_handler(match=lambda msg, ctx: msg.source.startswith("user1"))  # type: ignoreasync def on_user1_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello from user 1 handler, {message.source}, you said {message.content}!")@message_handler(match=lambda msg, ctx: msg.source.startswith("user2"))  # type: ignoreasync def on_user2_message(self, message: TextMessage, ctx: MessageContext) -> None:print(f"Hello from user 2 handler, {message.source}, you said {message.content}!")@message_handler(match=lambda msg, ctx: msg.source.startswith("user2"))  # type: ignoreasync def on_image_message(self, message: ImageMessage, ctx: MessageContext) -> None:print(f"Hello, {message.source}, you sent me {message.url}!")

RoutedBySenderAgent 继承自 RoutedAgent,并通过 message_handler 装饰器根据消息的发送者 (source) 来路由消息。

  • 如果消息来自以 user1 开头的发送者,它会调用 on_user1_message 处理文本消息。
  • 如果消息来自以 user2 开头的发送者,它会调用 on_user2_message 处理文本消息。
  • 如果是来自 user2 的图片消息,则调用 on_image_message 进行处理。

5. 创建和运行带路由的代理:

runtime = SingleThreadedAgentRuntime()
await RoutedBySenderAgent.register(runtime, "my_agent", lambda: RoutedBySenderAgent("Routed by sender agent"))
runtime.start()
agent_id = AgentId("my_agent", "default")
await runtime.send_message(TextMessage(content="Hello, World!", source="user1-test"), agent_id)
await runtime.send_message(TextMessage(content="Hello, World!", source="user2-test"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="user1-test"), agent_id)
await runtime.send_message(ImageMessage(url="https://example.com/image.jpg", source="user2-test"), agent_id)
await runtime.stop_when_idle()

在这个部分,运行时环境启动并注册了 RoutedBySenderAgent 代理。
发送了不同来源的文本消息和图片消息。
根据消息的 source 字段,消息会被路由到对应的处理函数。
最终,代理会打印不同的响应信息,取决于消息的发送者。

6. 内外代理的通信(InnerAgent 和 OuterAgent)

@dataclass
class Message:content: strclass InnerAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> Message:return Message(content=f"Hello from inner, {message.content}")class OuterAgent(RoutedAgent):def __init__(self, description: str, inner_agent_type: str):super().__init__(description)self.inner_agent_id = AgentId(inner_agent_type, self.id.key)@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:print(f"Received message: {message.content}")response = await self.send_message(Message(f"Hello from outer, {message.content}"), self.inner_agent_id)print(f"Received inner response: {response.content}")

InnerAgent 是一个简单的代理,它收到消息后,返回一个修改过的消息。

OuterAgent 也作为代理存在,并包含对 InnerAgent 的引用。它会发送消息给 InnerAgent,并等待回应。

7. 运行内外代理

runtime = SingleThreadedAgentRuntime()
await InnerAgent.register(runtime, "inner_agent", lambda: InnerAgent("InnerAgent"))
await OuterAgent.register(runtime, "outer_agent", lambda: OuterAgent("OuterAgent", "inner_agent"))
runtime.start()
outer_agent_id = AgentId("outer_agent", "default")
await runtime.send_message(Message(content="Hello, World!"), outer_agent_id)
await runtime.stop_when_idle()

这个部分启动了 InnerAgentOuterAgent 代理。

OuterAgent 会发送一条消息给 InnerAgent,并接收到来自 InnerAgent 的响应。

最终,输出显示了 OuterAgent 接收到的消息以及 InnerAgent 的响应。

8. 消息广播

这一部分涉及了通过 topic 和 subscription 实现的消息广播和接收机制。它展示了如何通过 topic 来发布消息以及如何订阅消息。

1. ReceivingAgent:接收消息的代理
from autogen_core import RoutedAgent, message_handler, type_subscription@type_subscription(topic_type="default")
class ReceivingAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:print(f"Received a message: {message.content}")

ReceivingAgent 继承自 RoutedAgent,并使用了 @type_subscription(topic_type="default") 装饰器。这个装饰器将代理与某个类型的 topic(本例中是 default)关联。

当收到来自 default 主题的消息时,代理会调用 on_my_message 方法,并打印出消息内容。

2. BroadcastingAgent:发布消息的代理
from autogen_core import TopicIdclass BroadcastingAgent(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:await self.publish_message(Message("Publishing a message from broadcasting agent!"),topic_id=TopicId(type="default", source=self.id.key),)

BroadcastingAgent 也继承自 RoutedAgent,它定义了一个消息处理方法,当收到消息时,它会发布一条新的消息,消息内容为 “Publishing a message from broadcasting agent!”。

这条消息会发布到 default 主题,且 topic_id 包含代理的 source(即 self.id.key)作为源。

3. 注册代理并处理消息
from autogen_core import TypeSubscriptionruntime = SingleThreadedAgentRuntime()# Option 1: with type_subscription decorator
await ReceivingAgent.register(runtime, "receiving_agent", lambda: ReceivingAgent("Receiving Agent"))# Option 2: with TypeSubscription
await BroadcastingAgent.register(runtime, "broadcasting_agent", lambda: BroadcastingAgent("Broadcasting Agent"))
await runtime.add_subscription(TypeSubscription(topic_type="default", agent_type="broadcasting_agent"))# Start the runtime and publish a message.
runtime.start()
await runtime.publish_message(Message("Hello, World! From the runtime!"), topic_id=TopicId(type="default", source="default")
)
await runtime.stop_when_idle()

runtime 创建了一个单线程的运行时环境。

选项 1:通过 @type_subscription 装饰器,ReceivingAgent 被注册到运行时,它会订阅 default 主题。

选项 2BroadcastingAgent 注册后,通过 runtime.add_subscription() 将其与 default 主题的消息订阅关联起来。

runtime.start() 启动运行时并发布了一条消息 “Hello, World! From the runtime!”,这条消息会被所有订阅 default 主题的代理接收。

由于 ReceivingAgent 订阅了 default 主题,它会接收到来自 runtime.publish_message 的消息,并输出 “Received a message: Hello, World! From the runtime!”。

之后,BroadcastingAgent 发布了一条消息 “Publishing a message from broadcasting agent!”,并发送到 default 主题。

4. 默认主题与订阅
from autogen_core import DefaultTopicId, default_subscription@default_subscription
class BroadcastingAgentDefaultTopic(RoutedAgent):@message_handlerasync def on_my_message(self, message: Message, ctx: MessageContext) -> None:# Publish a message to all agents in the same namespace.await self.publish_message(Message("Publishing a message from broadcasting agent!"),topic_id=DefaultTopicId(),)

BroadcastingAgentDefaultTopic 通过 @default_subscription 装饰器,订阅了一个特殊的默认主题(DefaultTopicId())。

当它收到消息时,它会将 “Publishing a message from broadcasting agent!” 消息发布到同一命名空间的所有代理,所有订阅该主题的代理都会收到这条消息。

5. 注册代理并启动消息发布
runtime = SingleThreadedAgentRuntime()
await BroadcastingAgentDefaultTopic.register(runtime, "broadcasting_agent", lambda: BroadcastingAgentDefaultTopic("Broadcasting Agent")
)
await ReceivingAgent.register(runtime, "receiving_agent", lambda: ReceivingAgent("Receiving Agent"))
runtime.start()
await runtime.publish_message(Message("Hello, World! From the runtime!"), topic_id=DefaultTopicId())
await runtime.stop_when_idle()
  • 注册了 BroadcastingAgentDefaultTopicReceivingAgent 两个代理。

  • 在运行时启动后,runtime.publish_message 发布了一条消息 “Hello, World! From the runtime!” 到默认主题 DefaultTopicId(),这个消息会被 ReceivingAgent 接收并打印。

  • 随后,BroadcastingAgentDefaultTopic 会发布一条消息 “Publishing a message from broadcasting agent!”,并将其广播到同一个命名空间中的所有代理,ReceivingAgent 收到这条消息并打印。

类似例子

from autogen_core import RoutedAgent, message_handler, type_subscription, TopicId# Agent that will receive status updates
@type_subscription(topic_type="status")
class StatusReceiverAgent(RoutedAgent):@message_handlerasync def on_status_update(self, message: Message, ctx: MessageContext) -> None:print(f"Status received: {message.content}")# Agent that publishes status updates
@type_subscription(topic_type="command")
class StatusPublisherAgent(RoutedAgent):@message_handlerasync def on_command_message(self, message: Message, ctx: MessageContext) -> None:# Publish a status update to the "status" topicawait self.publish_message(Message("System is up and running!"),topic_id=TopicId(type="status", source=self.id.key),)# Agent runtime and agent registration
runtime = SingleThreadedAgentRuntime()# Register the status receiver and publisher agents
await StatusReceiverAgent.register(runtime, "status_receiver", lambda: StatusReceiverAgent("Status Receiver"))
await StatusPublisherAgent.register(runtime, "status_publisher", lambda: StatusPublisherAgent("Status Publisher"))# Start the runtime and simulate sending a command to the publisher
runtime.start()# The publisher publishes a status update when it receives a message (e.g., "send status update")
await runtime.publish_message(Message("send status update"), topic_id=TopicId(type="command", source="status_publisher"))# The receiver will print the status update message
await runtime.stop_when_idle()

输出

Status received: System is up and running!

参考链接:
https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/framework/message-and-communication.html

相关文章:

Autogen_core: Message and Communication

目录 完整代码代码解释1. 消息的数据类:2. 创建代理人(MyAgent):3. 创建和运行代理人的运行时环境:4. 根据发送者路由消息的代理(RoutedBySenderAgent):5. 创建和运行带路由的代理&a…...

ComfyUI工作流教程、软件使用、开发指导、模型下载

在人工智能和设计技术迅速发展的今天,AI赋能的工作流已成为创意设计与生产的重要工具。无论是图片处理、服装试穿,还是室内设计与3D建模,这些智能化的解决方案极大地提高了效率和创作质量。 为了帮助设计师、开发者以及AI技术爱好者更好地利用这些工具,我们整理了一份详尽…...

零基础Vue学习1——Vue学习前环境准备

目录 环境准备 创建Vue项目 项目目录说明 后续开发过程中常用命令 环境准备 安装开发工具:vscode、webstorm、idea都可以安装node:V22以上版本即可安装pnpm 不知道怎么安装的可以私信我教你方法 创建Vue项目 本地新建一个文件夹,之后在文件夹下打开…...

定西市建筑房屋轮廓数据shp格式gis无偏移坐标(字段有高度和楼层)内容测评

定西市建筑房屋轮廓数据是GIS(Geographic Information System,地理信息系统)领域的重要资源,用于城市规划、土地管理、环境保护等多个方面。这份2022年的数据集采用shp(Shapefile)格式,这是一种…...

汉语向编程指南

汉语向编程指南 一、引言王阳明代数与流形学习理论慢道缓行理性人类型指标系统为己之学与意气实体过程晏殊几何学半可分离相如矩阵与生成气质邻域镶嵌气度曲面细分生成气质邻域镶嵌气度曲面细分社会科学概论琴生生物机械科技工业研究所软凝聚态物理开发工具包琴生生物机械 报告…...

Writing an Efficient Vulkan Renderer

本文出自GPU Zen 2。 Vulkan 是一个新的显式跨平台图形 API。它引入了许多新概念,即使是经验丰富的图形程序员也可能不熟悉。Vulkan 的主要目标是性能——然而,获得良好的性能需要深入了解这些概念及其高效应用方法,以及特定驱动程序实现的实…...

AI常见的算法

人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…...

LibreChat

文章目录 一、关于 LibreChat✨特点 二、使用LibreChat🪶多合一AI对话 一、关于 LibreChat LibreChat 是增强的ChatGPT克隆:Features Agents, Anthropic, AWS, OpenAI, Assistants API, Azure, Groq, o1, GPT-4o, Mistral, OpenRouter, Vertex AI, Gemi…...

Spring Boot 日志:项目的“行车记录仪”

一、什么是Spring Boot日志 (一)日志引入 在正式介绍日志之前,我们先来看看上篇文章中(Spring Boot 配置文件)中的验证码功能的一个代码片段: 这是一段校验用户输入的验证码是否正确的后端代码&#xff0c…...

Spring Boot 实现文件上传和下载

文章目录 Spring Boot 实现文件上传和下载一、引言二、文件上传1、配置Spring Boot项目2、创建文件上传控制器3、配置文件上传大小限制 三、文件下载1、创建文件下载控制器 四、使用示例1、文件上传2、文件下载 五、总结 Spring Boot 实现文件上传和下载 一、引言 在现代Web应…...

慕课:若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战,启动文档

代码: Javahhhh/miaosha191: 运行成功了慕课若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战https://github.com/Javahhhh/miaosha191 https://github.com/Javahhhh/miaosha191 miaosha项目启动文档 需安装的配置环境: VMwar…...

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载:通过代码分包实现组件…...

虚幻基础08:组件接口

能帮到你的话,就给个赞吧 😘 文章目录 作用 作用 组件接口:可以直接调用对方的组件接口,而无需转换为actor。 实现对象间的通知。 A 通知 B 做什么。...

iPhone SE(第三代) 设备详情图

目录 产品宣传图内部图——后设备详细信息 产品宣传图 内部图——后 设备详细信息 信息收集于HubWeb.cn...

2025苹果CMS v10短剧模板源码

文件不到70kb,加载非常快 无配置,没有详情页,上传就可以直接使用 使用教程:上传到网站template目录并解压、进入网站后台选择模板 注意:默认调用ID为1的数据和扩展分类,建议新建站使用 源码下载&#xf…...

2007-2020年各省国内专利申请授权量数据

2007-2020年各省国内专利申请授权量数据 1、时间:2007-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围:31省 5、指标解释:专利是专利权的简称&…...

第一天-嵌入式应用开发介绍

首先,我们来介绍一下嵌入式的发展路线,虽然嵌入式的知识点众多,但是总体上来说,嵌入式分为以下两条主要路线: 单片机开发ArmLinux开发 当然,还有其他的一些例如FPGA这种的我们就不计算在内了,F…...

约瑟夫问题(信息学奥赛一本通-2037)

【题目描述】 N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M 的人出圈;…输出依次出圈的人的编号。 【输入】 输入N和M。 【输出】 输出一行,依次出圈的人的编号。 【输入样…...

WPF5-x名称空间

1. x名称空间2. x名称空间内容3. x名称空间内容分类 3.1. x:Name3.2. x:Key3.3. x:Class3.4. x:TypeArguments 4. 总结 1. x名称空间 “x名称空间”的x是映射XAML名称空间时给它取的名字(取XAML的首字母),里面的成员(如x:Class、…...

一个python项目中的文件和目录的作用是什么?scripts,venv,predict的具体含义

今天学习SadTalker的项目,但目录和文件不知道都是干什么的,总结记录下,方便后续使用。 目录 1. docs: 作用: 这个文件夹通常包含项目的文档。文档可能包括用户指南、API 文档、开发文档等。 2. examples: 作用: 这里通常包含一些示例代码…...

python学opencv|读取图像(四十八)使用cv2.bitwise_xor()函数实现图像按位异或运算

【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。 按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位取反运算:一个二进制数,0变1,1变0。 按…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-block.py

block.py ultralytics\nn\modules\block.py 目录 block.py 1.所需的库和模块 2.class DFL(nn.Module): 3.class Proto(nn.Module): 4.class HGStem(nn.Module): 5.class HGBlock(nn.Module): 6.class SPP(nn.Module): 7.class SPPF(nn.Module): 8.class C1(nn…...

c++多态

1.多态的概念 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。 2.多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为…...

ResNeSt: Split-Attention Networks 参考论文

参考文献 [1] Tensorflow Efficientnet. https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet. Accessed: 2020-03-04. 中文翻译:[1] TensorFlow EfficientNet. https://github.com/tensorflow/tpu/tree/master/models/official/efficien…...

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…...

从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件,实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件(如.XDC .UCF .TCL等)。 我们在FPGA设计中需要引脚锁定文件,就是指示TOP层…...

苍穹外卖使用MyBatis-Plus

系列博客目录 文章目录 系列博客目录一、修改sky-take-out项目的pom.xml文件1.修改lombok依赖的版本号2.修改spring-boot-starter-parent父工程的版本号3.增加依赖 二、修改sky-server模块的pom.xml文件1.增加mysql连接的依赖(版本为8.0以上)2.增加两个依…...

Baklib引领数字化内容管理转型提升企业运营效率

内容概要 在数字化迅速发展的背景下,企业正面临着前所未有的内容管理挑战。传统的内容管理方式已难以适应如今的信息爆炸,企业需要更加高效、智能的解决方案以应对复杂的数据处理需求。Baklib作为行业的先锋,以其创新技术对数字化内容管理进…...

【PyTorch】4.张量拼接操作

个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch&#xff0…...

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎,它擅长进行事务处理,具有崩溃恢复的特性,在日常开发中使用非常广泛,其逻辑存储结构图如下所示, 下面是InnoDB架构图&#xf…...