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

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架,它通过模块化设计和灵活的对话机制,极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统,带您全面了解这一强大框架的内部工作原理和最佳实践。

一、AutoGen核心架构(core)

1.1 基础类与接口

AutoGen的core模块提供了构建智能体系统所需的所有基础组件:

from autogen import Agent, ConversableAgent, Runnable
  • Agent类:所有智能体的基类,定义了智能体的基本属性和方法

  • ConversableAgent:核心的可对话智能体类,扩展了基础Agent的对话能力

  • Runnable接口:定义了可执行组件的标准接口

1.2 消息系统

AutoGen的消息系统是其通信基础,支持多种消息类型:

{"content": "消息内容","role": "user|assistant|system","name": "发送者名称","function_call": {...},  # 函数调用信息"context": {...}        # 自定义上下文
}
 

消息处理流程包括:

  1. 消息预处理

  2. 消息路由

  3. 消息处理

  4. 响应生成

1.3 配置系统

灵活的配置管理支持不同层次的设置:

config = {"model": "gpt-4","temperature": 0.7,"timeout": 60,"functions": [...],     # 可调用函数列表"cache_config": {...}   # 缓存配置
}

配置可应用于全局、智能体级别或单个对话级别。

1.4 函数调用机制

AutoGen提供了完整的函数调用支持:

# 函数注册
@agent.register_function
def get_weather(location: str):"""获取指定地点的天气信息"""# 实现代码...return weather_data# 自动触发
response = agent.generate_reply(messages=[{"content": "北京天气怎么样?"}]
)
 

二、多智能体对话系统(agentchat)

2.1 基本对话模式

agentchat模块提供了完整的智能体间对话解决方案:

from autogen import AssistantAgent, UserProxyAgentassistant = AssistantAgent("assistant")
user_proxy = UserProxyAgent("user_proxy")# 发起对话
chat_result = user_proxy.initiate_chat(assistant,message="帮我分析这份销售数据",max_turns=5
)

2.2 对话管理

对话状态机

AutoGen内部维护了一个精细的对话状态机:

  1. 初始化阶段:建立连接,交换能力信息

  2. 协商阶段:确定对话目标和策略

  3. 执行阶段:核心任务处理

  4. 终止阶段:结果确认和资源释放

对话历史管理
# 获取完整对话历史
history = assistant.chat_messages# 历史记录格式
[{"content": "你好","role": "user","turn": 1,"timestamp": "2023-11-20T10:00:00Z"},{"content": "您好!有什么可以帮您?","role": "assistant","turn": 2,"timestamp": "2023-11-20T10:00:02Z"}
]
 

2.3 群聊系统(GroupChat)

from autogen import GroupChat, GroupChatManager# 创建多个专业智能体
analyst = AssistantAgent(name="数据分析师",system_message="你擅长数据分析和可视化..."
)strategist = AssistantAgent(name="策略专家",system_message="你负责制定业务策略..."
)# 配置群聊
groupchat = GroupChat(agents=[user_proxy, analyst, strategist],messages=[],max_round=10,speaker_selection_method="round_robin"  # 也可用"auto"或自定义函数
)manager = GroupChatManager(groupchat=groupchat)# 发起群聊
user_proxy.initiate_chat(manager,message="我们需要制定下季度的营销计划"
)

2.4 高级对话控制

自定义回复策略

def custom_reply_strategy(recipient, messages, sender, config):last_message = messages[-1]if "紧急" in last_message["content"]:return True, "优先处理紧急请求..."return False, None  # 继续默认处理assistant.register_reply(trigger=[UserProxyAgent, None],reply_func=custom_reply_strategy,position=0  # 优先级
)
对话流程控制
# 中断当前对话
user_proxy.stop_reply_at_receive(assistant)# 重定向对话
user_proxy.redirect_conversation(new_recipient=strategist,message="这个问题更适合策略专家"
)
 

三、核心架构深度解析

