论文阅读笔记(十一)——BioInformatics Agent (BIA)

论文阅读笔记(十一)——BioInformatics Agent (BIA): Unleashing the Power of Large Language Models to Reshape Bioinformatics Workflow

目录

  • 论文阅读笔记(十一)——BioInformatics Agent (BIA): Unleashing the Power of Large Language Models to Reshape Bioinformatics Workflow
    • 摘要
    • 简介
    • Method
      • 元数据处理和数据获取
      • 2.2 工作流程工具调用器
    • 结果
      • Automated single-cell data collection
      • Experimental design generation
      • Advanced analytics and reporting
      • Optimistic outcome and strenuous challenges
      • Discussion and Conclusion

摘要

生物信息学在理解生物现象中起着至关重要的作用,但生物数据的指数级增长和技术的快速进步加大了深入探索这一领域的障碍。因此,我们提出了生物信息代理(BIA),这是一种利用大语言模型(LLM)技术的智能代理,通过自然语言促进自主的生物信息学分析。BIA的主要功能包括提取和处理原始数据和元数据,查询本地部署和公共数据库的信息。它还承担了工作流程设计的制定,生成可执行代码,并提供全面的报告。本文专注于单细胞RNA测序(scRNA-seq)数据,展示了BIA在信息处理和分析以及执行复杂任务和交互方面的卓越能力。此外,我们分析了代理的失败执行,并展示了包括自我改进和领域适应在内的潜在增强策略。未来展望包括将BIA的实际应用扩展到多组学数据,以减轻生物信息学界的工作负担,并推动对生命科学奥秘的更深入研究。BIA可在以下网址获取:https://github.com/biagent-dev/biagent。

简介

在这里插入图片描述

图1:BioInformatics Agent(BIA)的总体框架概述。
BIA包括以下关键步骤:1).输入处理:接收和预处理用户的输入或查询,并将输入分类为预定义的类别2).生成过程:给定处理过的输入和上下文理解,BIA部署工具并生成工作流3).响应评估和过滤:检查生成的响应的一致性,适当性和遵守预定义规则。4).反馈回路:用于微调模型的反馈,通过强化学习或自适应请求随着时间的推移提高其性能。5).交付:最后将生成和处理的结果通过界面交付给用户,用户可以再次使用这些结果进行模型推理。

随着多组学测序技术的不断进步和成本的逐渐降低,组学数据和相关分析工具的产出以空前的速度增长。这一趋势为生物科学领域的研究人员带来了重大机遇和新的挑战。

例如,处理全基因组测序(WGS)数据的特定工作流程涉及使用数十种软件工具,并需要研究人员具备软件安装、参数调用和故障排除能力。 此外,深入分析还要求熟练掌握扩展的编码和可视化工具。这些前提条件构成了生物科学领域各种利益相关者的巨大障碍,例如主要从事实验工作的湿实验室生物学家和通常缺乏编程培训的临床医生。 实际上,生物信息学社区一直在积极应对这些挑战。许多项目,例如Galaxy Project,正在构建低门槛、可重复使用且广泛的平台,以便研究人员高效地存储、管理和分析大量数据。Bioconductor包括超过2000个R软件包,而一系列shell工具和Python软件包已经增加到数百个,并且不断发展和改进。然而,这些努力仍然受到先前技术的限制。目前,大多数旨在构建可重复使用的分析管道的解决方案在很大程度上依赖于人工劳动,并且适应性不足,强调了对更复杂和灵活的方法的需求。

先前的工作已经部署并实施了基于LLM的工具,如Dr BioRight和BioMonia,以对用户需求进行理解并通过对话模型提供解决方案。

在我们的实验中,我们设计了BioInformatics Agent(BIA),使用了来自OpenAI的最先进语言模型GPT-4,通过Web API服务(模型ID:gpt-4-0125-preview)来制定基于提供解决方案的生物信息学实验协议。该代理能够执行整个单细胞分析管道,包括数据检索、调用适当的API进行处理,通过自主规划编写结论,成为生物信息学研究的有力促进者。 通过安装BIA,我们设想生物信息学研究人员可以从繁重的数据集和重复性的工作中解脱出来,从而专注于更重要的研究问题。

Method

