Agent : 一文读懂LLM Agent架构,详解Profile,Memory,Planning,Action模块作用

原创 予墨 AI速览 2023-10-07 13:30 收录于合集 #AI论文解读3个 ##Agent5个 在人工智能领域,人们对Agent的期待日益增长。每当基于Agent的新开源工具或产品出现时,都能引发热烈的讨论,比如之前的AutoGPT。对于对Agent感兴趣的朋友们,我推荐一篇论文,它全面地介绍了Agent的架构,对于理解Agent的全局有着重要的价值。 https://browse.arxiv.org/pdf/2308.11432.pdf 这篇论文详细解读了Agent的概念、发展历史以及近期的研究热点。除了这些基础知识,我认为最有价值的部分在于,它总结了基于大型语言模型(LLM)的Agent的架构,使我们能够按照一定的标准范式去设计自己的Agent。 我这篇文章主要从两个关键方面来阐述基于LLM的Agent的构建策略:设计Agent架构以更好地发挥LLM的能力,以及如何赋予Agent完成不同任务的能力。 在Agent架构设计方面,该论文提出了一个统一的框架,包括Profile模块、Memory模块、Planning模块和Action模块。 Profile模块: 定义和管理Agent角色的特性和行为。它包含一系列参数和规则,描述了Agent的各种属性,如角色、目标、能力、知识和行为方式等。这些属性决定了Agent如何与环境交互,如何理解和响应任务,以及如何进行决策和规划。这个模块提出了三种Agent角色生成方式,包括LLM生成方法、数据集对齐方法和组合方法。 1. LLM生成方法:利用大语言模型自动生成代理的个人特征,比如年龄、性别、个人喜好等背景信息。具体做法是:首先设定代理的组成规则,明确目标人群中代理应具备的属性;然后指定几个手工创建的种子配置文件作为示例;最后利用语言模型生成大量代理配置文件。这种方法可以快速批量生成配置文件,但由于缺乏精确控制,生成的代理可能会缺乏细节。 2. 数据集对齐方法:是从真实世界的人口数据集中获取代理的配置文件信息,比如通过抽取人口调查数据组织成自然语言描述。这样可以使代理行为更真实可信,准确反映真实人口的属性分布。但需要可靠的大规模数据集支持。 3. 组合方法:利用真实数据集生成一部分关键代理,确保反映真实世界规律;然后用LLM生成方法补充大量其他代理,拓展代理数量。这样既保证了代理的真实性,又实现了充足的代理数量,使系统可以模拟更复杂的社会交互。谨慎的配置文件设计是构建有效代理系统的基础。 Memory模块: 在Agent系统中扮演重要角色,它存储和组织从环境中获取的信息,以指导未来行动。 结构上,内存模块通常包含短期记忆和长期记忆两个部分。短期记忆暂存最近的感知,长期记忆存储重要信息供随时检索。 格式上,内存信息可以用自然语言表达,也可以编码为向量嵌入提高检索效率。还可以利用数据库存储,或组织为结构化列表表示内存语义。 操作上,主要通过记忆读取、写入和反射三种机制与环境交互。读取提取相关信息指导行动,写入存储重要信息,反射总结见解提升抽象水平。 Planning模块: 主要任务是帮助Agent将复杂的任务分解为更易处理的子任务,并制定出有效的策略。它大致分为两种类型,一种是不依赖反馈的计划,另一种则是基于反馈的计划。 不依赖反馈的计划在制定过程中并不参考任务执行后的反馈,它有几种常用的策略。比如单路径推理,它按照级联的方式,一步一步地生成计划。另外,还有多路径推理,它会生成多个备选的计划路径,形成树状或图状的结构。当然,我们也可以利用外部的规划器进行快速搜索,以找出最优的计划。 基于反馈的计划,它会根据任务执行后的反馈来调整计划,这种方式更适合需要进行长期规划的情况。反馈的来源可能来自任务执行结果的客观反馈,也可能是根据人的主观判断给出的反馈,甚至还可以是由辅助模型提供的反馈。 Action模块: 职责是将抽象的决策转化为具体的行动,它就像是一个桥梁,连接了Agent的内部世界与外部环境。在执行任务时,需要考虑行动的目标、生成方式、应用范围以及可能产生的影响。 理想的行动应当是有目的的,例如完成特定任务、与其他代理进行交流或者探索环境。行动的产生可以依赖于查询过去的记忆经验,或者遵循预设的计划。而行动的范围,不仅可以通过利用如API和知识库等外部工具来扩展,还需要发挥大型语言模型(LLM)的内在能力,例如规划、对话及理解常识等。 架构就像PC的硬件,但仅依赖架构设计是不够的,我们还需要赋予Agent完成不同任务的能力,这些被视为“软件”资源。论文中提出了几种方法,包括模型微调、提示工程和机械工程。其中提示工程应该是最为常见的一种形式了,我们常听说的提示词工程师就是在这个语境下的角色。 模型微调。使用特定任务数据对模型进行微调,提升相关能力。数据可以来自人类注释、LLM生成或实际应用中收集。这可以使Agent行为更符合人类价值观。 提示工程。通过自然语言描述向LLM灌输所需的能力,然后将描述作为提示指导Agent操作。这可以让Agent快速获得指定的软件能力。 机械工程。主要涵盖: 试错法:Agent先执行操作,根据效果调整行动。逐步优化。 众包法:整合多个Agent的见解,形成更新的集体响应。 经验积累法:Agent通过不断探索积累经验,逐步提升软件能力。 自我驱动法:Agent自主设置目标并在环境中不断探索,最终获得软件能力。 基于LLM的Agent的设计和构建策略是一个复杂且有挑战性的任务。随着技术的进步,我相信未来会有更多优秀的AI应用通过Agent产生,普通用户也能通过开源项目打造自己的Agent,成为AI时代的超级个体。希望大家能早点行动起来,多做些知识储备,待技术成熟时,尽快使用或做出自己的Agent。 AI速览 49篇原创内容 公众号 相关阅读: 实战:如何用AI Agent实现ChatGPT流程化写作,产能翻倍 PHP提示词技巧,全方位精调ChatGPT复杂任务生成效果 炮打LLM“逆转诅咒”论文,对ChatGPT用户有哪些干货 用ChatGPT和这10个框架,搞定所有自媒体长文写作