3.1 智能体生命周期管理

  1. 初始化阶段

    • 加载配置

    • 注册能力

    • 建立连接池

  2. 运行阶段

    • 状态监测

    • 资源调度

    • 异常处理

  3. 终止阶段

    • 资源释放

    • 知识持久化

    • 对话归档

3.2 通信协议栈

+-----------------------+
|   应用层(对话逻辑)     |
+-----------------------+
|   会话层(对话管理)     |
+-----------------------+
|   传输层(消息路由)     |
+-----------------------+
|   网络层(连接管理)     |
+-----------------------+

3.3 性能优化机制

  1. 消息压缩:对长对话历史进行智能摘要

  2. 缓存系统:缓存常见请求的响应

  3. 并行处理:支持异步消息处理

  4. 负载均衡:智能分配计算资源

四、实战案例:智能开发团队

让我们构建一个完整的软件开发团队:

from autogen import (AssistantAgent,UserProxyAgent,GroupChat,GroupChatManager,config_list_from_json
)# 加载LLM配置
config_list = config_list_from_json("OAI_CONFIG_LIST")# 创建团队成员
product_manager = AssistantAgent(name="产品经理",system_message="""你负责产品需求分析和优先级排序。确保需求明确、可衡量,并与业务目标一致。""",llm_config={"config_list": config_list}
)tech_lead = AssistantAgent(name="技术主管",system_message="""你负责系统架构设计和技术决策。评估技术可行性,识别风险,制定开发计划。""",llm_config={"config_list": config_list}
)developer = AssistantAgent(name="开发工程师",system_message="""你负责编写高质量代码。遵循最佳实践,编写清晰注释,确保代码可维护。""",llm_config={"config_list": config_list}
)tester = AssistantAgent(name="测试工程师",system_message="""你负责保证软件质量。设计测试用例,执行测试,报告缺陷。""",llm_config={"config_list": config_list}
)# 用户代理
user_proxy = UserProxyAgent(name="客户代表",human_input_mode="TERMINATE",  # 关键节点请求人工输入code_execution_config=False
)# 配置团队协作
team_chat = GroupChat(agents=[user_proxy, product_manager, tech_lead, developer, tester],messages=[],max_round=20,speaker_selection_method="auto"
)team_manager = GroupChatManager(groupchat=team_chat,llm_config={"config_list": config_list}
)# 启动项目开发
user_proxy.initiate_chat(team_manager,message="我们需要开发一个个人财务管理应用,包含预算跟踪、支出分类和报表功能。"
)

五、最佳实践与调优建议

5.1 智能体设计原则

  1. 单一职责:每个智能体应专注一个明确领域

  2. 明确边界:清晰定义智能体的能力和限制

  3. 适度冗余:关键角色可设置备份智能体

  4. 分层设计:战略层、战术层、执行层智能体配合

5.2 性能调优

  1. LLM选择

    • 复杂推理:GPT-4

    • 常规任务:GPT-3.5

    • 专业领域:领域微调模型

  2. 参数配置

    llm_config={"temperature": 0.3,  # 创造性任务可调高"max_tokens": 1024,"top_p": 0.9,"frequency_penalty": 0.5  # 减少重复
    }

  3. 缓存策略

    cache_config = {"cache_seed": 42,  # 可复现结果"cache_path": ".cache","ttl": 3600  # 缓存有效期
    }

5.3 错误处理与鲁棒性

try:chat_result = user_proxy.initiate_chat(...)
except autogen.AutogenError as e:print(f"对话异常: {e}")# 自动恢复策略user_proxy.recover_chat(last_valid_state=...,fallback_agents=[...])
 

六、扩展与集成

6.1 自定义智能体开发

class CustomAgent(ConversableAgent):def __init__(self, name, specialty, **kwargs):super().__init__(name, **kwargs)self.specialty = specialtydef custom_method(self, task):"""处理专业领域任务"""return f"作为{self.specialty}专家处理: {task}"def receive(self, message, sender):"""重写接收逻辑"""if self.specialty in message:return self.custom_method(message)return super().receive(message, sender)
 