BIA通过与大语言模型(LLMs)的文本交互来实现操作,促进通过与用户对话进行数据提取、分析和报告生成。BIA通过与LLM的文本提示交互来实现。总体上,与LLM的交互通过四个结构化的叙述段进行组织:

  1. 思考段引发对任务进展的反思评估;
  2. 行动和行动输入段指导LLM调用特定工具并指定其所需输入,从而促进工具参与;
  3. 最后,观察阶段允许LLM解释已执行工具的结果。

因此,LLM的响应被仔细分析,以启动工具驱动的操作或形成针对用户的结论性反馈,有效地关闭交互循环并增强系统的分析能力。特定领域的工具对于增强基于LLM的代理的自主性和功能性至关重要。在这种背景下,我们介绍了一套由领域专家为BIA量身定制的广泛工具。这些工具根据其操作角色系统地分为三类:

  1. 在线数据库管理
  2. 元数据提取
  3. 生物信息学工作流程。

以下部分描述了这些工具的使用和实现。

元数据处理和数据获取

首先,安装了与主要在线公共存储库(如欧洲核苷酸档案库(ENA)、国家生物技术信息中心(NCBI)、欧洲生物信息学研究所(EBI)等)交互的工具,便于下载DNA和RNA数据集及其相关的元数据信息。

search online db(query)工具为用户查询提供一个代理,向公共存储库的搜索引擎查询基于元信息的相关样本,并返回匹配样本的ID列表。

download online db(ids)工具使用给定的ID从存储库中下载数据,包括元数据、处理过的计数矩阵和原始数据。

这些工具是使用ffq[1]实现的,用于获取序列读取文件和基本元信息,使用GEOparse[2]增强来自GEO样本的元数据。

在本文中,BIA通过多轮对话来确定特定研究及其数据,明确仅使用单细胞RNA数据并仅选择智人(Homo sapiens)的数据。

[1] Metadata retrieval from sequence databases with ffq
[2] Python library to access gene expression omnibus database (geo)

在获取所选样本的计数矩阵时,BIA适应各种数据格式,包括SRA、FASTQ、MTX、TSV、RData。read count data(ids)工具首先尝试将作者上传的处理过的计数矩阵转换为标准注释数据(Anndata)格式[3]。 计数矩阵的格式多样,具有任意的列和行排列。读取这些数据需要了解矩阵结构,因此不能进行硬编码。

[3] anndata: Annotated data

我们通过LLMs的编码技巧解决了这个挑战,通过提示LLMs提供上传文件的简短摘要和基于文件扩展名选择的代码模板。 我们在Python环境中执行完成的回复代码,并获得最终的Anndata对象。对于没有作者提供数据的样本,BIA根据标准实践从序列读取数据构建Anndata,即使用默认设置将公共FASTQ文件与Cell Ranger软件对齐。然后,BIA对Anndata对象进行数据质量检查、预处理和格式转换任务。

第二个关键功能涉及元数据的识别和组织,元数据指的是包括患者人口统计数据、临床数据以及每个样本的治疗和干预在内的结构化信息。 数据库之间元数据记录的不一致性阻碍了数据重用,而在生物信息学中,仔细控制混杂变量对于可靠的数据解释至关重要。在这里,为了丰富样本元数据的质量,我们利用LLMs从作者提供的非结构化原始描述中提取由专家定义的结构化数据。

metadata extraction(ids)功能遍历给定样本ID的列表,并从每个样本的元信息中返回一组预定义的元字段。这些由专家选择的元字段可以作为下游分析的有效过滤器。为了收集字段值,我们首先获得样本的文本描述,即分别来自GEO和ArrayExpress的SOFT和SDRF文件。这些原始信息然后与目标元字段的说明结合形成一个文本提示。最后,我们调用LLMs使用该提示并从回复中提取每个元字段的相应数据。

2.2 工作流程工具调用器

生物信息学工具箱是广泛的,并且经历快速更新,具有高度灵活的工作流程定制,这对代理在工具调用和适应能力方面构成了重大挑战。为了解决这一问题,我们主要采用以下策略。

