Java - 人工智能;SpringAI
一、人工智能(Artificial Intelligence,缩写为AI)
人工智能(Artificial Intelligence,缩写为AI)是一门新的技术科学,旨在开发、研究用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统,它结合了数学、计算机科学、心理学等多学科的理论,通过让计算机模拟人类的思考和行为过程,实现人机交互,提高计算机的智能水平,以更好地服务于人类社会
A system is ability to correctly interpret external data, to learn from such data, and to use those learnings to achieve specific goals and tasks through flexible adaptation.
系统正确解释外部数据的能力,从这些数据中学习的能力,以及通过灵活的适应利用这些学习来实现特定目标和任务的能力
(一)人工智能AI历史背景可追溯至工业革命
1、第一次工业革命(18世纪60年代~19世纪中期,大约是1760年到1860年): 也称为蒸汽时代,发源于英格兰中部地区,是资本主义工业化的早期阶段; 蒸汽机的发明及运用成为了这个时代的标志,因此历史学家称这个时代为“蒸汽时代”; 蒸汽时代的显著特征是机械化生产和大规模生产,推动了生产力的飞跃,带来了极大的经济增长; 这一时期也出现了第一批大型企业和跨国公司
2、第二次工业革命(19世纪下半叶~20世纪初,大约1851年到1910年): 也称电气时代,电力、化学、石油等工业得以大发展; 这一时期的标志是从机械化向自动化的转变,由于电力的应用和化学工业的发展,生产效率得到了进一步提高,加速了工业化的进程
3、第三次工业革命(20世纪后半期,大约1945年到2000年): 也称为信息时代,以原子能、电子计算机、空间技术和生物工程的发明和应用为主要标志,涉及信息技术、新能源技术、新材料技术、生物技术、空间技术和海洋技术等诸多领域的一场信息控制技术革命; 这一时期的特点是信息技术和数字技术的广泛应用,推动了社会生产力的又一次飞跃
4、第四次工业革命(21世纪初至今,大约2000年开始直到现在的这段时间): 也称工业4.0时代或智能化时代,这个时代以互联网产业化,工业智能化,工业一体化为代表,以人工智能,清洁能源,无人控制技术,量子信息技术,虚拟现实以及生物技术为主的全新技术革命; 这一阶段主要依赖于互联网、物联网、大数据、人工智能等新兴技术的深度融合和创新应用,旨在实现更高效、更智能、更可持续的生产和生活方式
(二)人工智能AI发展趋势
1、起步发展期:1943年—20世纪60年代 (1943 - 1969年) 1943年,提出神经元的数学模型,这是现代人工智能学科的奠基石之一; 1950年,艾伦·麦席森·图灵(Alan Mathison Turing)提出“图灵测试”(测试机器是否能表现出与人无法区分的智能),让机器产生智能这一想法开始进入人们的视野; 1956年,正式使用了人工智能(artificial intelligence,AI)这一术语
2、反思发展期:20世纪70年代(1970 - 1979年) 计算力及理论等的匮乏使得不切实际目标的落空,人工智能的发展走入低谷
3、应用发展期:20世纪80年代 (1980 - 1989年) 人工智能走入应用发展的新阶段,专家系统模拟人类专家的知识和经验解决特定领域的问题,实现了人工智能从理论研究走向实际应用、从一般推理策略探讨转向运用专门知识的重大突破,而机器学习(特别是神经网络)探索不同的学习策略和各种学习方法,在大量的实际应用中也开始慢慢复苏
4、平稳发展期:20世纪90年代—2010年(1990 - 2010年) 由于互联网技术的迅速发展,加速了人工智能的创新研究,促使人工智能技术进一步走向实用化,人工智能相关的各个领域都取得长足进步
5、蓬勃发展期:
2011年至今 随着大数据、云计算、互联网、物联网等信息技术的发展,泛在感知数据和图形处理器等计算平台推动以深度神经网络为代表的人工智能技术飞速发展,大幅跨越了科学与应用之间的技术鸿沟,诸如图像分类、语音识别、知识问答、人机对弈、无人驾驶等人工智能技术实现了重大的技术突破,迎来爆发式增长的新高潮;
2015年,马斯克等人共同创建OpenAI,它是一个非营利的研究组织,使命是确保通用人工智能 (即一种高度自主且在大多数具有经济价值的工作上超越人类的系统)将为全人类带来福祉,其发布热门产品的如:OpenAI Gym,GPT等;
2016年,AlphaGo与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜;
2022年11月30日,OpenAI研发的一款聊天机器人程序ChatGPT对外发布,引发AI的大爆发;
2023年3月15日,OpenAI发布ChatGPT 4.0,引爆了AI;
2023年3月16日,百度发布文心一言,文心一言(ERNIE Bot)是基于文心大模型技术推出的生成式对话产品,文心大模型是百度自主研发的产业级知识增强大模型,文心一言能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感; 国内还有:科大讯飞认知智能大模型、阿里巴巴通义千问、华为盘古大模型、360智脑、京东言犀大模型等等
(三)大模型
大模型,是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。其设计目的在于提高模型的表达能力和预测性能,以应对更加复杂的任务和数据; 大模型,简单来说,就是一个特别聪明、特别能干的“大脑”,这个“大脑”由很多个小小的“神经元”组成,每个“神经元”都能处理一部分信息,当这些“神经元”一起工作时,大模型就能理解并回答各种问题,或者完成各种复杂的任务。就像你有一个超级聪明的助手,它能帮你写邮件、写PPT、回答你的各种问题等等,它就像是一个上知天文,下知地理,无所不知的人;
要训练一个大模型不容易,需要给它提供很多学习材料,就像我们小时候读书学习一样。而且为了让这个“大脑”更聪明,还需要很多高级的计算机设备来帮助它学习;
训练大模型:
1、高性能的CPU和GPU,多核心和高主频的CPU以及支持CUDA的GPU加速训练过程;
2、大容量存储设备,训练大模型需要存储大量的数据集、模型参数和中间结果;
3、高速网络连接,通过网络连接将训练任务分配到多个计算节点上;
4、深度学习框架,如TensorFlow、PyTorch等,这些框架提供了构建和训练模型的工具和库;
5、分布式训练框架,为了加速大模型的训练,可以使用分布式训练框架,如Horovod、Ray等;
6、编程语言和工具,Python是深度学习领域最常用的编程语言,还有(如Git)来管理代码和版本迭代;
7、训练大模型非常耗电,高性能计算机和GPU进行长时间的工作,需要消耗大量的电力
二、SpringAI
官网:Spring | Home
Spring AI
Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design and promote using POJOs as the building blocks of an application to the AI domain.
Spring AI是一个AI工程领域的应用程序框架; 它的目标是将Spring生态系统的设计原则应用于人工智能领域,比如Spring生态系统的可移植性和模块化设计,并推广使用POJO来构建人工智能领域应用程序;
Spring AI并不是要构建一个自己的AI大模型,而是让你对接各种AI大模型
(一)SpringAI特点
Spring AI提供的API支持跨人工智能提供商的 聊天,文本到图像,和嵌入模型等,同时支持同步和流API选项
1、Chat Models 聊天模型:
OpenAI
Azure Open AI
Amazon Bedrock
Cohere's Command
AI21 Labs' Jurassic-2
Meta's LLama 2
Amazon's Titan
Google Vertex AI Palm
Google Gemini
HuggingFace - access thousands of models, including those from Meta such as Llama2
Ollama - run AI models on your local machine
MistralAI
2、Text-to-image Models 文本到图像模型:
OpenAI with DALL-E
StabilityAI
3、Transcription (audio to text) Models 转录(音频到文本)模型 OpenAI
4、Embedding Models 嵌入模型
OpenAI
Azure OpenAI
Ollama
ONNX
PostgresML
Bedrock Cohere
Bedrock Titan
Google VertexAI
Mistal AI
5、Vector Store API提供了跨不同提供商的可移植性,其特点是提供了一种新颖的类似SQL的元数据过滤API,以保持可移植性; 矢量数据库:
Azure Vector Search
Chroma
Milvus
Neo4j
PostgreSQL/PGVector
PineCone
Redis
Weaviate
Qdrant
6、用于AI模型和矢量存储的Spring Boot自动配置和启动器;(xxxx-spring-ai-starter)
7、函数调用,您可以声明java.util.Function的OpenAI模型的函数实现,用于其提示响应。如果在应用程序上下文中注册为@Bean,则可以直接将这些函数作为对象提供,或者引用它们的名称。这一功能最大限度地减少了不必要的代码,并使人工智能模型能够要求更多信息来完成其响应; 支持的模型有:
OpenAI
Azure OpenAI
VertexAI
Mistral AI
8、用于数据工程的ETL框架 ETL框架的核心功能是使用Vector Store促进文档向模型提供者的传输。ETL框架基于Java函数式编程概念,可帮助您将多个步骤链接在一起; 支持阅读各种格式的文档,包括PDF、JSON等; 该框架允许数据操作以满足您的需求。这通常包括拆分文档以遵守上下文窗口限制,并使用关键字增强它们以提高文档检索效率; 最后,处理后的文档存储在矢量数据库中,以便将来检索
9、广泛的参考文档、示例应用程序和研讨会/课程材料; 未来的版本将在此基础上提供对其他人工智能模型的访问,例如,谷歌刚刚发布的Gemini多模式模态,一个评估人工智能应用程序有效性的框架,更方便的API,以及帮助解决“查询/汇总我的文档”用例的功能。有关即将发布的版本的详细信息,请查看GitHub
(二)SpringAI-Chat 属性(Chat Properties)
重试属性
属性前缀为spring.ai.retry,用于配置 OpenAI 聊天客户端的重试机制
属性 | 描述 | 默认值 |
spring.ai.retry.max-attempts | 最大重试次数。 | 10 |
spring.ai.retry.backoff.initial-interval | 指数退避策略的初始睡眠持续时间。 | 2 sec. |
spring.ai.retry.backoff.multiplier | 退避策略间隔倍数。 | 5 |
spring.ai.retry.backoff.max-interval | 最大退避持续时间。 | 3 min. |
spring.ai.retry.on-client-errors | 如果为 false,则引发 NonTransientAiException,并且对4xx客户端错误代码不尝试重试 | false |
spring.ai.retry.exclude-on-http-codes | 不触发重试的 HTTP 状态代码列表(例如,抛出 NonTransientAiException)。 | empty |
连接属性(Connection Properties)
属性前缀为 spring.ai.openai
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.openai.base-url | 要连接到的 openai URL | api.openai.com |
spring.ai.openai.api-key | 访问 api 的 key,在 OpenAI 的秘钥管理里获取 | - |
配置属性
属性前缀为spring.ai.openai.chat,可用于配置 OpenAI 的聊天客户端属性
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.openai.chat.enabled | 启用 OpenAI 聊天客户端。 | true |
spring.ai.openai.chat.base-url | 可选项,配置的情况下会在聊天的场景下覆盖 spring.ai.openai.base-url | - |
spring.ai.openai.chat.api-key | 可选项,配置的情况下会在聊天的场景下覆盖 spring.ai.openai.api-key | - |
spring.ai.openai.chat.options.model | 要使用的 OpenAI 聊天模型 | gpt-3.5-turbo (gpt-3.5-turbo gpt-4 和 gpt-4-32k 都是使用最新的版本) |
spring.ai.openai.chat.options.temperature | 要使用的模型温度,用于控制生成数据的创造力。较高的值将使输出更具随机性,而较低的值将使结果更具针对性和确定性。不建议对一个请求同时配置 temperature 和 top_p,因为这两个参数同时生效将导致结果难以预测。 | 0.8 |
spring.ai.openai.chat.options.frequencyPenalty | 介于 -2.0 和 2.0 之间的数字。到目前为止,正值会根据在文本中的出现频率来惩罚新令牌,从而降低模型重复同一行的可能性。 | 0.0f |
spring.ai.openai.chat.options.logitBias | 修改特殊令牌在对话中出现的可能性。 | - |
spring.ai.openai.chat.options.maxTokens | 聊天对话返回的最大令牌数。输入令牌数和生成令牌数的总长度受模型上下文长度的限制。 | - |
spring.ai.openai.chat.options.n | 为每条输入消息生成多少个对话选项。请注意,将根据所有选项生成的令牌总数付费。将 n 保留为 1 以最大程度地降低成本。 | 1 |
spring.ai.openai.chat.options.presencePenalty | 介于 -2.0 和 2.0 之间的数字。正值会根据到目前为止的新令牌是否出现在文本中来惩罚它们,从而增加模型谈论新主题的可能性。 | - |
spring.ai.openai.chat.options.responseFormat | 一个对象,指定模型必须输出的格式。设置为 { “type”: “json_object” } 启用 JSON 模式,该模式可保证模型生成的消息是有效的 JSON。 | - |
spring.ai.openai.chat.options.seed | 此功能处于测试阶段。如果指定,我们的系统将尽最大努力确定性采样,以便具有相同seed和参数的重复请求返回相同的结果。 | - |
spring.ai.openai.chat.options.stop | 最多 4 个序列(sequences),API 将停止生成更多令牌。 | - |
spring.ai.openai.chat.options.topP | 温度采样的替代方法,称为核采样,其中模型考虑概率质量排序top_p的令牌的结果。因此,0.1 表示仅考虑包含前 10% 概率质量的令牌。我们通常建议改变这个或温度,但不要同时改变两者。 | - |
spring.ai.openai.chat.options.tools | 模型可以调用的工具列表。目前,仅支持将函数作为工具。这个参数可以把以JSON格式输入的函数列表提供给模型 | - |
spring.ai.openai.chat.options.toolChoice | 控制模型调用哪个(如果有)函数。none 表示模型不会调用函数,而是生成消息。auto 表示模型可以在生成消息或调用函数之间进行选择。通过 {“type: ”function“, ”function“: {”name“: ”my_function“}} 指定特定函数会强制模型调用该函数。当不存在任何函数时,none 是默认值。如果存在函数,则 auto 是默认值。 | - |
spring.ai.openai.chat.options.user | 代表您的终端用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 | - |
spring.ai.openai.chat.options.functions | 函数列表,由其名称标识,启用时单个提示词请求中会调用函数。具有这些名称的函数必须存在于 functionCallbacks 注册表中 |
(三)开发SpringAI
1、访问OpenAI权限和API Key
(1)本机电脑要可以访问OpenAI网站 https://openai.com/;(科学上网)
(2)要有OpenAI的API Key;(注册账号或者某宝上购买)
例:API-Key:sk-8sfKHJ03KJG3SDFfsdf283JSwsf23lkjkHDND32fmGJHF
在某宝上搜索 open ai api key,找到API key,购买之前请咨询清楚是直连还是转发地址?以及是否开发要用到的API key
2、开发SpringBoot和IDEA版本要求
Spring AI的发布时间是2024年3月1日
Spring AI是一个人工智能工程的应用框架,旨在为Java开发者提供一种更简洁的方式与AI交互,减轻在Java业务中接入LLM模型应用的学习成本。目前,Spring AI已经上架到Spring Initializr,开发者可以在https://start.spring.io/上使用并构建相关应用
使用SpringAI至少需要SpringBoot 3.2版本
SpringAI是Spring框架的一个新项目,旨在简化Java开发人员将AI功能集成到应用程序中的过程
使用SpringAI,需要确保开发环境满足以下2个要求:
1、JDK版本:JDK 17(含)以上
2、SpringBoot版本:3.2以上
3、IDEA2024版
此外,SpringAI支持接入多种AI服务,如OpenAI、Ollama、Azure OpenAI、Huggingface等,可以实现聊天、embedding、图片生成、语音转文字、向量数据库、function calling、prompt模板、outputparser、RAG等功能
1、创建SpringAI项目
选择Spring Boot 至少3.2版本;且勾选AI中的OpenAI选项(2024之前的老版本IDEA应该没有这个选项)
2、添加依赖;加入spring-ai-openai-spring-boot-starter依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.demo</groupId><artifactId>spring-ai</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai</name><description>spring-ai</description><properties><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- SpringAI当前版本1.0.0-M3;快照版1.0.0-SNAPSHOT --><spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--spring ai的starter依赖,启动依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!--相当于是继承一个父项目:spring-ai-bom父项目--><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build><!--配置本项目的仓库:因为maven中心仓库还没有更新spring ai的jar包--><repositories><repository><!-- SpringAI快照版 --><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><!-- 当前最新M3版 -->
<!-- <id>spring-milestones</id>-->
<!-- <name>Spring Milestones</name>-->
<!-- <url>https://repo.spring.io/milestone</url>--><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
ai依赖:
<!-- ai依赖 -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
继承父项目
<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
配置项目依赖下载的AI仓库:
<!--配置本项目的仓库:因为maven中心仓库还没有更新spring ai的jar包--><repositories><repository><!-- SpringAI快照版 --><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><!-- 当前最新M3版 -->
<!-- <id>spring-milestones</id>-->
<!-- <name>Spring Milestones</name>-->
<!-- <url>https://repo.spring.io/milestone</url>--><snapshots><enabled>false</enabled></snapshots></repository></repositories>
Maven中心仓库搜不到这个依赖
3、配置yml文件
spring:application:name: spring-aiai:openai:api-key: sk-8sfKHJ03KJG3SDFfsdf283JSwsf23lkjkHDND32fmGJHF # 换成你自己的api-keybase-url: https://api.openai.com #如果是购买的转发地址,这边换成转发的OpenAI地址
4、编写测试类测试
(1)注入OpenAiChatModel
@Resource private OpenAiChatModel openAiChatModel;
注:刚开始发布的版本,这里是 OpenAiChatClient
(2)调用call方法 openAiChatModel.call(message);
package com.demo.springai1chat.controller;import jakarta.annotation.Resource;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @description:* @author: zm*/
@RestController
@RequestMapping("/ai")
public class ChatController {/*** spring-ai自动装配的,可以直接注入使用*/@Resourceprivate OpenAiChatModel chatModel;/*** OpenAI接口调用* @param message 提问信息* @return OpenAI相应信息*/@GetMapping("/chat")public String aiChat(@RequestParam("msg")String message) {return chatModel.call(message);}
}
自动装配(Auto-configuration )
添加了 spring-ai-openai-spring-boot-starter 依赖;Spring AI 为 OpenAI Chat Client 提供了 Spring Boot 自动装配。
OpenAiAutoConfiguration配置类中自动注入了,我们只需要直接注入调用即可
刚开始发布的SpringAI版本中,叫OpenAiChatClient
而该依赖中针对各个大模型提供了一个对应的自动配置类,如OpenAiAutoConfiguration,在该自动配置类中定义了以下几个Bean:
OpenAiChatModel/OpenAiChatClient(老版本):文字聊天客户端
OpenAiEmbeddingModel/OpenAiEmbeddingClient(老版本):文本向量化客户端
OpenAiImageModel/OpenAiImageClient(老版本):文生图客户端
OpenAiAudioTranscriptionModel/OpenAiAudioTranscriptionClient(老版本):语音转文字客户端
这些Bean在创建时就会构造底层连接OpenAi的客户端OpenAiApi对象,其中会用到以下几种配置:
OpenAiConnectionProperties:连接配置
OpenAiChatProperties:聊天配置
OpenAiEmbeddingProperties:向量化配置
OpenAiImageProperties:文生图配置
OpenAiAudioTranscriptionProperties:语音转文字配置
连接OpenAi的地址就apiKey就在OpenAiConnectionProperties中,比如application.properties的配置为:
spring.ai.openai.base-url=http://localhost:3000
spring.ai.openai.api-key=sk-xxxxx
5、启动调用访问 localhost:8080/ci/chat?msg=为我写一首歌http://localhost:8080/ai/chat?msg=为我写一首歌
相关文章:
Java - 人工智能;SpringAI
一、人工智能(Artificial Intelligence,缩写为AI) 人工智能(Artificial Intelligence,缩写为AI)是一门新的技术科学,旨在开发、研究用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统…...
MFC开发,给对话框添加定时器
定时器简介 定时器的主要功能是设置以毫秒为单位的定时周期,然后进行连续定时或单次定时。 定时器是用于设置有规律的去触发某种动作所用的,这种场景也是软件中经常可以用到的,比如用户设置规定时间推送提示的功能,又比如程序定…...
LED灯珠:技术、类型与选择指南
目录 1. LED灯珠的类型 2. LED灯珠技术 3. 如何选择LED灯珠 4. 相关案例和使用情况 5. 结论 LED(Light Emitting Diode)灯珠是一种半导体发光器件,通过电流在固体半导体中流动时,其工作原理是电子与空穴的结合,通过…...
C语言二刷
const #include<stdio.h> int main() {const int amount 100;int price 0;scanf("%d", &price);int change amount - price;printf("找您%d元\n", change);return 0; } 浮点数类型 输入输出float(单精度)%f%f %l…...
C++模块化程序设计举例
1、模块1 在main.cpp里输入下面的程序: #include "stdio.h" //使能printf()函数 #include <stdlib.h> //使能exit(); #include "Static_Variable.h" //argc 是指命令行输入参数的个数; //argv[]存储了所有的命令行参数; //argv[0]通常…...
毕业设计选题:基于Python的招聘信息爬取和可视化平台
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 采集的数据列表 招聘数据大屏 摘要 本系统通过对网络爬虫的分析,研究智…...
机器人学习仿真框架
机器人学习仿真框架一般包含(自底向上): 3D仿真物理引擎:对现实世界的模拟仿真机器人仿真平台:用于搭建工作场景,以实现agent与环境的交互学习学习算法框架集合:不同的策略学习算法的实现算法测…...
力扣每日一题打卡 3180. 执行操作可获得的最大总奖励 I
给你一个整数数组 rewardValues,长度为 n,代表奖励的值。 最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 : 从区间 [0, n - 1] 中选择一个 未标记 的下标 i。如果 rewardValues[i] 大于…...
NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备视频报警功能详解
在科技日新月异的今天,视频监控系统作为现代社会的“第三只眼”,正以前所未有的方式深刻影响着我们的生活与社会结构。从公共场所的安全监控到个人生活的记录分享,视频监控系统以其独特的视角和功能,为社会带来了诸多好处…...
springboot073车辆管理系统设计与实现(论文+源码)_kaic.zip
车辆管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足,创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统…...
2024.10月22日- MySql的 补充知识点
1、什么是数据库事务? 数据库事务: 是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 2、Mysql事务的四大特性是什么? …...
Java中的对象——生命周期详解
1. 对象的创建 1.1 使用 new 关键字 执行过程:当使用 new 关键字创建对象时,JVM 会为新对象在堆内存中分配一块空间,并调用对应的构造器来初始化对象。 示例代码: MyClass obj new MyClass(); 内存变化:JVM 在堆…...
vue文件报Cannot find module ‘webpack/lib/RuleSet‘错误处理
检查 Node.js 版本:这个问题可能与 Node.js 的版本有关。你可以尝试将 Node.js 的版本切换到 12 或更低。如果没有安装 nvm(Node Version Manager),可以通过以下命令安装: curl -o- https://raw.githubusercontent.co…...
第 6 章 机器人系统仿真
对于ROS新手而言,可能会有疑问:学习机器人操作系统,实体机器人是必须的吗?答案是否定的,机器人一般价格不菲,为了降低机器人学习、调试成本,在ROS中提供了系统的机器人仿真实现,通过仿真&#x…...
爬虫——scrapy的基本使用
一,scrapy的概念和流程 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 框架就是把之前简单的操作抽象成一套系统,这样我们在使用框架的时候,它会自动的帮我们完成很…...
聚类分析算法——K-means聚类 详解
K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…...
【Sublime Text】设置中文 最新最详细
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【Sublime Text】设置中文 最新最详细 开…...
C++学习路线(二十四)
静态成员函数 类的静态方法: 1.可以直接通过类来访问【更常用】,也可以通过对象(实例)来访问。 2.在类的静态方法中,不能访问普通数据成员和普通成员函数(对象的数据成员和成员函数) 1)静态数据成员 可以直接访问“静态数据成员”对象的成…...
MySQL-存储过程/函数/触发器
文章目录 什么是存储过程存储过程的优缺点存储过程的基本使用存储过程的创建存储过程的调用存储过程的删除存储过程的查看delimiter命令 MySQL中的变量系统变量用户变量局部变量参数 if语句case语句while循环repeat循环loop循环游标cursor捕获异常并处理存储函数触发器触发器概…...
前端页面样式没效果?没应用上?
当我们在开发项目时会有很多个页面、相同的标签,也有可能有相同的class值。样式设置的多了,分不清哪个是当前应用的。我们可以使用网页的开发者工具。 在我们开发的网页中按下f12或: 在打开的工具中我们可以使用元素选择器,单击我…...
Mac apache配置cgi环境-修改httpd.conf文件、启动apache
Mac自带Apache,配置CGI,分以下几步: 找到httpd.conf。打开终端,编辑以下几处,去掉#或补充内容。在这个路径下写一个测试文件.py格式的,/Library/WebServer/CGI-Executables,注意第一行的python…...
多厂商的实现不同vlan间通信
Cisco单臂路由 Cisco路由器配置 -交换机配置 -pc配置 华三的单臂路由 -路由器配置 -华三的接口默认是打开的 -pc配置及ping的结果 -注意不要忘记配置默认网关 Cisco-SVI -交换机的配置 -创建vlan -> 设置物理接口对应的Acess或Trunk -> 进入vlan接口,打开接…...
sh与bash的区别
sh与bash的区别 结论:对于一般开发者,没有区别;对于要使脚本兼容较老系统,或者兼容其他shell(如ksh,dash),那么意义可能很重大,要确保自己代码没有bash扩展的特性。 区…...
D48【python 接口自动化学习】- python基础之类
day48 练习:开发自动咖啡(上) 学习日期:20241025 学习目标:类 -- 62 小试牛刀:如何开发自动咖啡机?(上) 学习笔记: 案例解析 定义类 定义属性和方法 clas…...
PostgreSQL(WINDOWS)下载、安装、简单使用
下载 PostgreSQL: Downloads PostgreSQL: Windows installers EDB: Open-Source, Enterprise Postgres Database Management 安装 注意密码要方便自己使用,不能忘记。 打开pgAdmin,输入密码 新建数据库 打开命令工具 新建表...
Git的初次使用
一、下载git 找淘宝的镜像去下载比较快 点击这里 二、配置git 1.打开git命令框 2.设置配置 git config --global user.name "你的用名"git config --global user.email "你的邮箱qq.com" 3.制作本地仓库 新建一个文件夹即可,然后在文件夹…...
rocketmq服务的docker启动和配置
rocketmq的默认启动参数占用的内存实在是太大了,小于8G的电脑无法启动,docker中的开发环境又不可能用这么大,通用的该法是改sh文件 修改文件如下 runbroker.sh 默认8G JAVA_OPT"${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn…...
BLE和经典蓝牙相比,有什么优缺点
蓝牙低功耗(Bluetooth Low Energy,简称 BLE)和经典蓝牙(Bluetooth Classic,即 BR/EDR,Basic Rate/Enhanced Data Rate)是蓝牙技术的两种主要模式。两者都有各自的优缺点,具体如下&am…...
ECharts图表图例知识点小结
ECharts 图表图例简述 一、知识点 1. 作用: - 用于标识图表中的不同系列,帮助用户理解图表所展示的数据内容。 2. 位置: - 可以通过配置项设置图例的位置,如 top 、 bottom 、 left 、 right 等。 3. 显示状态控制:…...
正规做兼职的网站/免费的推文制作网站
数组的实例上都有一个叫做 forEach 的方法,这个方法定义在 Array.prototype 上,所以数组的所有实例都可以使用 forEach 这个方法。 forEach 方法的语法结构如下: 1 var ary [1, 2, 3, 4, 5, 5, 6, 8, 9]; 2 ary.forEach(function(index,…...
建设基础化学网站的经验/今日军事新闻头条
选自GoogleAIblog 作者:Django Stars本文转自机器之心(nearhuman2014)原文链接:https://djangostars.com/blog/python-ide/前言写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了。它们不仅能使你的…...
网站怎么做支付/百度收录网址提交
一、Visual Studio安装与插件 可以到官网下载 VS Code 并安装,推荐配置的插件有“ C/C ” ,“ Code Runner ”和中文简体扩展包,安装了 Extensions “C/C” 后就可以使用 Ctrl Shift P 打开命令面板输入“ C/C :编辑配置(UI…...
空包网站怎么做/网络的推广
环境背景:1.开发Android IDE2.服务端代码(IDE MyEclipse6.5)3.下面这个方法是Webservices调用数据库获取数据List集合4.数据库数据如下Test(dsad) 方法是调用的关键代码public void getmain(){List dsadTkdao.hggetjtzt("历史", "2014-05-07 00:00:0…...
元做网站/银川网页设计公司
Python对我来说是一种相对较新的语言。单元测试和依赖注入是我已经做了一段时间的事情,所以我从C#的角度对它很熟悉。最近,我写了一段Python代码:import requests # my dependency: http://docs.python-requests.org/en/latest/class someCla…...
wordpress评论美化/如何做好精准营销
windows10下升级node.js和降级Nodejs_cheerileeyoki的博客-CSDN博客_win10 升级nodejs...