6.2 外部系统集成

# 数据库集成示例
class DatabaseAgent(ConversableAgent):def __init__(self, db_connection):self.conn = db_connectionself.register_reply([Agent, None], self.handle_db_query)def handle_db_query(self, recipient, messages, sender, config):last_msg = messages[-1]["content"]if "查询" in last_msg:table = extract_table_name(last_msg)results = self.query_db(table)return True, json.dumps(results)return False, Nonedef query_db(self, table):# 执行实际查询return pd.read_sql(f"SELECT * FROM {table}", self.conn).to_dict()

以下是 AutoGen 的相关官方资源链接:

1. GitHub 仓库地址

🔗 https://github.com/microsoft/autogen

2. 官方文档地址

📖 Redirecting...

3. PyPI 包地址(Python 安装)

🐍 https://pypi.org/project/pyautogen/

你可以通过 GitHub 查看源代码、提交 Issue 或参与贡献,官方文档则提供了详细的安装指南、使用教程和 API 参考。

相关文章:

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架,它通过模块化设计和灵活的对话机制,极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统,带您全…...

接口请求控制工具

接口请求控制工具 功能说明代理转发安全控制访问控制错误处理配置管理日志管理 技术栈快速开始环境要求配置说明启动服务 工具源码 功能说明 代理转发 支持多路由配置支持静态资源代理灵活的路由规则配置支持请求转发和响应处理支持负载均衡 支持多目标服务器配置提供多种负载…...

Git 实践笔记

这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32,将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...

记一个Unity中Humanoid中骨骼与武器脱离的问题

在Untiy中,有时人物的Humanoid的骨骼对应上了,但是套用动画的时候武器等节点有时会脱离,这是因为Humanoid只包含了人物骨骼,不包括其他额外的骨骼,因此如果想要武器节点也跟随,需要在Humanoid中也绑定骨骼设…...

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序; 建立event_loop 概念,上面event_loop 可以理解为大脑,下面是若干个可执行的Task; Task 没有控制权,没有办法控制event_loop 执行某个Task,只…...

【前端分享】JavaScript异步编程详解!

JavaScript 的异步编程是其核心特性之一,主要用于处理非阻塞操作(如网络请求、文件读写、定时任务等)。由于 JavaScript 是单线程的,异步机制可以避免代码阻塞,提高性能和用户体验。以下是 JavaScript 异步编程的核心概…...

深度学习基础--CNN经典网络之InceptionV1研究与复现(pytorch)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 InceptionV1是提出并行卷积结构,是CNN的经典网络之一;本次任务是探究InceptionV1结构并进行复现实验;欢迎收藏 关注…...

用 Vue 3 + D3.js 实现动态数据流图

文章目录 一、项目背景与功能概览二、项目准备与依赖安装2.1 安装 Vue 3 项目2.2 安装 D3.js2.3 项目结构 三、实现动态数据流图3.1 创建 DataFlowChart 组件3.2 动态更新数据流3.2.1 动态更新边和节点位置3.2.2 动画效果 四、节点拖拽与编辑功能实现4.1 添加节点拖拽功能4.2 编…...

46、Spring Boot 详细讲义(三)

五、Spring Boot 与 Web 开发 1. 简介 Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。 2. Spring MVC 集成 Sp…...

热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索

654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…...

为了避免unboundLocalError和为什么X的值一直不变呢?

## 1.为了避免unboundLocalError 发生unboundLocalError! def generate_integer(level):if level 1:X randint(1,9)return X这里出错的原因在于,一旦if 后面的条件没有成立,然后X根本没出生,然后你去使用它,这是有…...

Express中间件(Middleware)详解:从零开始掌握(1)

1. 中间件是什么? 想象中间件就像一个"加工流水线",请求(Request)从进入服务器到返回响应(Response)的过程中,会经过一个个"工作站"进行处理。 简单定义:中间件是能够访问请求对象(req)、响应对象(res)和下…...

Linux升级gcc版本