Java Jar 包还不知道怎么反编译,赶紧看看这个 IDEA 插件!

前言 当我们使用 Java 开发时,经常会遇到一种情况:我们拿到了一个 JAR 文件,但是却没有源代码。这时候,我们就需要使用反编译工具来帮助我们还原出源代码。 反编译工具可以将编译后的 JAR 文件转换回可读的 Java 源代码。这样,我们就可以看到原始的代码,理解它的逻辑和实现细节。 比较成熟的反编译插件有:jd-gui、jadx、FernFlower、IDEA Java Bytecode Decompiler 小奎尝试了几个虽然可以反编译但是操作都有点复杂。今天为大家推荐款 IDEA 插件 File Expander 接下来还是老规矩直接上操作演示。 实操演示 安装 File Expander 插件 通过 Help -> Find Action 输入 plugins 进入插件管理。具体操作如下图所示: 因为小奎已经安装了所以没有显示 install ,你如果是第一次安装点击 install 安装成功后重启即可。 查看 jar 包内容 如下图所示我们可以直接打开 jar 内容查看里面 class 文件。 反编译 jar 包内容 通过选择 jar 包然后点击右键就可以反编译我们的 jar 包 , 小奎在我本地 Java 8 环境下 100 M 左右 jar 包可以轻松的反编译。 具体操作如下图所示: 如下所示红框的内容就是我们反编译后 jar 包的内容。

数据结构-顺序表

