从 0 到 1 搭建基于 AutoGen 的多智能体群聊系统

news2026/4/10 18:56:00
从 0 到 1 搭建基于 AutoGen 的多智能体群聊系统:解锁 AI 协作的无限可能关键词AutoGen多智能体框架、LLM群聊、Agent协作模式、工具调用链、代码执行沙箱、自动任务拆解、群聊编排策略摘要想象一下:你有一个由AI“程序员”、“测试工程师”、“产品经理”、“UI设计师”甚至“法律合规员”组成的虚拟团队,他们不用你指挥每一步,就能自动拆解复杂任务(比如开发一个简单的记账小程序后端+API文档+单元测试+成本效益分析)、互相辩论验证、调用外部工具/代码库、生成完整交付物——这就是AutoGen多智能体系统的魅力!本文将带你从完全陌生的“0”开始,到成功运行第一个自己定制的AutoGen群聊系统的“1”,再到深入理解其底层原理、掌握高级编排技巧、探索真实商业场景。我们会用**“虚拟装修队”**这样的生活化比喻把抽象的Agent、群聊管理器、工具注册等概念讲得明明白白;会一步一步拆解AutoGen的核心架构(包括LLM后端配置、Agent类型选择、群聊模式分类、工具与沙箱机制);会提供完整的Python代码示例,涵盖从基础群聊到带工具调用的代码协作场景;还会讨论边界条件、性能优化、最佳实践以及行业发展趋势。无论你是想体验“AI团队协作”的AI爱好者,还是想把AutoGen应用到公司项目的开发者/产品经理,这篇文章都能给你带来实实在在的收获!1. 背景介绍:为什么我们需要多智能体群聊系统?1.1 问题背景与重要性1.1.1 单LLM的“能力天花板”自从ChatGPT、GPT-4o、Claude 3等大语言模型(LLM)横空出世,我们已经习惯了用它们写文案、做翻译、解答问题、甚至写简单的代码。但单LLM始终存在几个不可忽视的能力天花板:专业领域深度不足:比如用通用LLM写法律文书可能不够严谨,写医疗诊断代码可能会有专业漏洞——除非你是该领域的专家,能给出足够精准的提示词(Prompt Engineering),但Prompt Engineering本身就是个技术活,而且很难覆盖所有专业细节的“盲区”。任务拆解与规划能力有限:单LLM可以拆解简单的线性任务(比如“先写前端界面草稿,再写后端API接口”),但遇到复杂的非线性、多分支、需要反馈验证的任务(比如“开发一个带实时支付功能的二手交易小程序”),单LLM很容易“漏项”或者“逻辑混乱”,比如写完支付逻辑就忘了测试支付失败的边界情况,或者写完前端界面才发现和后端API的字段格式不匹配。执行效率与可靠性低:单LLM一次只能处理一个任务步骤,而且经常会犯“低级错误”(比如写代码时少写一个括号、做数学计算时出错、引用过时的API文档),需要用户反复检查、修改提示词、重新生成——这个过程既耗时又耗力,可靠性也无法保证。工具调用链管理困难:虽然现在很多LLM(比如GPT-4o、Claude 3 Opus)都支持“Function Calling”,但单LLM很难管理长工具调用链(比如“先搜索最新的Python数据分析库,再安装这个库,再读取本地的CSV数据,再用这个库做可视化,再把可视化结果导出为PNG并发送到我的邮箱”),一旦中间某个步骤出错,整个调用链就会中断,需要用户手动重启。1.1.2 多智能体系统的“破局之路”为了突破单LLM的能力天花板,学术界和工业界提出了多智能体系统(Multi-Agent System, MAS)的概念——简单来说,就是把一个复杂的大任务交给多个“专门化”的AI智能体(Agent),让它们通过沟通协作来共同完成任务。而AutoGen(全称Auto Generative Agents)是微软研究院在2023年10月开源的轻量级、可扩展、可定制的多智能体框架,它最大的特点就是把多智能体协作封装成了“群聊(Group Chat)”——就像我们在微信、钉钉群里和同事沟通一样,AutoGen的Agent可以在群里“发言”、“回复”、“@指定Agent”、“调用工具”、“执行代码”,而群聊管理器(Group Chat Manager)则负责管理群聊的流程(比如谁先发言、发言顺序怎么安排、什么时候结束群聊)。AutoGen的出现,让多智能体系统的搭建门槛从“专家级”降到了“入门级”——你不需要懂复杂的分布式系统、强化学习或者博弈论,只需要掌握Python基础、会配置LLM后端、会写简单的提示词,就能搭建一个属于自己的多智能体群聊系统!1.1.3 AutoGen的“行业影响力”AutoGen开源至今(202X年X月),已经在GitHub上获得了超过30K的Star,成为了全球最受欢迎的多智能体框架之一;它的生态系统也在不断完善,目前已经支持了主流的LLM后端(OpenAI、Azure OpenAI、Anthropic Claude、Google Gemini、本地LLM如Llama 3/Qwen 2等)、主流的开发工具(Jupyter Notebook、VS Code插件)、以及多个行业的应用场景(软件开发、数据分析、客服机器人、教育辅导、医疗辅助诊断等)。很多知名的公司和研究机构都在使用AutoGen或者基于AutoGen开发自己的产品:微软:把AutoGen集成到了Microsoft 365 Copilot的内部测试中,用于辅助开发团队协作;Salesforce:基于AutoGen开发了Salesforce Multi-Agent Copilot,用于辅助销售团队处理客户需求;斯坦福大学:用AutoGen搭建了AI科研助手团队,用于辅助生物学家分析基因数据;阿里巴巴:把AutoGen集成到了阿里云的AI开发平台ModelScope中,为用户提供多智能体协作的能力。1.2 目标读者本文的目标读者包括:AI爱好者:想体验“AI团队协作”的乐趣,了解多智能体系统的基本原理;Python开发者:有一定的Python基础,想学习AutoGen的使用方法,把多智能体系统应用到自己的项目中;产品经理/项目经理:想了解AutoGen的功能和应用场景,考虑把AutoGen集成到公司的产品/项目中;学生/研究者:想学习多智能体系统的最新技术,做相关的课题研究。为了让不同水平的读者都能读懂本文,我们会:对于AI爱好者:重点看背景介绍、核心概念解析、实际场景应用和未来展望部分;对于Python开发者:重点看技术原理与实现、算法源代码、系统核心实现源代码和最佳实践部分;对于产品经理/项目经理:重点看背景介绍、核心概念解析、实际场景应用、最佳实践和行业发展与未来趋势部分;对于学生/研究者:重点看背景介绍、核心概念解析、技术原理与实现、数学模型和行业发展与未来趋势部分。1.3 核心问题或挑战在从0到1搭建AutoGen多智能体群聊系统的过程中,我们会遇到以下几个核心问题或挑战:核心概念理解不清:什么是Agent?什么是User Proxy Agent?什么是Assistant Agent?什么是Group Chat Manager?它们之间有什么关系?LLM后端配置困难:如何配置OpenAI/Azure OpenAI/Anthropic Claude/本地LLM作为AutoGen的LLM后端?如果LLM调用失败怎么办?Agent类型选择与提示词设计不当:不同的任务需要不同类型的Agent,提示词的质量直接影响Agent的协作效果——如何选择合适的Agent类型?如何设计高质量的提示词?群聊模式与编排策略不合理:AutoGen提供了多种群聊模式(比如Round Robin、Random、Selector、Custom),不同的群聊模式适用于不同的任务——如何选择合适的群聊模式?如何设计自定义的群聊编排策略?工具调用链与代码执行沙箱不安全:AutoGen的Agent可以调用外部工具(比如搜索API、数据库API)和执行代码——如何安全地注册和使用工具?如何配置代码执行沙箱,防止Agent执行恶意代码?任务终止条件设置不合理:如果任务终止条件设置得太松,群聊会一直进行下去,浪费LLM的调用成本;如果设置得太紧,任务可能无法完成——如何设置合理的任务终止条件?本文的后续内容会逐一解决这些核心问题或挑战!2. 核心概念解析:把AutoGen当成“虚拟装修队”2.1 核心概念:生活化比喻在深入了解AutoGen的技术细节之前,我们先用**“虚拟装修队”**这个大家都熟悉的生活化场景来解释AutoGen的核心概念——这样你就能在几分钟内理解AutoGen的基本运作原理!2.1.1 User(用户):装修业主角色定义:是整个装修任务的发起者和最终决策者,负责提出装修需求(比如“我要把这套100平米的房子装修成现代简约风格,预算20万,3个月内完成”)、检查装修进度、确认装修成果、支付装修费用(对应AutoGen中的LLM调用成本)。AutoGen对应实体:AutoGen中没有专门的User类,但可以通过UserProxyAgent来模拟用户的部分行为(比如提供手动输入、确认Agent的成果),或者直接通过代码向群聊发送初始消息。2.1.2 User Proxy Agent(用户代理智能体):装修队长助理生活化比喻:是装修业主的“全权代表”,负责帮业主传达装修需求、记录装修进度、收集业主的反馈、甚至代替业主做一些简单的决定(比如“如果装修师傅提出一个1000元以内的小修改,不需要问业主,直接同意”);同时,它也是装修队长(Group Chat Manager)和装修业主之间的桥梁。AutoGen对应实体:autogen.UserProxyAgent类,是AutoGen中最常用的Agent类型之一。核心特点:可以代表用户发言:可以自动向群聊发送消息,也可以等待用户的手动输入;可以执行代码:可以在本地或者远程的代码执行沙箱中执行Agent生成的代码;可以调用工具:可以注册和调用外部工具;可以控制任务终止:可以设置任务终止条件(比如“当收到包含‘任务完成’的消息时,终止群聊”)。2.1.3 Assistant Agent(助理智能体):装修师傅/设计师生活化比喻:是装修队中的专门化人才,比如“水电工”、“木工”、“瓦工”、“油漆工”、“室内设计师”、“预算师”——每个助理智能体都有自己的专业领域和职责,比如水电工负责安装水电管道,室内设计师负责设计装修方案,预算师负责控制装修预算。AutoGen对应实体:autogen.AssistantAgent类,是AutoGen中另一个最常用的Agent类型。核心特点:有专门的提示词:可以通过提示词来定义它的专业领域、职责、沟通方式等;可以和其他Agent沟通:可以在群里“发言”、“回复”、“@指定Agent”;可以生成工具调用请求:可以向User Proxy Agent发送工具调用请求;可以生成代码:可以向User Proxy Agent发送代码执行请求。2.1.4 Group Chat(群聊):装修队微信群生活化比喻:是装修队中所有成员(包括用户代理智能体、助理智能体)沟通协作的平台——就像我们在微信群里聊天一样,大家可以在群里发表自己的意见、提出问题、回答问题、分享文件、确认任务。AutoGen对应实体:autogen.GroupChat类,负责存储群聊的历史消息、管理群聊的成员列表。2.1.5 Group Chat Manager(群聊管理器):装修队长生活化比喻:是装修队的负责人,负责管理装修队的整个协作流程——比如谁先发言(比如一开始肯定是预算师先发言,做初步的预算方案)、发言顺序怎么安排(比如预算师做完预算方案后,室内设计师再发言,设计装修方案,然后水电工再发言,确认水电管道的布局)、什么时候让某个Agent发言(比如当室内设计师提到“需要确认预算是否够买某个材料”时,装修队长会@预算师)、什么时候结束装修任务(比如当所有的装修成果都得到了业主的确认)。AutoGen对应实体:autogen.GroupChatManager类,是AutoGen中负责管理群聊流程的核心组件。核心特点:有专门的提示词:可以通过提示词来定义它的管理规则;支持多种群聊模式:比如Round Robin(轮询)、Random(随机)、Selector(选择器)、Custom(自定义);可以根据群聊历史消息选择下一个发言的Agent。2.1.6 Tool(工具):装修工具/材料供应商生活化比喻:是装修队中所有成员完成任务所需要的工具或外部资源——比如“电钻”、“锤子”、“瓷砖供应商”、“家电供应商”、“天气预报API”(比如装修队需要根据天气预报安排室外作业的时间)。AutoGen对应实体:可以是Python函数、API接口、数据库查询等,通过autogen.register_function或者autogen.agentchat.register_tools来注册到Agent中。2.1.7 Code Execution Sandbox(代码执行沙箱):装修工地的安全作业区生活化比喻:是装修队中专门用于执行危险作业的区域——比如“电焊作业区”、“高空作业区”,这些区域有专门的安全措施(比如防火设备、安全绳),防止危险作业对周围的环境造成损害。AutoGen对应实体:可以是本地的Python环境(不安全,不推荐生产环境使用)、Docker容器(推荐生产环境使用)、或者远程的代码执行服务(比如Microsoft Azure Container Apps)。核心特点:隔离性:代码执行环境和主机环境完全隔离,防止Agent执行恶意代码(比如删除主机上的文件、访问主机上的敏感数据);可控性:可以限制代码执行的时间、内存、CPU使用量;可重复性:每次代码执行的环境都是一样的,保证代码执行的结果可重复。2.2 问题背景:为什么要用“虚拟装修队”的比喻?在学习AutoGen的过程中,很多初学者会因为核心概念太多、概念之间的关系太复杂而感到困惑——比如分不清UserProxyAgent和AssistantAgent的区别,不知道GroupChatManager是如何管理群聊流程的。而“虚拟装修队”是一个大家都非常熟悉的生活化场景,几乎每个人都有过装修或者看别人装修的经历——用这个场景来解释AutoGen的核心概念,可以让初学者快速建立起对AutoGen的整体认知,把抽象的技术概念和具体的生活场景联系起来,从而更容易理解和记忆。2.3 问题描述:如何用“虚拟装修队”的比喻理解AutoGen的协作流程?假设你是一个装修业主,你有一个装修需求:“我要把这套100平米的房子装修成现代简约风格,预算20万,3个月内完成”。我们来看一下“虚拟装修队”是如何协作完成这个任务的——这个流程和AutoGen多智能体群聊系统的协作流程几乎一模一样:装修业主(User)向装修队长助理(User Proxy Agent)传达装修需求;装修队长助理(User Proxy Agent)把装修需求转发到装修队微信群(Group Chat);装修队长(Group Chat Manager)看到装修需求后,根据自己的管理规则选择下一个发言的Agent——预算师(Assistant Agent);预算师(Assistant Agent)在群里做初步的预算方案,@装修队长助理(User Proxy Agent)确认;装修队长助理(User Proxy Agent)把预算方案转发给装修业主(User),装修业主确认后,装修队长助理(User Proxy Agent)在群里回复“预算方案已确认”;装修队长(Group Chat Manager)看到“预算方案已确认”的消息后,选择下一个发言的Agent——室内设计师(Assistant Agent);室内设计师(Assistant Agent)在群里设计装修方案(包括平面布局图、效果图、材料清单),@预算师(Assistant Agent)确认材料清单是否在预算范围内,@装修队长助理(User Proxy Agent)确认装修方案;预算师(Assistant Agent)检查材料清单,确认在预算范围内,在群里回复“材料清单已确认”;装修队长助理(User Proxy Agent)把装修方案转发给装修业主(User),装修业主提出一些小修改(比如“把客厅的沙发换成真皮的”),装修队长助理(User Proxy Agent)在群里回复业主的修改意见;室内设计师(Assistant Agent)根据业主的修改意见调整装修方案,再次@预算师(Assistant Agent)和装修队长助理(User Proxy Agent)确认;重复步骤8-10,直到装修方案得到业主的确认;装修队长(Group Chat Manager)看到“装修方案已确认”的消息后,选择下一个发言的Agent——水电工(Assistant Agent);水电工(Assistant Agent)在群里确认水电管道的布局,@室内设计师(Assistant Agent)和装修队长助理(User Proxy Agent)确认;重复步骤12-13,直到所有的装修任务都完成;装修队长(Group Chat Manager)确认所有的装修任务都完成后,选择装修队长助理(User Proxy Agent)发言;装修队长助理(User Proxy Agent)把所有的装修成果(包括预算方案、装修方案、水电管道布局图、验收报告)转发给装修业主(User),装修业主确认后,装修队长助理(User Proxy Agent)在群里回复“任务完成”,并终止群聊。2.4 问题解决:如何把“虚拟装修队”的比喻转化为AutoGen的代码?在后面的章节(技术原理与实现、算法源代码、系统核心实现源代码)中,我们会把这个“虚拟装修队”的比喻转化为完整的AutoGen代码——你只需要按照代码中的步骤操作,就能运行一个自己的“虚拟装修队”!2.5 边界与外延2.5.1 边界:AutoGen不是什么?虽然AutoGen非常强大,但它也有自己的边界——也就是说,AutoGen不是万能的,有些事情它做不到或者做得不好:AutoGen不能替代人类的创造性思维:虽然AutoGen的Agent可以生成很多创意,但这些创意都是基于LLM训练数据中的内容生成的,很难产生“突破性的创新”——比如AutoGen可以帮你设计一个现代简约风格的装修方案,但它很难设计出一种“从未存在过的装修风格”;AutoGen不能替代人类的道德判断:虽然AutoGen的Agent可以遵循一定的道德准则(通过提示词定义),但这些道德准则都是人类输入的,AutoGen本身没有“道德感”——比如AutoGen可以帮你写一篇文案,但它无法判断这篇文案是否会对他人造成伤害;AutoGen不能替代人类的最终决策权:虽然AutoGen的Agent可以帮你做很多决定,但最终的决策权必须掌握在人类手中——比如AutoGen可以帮你做一个投资建议,但你必须自己判断这个投资建议是否适合你;AutoGen的LLM调用成本可能很高:如果你的群聊系统中有很多Agent,或者群聊的时间很长,那么LLM的调用成本可能会很高——你需要合理设置任务终止条件,控制LLM的调用成本;AutoGen的协作效果取决于提示词的质量:提示词的质量直接影响Agent的协作效果——如果提示词写得不好,Agent可能会“答非所问”、“逻辑混乱”、甚至“互相打架”。2.5.2 外延:AutoGen可以和哪些技术结合使用?AutoGen的生态系统非常开放,它可以和很多其他技术结合使用,从而扩展它的功能和应用场景:和本地LLM结合使用:比如Llama 3、Qwen 2、Mistral等——这样你就可以在没有互联网连接的情况下使用AutoGen,同时也可以保护你的数据隐私;和向量数据库结合使用:比如ChromaDB、Pinecone、Weaviate等——这样你就可以让AutoGen的Agent访问你的私有数据(比如公司的内部文档、客户的历史数据),从而生成更准确的回复;和RAG(Retrieval-Augmented Generation,检索增强生成)技术结合使用:和向量数据库结合使用就是一种RAG技术——这样你就可以让AutoGen的Agent访问最新的外部数据(比如新闻、API文档),从而避免“幻觉(Hallucination)”;和强化学习结合使用:比如让AutoGen的Agent通过强化学习来优化自己的协作策略——这样群聊系统的协作效率会更高;和视觉/听觉模型结合使用:比如GPT-4o、Claude 3 Opus、Google Gemini Ultra等——这样你就可以让AutoGen的Agent处理图像、视频、音频等多模态数据;和低代码/无代码平台结合使用:比如Microsoft Power Platform、Airtable等——这样你就可以让没有编程基础的用户也能搭建AutoGen多智能体群聊系统。2.6 概念结构与核心要素组成2.6.1 AutoGen的整体概念结构AutoGen的整体概念结构可以分为三层:底层:LLM后端层:负责提供LLM的调用能力——AutoGen支持主流的LLM后端,比如OpenAI、Azure OpenAI、Anthropic Claude、Google Gemini、本地LLM等;中间层:Agent与群聊层:是AutoGen的核心层——包括Agent(UserProxyAgent、AssistantAgent、GroupChatManager等)、Group Chat、工具注册、代码执行沙箱等;顶层:应用层:是用户直接使用的层——包括各种基于AutoGen开发的应用,比如软件开发助手、数据分析助手、客服机器人、教育辅导等。我们可以用一个文本示意图来表示AutoGen的整体概念结构:┌─────────────────────────────────────────────────────────────────────────┐ │ 应用层(Application Layer) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │ │ │ 软件开发助手 │ │ 数据分析助手 │ │ 客服机器人 │ │ 教育辅导 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────────┐ │ Agent与群聊层(Agent Group Chat Layer) │ │ ┌─────────────────────────────────────────────────────────────────────┐│ │ │ Group Chat Manager ││ │ │ ┌─────────────────────────────────────────────────────────────────┐ ││ │ │ │ Group Chat │ ││ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ ││ │ │ │ │UserProxy │ │Assistant │ │Assistant │ │Assistant │ ... │ ││ │ │ │ │ Agent │ │ Agent 1 │ │ Agent 2 │ │ Agent 3 │ │ ││ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ ││ │ │ └─────────────────────────────────────────────────────────────────┘ ││ │ └─────────────────────────────────────────────────────────────────────┘│ │ ┌──────────────────────┐ ┌─────────────────────────────────────────┐│ │ │ 工具注册模块 │ │ 代码执行沙箱模块 ││ │ └──────────────────────┘ └─────────────────────────────────────────┘│ └─────────────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────────┐ │ LLM后端层(LLM Backend Layer) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│ │ │ OpenAI │ │Azure Open│ │Anthropic │ │ Google │ │ 本地LLM ││ │ │ │ │ AI │ │ Claude │ │ Gemini │ │(Llama 3)││ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘│ └─────────────────────────────────────────────────────────────────────────┘2.6.2 AutoGen的核心要素组成AutoGen的核心要素包括7个:LLM配置(LLM Config):用于配置LLM后端的参数,比如API密钥、模型名称、温度(Temperature)、最大生成令牌数(Max Tokens)等;Agent(智能体):是AutoGen的基本单元,负责执行特定的任务——AutoGen提供了多种预定义的Agent类型,比如UserProxyAgent、AssistantAgent、GroupChatManager、RetrieveUserProxyAgent、RetrieveAssistantAgent等,你也可以自定义Agent类型;Group Chat(群聊):用于存储群聊的历史消息、管理群聊的成员列表;Group Chat Manager(群聊管理器):用于管理群聊的流程,比如选择下一个发言的Agent;Tool(工具):用于扩展Agent的能力,比如搜索API、数据库API、Python函数等;Code Execution Sandbox(代码执行沙箱):用于安全地执行Agent生成的代码;Message(消息):是Agent之间沟通的基本单位——AutoGen的消息格式是一个字典,包含role(角色,比如user、assistant、system、tool)、content(内容,比如文本、图像、代码、工具调用请求)等字段。2.7 概念之间的关系2.7.1 概念核心属性维度对比:Markdown表格为了帮助你更好地理解AutoGen的核心概念,我们用一个Markdown表格来对比它们的核心属性:概念名称核心角色主要职责是否需要LLM是否可以执行代码是否可以调用工具预定义类名User任务发起者与最终决策者提出任务需求、检查任务进度、确认任务成果、支付LLM调用成本否否否无(可通过UserProxyAgent模拟)User Proxy Agent用户代理与执行者传达用户需求、记录任务进度、收集用户反馈、执行代码、调用工具、控制任务终止可选是是autogen.UserProxyAgentAssistant Agent专门化任务执行者在特定专业领域内完成任务、和其他Agent沟通、生成工具调用请求、生成代码是否否(需通过UserProxyAgent)autogen.AssistantAgentGroup Chat沟通协作平台存储群聊历史消息、管理群聊成员列表否否否autogen.GroupChatGroup Chat Manager群聊流程管理者管理群聊流程、选择下一个发言的Agent是否否autogen.GroupChatManagerTool外部资源与能力扩展为Agent提供完成任务所需的外部资源或能力否否是(需注册到Agent)无(可以是Python函数、API等)Code Execution Sandbox安全代码执行环境安全地执行Agent生成的代码,隔离主机环境否是否无(可以是本地环境、Docker等)2.7.2 概念联系的ER实体关系图:Mermaid架构图为了帮助你更好地理解AutoGen的核心概念之间的联系,我们用一个Mermaid ER实体关系图来表示:

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…