目录 1.安装 scl 工具集 2.安装新版本gcc 3.启用新版本 gcc 4.将启动新版本gcc指令写入配置文件 本文主要讲述如何去升级 linux 操作系统下的 gcc 编译器版本。 1.安装 scl 工具集 sudo yum install centos-release-scl scl-utils-build 由于作者已经安装过,…...

【概念】什么是UI(User interface)什么是UX(User experience)?

1. 软件生命周期管理 (Software Life Cycle Management) 解释: 中文: 软件生命周期管理是指从软件规划、设计、开发、测试、部署到后续维护甚至退役的整个过程。English: Software Life Cycle Management refers to the systematic process of plannin…...

【GIT】git pull --rebase 功能解析

1. git pull 命令基础 git pull 是一个常用的 Git 命令,用于从远程仓库获取最新的更改,并尝试将这些更改合并到当前分支中。这通常涉及两个步骤:首先,git fetch 命令从远程仓库下载最新的更改;然后,git me…...

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、智能院25年院线相对于24年院线 全部专业下降比较多,其中控制科学与工程下降20分,计算机科学与技术下降20分,计算机技术[专硕]下降…...

L2-051 满树的遍历

L2-051 满树的遍历 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 数据结构选择 为了表示树的结构,我们可以使用邻接表。邻接表是一种常用的图和树的表示方法,它能够高效地存储每个节点的子节点信息。在本题中,我们可以使用一个数组 g&am…...

2025年电子电气与新材料国际学术会议

重要信息 官网:www.iceenm.org(点击了解详情) 时间:2025年4月25-27日 地点:中国-杭州 部分介绍 征稿主题 电子电气 新材料 电力电子器件和系统设计 可再生能源与电网集成技术 下一代半导体…...

数字人:打破次元壁,从娱乐舞台迈向教育新课堂(4/10)

摘要:数字人正从娱乐领域的璀璨明星跨界到教育领域的智慧导师,展现出无限潜力。从虚拟偶像、影视游戏到直播短视频,数字人在娱乐产业中大放异彩,创造巨大商业价值。在教育领域,数字人助力个性化学习、互动课堂和虚拟实…...

【Hyperlane 】轻松实现大文件分块上传!

【Hyperlane 】轻松实现大文件分块上传! 痛点直击:大文件上传不再是难题 在云存储、音视频处理、文件协作等场景中,大文件上传常面临中断重试成本高、内存占用大、网络不稳定等挑战。传统方案要么复杂笨重,要么性能瓶颈明显。 现…...

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】:从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …...

APP动态交互原型实例|墨刀变量控制+条件判断教程

引言 不同行业的产品经理在绘制原型图时,拥有不同的呈现方式。对于第三方软件技术服务公司的产品经理来说,高保真动态交互原型不仅可以在开发前验证交互逻辑,还能为甲方客户带来更直观、真实的体验。 本文第三部分将分享一个实战案例&#…...

第二节:React 基础篇-受控组件 vs 非受控组件

一、场景题:设计一个实时搜索输入框,说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态(state)控制通过DOM元素(ref)直接访问更新时机每次输入触发onChange提交…...

电脑的usb端口电压会大于开发板需要的电压吗

电脑的USB端口电压通常不会大于开发板所需的电压,以下是详细解释: 1. USB端口电压标准 根据USB规范,USB接口的标称输出电压为5V。实际测量时,USB接口的输出电压会略有偏差,通常在4.75V到5.25V之间。USB 2.0和USB 3.0…...

软件界面设计:打造用户喜爱的交互体验

在数字化飞速发展的当下,软件已渗透进生活的各个角落,从日常使用的社交、购物软件,到专业领域的办公、设计软件,其重要性不言而喻。而软件界面作为用户与软件交互的桥梁,直接决定了用户对软件的第一印象与使用体验。出…...

7、linux基础操作2

一、linux调度 1、crontab [选项] 1.1、了解 定时任务调度:指每隔指定的时间,执行特定的命令或程序。 基本语法:crontab [选项] 常用选项: e: 编辑定时任务l:查询定时任务r:删除当前用户的所有定时任务…...

