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

AI智能体的介绍

最近几个月

随着大语言模型的持续火爆

利用大模型来构建AI智能体的研究呢

也陆续进入了人们的视野

AI智能体这个概念呢

也逐渐的流行开来

先是斯坦福大学谷歌的研究者们

成功的构建了一个虚拟小镇

小镇上的居民呢不再是人

而是25个AI的智能体

他们的行为呢

比人类角色扮演更加真实

甚至还举办了一场情人节的派对

随后

商汤清华等机构提出了能够自主学习

解决任务的通才AI智能体GITM

在我的世界中比以往所有的智能体

都更有优秀的表现

同一时间

英伟达开元的Voyager

也给AI圈带来了不小的震撼

作为一个大模型驱动

可以终身学习的游戏智能体

Voyager在我的世界中玩出了很高的水平

这些AI智能体的先后涌现

甚至让人认为

是未来通用人工智能AGI的雏形

很多AI领域的大佬和科技巨头

对AI智能体的发展

都产生了极大的兴趣

并寄予了厚望

今年年初回归OpenAI的安德烈卡帕西

在OpenAI的黑客马拉松活动上就透露

每当有新的AI智能体论文出现的时候

OpenAI内部呢就会感到非常的有兴趣

并且认真的进行讨论

那么我们不禁要问

到底什么是AI智能体

它由哪些部分组成

它的神奇之处又具体表现在哪些方面呢

近日OpenAI安全系统的负责人Lilian Weng

就写了一篇关于AI智能体的博客

首先简单介绍一下作者啊

Lilian Weng是2018年加入的OpenAI

在GPT4项目中

主要参与一训练强化学习和对齐

模型安全等方面的工作

那在她的这篇博客文章中呢

她就认为AI智能体的核心驱动力是大语言模型

而规划planning

记忆memory和工具使用Tool use

是实现它的三个关键组件

Lilian Weng对每个组件都展开了详细的剖析

并且提供了一些案例的研究

比如说科学发现智能体

生成式智能体模拟和概念验证的示例

对于AI智能体未来将面临哪些挑战呢

他也给出了自己的观点

我对文章的内容呢做了一些提炼

在这里跟大家分享一下

有兴趣的同学

可以去详细阅读一下原文

首先Lilian介绍了一下智能体系统的概念

在大语言模型赋能的自主智能体系统中

大语言模型充当了智能体的大脑

它有三个关键的组件

首先是规划

规划呢又分为两个部分

一个是子目标和分解

智能体呢可以将大型的任务

分解为更小可管理的子目标

从而高效的处理复杂的任务

第二个是反思和完善

智能体可以对过去的行为

展开自我批评和自我反思

从错误中吸取教训

并针对未来的步骤进行完善

提高最终结果的质量

其次的组件是记忆

分为短期记忆和长期记忆

所有的上下文学习

都是利用了模型的短期记忆来学习

而通常利用外部向量存储和快速检索的能力

为智能体提供长时间保留和回忆记忆的能力

最后呢是工具的使用

智能体呢可以学会调用外部的API

来获取模型权重中缺失的额外信息

这些信息呢

通常在预训练之后很难改变

包括当前的信息代码执行能力

以及对专有信息源的访问等等

随后呢作者分别详细讲解了这三个关键的组件

首先是规划

我们知道一项复杂的任务

通常会涉及到许多的步骤

智能体必须了解任务是什么并提前进行规划

那么呢这就会涉及到任务的分解

以及相关的技术

首先呢是思维链COT

它已经成为了增强复杂任务上模型性能的标准提示技术

在实现过程中

模型被指示一步一步的思考

从而利用更多的测试时间计算

将困难任务分解为更小更简单的步骤

COT呢可以将大型的任务

转化为多个可管理的小任务

并解释清楚模型的思维过程

其次呢是思维树TOT

他通过在每一步探索多种推理可能性来扩展了COT

首先它会将问题分解为多个思考步骤

并且在每个步骤中生成多个思考

创建一种树形的结构

搜索过程可以是广度优先搜索BFS

或者是深度优先搜索DFS

其中呢每个状态由分类器

或者是多数的投票来进行评估

具体来说

就是任务分解过程中

可以通过以下三种方式来完成

第一种方式

是基于大语言模型的简单提示

比如XYZ的步骤是什么

实现XYZ的指目标是什么

第二种是使用特定于任务的指示