1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储 2.顺序表 2.1概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。 顺序表一般可以分为: 1. 静态顺序表:使用定长数组存储元素。 2. 动态顺序表:使用动态开辟的数组存储。 2.2 接口实现 静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空 间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间 大小,所以下面我们实现动态顺序表。 在头文件SeqList.h中声明定义一下这个顺序表,然后声明基本功能,那么顺序表的基本功能就是增删查改,头插头删,尾插尾删。 typedef int SLDataType; typedef struct SeqList { SLDataType* a;//动态开辟的的数组 int size;//有效数据个数 int capacity;//空间大小 }SL; //管理数据-增删查改 void SLInit(SL* ps); void SLDestory(SL* ps); void SLPrint(SL* ps); void SLCheckCapacity(SL* ps); int SLFind(SL* ps, SLDataType x); //头插头删,尾插尾删 void SLPushBack(SL* ps,SLDataType x); void SLPopBack(SL* ps); void SLPushFront(SL* ps, SLDataType x); void SLPopFront(SL* ps); //在pos位置上插入x void SLInSert(SL* ps, int pos, SLDataType x); //删除pos位置上的值 void SLErase(SL* ps, int pos); //修改pos位置的值 void SLModify(SL* ps, int pos, SLDataType x); 2.

MySQL日期时间操作函数(全的)-九五小庞

一、MySQL常用日期函数 1.1、获取时间 # 获取当前日期时间 select NOW(); # 2021-04-02 09:25:29 # 获取当前日期 SELECT CURDATE(); # 2021-04-02 # 获取当前时间 SELECT CURTIME(); # 09:26:10 # 对于时间2021-04-02 09:25:29,分别获取其年、月、日、时、分、秒 SELECT EXTRACT(YEAR FROM NOW()); # 2021 SELECT EXTRACT(MONTH FROM NOW()); # 4 SELECT EXTRACT(DAY FROM NOW()); # 2 SELECT EXTRACT(HOUR FROM NOW()); # 9 SELECT EXTRACT(MINUTE FROM NOW()); # 25 SELECT EXTRACT(SECOND FROM NOW()); # 29 # 或者从日期格式字符串中获取 SELECT EXTRACT(SECOND FROM '2021-04-02 10:37:14.123456'); # 14 1.

YOLO目标检测数据集大全【含voc(xml)、coco(json)和yolo(txt)三种格式标签+划分脚本+训练教程】(持续更新建议收藏)

一、作者介绍:资深图像算法工程师,YOLO算法专业玩家;擅长目标检测、语义分割、OCR等。 二、数据集介绍: 真实场景的高质量图片数据,数据场景丰富,分享的绝大部分数据集已应用于各种实际落地项目。所有数据集下载链接都含有YOLO环境部署、训练教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。使用lableimg标注软件标注,标注框质量高,所有数据集都含有voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。 下载说明:点击数据集对应的蓝色超链接即可自行下载,如需其他种类数据集和更多数量请私信博主~ YOLO系列目标检测数据集目录(持续更新) 人相关的各种数据集人脸口罩佩戴检测数据集人脸口罩规范佩戴数据集人脸识别数据集人头检测数据集人体行为检测数据集跌倒摔倒数据集打电话检测数据集抽烟吸烟检测数据集安全帽佩戴检测数据集安全帽手套检测数据集行人检测数据集红外人员检测数据集复杂场景人员检测数据集肺结节检测数据集红细胞检测数据集红白细胞血小板检测数据集 车辆相关的各种数据集红外车辆行人检测数据集红外多目标检测数据集昏暗车辆检测数据集夜间车辆检测数据集车辆分类检测数据集真实道路车辆检测数据集车牌检测数据集汽车头部尾部检测数据集 道路相关的各种数据集路标检测数据集红绿灯检测数据集交通标志识别数据集交通标志检测CCTSDB数据集交通标志分类数据集修建道路检测数据集铁轨裂纹检测数据集 动植物相关的各种数据集红蚂蚁检测数据集海洋目标检测数据集猫狗分类检测数据集水果分类检测数据集红花检测数据集番茄检测数据集苹果检测数据集苹果缺陷检测数据集棉花病虫害检测数据集烟叶病害检测数据集树叶分类检测数据 工业相关的各种数据集谢韦尔钢材缺陷检测数据集钢表面缺陷检测数据集PCB缺陷检测数据集指针仪表检测数据集机油泄露检测数据集汽油泄露检测数据集石油泄露检测数据集 火灾火焰烟雾相关的数据集火焰烟雾检测数据集火灾火焰检测数据集烟雾检测数据集 无人机相关的各种数据集无人机检测数据集无人机航拍行人检测数据集无人机航拍输电线路绝缘瓷瓶数据集 卫星遥感相关的各种数据集卫星遥感多类别检测数据集卫星遥感舰船检测数据集 生活相关的各种数据集垃圾分类检测数据集泄露检测数据集水坑检测数据集二维码检测数据集背包检测数据集环形编码标记物检测数据集数字识别数据集X光安检检测数据集足球比赛足球检测数据集输电线路异物检测数据集风力发电机检测数据集 VOC2007目标检测完整版数据集更多数据集更新中 人相关的各种数据集 人脸口罩佩戴检测数据集 实际项目应用:公共场所监控场景下的大密度人群检测是否佩戴口罩,以及戴口罩的人证比对(安检刷脸不用摘口罩)、手机解锁、刷脸考勤等身份认证场景。数据集说明:人脸口罩佩戴检测数据集,真实场景的高质量图片数据,数据场景丰富,含有佩戴口罩和没佩戴口罩图片。标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如下更多数量请私信博主): 1000图片:YOLO人脸口罩佩戴目标检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000图片:YOLO人脸口罩佩戴目标检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000图片:YOLO人脸口罩佩戴目标检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 20000图片:YOLO人脸口罩佩戴目标检测数据集(含20000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 30000图片:YOLO人脸口罩佩戴目标检测数据集(含30000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 人脸口罩规范佩戴数据集 实际项目应用:疫情防控、智能安检、公共场所监控场景下的大密度人群检测是否佩戴口罩数据集说明:人脸口罩规范佩戴数据集,真实场景的高质量图片数据,数据场景丰富,含有正确佩戴口罩、未正确佩戴口罩和没佩戴口罩图片标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如需更多数量请私信博主): 1000图片:YOLO人脸口罩规范佩戴检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000图片:YOLO人脸口罩规范佩戴检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000图片:YOLO人脸口罩规范佩戴检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 人脸识别数据集 实际项目应用:安全监控、智能驾驶、人机交互、人脸门禁、人脸支付、人脸搜索数据集说明:人脸识别数据集,真实场景的高质量图片数据,数据场景丰富,含有人脸图片标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如需更多数量请私信博主): YOLO人脸识别目标检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 人头检测数据集 实际项目应用:在公共场所,如车站、商场、景区等,可以通过人头目标检测技术来监测人群流量数据集说明:人头检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(需要更多数量的话请私信博主): 1000图片:YOLO密集人群人头目标检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程 5000图片:YOLO密集人群人头目标检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程 10000图片:YOLO密集人群人头目标检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 人体行为检测数据集 实际项目应用:在人流量统计、行人闯入/越界检测、人群密集/拥堵检测预警等场景中,对监控场景中是否存在人体进行检测,并精确定位、追踪。数据集说明:,真实场景的高质量图片数据,数据场景丰富,含有站立、跌倒摔倒、坐着、蹲着、跑着图片标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如下更多数量请私信博主): 1000图片:YOLO人体行为检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000图片:YOLO人体行为检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000图片:YOLO人体行为检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 20000图片:YOLO人体行为检测数据集(含20000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 30000图片:YOLO人体行为检测数据集(含30000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 跌倒摔倒数据集 实际项目应用:公共安全监控、智能家居、工业安全等活动区域无监管情况下的人员摔倒事故数据集说明:YOLO目标检测数据集,真实场景的高质量图片数据,数据场景丰富。使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境搭建、训练教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如需更多数量请私信博主): 1000张图片:YOLO跌倒摔倒目标检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000张图片:YOLO跌倒摔倒目标检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000张图片:YOLO跌倒摔倒目标检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 20000图片:YOLO跌倒摔倒目标检测数据集(含20000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 30000图片:YOLO跌倒摔倒目标检测数据集(含30000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 打电话检测数据集 实际项目应用:安全监控、智能驾驶、人机交互、智能城市数据集说明:打电话检测数据集,真实场景的高质量图片数据,数据场景丰富,含有打电话图片和没打电话图片标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如需更多数量请私信博主): 1000图片:YOLO打电话目标检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000图片:YOLO打电话目标检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000图片:YOLO打电话目标检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 15000图片:YOLO打电话目标检测数据集(含15000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 抽烟吸烟检测数据集 实际项目应用:公共场所监管、健康风险评估、戒烟干预数据集说明:YOLO目标检测数据集,真实场景的高质量图片数据,数据场景丰富。使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。其他:附赠YOLO环境部署、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。 数据集点击下载(如需更多数量请私信博主): 1000图片:YOLO抽烟吸烟检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 5000图片:YOLO抽烟吸烟检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar 10000图片:YOLO抽烟吸烟检测数据集(含10000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar

Android studio:打开应用程序闪退的问题

目录 问题描述分析原因解决方法 在开发Android应用程序的过程中遇到的问题 问题描述 在开发(或者叫测试,这么简单的程序可能很难叫开发)好一个android之后,在Android studio中调试开发好的app时,编辑器没有提示错误,在虚拟机中的下载也没有问题,但是app一打开就闪退,再次打开就会出现app keeps stopping的字样 分析原因 查看了很多文章,一般都是xml的对应,mainifest的注册之类的,但是在排查了这些原因之后发现这些都没有问题,那么原因是什么呢? 在仔细看过Android studio的调试器logcat之后 将问题锁定在了页面的载入上,因为应用是成功安装上的,并且在logcat中并没有报出写出的页面的问题,说明不是其他的原因,多半是因为软件没有按照合理的顺序调用页面导致的闪退,这个的调整在mainifest中 可以看到在<activity < /activity>中的android:name="…"就是所需要的主页面,原来这里是创建项目时自动生成的"MainActivity"也就是项目结构java包中的MainActivity.kt,把他修改成我自己写的mainactivity之后应该就可以把主页面修改过来,但是在运行之后还是会出现闪退的问题,这样应该就没什么问题了,但是为什么还会闪退呢? 解决方法 那么大概知道了是页面载入导致的问题(可能),那么就一不做二不休,干脆删除掉了MainActivity.kt,也就是上文中说到的创建项目时自动生成的哪个文件,同时也删除掉mainifest中关于该文件的内容,再次运行 可以正常使用了,虽然真正的原因还不是很清楚,但是多半就是前面提到的原因,至少关系匪浅 参考文章 linkhttp://t.csdnimg.cn/Rj5AD linkhttp://t.csdnimg.cn/br3po

Java中Integer.MAX_VALUE的含义

Integer.MAX_VALUE 是 Java 中的一个常量,它表示整数数据类型 int 的最大可表示值。 Integer.MAX_VALUE 的值是 2,147,483,647。这意味着在一个标准的32位Java虚拟机中, int 数据类型可以表示的最大整数值为 2,147,483,647,或者说 2^31 - 1。 如果你尝试存储一个大于 Integer.MAX_VALUE 的整数值,会导致整数溢出,通常会导致出现负数或其他意外结果。 因此,在编程中,通常要确保处理的整数值不会超过 Integer.MAX_VALUE。 这个常量在处理整数数据时非常有用,特别是在需要检查整数是否溢出的情况下, 可以使用 Integer.MAX_VALUE 进行比较。 例如,你可以编写以下代码来检查整数是否大于或等于 Integer.MAX_VALUE: if (myInteger > Integer.MAX_VALUE) { // 处理整数溢出的情况 } 同样,Java中还有 Integer.MIN_VALUE 常量,它表示 int 类型的最小可表示值,为 -2,147,483,648,即 -2^31。这两个常量一起定义了 int 数据类型的取值范围。

在hive插入数据时出现“Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask”报错

一.问题重现 SQL 错误 [2] [08S01]: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 二.问题分析 这个错误代码表明 Hive 作业由于某种原因失败。 1.资源问题: 这个错误可能发生在集群上存在资源约束的情况下,例如内存或 CPU 资源不足以完成 Hive 作业。 2.数据问题: 它可能与数据本身相关。例如,数据可能损坏,或者数据格式或模式存在问题,Hive 无法处理。 3.配置问题: 不正确的 Hive 或 Hadoop 配置设置可能导致作业失败。 4.查询错误: 可能是与你尝试执行的 SQL 查询相关的问题。例如,它可能存在语法错误,或者尝试执行 Hive 不支持的操作。 5.权限问题: 你可能没有执行你尝试执行的操作所需的权限。 6.版本冲突:hive和Hadoop版本不兼容。

【安全】Java幂等性校验解决重复点击(6种实现方式)

目录 一、简介1.1 什么是幂等?1.2 为什么需要幂等性?1.3 接口超时,应该如何处理?1.4 幂等性对系统的影响 二、Restful API 接口的幂等性三、实现方式3.1 数据库层面,主键/唯一索引冲突3.2 数据库层面,乐观锁3.3 数据库层面,悲观锁(select for update)【不推荐】3.4 数据库层面,状态机3.5 应用层面,token令牌【不推荐】3.6 应用层面,分布式锁【推荐】 四、Java 代码实现4.1 @NotRepeat 注解4.2 AOP 切面4.3 RedisUtils 工具类4.4 测试类4.5 测试结果 一、简介 1.1 什么是幂等? 幂等 是一个数学与计算机科学概念,英文 idempotent [aɪˈdempətənt]。 在数学中,幂等用函数表达式就是:f(x) = f(f(x))。比如 求绝对值 的函数,就是幂等的,abs(x) = abs(abs(x))。计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的作用。 满足幂等条件的性能叫做 幂等性。 1.2 为什么需要幂等性? 我们开发一个转账功能,假设我们调用下游接口 超时 了。一般情况下,超时可能是网络传输丢包的问题,也可能是请求时没送到,还有可能是请求到了,返回结果却丢了。这时候我们是否可以 重试 呢?如果重试的话,是否会多赚了一笔钱呢? 在我们日常开发中,会存在各种不同系统之间的相互远程调用。调用远程服务会有三个状态:成功、失败、超时。 前两者都是明确的状态,但超时则是 未知状态。我们转账 超时 的时候,如果下游转账系统做好 幂等性校验,我们判断超时后直接发起重试,既可以保证转账正常进行,又可以保证不会多转一笔。 日常开发中,需要考虑幂等性的场景: 前端重复提交:比如提交 form 表单时,如果快速点击提交按钮,就可能产生两条一样的数据。用户恶意刷单:例如在用户投票这种功能时,如果用户针对一个用户进行重复提交投票,这样会导致接口接收到用户重复提交的投票信息,会使投票结果与事实严重不符。接口超时重复提交:很多时候 HTTP 客户端工具都默认开启超时重试的机制,尤其是第三方调用接口的时候,为了防止网络波动等造成的请求失败,都会添加重试机制,导致一个请求提交多次。MQ重复消费:消费者读取消息时,有可能会读取到重复消息。 1.3 接口超时,应该如何处理? 如果我们调用下游接口超时了,我们应该如何处理?其实从生产者和消费者两个角度来看,有两种方案处理: 方案一:消费者角度。在接口超时后,调用下游接口检查数据状态: 如果查询到是成功,就走成功流程;如果是失败,就按失败处理(重新请求)。 方案二:生产者角度。下游接口支持幂等,上有系统如果调用超时,发起重试即可。 两种方案都是可以的,但如果是 MQ重复消费的场景,方案一处理并不是很妥当,所以我们还是要求下游系统 对外接口支持幂等。

地理信息系统原理-空间数据结构(7)

​四叉树编码 1.四叉树编码定义 四叉树数据结构是一种对栅格数据的压缩编码方法,其基本思想是将一幅栅格数据层或图像等分为四部分,逐块检查其格网属性值(或灰度);如果某个子区的所有格网值都具有相同的值,则这个子区就不再分割,否则还要把这个子区再分割成四个子区,这样依次地分割,直到每个子块都只含有相同的属性值或灰度值为止,可分为自上而下编码和自下而上编码 2.四叉树表示形式 用一倒立树表示这种分割和分割结果,如图所示。 根:整个区域 高:深度、分几级,几次分割 叶:不能再分割的块 结点(或树叉):还需分割的块 每个树叉均有4个分叉,叫四叉树。 3.四叉树的分类 四叉树分为常规四叉树和线性四叉树 (1) 常规四叉树(记录这棵树的叶结点外,中间结点,结点之间的联系用指针联系,每个结点需要6个变量:父结点指针、四个子结点的指针和本结点的属性值。) 指针不仅增加了数据的存储量,还增加了操作的复杂性:如层次数(分割次数)由从父结点移到根结点的次数来确定,结点所代表的图像块的位置需要从根节点开始逐步推算下来。所以,常规四叉树并不广泛用于存储数据,主要在数据索引和图幅索引等方面应用 (2)线性四叉树则只存贮最后叶结点的信息,包括叶结点的位置编码/地址码、属性或灰度值;线性四叉树地址码,通常采用十进制Morton码(MD码):如图所示 ①下图为一个8*8原始栅格数据 ②依据自下而上的编码方式进行莫顿码编码 ③在存储时,只存储属性值发生改变位置的莫顿码,就是叶节点的属性值 ④如何计算莫顿码:如图所示,通常是将栅格数据十进制的行列号,转成二进制的行列号,再将二进制的行号和列号进行错位交叉排列,得到二进制的莫顿码,再将二进制的莫顿码转成十进制的莫顿码 4.四叉树编码特征 优点: 1)存贮量小,只对叶结点编码,节省了大量中间结点的存储,地址码隐含着结点的分割路径和分割次数。对于团块图像,四叉树表示法占用空间比上述其他方法要少得多,四叉树表示法基本上是一种非冗余表示法。 2)线性四叉树可直接寻址,通过其坐标值直接计算其Morton码,而不用建立四叉树(自下而上)。 3) 容易执行实现集合相加等组合操作 4)四叉树具有可变率或多重分辩率的特点使得它有很好的应用前景,适用于处理凝聚性或呈块状分布的空间数据,特别适用于处理分布不均匀的块状空间数据,但不适用于连续表面(如地形)或线状地物。 缺点 1)四叉树未能直接表示物体间的拓扑关系。 2) 与非树表示法比较,四叉树表示法的缺点在于转换的不稳定性或叫滑动变异 例如,两个图像的差异仅由于平移,就会构成极为不同的四叉树,因而很难根据四叉树来判断这两个图像是否全同,故不利于做形状分析和模式识别, 3) 一个物体的图像在构成四叉树时会被分割到若干个象限中,使它失去了内在的相关性。 4)矢/栅正反变换还不理想。 5) 建立四叉树耗费机时很多。 6) 四叉树虽可修改,但很费事