大数据管理专业想求职数据分析岗,如何提升面试通过率?

从技能到策略,解锁高薪岗位的六大核心逻辑 在数字化浪潮席卷全球的今天,数据分析岗位的竞争愈发激烈。对于大数据管理专业的学生而言,如何从众多求职者中脱颖而出?本文结合行业趋势与实战经验,提炼出提升面试通过率的…...

移动端六大语言速记:第15部分 - 其他方面

移动端六大语言速记:第15部分 - 其他方面 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的其他重要特性,帮助开发者全面了解各语言的独特优势和应用场景。 15.1 语言特有功能 各语言特有功能对比: 语言特有功能描述Java注解(Annotat…...

3.1.3.4 Spring Boot使用使用Listener组件

在Spring Boot中,使用Listener组件可以监听和响应应用中的各种事件。首先,创建自定义事件类CustomEvent,继承自ApplicationEvent。然后,创建事件监听器CustomEventListener,使用EventListener注解标记监听方法。接下来…...

基于关键字定位的自动化PDF合同拆分

需求背景: 问题描述: 我有一份包含多份合同的PDF文件,需要将这些合同分开并进行解析。 传统方法(如以固定页数作为分割点)不够灵活,无法满足需求。 现有方法的不足: 网上找到的工具大多依赖手动…...

ssh连接远程Host key verification failed.

问题描述 在对已部署的项目进行维护过程中,遇到的一个小问题,记录一下。 SSH连接云服务器ssh xxx云服务器IP地址,提示: The authenticity of host xxxxxx (xx.xxx.123.321) cant be established. ECDSA key fingerprint is SHA…...

Matlab 汽车ABS的bangbang控制和模糊PID控制

1、内容简介 Matlab 197-汽车ABS的bangbang控制和模糊PID控制 可以交流、咨询、答疑 2、内容说明 略 摘要:本文旨在设计一种利用模糊控制理论优化的pid控制器,控制abs系统,达到对滑移率最佳控制范围的要求 ,所提出的方案采用级联…...

kotlin的takeIf使用

takeIf用于判断指定对象是否满足条件,满足就返回该对象自身,不满足返回null。因为可以返回对象自身,所以可以用作链式调用,以简化代码,又因takeIf可能返回空,所以常常和let结合使用,示例如下&am…...

MySQL 进阶 - 2 ( 9000 字详解)

一: SQL 优化 1.1 插入数据 1.1.1 批量插入 单条 INSERT 语句执行时,需经历语法解析、事务提交、磁盘 I/O 等多个步骤。批量插入将多条数据合并为一条 SQL,能够减少网络通信和事务开销。 -- 单条插入(低效) INSERT…...

Devops之GitOps:什么是Gitops,以及它有什么优势

GitOps 定义 GitOps 是一种基于版本控制系统(如 Git)的运维实践,将 Git 作为基础设施和应用程序的唯一事实来源。通过声明式配置,系统自动同步 Git 仓库中的期望状态到实际运行环境,实现持续交付和自动化运维。其核心…...

VSCode和Fitten Code

提示:本文为学习记录,若有错误,请联系作者。 文章目录 一、离线安装二、在线安装总结 一、离线安装 访问 Open VSX 镜像站 打开 https://open-vsx.org,搜索 Fitten Code 点击“从VSIX安装”,选择下载的VSIX即可。安装…...

在 Visual Studio Code 中安装 Python 环境

在 Visual Studio Code 中安装 Python 环境 1. 安装 Visual Studio Code 首先,下载并安装 Visual Studio Code(VS Code): 下载链接:Visual Studio Code 官网安装步骤:按照下载页面的说明进行安装。 2. …...

[问题帖] vscode 重启远程终端

原理 有的时候,在vscode 远程ssh连接到服务器的时候,可能遇到需要重启终端才能生效的配置,比如add group的时候,而此时无论你是关闭vscode终端重启,还是reload窗口都是没用的。 因为不管你本地是否连接了远程的vscode服…...

PostgreSQL技术大讲堂 - 第86讲:数据安全之--data_checksums天使与魔鬼

PostgreSQL技术大讲堂 - 第86讲,主题:数据安全之--data_checksums天使与魔鬼 1、data_checksums特性 2、避开DML规则,嫁接非法数据并合法化 3、避开约束规则,嫁接非法数据到表中 4、避开数据检查,读取坏块中的数据…...

No staged files match any configured task

我在拉取一个新项目的时候,进行 git commit 的时候就出现了这个问题 然后我现在来说一下我出现这个问题的解决思路 我们点击 “显示命令输出” 我们把第二行的错误 subject may not be empty [subject-empty] 复制搜索一下 这是其他人写的 博客:subje…...

Sqlite3 查看db文件

以下是一些 SQLite3 常用命令的整理,涵盖数据库操作、表管理、数据查询等场景: 1. 数据库连接与退出 打开/创建数据库:sqlite3 filename.db # 打开或创建数据库文件退出 SQLite3 命令行:.exit # 退出 .quit …...

【leetcode hot 100 152】乘积最大子数组

错误解法:db[i]表示以i结尾的最大的非空连续,动态规划:dp[i] Math.max(nums[i], nums[i] * dp[i - 1]); class Solution {public int maxProduct(int[] nums) {int n nums.length;int[] dp new int[n]; // db[i]表示以i结尾的最大的非空连…...

微信小程序实时日志记录-接口监控

文章目录 微信小程序如何抓取日志,分析用户异常问题可查看用户具体页面行为操作web体验分析![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dd20bb72606842128aa1eaf0881196f6.png) 腾讯小程序平台,提供了非常好用的,。 web分析工…...

【C++刷题】二叉树基础OJ题

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…...

CSS高级技巧

目录 一、精灵图 二、字体图标 三、CSS制作三角形 四、CSS用户界面样式 1、鼠标样式 cursor 2、轮廓线 outline 3、防止拖拽文本域 resize 五、vertical-align 属性 六、溢出的文字省略号显示 1、单行文本溢出显示省略号 2、多行文本溢出显示省略号 七、常见布局技…...

70. 爬楼梯:动态规划

题目来源 70. 爬楼梯 - 力扣(LeetCode) 题目描述 思路 1.观察每个较少的台阶的方法 2.dp[0,1,2,3,5,8,13]---->dp[i]表示爬上第i阶的方法数 3.观察dp:dp[i]dp[i-1]dp[i-2]; 代码 public int climbStairs(int n) {int[] dp new int…...

使用治疗前MR图像预测脑膜瘤Ki-67的多模态深度学习模型

大家好,我是带我去滑雪! 脑膜瘤是一种常见的脑部肿瘤,Ki-67作为肿瘤细胞增殖的标志物,对于评估肿瘤的生物学行为、预后以及治疗方案的制定具有至关重要的作用。然而,传统的Ki-67检测依赖于组织学切片和免疫组化染色等方…...

Skynet.socket 函数族使用详解

目录 Skynet.socket 函数族使用详解核心功能分类一、TCP 连接管理1. 监听端口2. 建立连接3. 关闭连接 二、数据读写操作1. 阻塞式读取2. 写入数据2.1 socket.write(fd, data) 的返回值2.2 示例代码2.3 关键注意事项2.4 与其他函数的区别2.5 底层原理2.6 总结 三、UDP 处理1. 创…...

Python signal 模块详解:优雅处理异步事件

诸神缄默不语-个人技术博文与视频目录 在 Linux 或类 Unix 系统中,信号(Signal)是一种用于进程间通信的机制,允许操作系统或其他进程向目标进程发送异步通知。 Python 的 signal 模块提供了对这些信号的访问和处理能力&#xff0…...

[LeetCode 189] 轮转数组

[LeetCode 189] 轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 示例 2: 输入:nums [-1,-100,3,99], k 2 …...