比如说写一个故事的大纲

或者是第三种人工输入

另一种截然不同的方法是使用LLM+p

它靠外部的经典规划器来进行长期的规划

这个方法呢会利用规划领域定义语言PDDL

作为描述规划问题的中间接口

在这个过程中

大语言模型会首先将问题转化为problem PDDL

然后请求经典的规划器

基于现有的Domain PDDL生成PDDL规划

最后再将PDDL规划转换回自然的语言

本质上规划步骤被外包给了外部的工具

并且假设可以使用特定领域的PDDL

和合适的规划器

这在某些机器人的设置中很常见

但是在许多其他领域并不常见

在规划过程中自我反思self reflection

它允许自主智能体通过完善以往的行动决策

和纠正以往的错误来迭代改进

因而呢会在出现试错的这个现实世界任务

发挥至关重要的作用

ReAct方法能够通过将动作空间扩展为

一个任务特定的离散动作和语言空间的组合

从而将推理和动作集成在大语言模型中

离散动作使得大语言模型能够与环境交互

例如使用维基百科的搜索API

而语言空间促使大语言模型

以自然语言的方式来生成推理轨迹

reflection框架则为智能体

配备了动态记忆和自我反思的能力

提高了推理的技能

它有一个标准的强化学习设置

其中奖励模型提供了简单的二元奖励

动作空间则遵循了react中的设置

Chain of Hindsight(CoH)

这种方式鼓励模型通过显式地呈现

一系列过去的输出

来改进它自己的输出

其中每个输出呢都带有了反馈的注释

为了避免过拟合

CoH添加了正则化项

来最大化的预训练数据集的对数似然

同时呢为了避免捷径和复制

研究者们在训练过程中

随机屏蔽了0%到5%的过去的token

COH的思路

是呈现上下文中连续改进输出的历史

并且训练模型产生更好的输出

算法蒸馏AD它是将相同的思路

应用到了强化学习任务中的跨情节轨迹

尽管AD算法仅仅使用了离线的强化学习

但是它的性能接近于RL^2在线强化学习算法

并且呢学习速度比专家蒸馏和源策略算法要快得多

其次呢是记忆组件

(人类)记忆分为三种类型

第一种呢是感知记忆

第二种呢是短期记忆STM

或者称为工作记忆

第三种呢就是长期记忆LTM

其中感知记忆是记忆的早期阶段

它能够在原始刺激结束后

保持对感官信息

比如说视觉听觉等的印象

感知记忆呢通常只能持续几秒钟

它的子类包括图像记忆

回声记忆触摸记忆

而短期记忆STM或者称为工作记忆

存储着我们目前所知道的信息

以及执行复杂认知任务

比如学习和推理所需要的信息

一般来讲呢短期记忆可以持续20-30秒

而长期计可以将信息储存很长的时间

从几天到几十年不等

它的存储容量呢基本上是无限的

长期记忆呢有两种子类别

分别是显式的陈述性记忆

隐式的程序性记忆

前者是对事实和事件的记忆

指的是那些可以有意识的回忆起来的记忆

包括记忆事件和经过的情景记忆

以及记忆事实和概念的语义记忆

后者的记忆是无意识

涉及到自主执行的技能和习惯

比如说骑自行车或者在键盘上打字

参考人类记忆的分类

我们可以得到几种映射关系

感知记忆可以作为原始输入的学习嵌入表示

短期记忆作为上下文学习

由于受到Transformer有限上下文窗口长度的限制

短期记忆是短暂而且有限的

长期记忆作为外部的向量存储

智能体可以查询快速检索从而进行访问

外部记忆可以缓解注意力的一些限制

为了更好的处理外部记忆

一个常见的做法是

信息的嵌入表示

保存到一个向量存储数据库

这个数据库呢可以支持快速的最大内积搜索MIPS

为了优化检索的速度

研究者经常使用的方法是近似最近邻ANN算法

在加速MIPS中

经常会用到的ANN算法包括

局部敏感哈希LSH

近似最近邻ANNOY

分层可导小世界HNSW

Facebook AI团队开源的库FAISS

以及可扩展最近邻ScaNN算法

更多的MIPS算法和性能的比较呢

可以在ann-benchmarks.com中查看


第三个关键组件呢是使用工具

使用工具是人类的一个显著特点

我们创造修改和利用外部的物体

来探知和认知现实世界

类似的