JAVA(SpringBoot)对接微信登录

目录 1 申请测试账号 1.1 登录测试平台 1.2 配置接口配置信息 ​编辑 1.3 配置JS接口安全域名 1.4 配置网页授权获取用户基本信息 2:接口代码 2.1 微信登录流程 2.2 依赖导入: 2.2.1 工具类: 2.3 创建微信用户实体类 2.4 接口功能 3 测试 1 申请测试账号 1.1 登录测试平台 链接: 微信公众平台测试 1.2 配置接口配置信息 在这一步,需要拥有能接入公网的服务器,或者利用内网穿透将自己的接口暴漏给微信,让微信的回调能成功访问到我们的接口 在可以将我们的接口暴漏在公网的前提下,我们可以书写接口配置接口配置信息的URL:(注意:这里只是简单配置URL,未添加验证微信服务器流程,详细配置请参考:点击进入) import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping("/weChat") public class WeChatController{ @GetMapping("/verifyToken") public String verifyToken(HttpServletRequest request) { return request.getParameter("echostr"); } } 比如我们的服务器地址是 119.3.248.100 ,上述服务部署在了该服务器8080端口上,那么按照上述代码的路径,URL就可配置为:http://119.3.248.100:8080/weChat/verifyToken (有域名使用域名即可) 1.3 配置JS接口安全域名 在测试公众号中,可以使用 IP + 端口 的形式设置安全域名,这里的域名填写上述服务你所部署的服务器地址即可 1.4 配置网页授权获取用户基本信息 这里的授权回调页面域名和JS接口安全域名保持一致即可 2:接口代码 2.1 微信登录流程 微信客户端发送登录请求 -> 访问微信授权接口 -> 微信回调,j将授权code发送到我们的服务器 -> 通过code,appid,appsecret获取微信针对该用户的accsess_token,openid等信息-> 通过accsess_token,openid获取用户信息