我们从公开可用的资源(例如最佳实践、scanpy)中获取scRNAseq生物信息学分析用例作为输入数据中的元数据,并由人类专家将这些用例描述为嵌入数据。然后,根据需要清理和格式化这些数据以确保数据质量。我们应用OpenAI的嵌入模型(模型ID:text-embedding-3-small)将处理过的文本数据转换为向量表示(即嵌入),并使用Chromadb软件包构建嵌入数据库。这些嵌入可以通过查找查询嵌入的最近邻来检索最相关的用例。然后,我们构建了一个生物信息学工具调用封装器,同时确保动态性和灵活性(图2)。


图2:信息学工具调用程序的流聊天。用户通过在调用程序中提供详细的任务描述以及可选的预期计算结果来启动流程。利用llm,系统根据任务描述挖掘RAG数据库,提取相关的工具包、代码片段和使用场景。将用户的规范与代理获得的环境洞察集成在一起,合成检索到的引用,以重新生成与上下文相适应的工具使用代码。然后,定制的代码经历调用、执行和迭代调整。该过程是动态引导的,确保与不断发展的需求保持一致。最后一步,生成最终的输出,当提供时,代理根据用户对计算结果的预定义期望对这些输出进行基准测试。在指定用户期望的情况下,代理积极参与反馈循环,利用在线资源来评估并在必要时纠正输出。在关键时刻,需要人为干预,以确保准确性和相关性。

我们通过生物信息学任务的描述、环境感知和用户期望来规范生物信息学工具的使用。然而,在现实世界的场景中,一些稳定或简单的工作流程不一定需要用户的期望来调整输出,我们在这里将其命名为静态工作流程,与之相对的则是相应的动态工作流程。

我们的调用器设计为与它们兼容,如下所示,我们使用静态工作流程调用作为基础,并在其上添加用户期望管理以适应动态工作流程。首先,任务描述用于通过RAG技术查询最可比的生物信息学工具用例参考的表示。环境中加载的变量和软件包的信息被抽象为文本表示并封装到环境感知中,然后将其与参考用例一起提供给代理进行代码使用适应。然后,代理执行调整后的代码,并进行自动错误校正。在这一点上,静态工作流程的结果已经生成,如果没有用户期望的输入,调用器的工作就完成了。

在另一种情况下,如果给出了用户的期望,调用器将执行动态工作流程调用,并首先根据用户的需求将静态工作流程的输出总结为语言表示,然后由代理进行评估并生成优化建议,其中最新的网络资源将被用于确保评估在生物学上的合理性。在这里,我们规定建议集中在当前用例的参数调整上,并将其反馈给代理以重新调整用例,直到结果符合用户的要求。

结果

在这里,我们展示了一个全面的单细胞数据分析工作流程示例,展示了BIA的核心功能。它主要包括基于聊天的交互、查询时的数据检索、自动化代码生成,以及随后分析和解释生物数据集的能力。总体框架如图1所示。

Automated single-cell data collection

BIA提供了一个界面,使用户能够查询本地部署的数据库中的内容,以及下载公开访问的数据集。我们设计的第一个实验是用户的请求:“从本地数据库中查找涉及胰腺癌的单细胞转录组学研究。”基于这一需求,BIA将首先检查本地数据库中的相关样本,并返回匹配样本的ID列表,以及使用给定信息从存储库中排序的元数据、处理过的计数矩阵和原始数据,如图3所示。

如果本地数据库查询返回的胰腺癌样本结果为空,系统将调用ffq软件,从公共数据库(如GEO或ArrayExpress)中检索数据集URL和每个运行/样本的附带文本描述。随后,将描述性元数据合并并格式化,如图3所示,以便下游分析。矩阵数据要么直接下载,要么利用如cellranger之类的工具从原始数据处理为mtx格式。这些步骤已经通过工程相对固定,而BIA在调用API和执行过程中起到了主要作用(图1)。
在这里插入图片描述

Experimental design generation

在接下来的实验中,我们测试了BIA在无代码交互中智能调用和自动适应生物信息学分析过程的能力。我们从GEO数据库(GSE143423、GSE148673)中选择了包含三阴性乳腺癌(TNBC)样本的2个单细胞RNA-seq数据集,并选择了其中的6个样本(GSM4259357,GSM4476486–GSM4476490)。然后,根据自然语言输入的任务描述,BIA可以通过工具调用器调用生物信息学分析工具来完成用户指定的任务。