给大语言模型配备外部的工具

可以大幅的扩展模型的能力

MRKL是一种用于自主智能体的神经符号架构

命名来源于模块化推理modular reasoning

知识knowledge和语言language这三者的简称

每个MRKL系统呢都包含一些专家模块

通用的大语言模型作为一个路由器

负责将查询路由到最合适的专家模块

这些模块呢可以是神经网络

例如深度学习模型

也可以是符号的

例如数学计算器货币转换器天气的API

MRKL的研究团队使用数学计算进行实验

实验结果证实

外部符号工具能够可靠的工作时

知道何时和如何使用这些工具是至关重要的

而这个是由大语言模型的能力决定的

ChatGPT的插件OpenAI的API函数调用

就是大语言模型使用工具

在增强能力的最好实例

工具API的集合

可以是由其他开发者提供的插件

或者是自定义的函数调用

HuggingGPT则是一个利用ChatGPT

作为任务规划器的框架

根据模型的描述

来选择HuggingFace平台中可以使用的模型

并且根据执行的结果归纳总结出响应

HuggingGPT系统由四个阶段组成

第一个任务规划阶段

大语言模型作为大脑

用户请求解析为多个任务

每个任务呢有四个关联的属性

分别是任务类型 任务ID 依赖项参数

研究团队使用了少量的例子

来指导大语言模型进行任务解析和规划

第二个模型选择阶段

大语言模型会从一个模型列表中选择模型

将任务分配给专家模型

由于上下文长度有限

就需要进行基于任务类型的过滤

第三个就是任务的执行阶段

专家模型执行具体的任务

并且记录任务结果

第四个呢是响应的生成阶段

大语言模型接收执行的结果

并向用户提供总体的结果

HuggingGPT在实际使用中呢

还需要解决几个挑战

第一个呢就是需要提高效率

因为大语言模型的推理以及与其他模型的交互

都会减慢进程

第二 它依赖一个长的上下文窗口

来沟通复杂的任务内容

第三 提高大语言模型输出和外部模型服务的稳定性

接下来Lilian还介绍了一个评估工具

增强型大语言模型性能的基准API Bank

它包含了53个常用的API工具

一个完整的工具增强型大语言模型工作流

以及涉及568个API调用264个已注释的对话

API Bank基准中可以选择的API相当的多样化

包括搜索引擎计算器

日历查询 智能家具控制 日程管理等等

大语言模型首先可以通过API搜索引擎

找到合适的API进行调用

然后使用相关的文档来调用API

在API bank的工作流中

大语言模型需要做出一些决定

包括是否需要调用API

确定要调用的正确的API

以及基于API结果的响应

这个基准在三个层次上

评估了智能体的工具使用能力

包括调用API的能力

检索API能力

以及检索和调用之外规划API的能力

考虑到不明确的用户需求

模型可能会需要进行多次的API调用

来解决实际的问题

随后Lilian介绍了一个案例

一个用来进行科学发现的智能体ChemCrow

它是一个由大语言模型设计的化学智能体

能够完成有机合成

药物发现材料设计方面的任务

通过整合17种专家设计的工具

ChemCrow提高了大语言模型在化学方面的性能

并衍生出了新的能力

有趣的是呢

尽管基于大语言模型的评估结果得出的结论是

GPT-4ChemCrow的性能几乎相当

但是经过专家人工的评估表明

ChemCrow在很大程度上优于GPT4

Lilian还提到了生成式智能体的概念

它能够将大语言模型记忆、规划和反射机制相结合

使得智能体能够根据过去的经验做出反应

并且与其他的智能体进行交互

有关智能体大家应该最熟悉的例子就是AutoGPT

有了它人类无需插手

AutoGPT就能够自主完成任务

具体来说呢

AutoGPT就相当于给基于GPT的模型

有了一个内存身体

有了它你就可以把一项任务交给AI的智能体

让它自主的提出一个计划

然后去执行这个计划

此外呢它还具有互联网访问

长期和短期的内存管理

用于文本生成的GPT4实例

以及使用GPT3.5进行文件存储

和生成摘要等等功能

此外

作者还列举了GPT-Engineer(口误)这个项目

和代码生成类的工具差不多

能够根据提示生成一整个代码库

最后呢作者也提出了

基于大语言模型构建智能体的一些限制

包括有限的上下文长度

长期规划任务分解还要面临的挑战

以及自然语言接口的可靠性