Python的高级用法:泛型

Python 的泛型是类型提示的一个高级特性,用于指示某些数据结构或函数可以接受多种数据类型,例如使得一个函数的参数能够接收多种类型的数据或者使得一个类能够接收并存储不同种类的数据。泛型在 Python 中通常通过模块 typing 实现。泛型的使用有助于提高代码的可读性和健壮性,尤其是在大型项目和团队协作中。 基本概念 在 Python 中,泛型允许我们定义一个结构,比如一个类或一个函数,它可以适应多种类型而不仅仅是一个。这种方式可以保持代码的灵活性和通用性,同时仍然受益于类型检查的优势。 使用泛型的例子 1. 泛型类型提示 使用 typing 模块中的泛型类,如 List, Dict, Optional, Tuple 等。 from typing import List, Dict def process_items(items: List[int]) -> None: for item in items: print(item) inventory: Dict[str, int] = {"apples": 5, "oranges": 2} process_items([1, 2, 3]) 在这个例子中,process_items 函数指定它接受一个整数列表 List[int],而 inventory 是一个键为字符串、值为整数的字典 Dict[str, int]。 2. 创建泛型类 可以使用 typing.Generic 创建自定义的泛型类。 from typing import TypeVar, Generic T = TypeVar('T') class Stack(Generic[T]): def __init__(self) -> None: self.