在执行生物信息学分析的过程中,我们将生物信息学分析工作流程分为静态程序和动态程序,分别用图4中的黄色和红色表示,基于生物信息学任务的相对成熟度和个性化程度。静态程序类似于自动脚本执行,其中BIA根据任务描述调用来自检索增强生成(RAG)的参考代码,调整代码和参数以符合特定参数和任务细节,然后执行代码进行生物信息学分析,从而产生分析结果。另一方面,动态程序体现了AI增强的个性化分析。在固定程序的基础上,我们增加了一个步骤,使BIA能够迭代优化分析脚本。这涉及BIA首先总结和分析初始运行的输出,将这些结果与用户的预期结果进行比较。如果确定结果不符合用户的期望,BIA将修改整个工作流程以确保满足用户的目标。这种自我改进的迭代过程在自适应工作流程中代表了生物信息学分析定制化的重大飞跃,增强了整体分析灵活性。

在这里插入图片描述

Advanced analytics and reporting

BIA能够根据用户需求调用前几个步骤的数据结果,以及从数据库中检索以前存储的结果,以编译和呈现综合分析报告。它可以执行复杂的统计分析,例如比较不同的簇,以更高的准确性做出数据驱动的决策和预测。例子如图5所示。在一个案例研究中,我们提出了查询:基于我们本地数据库中的数据,显示ID为“LUAD-003-01-1A”的乳腺癌样本中CD4+ T细胞的水平。BIA将返回每种细胞类型的比例,精确地提供不同CD4+ T细胞亚群的组成,以响应输入请求。进一步利用其LLM知识库,BIA能够识别每种细胞类型的常见标志物,并提供根植于领域专业知识的百科全书式解释。这显著减少了用户查询和解释结果的认知负担和时间投入,从而提高了生物信息学数据分析的效率和可访问性。

在这里插入图片描述

Optimistic outcome and strenuous challenges

开发完全为生物领域量身定制的LLM和工具集是一项艰巨的挑战。通过对BIA在各个任务阶段的性能进行全面评估,我们取得了令人鼓舞的成果,同时也发现了一些常见问题。以下部分描述了BIA的评估结果、常见问题及其原因,以及后续调整的方向。

我们首先评估了BIA的元数据提取准确性。我们从GEO(NCBI)和Array Express(ENA)数据库中获得了超过3000个文本元数据表示,并让BIA从中提取11个元数据类别(包括性别、年龄、疾病、取样地点和其他信息)。在GEO和ArrayExpress元数据提取中,它都达到了95%以上的准确率,而在非常不规则的数据集(GEO Hard,其作者提供的信息非常少)中,它在大多数因素上也达到了预期。我们将与本文一起发布这3000个元数据集的真值数据集。

随后,我们检查了BIA在设计生物信息学实验方面的能力,包括静态和动态过程。在固定程序的背景下,遵循单细胞分析的既定管道,BIA能够调用预先包装的代码,并根据我们的具体要求修改参数,从而符合预定的期望。相比之下,在零样本动态过程中,我们观察到一些限制。生物信息学分析的实验设计结果在完整性方面有所欠缺;关键步骤如子簇注释和轨迹分析有时会被遗漏。此外,结果中存在显著的不一致性,当面对相同查询时,建议缺少的工具有所不同,这表明自适应过程的稳定性和鲁棒性不足。大规模语言模型遇到的其他类似问题包括生成的代码片段未能实现预期功能或完全无法执行。这些问题可以归因于几个潜在因素:LLM缺乏领域特定知识;模型处理过程中的“系统性幻觉”倾向;对短期记忆机制的高度依赖;以及内部逻辑一致性相对较低。此外,这些模型无法自主迭代决策过程,需要人工干预来定义循环终止,可能源于信息提供不足或自动评估机制不足。

总之,BIA在进行生物信息学研究方面展示了显著的自主性和复杂的生物学意识。然而,仍需进一步增强其性能。未来工作的关键方向包括通过增加更多专业知识来提升代理生成的实验设计的复杂性,开发一个良好对齐的先验知识库,并通过微调或长期记忆机制将其整合到代理中,增强代理解释和生成结构化数据的能力,以及改进其上下文理解和推理能力。这些经验将应用于额外的组学数据集,旨在显著提高LLM在生物信息学方面的能力。