好了以上就是Lilian Weng对AI智能体的介绍和分析

完整的内容大家可以去自己阅读一下原文

里边还有一些数学公式和伪代码

可以供大家参考

相关文章:

AI智能体的介绍

最近几个月 随着大语言模型的持续火爆 利用大模型来构建AI智能体的研究呢 也陆续进入了人们的视野 AI智能体这个概念呢 也逐渐的流行开来 先是斯坦福大学谷歌的研究者们 成功的构建了一个虚拟小镇 小镇上的居民呢不再是人 而是25个AI的智能体 他们的行为呢 比人类角…...

Java设计模式-单例模式(Singleton)

Java中实现单例模式有几种不同的方式,每种方式都有其特点和适用场景。下面是两种常用的实现方式:懒汉式和饿汉式。 懒汉式(线程安全) 懒汉式单例是指在第一次被引用时才会创建实例。为了确保线程安全,可以使用同步方法或同步块。 public class SingletonLazy {private sta…...

若依vue如何展示一个HTML页面(或者展示Markdown文档)

一. 前言 ⚠ 本文是展示Markdown的方法,不能直接前端编辑Markdown文档. 二. 准备部分 用Typora编辑器打开需要导出html页面,我这里使用Typora来导出 1. 先将md文件导出成html 2. 将导出好的文件放在若依vue的pubilc下(文件可以是中文) 三. 代码部分 1.使用v-html来展示HT…...

优化for循环(js的问题)

性能优化 var array [];for (let index 0; index < array.length; index) {// do something }// 优化后 for (let index 0, len array.length; index < len; index) {// do something } 算法优化 // 求和&#xff1a;1 2 3 4 ... 100 var sum 0; for (let i …...

如何更好的去理解源码

前言 这篇文章我准备来聊一聊如何去阅读开源项目的源码。 在聊如何去阅读源码之前&#xff0c;先来简单说一下为什么要去阅读源码&#xff0c;大致可分为以下几点原因&#xff1a; 最直接的原因&#xff0c;就是面试需要&#xff0c;面试喜欢问源码&#xff0c;读完源码才可以…...

c# opencv 获取多边形中心点

在C#中使用OpenCV获取多边形的中心点&#xff0c;可以按照以下步骤进行&#xff1a; 首先&#xff0c;你需要找到图像中的轮廓。这可以通过FindContours方法实现&#xff1a; using OpenCvSharp;Mat src new Mat("your_image_path", ImreadModes.Grayscale); Mat …...

Redis数据一致解决方案

文章目录 前言技术积累查询缓存业务流程更新缓存业务流程 更新缓存问题解决方案写在最后 前言 当前的应用服务很多都有着高并发的业务场景&#xff0c;对于高并发的解决方案一般会用到缓存来降低数据库压力&#xff0c;并且还能够提高系统性能减少请求耗时&#xff0c;比如我们…...

安捷伦DSOX2024A示波器

参考波形 示波器的非易失参考波形存储器可以存储两个波形。比较这些参考波形与实时波形&#xff0c;并对已存储数据进行后分析和测量。您也可将波形数据存储到移动USB 存储器设备。这些数据还能调用到示波器的两个参考存储器的其中一个&#xff0c;进行全面的波形测量和分析。为…...

Leetcode算法系列| 4. 寻找两个正序数组的中位数

目录 1.题目2.题解C# 解法一&#xff1a;合并List根据长度找中位数C# 解法二&#xff1a;归并排序后根据长度找中位数C# 解法三&#xff1a;方法二的优化&#xff0c;不真实添加到listC# 解法四&#xff1a;第k小数C# 解法五&#xff1a;从中位数的概念定义入手 1.题目 给定两个…...

Java整合APNS推送消息-IOS-APP(基于.p12推送证书)

推送整体流程 1.在开发者中心申请对应的证书&#xff08;我用的是.p12文件&#xff09; 2.苹果手机用户注册到APNS&#xff0c;APNS将注册的token返回给APP&#xff08;服务端接收使用&#xff09;。 3.后台服务连接APNS&#xff0c;获取连接对象 4.后台服务构建消息载体 5.后台…...

C语言strcpy函数用法

C语言strcpy函数用法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入了解C语言中的strcpy函数&#xff0c;这是一个在字符串处理中非…...

汽车服务品牌网站建设的作用是什么

汽车服务涵盖多个层面&#xff0c;在保修维护这一块更是精准到了车内车外&#xff0c;无论是品牌商还是市场中各维修部&#xff0c;都能给到车辆很好的维修养护服务。如今车辆的人均拥有量已经非常高&#xff0c;也因此市场中围绕汽车相关的从业者也比较多。 首先就是拓客引流…...

【iOS】UICollectionView

文章目录 前言一、实现简单九宫格布局二、UICollectionView中的常用方法和属性1.UICollectionViewFlowLayout相关属性2.UICollectionView相关属性 三、协议和代理方法&#xff1a;四、九宫格式的布局进行升级五、实现瀑布流布局实现思路实现原理代码调用顺序实现步骤实现效果 总…...

Linux poll 和 select 机制

poll select 介绍 使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一个 或多个文件而不阻塞. 这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来 读或写.…...

【JVM基础】 JVM 如何加载一个类以及类加载机制

文章目录 1、什么时候一个类会被加载&#xff1f;1、包含 main 方法的主类2、非 包含 main 方法的主类&#xff0c;什么时候去加载&#xff1f; 3、类加载器如何加载一个类&#xff1f;1、验证阶段&#xff1a;2、准备阶段&#xff1a;3、解析阶段&#xff1a;4、初始化&#x…...

Android Studio使用Genymotion

1. Genymotion介绍 GenyMotion速度之快令人发指&#xff0c;模拟效果堪比真机调试&#xff0c;支持绝大部分的模拟器功能&#xff0c;甚至包括语音&#xff0c;Google Now&#xff0c;支持eclipse, android studio。非常适合用来开发和演示效果。 2. Genymotion下载 Genymotio…...

Mysql sql_mode参数配置

今天在使用数据库查询时使用了Group语句&#xff0c;遇到问题&#xff1a; SELECT t1.UnderlyingInstrumentID, t2.* FROM t_OptionInstrument t1 LEFT JOIN t_Instrument t2 ON t2.InstrumentID t1.UnderlyingInstrumentID GROUP BY t1.UnderlyingInstrumentID > 1055 - …...

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

详解Vue3中的基础路由和动态路由

本文主要介绍Vue3中的基础路由和动态路由。 目录 一、基础路由二、动态路由 Vue3中的路由使用的是Vue Router库&#xff0c;它是一个官方提供的用于实现应用程序导航的工具。Vue Router在Vue.js的核心库上提供了路由的功能&#xff0c;使得我们可以在单页应用中实现页面的切换、…...

Mysql四种事务隔离级别(简易理解)

读未提交&#xff1a;简单理解就是读到没有提交事务的执行结果&#xff1b;读已提交&#xff1a;简单理解就是只能读到已经提交的事务执行结果&#xff1b;可重复读&#xff1a;简单理解就是确保并发读取数据库时&#xff0c;读到的数据一致&#xff0c;这是mysql默认隔离级别&…...

react中使用redux最简单最方便的方式,配合rematch简化操作,5分钟学会

react中使用状态管理的方式也很多&#xff0c;比如redux和mobx等&#xff0c;今天这一片就讲一下redux的入门到熟练使用&#xff0c;主要是要理解它redux的组成有哪些&#xff0c;到怎么创建&#xff0c;和组建中怎么使用三个问题。这里先放上官网文档&#xff0c;不理解的地方…...

vmware安装中标麒麟高级服务器操作系统软件 V7.0操作系统

vmware安装中标麒麟高级服务器操作系统软件 V7.0操作系统 1、下载中标麒麟高级服务器操作系统软件 V7.0镜像2、安装中标麒麟高级服务器操作系统软件 V7.0操作系统 1、下载中标麒麟高级服务器操作系统软件 V7.0镜像 官方提供使用通道 访问官网 链接: https://www.kylinos.cn/ 下…...

OpenCV | 霍夫变换:以车道线检测为例

霍夫变换 霍夫变换只能灰度图&#xff0c;彩色图会报错 lines cv2.HoughLinesP(edge_img,1,np.pi/180,15,minLineLength40,maxLineGap20) 参数1&#xff1a;要检测的图片矩阵参数2&#xff1a;距离r的精度&#xff0c;值越大&#xff0c;考虑越多的线参数3&#xff1a;距离…...

【C#与Redis】--目录

1. 介绍 2. Redis 数据结构 3. Redis 命令 3.1 基本命令 3.2 字符串命令 3.3 哈希命令 3.4 列表命令 3.5 集合命令 3.6 有序集合命令 4. C# 操作 Redis 4.1 使用 Redis 库 4.2 连接 Redis 服务器 4.3 操作 Redis 数据结构 4.5 执行 Redis 命令 5. 高级主题 5.1 Redis 事…...

html旋转相册

一、实验题目 做一个旋转的3d相册&#xff0c;当鼠标停留在相册时&#xff0c;相册向四面散开 二、实验代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" con…...

Plantuml之对象图语法介绍(十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

深度学习(八):bert理解之transformer

1.主要结构 transformer 是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如自然语言处理任务。它在 2017 年由 Vaswani 等人在论文 “Attention is All You Need” 中提出。 Transformer 的主要特点是它完全放弃了传统的循环神经网络&#xff08;RNN&#x…...

R语言中的函数28:Reduce(), Filter(), Find(), Map(), Negate(), Position()

文章目录 介绍Reduce()实例 Filter()实例 Find()实例 Map()实例 Negate()实例 Position()实例 介绍 R语言中的Reduce(), Filter(), Find(), Map(), Negate(), Position()是base包中的一些高级函数。随后&#xff0c;很多包也给这些函数提供了更多的扩展。 Reduce() 该函数根…...

RTP/RTCP/RTSP/SIP/SDP/RTMP对比

RTP&#xff08;Real-time Transport Protocol&#xff09;是一种用于实时传输音频和视频数据的协议。它位于传输层和应用层之间&#xff0c;主要负责对媒体数据进行分包、传输和定时。 RTCP&#xff08;Real-Time Control Protocol&#xff09;是 RTP 的控制协议&#xff0c;…...

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd&#xff08;root权限&#xff09; 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下&#xff1a;vi /etc/vsftpd.conf …...

软件测试职业规划

软件测试人员的发展误区【4】 公司开发的产品专业性较强&#xff0c;软件测试人员需要有很强的专业知识&#xff0c;现在软件测试人员发展出现了一种测试管理者不愿意看到的景象&#xff1a; 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发)&#xff1b; 2、业务…...

C语言数据结构

C 语言是一种强大的编程语言&#xff0c;它提供了许多数据结构的实现。在本文档中&#xff0c;我们将讨论一些常见的数据结构&#xff0c;并提供相应的代码示例。 数组&#xff08;Array&#xff09; 数组是一种线性数据结构&#xff0c;它可以存储相同类型的元素。数组的大小…...

PHP之Trait理解, Trait介绍

一、来源 自 PHP 5.4.0 起&#xff0c;PHP 实现了一种代码复用的方法&#xff0c;称为 trait。 Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制&#xff0c;使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和…...

SpringMVC:执行原理详解、配置文件和注解开发实现 SpringMVC

文章目录 SpringMVC - 01一、概述二、SpringMVC 执行原理三、使用配置文件实现 SpringMVC四、使用注解开发实现 SpringMVC1. 步骤2. 实现 五、总结注意&#xff1a; SpringMVC - 01 一、概述 SpringMVC 官方文档&#xff1a;点此进入 有关 MVC 架构模式的内容见之前的笔记&a…...

增量式旋转编码器在STM32平台上的应用

背景 旋钮是仪器仪表上一种常见的输入设备&#xff0c;它的内部是一个旋转编码器&#xff0c;知乎上的这篇科普文章对其工作原理做了深入浅出的介绍。 我们公司的功率分析仪的前面板也用到了该类设备&#xff0c;最近前面板的MCU从MSP430切换成了STM32&#xff0c;因此我要将…...

INFINI Gateway 如何防止大跨度查询

背景 业务每天生成一个日期后缀的索引&#xff0c;写入当日数据。 业务查询有时会查询好多天的数据&#xff0c;导致负载告警。 现在想对查询进行限制–只允许查询一天的数据&#xff08;不限定是哪天&#xff09;&#xff0c;如果想查询多天的数据就走申请。 技术分析 在每…...

【模式识别】探秘分类奥秘:最近邻算法解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…...

【Redis】分布式锁

目录 分布式锁分布式锁实现的关键 Redisson实现分布式锁看门狗机制 分布式锁 为什么要使用分布式锁&#xff0c;或者分布式锁的使用场景&#xff1f; 定时任务。在分布式场景下&#xff0c;只控制一台服务器执行定时任务&#xff0c;这就需要分布式锁 要控制定时任务在同一时间…...

Linux访问firefox 显示Error: no DISPLAY environment variable specified

在 CentOS 7 中访问 Firefox 浏览器时&#xff0c;出现 "Error: no DISPLAY environment variable specified" 的错误提示通常是由于缺少显示环境变量导致的。 要解决这个问题&#xff0c;你可以按照以下步骤进行配置&#xff1a; 1. 确保已经安装 X Window Syst…...

线性回归简介

线性回归简介 1、情景描述2、线性回归 1、情景描述 假设&#xff0c;我们现在有这么一张图&#xff1a; 其中&#xff0c;横坐标x表示房子的面积&#xff0c;纵坐标y表示房价。我们猜想x与y之间存在线性关系&#xff1a; y k x b ykxb ykxb 现在&#xff0c;思考一个问题&…...

Log4net 教程

一、Log4net 教程 在CodeProject上找到一篇关于Log4net的教程&#xff1a;log4net Tutorial&#xff0c;这篇博客的作者是&#xff1a;Tim Corey &#xff0c;对应源代码地址为&#xff1a; https://github.com/TimCorey/Log4netTutorial&#xff0c;视频地址为&#xff1a;Ap…...

test-01-java 单元测试框架 junit 入门介绍

JUnit JUnit 是一个用于编写可重复测试的简单框架。 它是 xUnit 架构的一种实例&#xff0c;专门用于单元测试框架。 What to test? NeedDescRight结果是否正确B边界条件是否满足I能反向关联吗C有其他手段交叉检查吗E是否可以强制异常发生P性能问题 maven 入门例子 maven …...

Linux系统中跟TCP相关的系统配置项

TCP连接保活 参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节 net.ipv4.tcp_keepalive_intvl&#xff1a;设置TCP两次相邻探活检测的间隔时间。默认75秒&#xff0c;单位是秒&#xff0c;对应配置文件/proc/sys/net/ipv4/tcp_keepalive_intvl&#xff1b;net.ipv4.tcp_kee…...

python图片批量下载多线程+超时重试

背景 上篇python入门实战:爬取图片到本地介绍过如何将图片下载到本地,但是实际处理过程中会遇到性能问题:分页数过多下载时间过程、部分页面连接超时无法访问下载失败。本文从实战的角度解释一下如何处理这两个问题。 下载时间过长问题,处理方式是使用多线程,首先回顾…...

冒泡排序之C++实现

描述 冒泡排序算法是一种简单的排序算法&#xff0c;它通过将相邻的元素进行比较并交换位置来实现排序。冒泡排序的基本思想是&#xff0c;每一轮将未排序部分的最大元素逐个向右移动到已排序部分的最右边&#xff0c;直到所有元素都按照从小到大的顺序排列。 冒泡排序的算法…...

【Spring实战】04 Lombok集成及常用注解

文章目录 0. 集成1. Data2. Getter 和 Setter3. NoArgsConstructor&#xff0c;AllArgsConstructor和RequiredArgsConstructor4. ToString5. EqualsAndHashCode6. NonNull7. Builder总结 Lombok 是一款 Java 开发的工具&#xff0c;它通过注解的方式简化了 Java 代码的编写&…...

ubuntu-22.04.3 配置

1.防火墙 a、查看防火墙状态&#xff1a;inactive是关闭&#xff0c;active是开启。 sudo ufw statusb、开启防火墙。 sudo ufw enablec、关闭防火墙。 sudo ufw disable2.设置Ip ifconfigsudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.y…...

[工具]java_sublime的快速使用

目录 使用 : 怎么运行: 调整字体: 使用 : 新建--->写好代码后-->另存为尾缀是.java的文件 怎么运行: 在你另存为的目录下cmd调用控制台输入dos指令--->执行javac 文件名.java(有.java尾缀)(编译为.class文件)--->java 文件名(没有.class尾缀设计者认为执行的是…...

【银行测试】银行金融测试+金融项目测试点汇总...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、银行金融测试是…...

将PPT的图保持高分辨率导入到Word / WPS中

1、将PPT中画好的图组合在一起&#xff0c;选择组合后的图复制&#xff08;Ctrlc&#xff09; 2、在Word中&#xff0c;选中左上角的粘贴选项--->选择性粘贴 WPS选择元文件 / Word选择增强型图元文件 这样放大也不模糊了...