idea运行java的配置(包含maven,mysql下载配置)

目录 IDEA下载配置 1.1下载地址 1.2安装配置jdk 1.2.1下载jdk 1.2.2安装jdk 1.2.3配置jdk环境变量 1.3安装配置IDEA maven下载配置 2.1下载地址 2.2下载maven 2.3配置maven环境变量 2.3在IDEA配置maven mysql配置 3.1mysql下载 3.2mysql安装 3.3mysql的配置 3.4mysql配置环境变量 IDEA下载配置 1.1下载地址 下载地址:Download IntelliJ IDEA – The Leading Java and Kotlin IDE IDEA 分为两个版本:旗舰版(Ultimate)和社区版(Community) 1.2安装配置jdk 下载地址:Oracle Java Technologies | Oraclejavase/javase-jdk8-downloads.html 默认采用jdk1.8(目前较流行) 1.2.1下载jdk 打开网址为这个: 往下拉,根据你的电脑系统来进行对应的版本进行选择: 选择完对应的版本后,要下载之前你需要首先接收协议: 1.2.2安装jdk 选择下一步 选择安装路径,可以选择自己指定,也可以默认不选择即可 接下来会弹出来一个Jre安装目录 到最后安装完成即可 1.2.3配置jdk环境变量 在path下配置以上两个 然后在cmd窗口输入java -version显示jdk为1.8则配置成功 1.3安装配置IDEA 打开下载地址:(这里下载21.2.3版本) 下载界面 安装路径(尽量放在d盘) 安装成功 配置jdk建立一个项目 写一个Hello World看是否能运行 maven下载配置 2.1下载地址 maven的官网地址为:https://maven.apache.org/ 2.2下载maven 1. 这里是先前的版本 点击圈住部分 下载完成后,我们点击解压,而我之前已经下载和安装了maven3.6.1。打开我们解压的文件夹,应该是以下这个样子。 在环境变量的系统变量中,找到path属性名,然后选中点击编辑