Discussion and Conclusion

在本文中,我们介绍了BIA,一个能够显著增强生物信息学分析效率,同时降低生物领域知识入门门槛的系统。本文主要针对单细胞RNA测序(scRNA-seq)分析案例,描述了一个从数据获取开始,经过生物信息学实验设计和执行,最终由代理自主组织和解释分析结果的工作流程。这个端到端的过程强调了BIA简化复杂生物信息学任务的能力,从而提高生产力并加深生物学见解。值得注意的是,BIA在将任意语言描述转换为结构化元数据方面表现出色,这极大地增强了大规模队列数据集的探索能力,并显著提高了生物信息学的生产力。然而,我们还发现了一些需要解决的问题,例如在规划时自我一致性低和幻觉。为了解决这些问题,我们的未来改进包括针对领域特异性进行微调,并通过人类反馈增强的强化学习进行迭代性能提升。

生物信息学正在向着越来越繁重和门槛不断提高的方向发展。我们希望通过提高生物信息学方法的普遍性来减轻人力资本和计算资源所施加的限制。必须承认,尽管BIA前景光明,但在经过大量改进、严格验证和专注于提高其智能性和可访问性之后,它可以在更广泛的生物科学社区中被普遍采用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++奇妙冒险】日期类Date的实现

文章目录 前言日期类Date的接口设计构造函数和打印函数获取日期并判断日期是否合法日期类的大小比较关系<运算符重载 判断小于运算符重载 判断相等<运算符重载 判断小于等于>运算符重载 判断大于> 运算符重载 判断大于等于! 运算符重载 不等于 日期类计算日期天数日…

一维数组基础(题目+答案)

第1题 反向输出 时限&#xff1a;1s 空间&#xff1a;256m 输入n个数&#xff0c;要求程序按输入时的逆序把这n个数打印出来&#xff0c;已知整数不超过100个。也就是说&#xff0c;按输入相反顺序打印这n个数。 输入格式 第一行&#xff1a;一个整数n&#xff0c;代表…

成功解决“IndexError: pop index out of range”错误的全面指南

成功解决“IndexError: pop index out of range”错误的全面指南 引言 在Python编程中&#xff0c;处理列表&#xff08;list&#xff09;、双端队列&#xff08;deque&#xff09;或其他可迭代对象时&#xff0c;我们经常使用pop()方法来移除并返回指定索引处的元素。然而&am…

JD手机商品参数对比

前言废话 这不618快到了, 手机又有点问题了; 想换个手机, 但是手机不知道选哪个; 想着能不能对比一下, JD自带的对比只能两个商品不是很够用; 就尝试写一个 首先就是要把需要对比的商品都添加到关注商品里 然后搜索所需的信息, 找哪个接口获取的 然后查看分析html结构, xpa…

赢销侠的秘密武器:如何提升客户满意度?

在竞争激烈的商业战场上&#xff0c;客户满意度是企业能否长盛不衰的关键。它如同一面镜子&#xff0c;映照出企业的服务质量和产品实力。那么&#xff0c;赢销侠们是如何运用秘密武器来提升客户满意度的呢&#xff1f;本文将深入探讨这一课题&#xff0c;并揭示背后的策略与智…

生命在于学习——Python人工智能原理(3.1)

三、深度学习 &#xff08;一&#xff09;深度学习的概念 1、深度学习的来源 深度学习的概念来源于人工神经网络&#xff0c;所以又称深度神经网络。 人工神经网络主要使用计算机的计算单元和存储单元模拟人类大脑神经系统中大量的神经细胞&#xff08;神经元&#xff09;通关…

06.持久化存储

6.持久化存储 pv: persistent volume 全局的资源 pv&#xff0c;node pvc: persistent volume claim 局部的资源&#xff08;namespace&#xff09;pod&#xff0c;rc&#xff0c;svc 6.1:安装nfs服务端(192.168.111.11) yum install nfs-utils.x86_64 -y mkdir /data vim /…

MyBatis 的在使用上的注意事项及其辨析

1. MyBatis 的在使用上的注意事项及其辨析 文章目录 1. MyBatis 的在使用上的注意事项及其辨析2. 准备工作3. #{ } 与 ${ } 的区别和使用3.1 什么情况下必须使用 ${ }3.1.1 拼接表名3.1.2 批量删除3.1.3 模糊查询3.1.3.1 使用 ${ }的方式3.1.3.2 使用 #{ } 的方式 4. typeAlias…

风景的短视频一分钟:成都科成博通文化传媒公司

风景的短视频一分钟&#xff1a;时光凝固的画卷 在快节奏的现代生活中&#xff0c;我们常常被繁忙和琐碎所困扰&#xff0c;渴望在喧嚣中找到一丝宁静与美好。而风景的短视频&#xff0c;正是这样一份能够让我们在短时间内沉浸于自然之美的奇妙礼物。成都科成博通文化传媒公司…

牛客BM85 验证IP地址【中等 字符串 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880 https://www.lintcode.com/problem/1222/description 思路 直接模拟&#xff0c;注意IPv4,ipv6的条件Java代码 import java.util.*;public class Solution {/*** 验证IP地址…

关于IDEA创建Maven一直爆红无法下载的问题

你能看到这我就知道你肯定已经试过了网上的很多方法了&#xff0c;我之前也是&#xff0c;试过了很多一直无法正常下载&#xff0c;我也是找人给 线下看了看解决了&#xff0c;我总结一下从头到尾排除问题&#xff0c;试到最后要是还解决不了你直接私信我&#xff0c;我给你看看…

路由策略实验1

先把地址全部配通 对R1 对R2 对R4 对R3 对R5 对R6 对R7 然后起路由协议 对R1 对R2 对R3 对R4 对R5 对R6 对R7

C++17之std::void_t

目录 1.std::void_t 的原理 2.std::void_t 的应用 2.1.判断成员存在性 2.1.1.判断嵌套类型定义 2.1.2 判断成员是否存在 2.2 判断表达式是否合法 2.2.1 判断是否支持前置运算符 2.2.3 判断两个类型是否可做加法运算 3.std::void_t 与 std::enable_if 1.std::void_t 的…

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的…

将 py 文件编译成 pyd 文件

文章目录 一、简介1.1、Python中的文件类型&#xff1a;.py .pyc .pyd1.2、基本原理1.2.1、函数详解&#xff1a;Extension() —— 用于定义扩展模块&#xff08;C/C 扩展&#xff09;的类1.2.2、函数详解&#xff1a;setup() —— 用于配置和构建包的函数 二、构建过程2.0、…

百度文心一言API批量多线程写文章软件-key免费无限写

百度文心大模型的两款主力模型ENIRE Speed、ENIRE Lite全面免费&#xff0c;即刻生效。 百度文心大模型的两款主力模型 这意味着&#xff0c;大模型已进入免费时代&#xff01; 据了解&#xff0c;这两款大模型发布于今年 3 月&#xff0c;支持 8K 和 128k 上下文长度。 ER…

Java集合面试题(概述,list,Map)

一个常见的"fail-safe"集合例子是CopyOnWriteArrayList。这个集合在每次修改时都会复制当前的数组&#xff0c;修改操作在新数组上进行&#xff0c;而遍历操作则在旧数组上进行。这样&#xff0c;即使在遍历过程中进行了修改&#xff0c;也不会影响遍历的进行。 插入…

车载诊断内容汇总(培训+视频)

车载诊断内容汇总 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c…

pyopengl 立方体 正投影,透视投影

目录 顶点和线的方式 划线的方式实现: 顶点和线的方式 import numpy as np from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from OpenGL.GL import * from OpenGL.GLU import * import sys…

Java大文件上传、分片上传、多文件上传、断点续传、上传文件minio、分片上传minio等解决方案

一、上传说明 文件上传花样百出&#xff0c;根据不同场景使用不同方案进行实现尤为必要。通常开发过程中&#xff0c;文件较小&#xff0c;直接将文件转化为字节流上传到服务器&#xff0c;但是文件较大时&#xff0c;用普通的方法上传&#xff0c;显然效果不是很好&#xff0c…