使用nginx解决前端https调用http接口

1.思路 nginx配置https访问后将请求转发到目标http服务 2.生成ssl证书 (1) 创建配置文件 myssl.conf # 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。 distinguished_name = req_distinguished_name # 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。 x509_extensions = v3_req # 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。 prompt = no [req_distinguished_name] #国家代码,一般都是CN(大写) C = CN #省份 ST = gd #城市 L = gz #企业/单位名称 O = echohye #企业部门 OU = echohye #证书的主域名 CN = 192.168.11.111 ##### 要加入到证书请求中的一系列扩展项 ##### [v3_req] keyUsage = critical, digitalSignature, keyAgreement extendedKeyUsage = serverAuth subjectAltName = @alt_names [ alt_names ] IP.1 = 192.168.11.111 # IP.

基于文心一言的PPT自动生成

基于文心一言的PPT生成,AIStudio项目地址,快去fork运行吧 项目借鉴了autoppt, ppt两个项目。生成的PPT还没加入特效,有待改善,希望大佬们可以提出宝贵的建议。 一、生成PPT效果展示 注意,因为生成PPT时间较长,应用体验效果不是很好,总是出现错误,建议放到本地运行gradio页面。 二、设计思路 视频讲解链接 (【基于文心一言的PPT自动生成上集】 https://www.bilibili.com/video/BV1TC4y1J7M7/?share_source=copy_web&vd_source=49ac2517b671ca0d4ec8f7092e33bd0a)【基于文心一言的PPT自动生成下集】 https://www.bilibili.com/video/BV1Fc411o7gP/?share_source=copy_web&vd_source=49ac2517b671ca0d4ec8f7092e33bd0a 三、具体实施 3.1 准备PPT模板 这里准备了5个简单的模板供大家使用,解压即可,大家也可以按照我准备的模板格式,自己构建模板,只需要更改一下图片名和copy一下json文件.部分模板展示 #解压模板 %cd ~ !unzip /home/aistudio/data/data246239/ppt_template.zip 3.2 安装依赖 # 安装所有集成所需的所有模块 # !pip install 'langchain[all]' !pip install -r requirements.txt 3.3 调用接口生成内容(记得放访问令牌) # 1、获取access_token access_token = '' PPT_title = 'AI' # 2、进行需求分析 from app import analysis_requirements analysis_content = analysis_requirements(PPT_title, access_token) print(analysis_content) 3.4 根据内容生成PPT # 3、根据需求生成ppt内容 from structure_article import StructureArticle character_a = "你是一个博学多才的人,精通各种领域的知识。" struct_articles = StructureArticle(api_type='Ernie', main_idea_knowledge=analysis_content, access_token=access_token) content = struct_articles.

Java配置47-Spring Eureka 未授权访问漏洞修复

文章目录 1. 背景2. 方法2.1 Eureka Server 添加安全组件2.2 Eureka Server 添加参数2.3 重启 Eureka Server2.4 Eureka Server 升级版本2.5 Eureka Client 配置2.6 Eureka Server 添加代码2.7 其他问题 1. 背景 项目组使用的 Spring Boot 比较老,是 1.5.4.RELEASE 。最近被检测出 Spring Eureka 未授权访问漏洞。 现状是浏览器直接访问 Eureka Server 可以直接进去,看到已经注册的服务信息。 2. 方法 2.1 Eureka Server 添加安全组件 Eureka Server 添加 pom 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 2.2 Eureka Server 添加参数 spring.application.name:demo-eureka server.port: 8088 eureka.instance.hostname=localhost #禁用将自己作为客户端注册,禁用客户端注册行为 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false #eureka地址 eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka #eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka #关闭自我保护 --本地开发环境可以关闭,生产环境 eureka.

Python如何读取Excel中的公式计算结果

今天遇到一个问题,从某平台下载Excel文件,后缀xlsx,需要取出文件中的一些数据, 看似容易的操作,却历经了一下午的波折: 首先我使用的是最常见的 xlrd import requests import xlrd url = 'https://example.com/file.xls' # 替换为你的xls文件的URL # 发起请求获取xls文件的二进制数据 response = requests.get(url) content = response.content # 使用xlrd库加载二进制数据 workbook = xlrd.open_workbook(file_contents=content) # 获取第一个sheet sheet = workbook.sheet_by_index(0) # 遍历行和列获取单元格内容 for row in range(sheet.nrows): for col in range(sheet.ncols): cell_value = sheet.cell_value(row, col) print(cell_value) 以上代码运行后,凡是公式计算得到的数值全为0.0 此方法失败 于是尝试了第二种方法:使用openpyxl库 但缺点是它无法直接解析二进制的http响应数据,需要先保存为xlsx文件 import openpyxl # 发送请求并获取响应 response = requests.get(url) # 将响应内容写入本地文件 with open('example.xls', 'wb') as f: f.write(response.content) # 打开Excel文件 workbook = openpyxl.

使用Mac电脑反编译微信小程序 (无需移动端模拟器)

以往反编译小程序源码都是要从移动端获取,现在pc端(mac和win)都支持了小程序,从pc端获取显然是更方便的,由于本人使用的的macbook,本篇文章将会讨论如何从mac端获取小程序源码。 🕹 运行条件 mac版微信版本: > 3.8.0node: 18.12.0node版本wxappUnpacker 注:mac版微信版本大于3.8.0的(无需解*密,可以找到对应的小程序的 .wxapkg 包直接反编译) 🗃 获取小程序 找到默认存放小程序的路径,把__APP__.wxapkg文件复制出来,到一个特定的文件夹 /Users/用户名/Library(资源库)/Containers/com.tencent.xinWeChat(微信)/Data/.wxapplet/packages/wxfe3b722fc1e03b(类似乱码)/7(类似数字)/__APP__.wxapkg 🛠 安装工具 下载wxappUnpacker,编辑器内打开目录,安装依赖包 npm install esprima npm install css-tree npm install cssbeautify npm install vm2 npm install uglify-es npm install js-beautify 🚀 运行命令 在当前的命令行输入 node wuWxapkg.js [-d] <files...> //files 就是你想要反编译的文件名 比如 :有一个 APP.wxapkg 这个文件 node wuWxapkg.js /Volumes/LHZ/infinitePossibilities/mi/__APP__.wxapkg 回车运行命令 同层级文件夹下会出现对应名字的文件夹 ,文件夹里就是小游戏或小程序的源码。 更多文章__> >> 码砖猿的技术博客

傅里叶级数系数的完整详细算法

傅里叶级数系数的完整详细算法 一、三角函数相关公式和定积分 在分析傅里叶级数之前,一定要先熟悉三角函数的相关公式,以及三角函数的积分。 1、两角和公式: sin(α+β) = sin(α) * cos(β) + cos(α) * sin(β) sin(α-β) = sin(α) * cos(β) - cos(α) * sin(β) cos(α+β) = cos(α) * cos(β) - sin(α) * sin(β) cos(α-β) = cos(α) * cos(β) + sin(α) * sin(β) 2、积化和差公式: sin(α) * cos(β) = [sin(α+β) + sin(α-β)] / 2 cos(α) * sin(β) = [sin(α+β) - sin(α-β)] / 2 cos(α) * cos(β) = [cos(α+β) + cos(α-β)] / 2 sin(α) * sin(β) = [cos(α-β) - cos(α+β)] / 2

Java 21:最新特性、性能改进和语言发展

文章目录 模式匹配和模式变量新的记录类型生产者接口本地类型推断的扩展新的垃圾收集器动态CDS档案G1垃圾收集器的增强Java语言的持续发展性能改进和JEPJava 21的部署和使用Java 21的生态系统结语 🎉欢迎来到Java学习路线专栏~Java 21:最新特性、性能改进和语言发展 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客🎈该系列文章专栏:Java学习路线📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏📜 欢迎大家关注! ❤️ Java,作为一门长盛不衰的编程语言,每个新版本都备受开发者期待。Java 21是继Java 17之后的一次主要发布,带来了一系列新特性、性能改进以及语言发展。本文将深入探讨Java 21的亮点,帮助您了解这一版本的重要更新。 模式匹配和模式变量 模式匹配是Java 21的一个重要特性,它允许您更轻松地操作和检查数据。通过使用instanceof关键字结合模式变量,您可以快速识别对象的类型并进行操作。这提高了代码的可读性和可维护性。 if (obj instanceof String str) { System.out.println("字符串长度:" + str.length()); } 新的记录类型 Java 21引入了记录类型,这是一种更简洁的类定义方式,专门用于不可变数据。记录类型的声明非常紧凑,它自动生成equals()、hashCode()和toString()等方法,减少了样板代码。 record Person(String name, int age) { } 生产者接口 生产者接口是一个新的函数式接口,它表示一个只会产生值但不会消费值的操作。这有助于更清晰地表达代码的意图。 @FunctionalInterface interface Producer<T> { T produce(); } 本地类型推断的扩展 Java 21扩展了本地类型推断的能力,允许您在更多情况下使用var关键字。这有助于减少冗余的类型注解,提高代码的可读性。 var numbers = List.of(1, 2, 3, 4, 5); 新的垃圾收集器 Java 21引入了名为ZGC(Z Garbage Collector)的新垃圾收集器,旨在改善大内存应用程序的性能和延迟。ZGC采用并发方式进行垃圾回收,从而减少了停顿时间。 动态CDS档案 CDS(Class Data Sharing)是一种提高Java启动时间的技术。Java 21引入了动态CDS档案,允许在应用程序运行时创建和更新CDS档案,这对于需要频繁启动的应用程序尤其有用。