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

如何用GPT开发一个基于 GPT 的应用?

原文发自博客:GPT应用开发小记

如何开发一个基于 GPT 的应用?答案就在问题里,那就是用 GPT 来开发基于 GPT 的应用。本文以笔者的一个开源项目 myGPTReader 为例,分享我是如何基于 GPT 去开发这个系统的,这个系统的功能见这篇文章:我的 AI 阅读助手

为了探索 GPT 辅助开发的可能性,我在项目开发之初就记录了与 GPT 对话的过程,将近一个月的开发日志都记录在 GPT Driven Development Record 这个文档里。

从最终的结果看,我的角色从开发变成了产品设计与测试,整个项目的代码我个人亲自编写的可能不到 10%,从后端服务到前端页面,甚至连 Logo 都是 AI 来完成的,Logo 的设计过程我也记录到了 Midjourney Driven Design Record 这个文件了。

更有意思的是,这个项目因缺少部署文档,使一些不了解技术但又想独立部署该项目的网友犯难,但最终他们与 GPT 反向去研究这个项目,竟然也能成功部署。

总之这是一个 GPT 含量极高的项目,无论是开发过程还是最终的功能。

AI 背景知识

GPT 是一个基于 GPT-3.5/4 的开放 API,它的背后技术是基于 Transformer 网络的大型无监督语言模型,通过预训练和微调两个阶段的训练,能够学习自然语言的规则和结构,并且在各种下游任务上表现出色。从更大范围来说,GPT 是属于自然语言处理 (Natural Language Processing) 领域的一个大语言模型(Large Language Model)。

生成式预训练模型(GPT: Generative Pre-trained Transformer)

我: 你能给我说说GPT背后的技术吗?比如大语言模型,还有训练过程。
GPT: 当谈到GPT时,背后的技术通常是指OpenAI GPT(Generative Pre-trained Transformer)模型,这是一种使用Transformer网络架构进行预训练的大型语言模型。GPT是基于无监督学习技术构建的,该技术可以在没有标签的大量数据集上进行训练,以自动发现数据中的模式和结构。
GPT模型的训练过程分为两个阶段:预训练和微调。
预训练阶段使用一个大规模的无标签语料库,例如维基百科、新闻文章、小说等,通过预测给定文本序列中下一个单词的任务,对模型进行训练。这个任务被称为“语言模型”,因为模型被训练为理解自然语言中的上下文和语法规则,以便能够预测下一个单词。在这个过程中,GPT模型可以学习到自然语言的规则和结构,形成了通用的语言表示。
在预训练完成后,微调阶段使用少量的标记数据对模型进行微调,以适应特定的下游任务,例如问答、文本分类、生成对话等。微调过程通过反向传播梯度更新模型的权重,以最小化特定任务的损失函数。微调的过程可以增强模型对特定任务的理解能力,并且可以使模型在下游任务上表现更好。
总的来说,GPT模型的背后技术是基于Transformer网络的大型无监督语言模型,通过预训练和微调两个阶段的训练,能够学习自然语言的规则和结构,并且在各种下游任务上表现出色。

大语言模型(LLM: Large Language Model)

我: 大语言模型、GPT、Transformer三者的关系是?
GPT: 大语言模型、GPT、Transformer三者是密切相关的概念,它们在自然语言处理和深度学习领域有着广泛的应用。具体关系如下:
Transformer是一种基于注意力机制的神经网络架构,最初是为了机器翻译任务而设计的。它由编码器和解码器组成,可以对序列数据进行建模,适用于在输入和输出之间存在长距离依赖关系的任务。
大语言模型是建立在Transformer架构基础上的语言模型,常见的大型预训练模型包括GPT、BERT等。大语言模型通过在大规模文本语料库上进行自监督预训练,能够捕捉到语言中的复杂结构与信息,从而在下游任务中取得很好的效果。
GPT (Generative Pre-trained Transformer) 是一个基于Transformer架构和自监督预训练的句子级别自动生成模型,通常用于生成式任务,比如文本自动生成、摘要生成、对话系统等。
因此,可以说,大语言模型是应用了Transformer架构并使用自监督预训练技术的模型,而GPT则是基于大语言模型构建的具体任务模型,两者都是Transformer架构在语言建模方面的应用。

一个奇怪的问题是,基于Transformer这种设计之初是为了机器翻译任务的模型,为什么在编写代码方面也表现良好?

我:为什么基于Transformer的GPT模型不仅可以用在翻译上,也能在在编写代码的任务上表现良好?
GPT: 1. 基于文本流的代码生成能力:现代软件开发通常包括对源代码的有效管理。生成源代码的技术需要考虑各种软件开发标准、API接口以及所有相关部分间相互影响的复杂性。GPT模型强大的自然语言理解能力使其能够有效生成高质量的源代码。
2.上下文理解:代码通常是一个非常上下文相关的环境,特别是在功能相似但又具有微妙区别的不同代码块之间。 GPT模型能够根据上下文生成出更加匹配语法、且更加可读的代码。
3.词向量表达:源代码的语法是有结构的,并且它通常被认为属于DSL的元素构成的单词阵列。它的语法规则清晰,也容易编写非常明确的语义。GPT通过预训练的方式将从输入数据中获得的词向量检索作为核心基础,使用语言模型来编写高效、正确的代码。
因此,GPT模型在生成高质量源代码的任务方面也有很好的应用价值。

这里提到的一个关键技术:词向量检索,这在后面也会有所提及。

词向量检索

我: 什么是词向量检索?
GPT: 词向量检索,也称为向量空间模型检索,是一种文本检索方法,其基本思想是将输入的文本转换为向量形式,并使用数学模型对文本相似度进行计算,从而寻找匹配的文本集合。
通常情况下,词向量检索分为以下几个步骤:
文本预处理:对原始文本进行分词、去除停用词等操作,以得到可供后续处理的单词列表。
向量表示:利用某种算法(如 word2vec)将每个单词映射为一个向量。这些向量通常具有较高的维数,并包含了单词的语义信息。
查询处理:将用户输入的查询文本转换为向量表示,与预处理过的文本向量进行相似度计算,以得到最相关的文本。
结果呈现:将计算出来的相似度得分排列,呈现给用户最相关的文本列表。
词向量检索在自然语言处理领域被广泛应用,常用于搜索引擎、推荐系统等场景。它能够通过对文本的向量化处理,更准确地衡量文本之间的相似度,达到更精确和快速的文本检索效果。

Prompt

我: 什么是AI中的Prompt?
GPT: 在AI中,Prompt指的是提供给模型的文本或指令,可以用来初始化和引导模型生成一系列类似自然语言的输出。Prompt通常由一个或多个片段组成,其中每个片段都是一种语言形式或主题,用于定义AI模型需要生成的文本的内容和样式。
Prompt可以以多种方式使用,例如:
作为AI机器人对用户的响应:当一个用户与AI交互时,机器人会根据用户输入的信息和之前的上下文来生成回答。Prompt可以用作机器人生成响应的指南,确保AI产生的回复与预期的主题和风格相一致。
作为生成AI初始文本的输入:某些AI工具(如GPT-3)可以根据给定的Prompt生成文本。这可以用于快速创建文章、电子邮件、Twitter帖子等等,并且可以扩展已有的草稿或以不同的风格和语言复述相同的消息。
总之,Prompt在AI中是非常重要和有用的,因为它们可以让模型更加定向地生成特定类型或主题的字符串或句子。

我: 为什么一定要用Prompt?Prompt未来还会存在吗?
GPT: 在AI中,“Prompt”是指提供给模型的输入文本,它是用来启发模型生成输出的。Prompt通常是一些简短的话语或问题,向模型传递一些先验知识或上下文信息,以帮助模型更好地理解和执行任务。
在许多自然语言处理(NLP)应用中,prompt对于准确预测输出至关重要。例如,一个对话系统可能需要给出一个明确的提示,让用户提供足够的上下文信息来回答问题,或者一个分类器需要在prompt下面添加一个标签,以便识别正确的类别。 虽然在AI中,Prompt广泛使用并且非常有用,但未来是否会一直使用它们取决于技术的演进。可能会出现新的方式帮助模型更好的理解上下文信息,消除Prompt所起到的作用,但是现阶段仍然有很多领域弥补不了这个作用,因此Prompt仍然是一种不可替代的输入形式。

Embedding

我: openAI的embedding是什么?
GPT: OpenAI的Embedding是一种将词语或句子转换成密集向量的技术。这些向量可以用于自然语言处理任务,如文本分类,情感分析和机器翻译等。
在OpenAI的Embedding中,每个单词或句子都会被映射到一个向量空间中的点。与传统的one-hot编码不同,Embedding可捕获词语之间的相似性和关系,并使得机器学习算法能够更好地理解自然语言表达的含义。
例如,在情感分析中,通过使用Embedding,我们可以将具有相似情感倾向的单词或短语映射到相似的向量空间中的位置。这样,我们就可以使用这些向量来训练机器学习模型,以帮助它们更准确地预测文本的情感。

基于 GPT 的应用类型

由于 GPT 的功能实在过于强大,导致应用端能做的功能并不多,目前已知的一些应用类型有以下几种。

套壳 GPT 应用

这类应用主要是对接 GPT 的 API 或调用 web 端的接口,自身并没有太多的功能,只是将 GPT 的功能进行了封装。而这类应用又细分为两种:

  • 工具类应用。需要用户提供自己的 OpenAI API Key 来使用,如很多APP或浏览器插件。
  • 代理服务类。不需要用户提供自己的 OpenAI API Key,而是通过代理服务来使用 GPT 的 API。

增强类 GPT 应用

由于 GPT 本身不是联网的,无法获取最新的数据,且输入的 Token 也是有最大限制的,因此这类应用主要是为 GPT 突破这些限制而设计的,比如通过爬虫获取最新的数据,然后通过 GPT 来生成新的文本或总结这些文字,或者通过 Embedding 的方式将大量的文本向量化,然后把文本节点与向量化的组合存储到特殊设计的索引中,然后把用户输入的 Token 向量化后,通过词向量检索寻找相关的上下文,然后把这些上下文与用户输入的 Prompt 一同提交给 GPT 来获取答案。

要应用自己去处理这么多繁琐的工作显然是没有必要的,因为已经有非常好的开源项目去实现这些功能了,代表就是 jerryjliu/llama_index,使用这个库可以很容易实现这些增强功能,比如给 GPT 提供外部数据源,从而可以让它帮助我们分析网页、文档、新闻等等任务。

一些相关的应用:

  • myGPTReader:myGPTReader 是 Slack 上的一个机器人,可以阅读和总结任何网页、文档(包括电子书)甚至来自 YouTube 的视频,它还可以通过语音与用户交流。
  • chatpdf:通过给 GPT 提供 PDF 文档,然后可以针对此文档进行问答,或者总结文档内容。类似的开源实现有:guangzhengli/ChatFilesarc53/DocsGPT
  • Copilot Hub:和上面的项目类似,不过多了能公开分享根据自己录入数据打造的问答机器人,比如能以乔布斯口吻回答问题的机器人。
  • binary-husky/GPT_academic:科研工作专用GPT拓展,特别优化学术Paper润色体验。

这些应用大多以 Embedding 为核心,当然也都存在共同的问题:因为 Embedding 是根据相似度去搜索相关文本的,如果问题非常宽泛,那么很难有效搜索到相关的问题,因此使用这些应用需要用户提供尽可能相关的问题,这样才能得到比较好的答案,也就是说需要用户提供好的 Prompt。

当然 openAI 官方也提供了插件市场,这些功能也可以在插件中实现,但目前插件仅能在网页版使用,而且插件现在并没有完全开放,只有一些特定的用户才能使用。

Prompt 类应用

Prompt 是 GPT 技术的过渡产物,也许在未来我们都不需要 Prompt 了,但目前这也算 GPT 衍生出来的一类应用。比如收集好的 Prompt 然后分享给其他人使用,这类应用代表有:**OpenPrompt及很多awesome GPT prompts**类的开源Markdown项目。

myGPTReader 应用架构

既然这是一篇GPT的文章,分析应用架构的工作自然也是用GPT来完成,我们直接把整个项目的代码导入给GPT,然后让它来分析应用架构。

导入过程很简单,直接使用这个**GithubRepositoryReaderDemo.ipynb里的代码即可,导入我们要分析的项目代码,在这里就是madawei2699/myGPTReader**这个Repo。

导入后,让我们开始施展魔法吧!

Prompt: Give me the handle_mentions (in app/server.py) function call flow, output Sequence diagrams using mermaid and markdown and comment the function name.
sequenceDiagramparticipant Appparticipant Slackparticipant ClientApp->>Slack: Send Event Subscription RequestSlack->>App: Send Verification RequestApp->>Slack: Send Verification ResponseSlack->>App: Send EventApp->>Client: Call handle_mentions()Client->>App: Process EventApp->>Slack: Send Response
Prompt: Give me the bot_process (in app/server.py) function call flow, output Sequence diagrams using mermaid and markdown and comment the function name.
sequenceDiagramparticipant Userparticipant Appparticipant BotProcessparticipant FetchWebPostparticipant GPTUser ->> App: RequestApp ->> BotProcess: bot_process()BotProcess ->> FetchWebPost: get_urls()FetchWebPost ->> BotProcess: urlsBotProcess ->> FetchWebPost: scrape_website()FetchWebPost ->> BotProcess: contentBotProcess ->> GPT: gpt_response()GPT ->> BotProcess: responseBotProcess ->> App: responseApp ->> User: Response
Prompt: Give me the get_answer_from_llama_file (in app.gpt module) function call flow, output Sequence diagrams using mermaid and markdown.
sequenceDiagramparticipant Userparticipant Appparticipant GPTSimpleVectorIndexparticipant LLMPredictorparticipant SimpleDirectoryReaderparticipant SynthesizerUser->>App: Get Answer from llama fileApp->>GPTSimpleVectorIndex: Get index from file cacheGPTSimpleVectorIndex->>App: Return indexApp->>SimpleDirectoryReader: Load data from fileSimpleDirectoryReader->>App: Return documentsApp->>GPTSimpleVectorIndex: Create index from documentsGPTSimpleVectorIndex->>App: Return indexApp->>GPTSimpleVectorIndex: Query indexGPTSimpleVectorIndex->>LLMPredictor: Get answerLLMPredictor->>App: Return answerApp->>Synthesizer: Speak SSMLSynthesizer->>App: Return audioApp->>User: Return answer

你没看错,这些时序图是GPT根据我们的Prompt而绘制的。由于这并不是一个复杂的系统,所以时序图足以给我们展示整个应用的架构及模块之间的关系。就算是一个大项目,我们依旧可以通过这种方式来分析应用架构。

除了让它绘制图形来分析,我们还可以针对单个模块或函数让它以自然语言来解释代码的含义,比如:

Prompt: Explain get_answer_from_llama_file (in app.gpt module) function step by step.
GPT: get_answer_from_llama_file is a function that takes in a list of messages and a file path as parameters and returns an answer, the total number of tokens used by the LLM model, and the total number of tokens used by the embedding model.Step 1: The function starts by formatting the dialog messages into a single string.
Step 2: It then gets the language code from the last message in the list of messages.
Step 3: It then gets the index name from the file path.
Step 4: It then checks if the index is already cached in the file cache directory. If it is, it loads the index from the cache. If not, it creates a new index from the documents in the file.
Step 5: It then gets the prompt template for the language code.
Step 6: It then uses the index and the LLM predictor to query the dialog messages with the prompt template.
Step 7: It then uses the synthesizer to speak the SSML asynchronously and save the audio to a file.
Step 8: It then gets the total number of tokens used by the LLM model and the total number of tokens used by the

myGPTReader 实现过程

实现的过程我从第一个函数的实现开始到现在为止,已经将所有的Prompt及GPT的答案以日志的形式记录到了 GPT Driven Development Record 这个文档里,这里就不再赘述了。

我在实现的过程保持着傻瓜式的开发方式,也就是GPT给我什么代码我就测试什么代码,遇到错误直接发给它让它来修复,在日志中也可以看出这种开发方式的特点。

不仅后端代码是这样实现的,连前端页面也是这么开发出来的。对于前端网页的开发,一个难点就是需要写好的Prompt告诉GPT我想要的页面效果,我甚至把我要实现的一个页面的竞品网站的源码发给它,让它给我用我确定的技术栈实现。我的前端技术栈是React + TailwindCSS,最开始我让它把工程创建的步骤告诉我,我根据它的流程去把工程框架搭建出来。之后就是告诉它我要创建的页面类型,页面有几个部分,每个部分的内容是什么,它就会自动帮我创建好页面,然后我再根据自己的需求去修改页面的内容。

前端的Prompt交互过程见 GPT Driven Development Record # 2023-03-28

最终的效果是这样的:myreader.io

最后的思考

经过一个月与GPT结对编程,还实现了一个完整的应用,我对GPT的感受是:传统编程这个行业最终会消失,甚至比我们想象中的要更快。或许未来还会有一小部分人作为非物质文化遗产的传承者,古法手工编写代码。

当然不只编程,很多行业都会受到GPT这类技术的冲击,目前还很难评估它的边界在哪里,但是我相信它的边界会越来越大,最终会覆盖到我们现在所能想象的范围之外。

如果真是这样的未来,我们现在能够做什么才能保证自己的经验不会快速贬值甚至无效?这是一个值得思考的问题。

相关文章:

如何用GPT开发一个基于 GPT 的应用?

原文发自博客:GPT应用开发小记 如何开发一个基于 GPT 的应用?答案就在问题里,那就是用 GPT 来开发基于 GPT 的应用。本文以笔者的一个开源项目 myGPTReader 为例,分享我是如何基于 GPT 去开发这个系统的,这个系统的功能…...

大数据生态体系中各组件的区别面试题(更新)

一、MapReduce与Spark有什么区别? 1、处理方式: MapReduce基于磁盘处理数据,将中间结果保存到磁盘中,减少了内存占用,计算速度慢。 基于内存处理数据,将计算的中间结果保存到内存中,计算速度快。2、资源申请方式&…...

数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)

实验要求: 离散信号及离散系统的MATLAB编程实现(2学时) 要求: 编写一程序,输出一定长度(点数),具有一定幅度、(角)频率和初始相位的实(或复&…...

数字图像处理专栏——introduction

Introduction: 数字图像处理技术是我在深入学习研究的方向之一。本科期间跟随导师做基于AndroidOpenCV的病虫识别app,因此入门,我也对该部分知识有进一步探索的欲望,但更多的是因该脚踏实地一步步记录,一步步成长。 本篇从数字图…...

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…...

Apipost接口测试工具的原理及应用详解(一)

本系列文章简介&#xff1a; 随着软件行业的快速发展&#xff0c;API&#xff08;应用程序编程接口&#xff09;作为不同软件组件之间通信的桥梁&#xff0c;其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此&#xff0c;对API进行严格的测试成为…...

一款轻量级的通信协议---MQTT (内含Linux环境搭建)

目录 MQTT MQTT的关键特点&#xff1a; 应用场景 Linux环境搭建&#xff1a; 1. 安装mosquitto 2. Linux下客户端进行通信 3. PC端和Linux下进行通信 安装MQTT. fx 4. MQTT.fx的使用 1. 点击连接 ​编辑 2. 连接成功 3. 订阅主题或者给别的主题发送消息 遇到的问…...

记netty本地客户端断线无法自动重连 or 远程客户端自动重连本地服务端

记netty客户端断线无法自动完成重连 or 服务端无法让客户端断线重连 引场景案例bootstrap 引 netty既能开发socket服务端&#xff0c;也可开发客户端&#xff0c;实现连接的全双工通信。在客户端断线重启后&#xff0c;可自动重连服务端。 场景 本地代码既有socket客户端也有…...

UNIAPP_在js文件中使用i18n国际化

导入 import { initVueI18n } from dcloudio/uni-i18n import messages from /locale/index const { t } initVueI18n(messages) 使用 t(config.request.i001)....

第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)

大家好&#xff0c;我是网创有方&#xff0c;接下来教大家如何理解Spring的两个特性IOC和AOP。本节有点难&#xff0c;大家多理解。 IOC&#xff08;控制反转&#xff09; 定义与核心思想&#xff1a; IOC&#xff0c;全称Inversion of Control&#xff0c;即控制反转。 其核…...

【51单片机】串口通信(发送与接收)

文章目录 前言串口通信简介串口通信的原理串口通信的作用串口编程的一些概念仿真图如何使用串口初始化串口串口模式波特率配置 发送与接收发送接收 示例代码 总结 前言 在嵌入式系统的开发中&#xff0c;串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用…...

【AI研发工具包】sklearn教程(Scikit-learn)

目录 1. 引言 2. 安装sklearn 3. 导入sklearn 4. 加载数据集 5. 数据预处理 6. 训练模型 7. 评估模型 8. 保存和加载模型 9. 自定义数据 10. 深入sklearn 11. 注意事项 1. 引言 Scikit-learn&#xff08;简称sklearn&#xff09;是Python中一个非常流行的机器学习库…...

数位DP——AcWing 1081. 度的数量

数位DP 定义 数位DP是一种动态规划技巧&#xff0c;特别适用于处理与数字的位操作相关的问题&#xff0c;如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑&#xff0c;从而简化问题复杂度&#xff0c;实现高效求解。 数位DP的核心思想是将原…...

2024下半年必追国漫片单,谁将问鼎巅峰?

随着2024年上半年的落幕&#xff0c;国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP&#xff0c;从玄幻到科幻&#xff0c;每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作&#xff0c;大胆预测&#xff0c;谁将成为这场神仙打架…...

信息发布小程序h5 uniapp thinkphp

纯手工uniapp thinkphp 全开源打造 信息发布小程序 一、概述 信息发布小程序是一种基于微信平台的小程序应用&#xff0c;旨在为用户提供便捷的信息发布与展示服务。用户可以通过该小程序快速发布各类信息&#xff0c;如招聘、寻物、公告等&#xff0c;同时也可以浏览和搜索…...

Windows定时任务执行脚本

场景&#xff1a;由于网络波动原因导致云数据库没连接上&#xff0c;从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了&#xff0c;网络恢复后 数据库链接正常&#xff0c;但是该引擎服务还是中止状态。 解决方案&#xff1a;在Windows中新建一个定时任务&#…...

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系&#xff0c;优维重磅推出了统一开放平台。这款由优维自主设计与研发&#xff0c;集数据开发、能力开放、能力集成、客制化为一体的统一开放平台&#xff0c;具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块&#xff0c;可为…...

ChatGPT新纪元:揭秘GPT-4o的多模态能力

GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨&#xff0c;OpenAI向全球宣布了AI发展的新篇章——GPT-4o&#xff0c;每次OpenAI发布重大更新时&#xff0c;尽管令人兴奋&#xff0c;但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…...

泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift

NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …...

(四)SvelteKit教程:调用外部 API 获取数据

&#xff08;四&#xff09;SvelteKit教程&#xff1a;调用 API 我们先按照如下的方式来构建api服务&#xff1a; step 1:npm i json-serverstep 2:在根目录下新建 db.json 文件&#xff0c;内部写入如下内容&#xff1a;{"users": [{"id": 1,"name…...

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样&#xff0c;我将整理一下排序的题型以及解题方法给你们 由于时间还很多&#xff0c;我就慢慢总结吧&#xff0c;一天一章的样子&#xff0c;明天总结串、后天…...

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数&#xff1a; 函数二 函数三 主函数 运行结果 src&#xff1a; model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征&#xff0c;实现高准确度的身份识别。…...

『SD』AI绘画,不会写提示词怎么办?

提示词 有没有想过&#xff0c;为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫&#xff0c;但猫与猫之间还是有差距的。 如果你的提示词只是“cat”&#xff0c;那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词&#xff…...

搭建大型分布式服务(四十二)SpringBoot 无代码侵入实现多Kafka数据源整合插件发布

系列文章目录 文章目录 系列文章目录前言MultiKafkaStarter [V2.2]一、功能特性二、快速开始&#xff08;生产端&#xff09;三、快速开始&#xff08;消费端&#xff09;四、其它特性五、变更记录六、参考文章 前言 在分布式服务的架构演进中&#xff0c;消息队列作为核心组件…...

Python 学习路线及技巧

一、学习路线 1. 基础阶段 ● 学习 Python 的语法基础&#xff0c;如变量、数据类型、运算符、控制流等。 ● 掌握常用的 Python 标准库&#xff0c;如 os、sys、re、datetime 等。 ● 通过编写简单的程序来巩固基础&#xff0c;如计算器、字符串处理等。 2. 进阶阶段 ● 深入…...

计算机网络知识整理笔记

目录 1.对网络协议的分层&#xff1f; 2.TCP/IP和UDP之间的区别&#xff1f; 3.建立TCP连接的三次握手&#xff1f; 4.断开TCP连接的四次挥手&#xff1f; 5.TCP协议如何保证可靠性传输&#xff1f; 6.什么是TCP的拥塞控制&#xff1f; 7.什么是HTTP协议&#xff1f; 8…...

练习 String翻转 注册处理 字符串统计

p493 将字符串中指定部分进行翻转 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…...

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a &#xff1a;显示所有用户的进程 -u &#xff1a;显示用户名和启动时间 -x &#xff1a;显示 没有控制终端的进程 -e &#xff1a;显示所有进程&#xff0c;包括没有控制终端的进程 -l &#xff1a;长格式显示 -w &#xff1a;宽…...

java:aocache 0.4.0 缓存控制机制

aoocache发布第一个版本0.1.0时&#xff0c;没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时&#xff0c;同事提到这个需求&#xff0c;他希望能够有方法主动去清理指定方法的缓存&#xff1a; 他的数据是由其他服务启动时提供的&#xff0c;他的方法…...

试析C#编程语言的特点及功能

行步骤&#xff0c;而不必创建新方法。其声明方法是在实例化委托基础上&#xff0c;加一对花括号以代表执行范围&#xff0c;再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…...

Textual Learning2 -- 使用时的小问题

1、出现的问题&#xff1a; 在vscode里面直接运行函数会显示报错&#xff1a; 我尝试在vscode中含textual库的环境下运行&#xff0c;但仍然报错 2、解决方案&#xff1a; 在命令行中运行&#xff1a; 首先按winR&#xff0c;输入cmd打开命令行 或在已经安装的conda环境&a…...

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…...

C++中的虚函数表结构框架

一.虚函数表介绍 Virtual Table虚函数表是实现多态的 每个有虚函数的类的实现&#xff0c;都有个指向虚函数的指针表&#xff08;不管是父类还是子类&#xff09; 指向虚表的指针是作为数据成员存在实例对象中 当调用虚函数时&#xff0c;就去查找对象的虚表中指向整顿派生类函…...

【ES】--Elasticsearch的高亮模式

目录 一、高亮策略1、Fast Vector Highlighter(快速向量高亮器)2、Posting Highlighter(帖子高亮器)3、Unified Highlighter(统一高亮器)4、Plain Highlighter(普通高亮器)5、总结二、高亮参数三、高亮案例解析1、words_one配置解析2、words_two配置解析3、words_three…...

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集

1&#xff0c;问题&#xff1a;本来是好的&#xff0c;突然编译运行报错&#xff0c;说是确少包&#xff0c; 解决方案&#xff1a;重启以后好了 2&#xff0c;有完美的马鞍波&#xff0c;为什么不能够转动呢&#xff1f; 原因是我这里模型的问题&#xff0c;我计算出来的是占…...

落石滑坡监测报警系统:创新保障高速公路安全

​ ​​在现代交通建设中&#xff0c;高速公路的安全性和稳定性至关重要。特别是易发生落石区域&#xff0c;如何有效预防和应对落石滑坡带来的事故成为了一项关键性挑战。为此&#xff0c;落石滑坡监测报警系统应运而生&#xff0c;它通过先进的技术手段&#xff0c;为高速…...

Linux开发讲课20--- QSPI

SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口&#xff0c;一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;为 PCB 的布局上节省空间…...

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版&#xff0c;新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访…...

vuepress使用简介及个人博客搭建

目录 一、介绍二、环境准备三、安装运行vuepress四、目录结构五、配置文件六、导航栏配置七、导航栏logo八、浏览器图标九、侧边栏配置十、添加 Git 仓库和编辑链接十一、部署到GitHub十二、搭建成功 一、介绍 VuePress 是 Vuejs 官方提供的一个是Vue驱动的静态网站生成器&…...

c#文件读写

1.1读取文件 方法说明​File.ReadAllText(FilePath);​读取指定路径的文件​File.ReadAllText(FilePath, Encoding);​通过指定编码格式来读取指定文件​File.ReadAllBytes();​读取二进制文件&#xff0c;并把内容读取到一个字节数组​File.ReadAllLines();​以行的形式读取文…...

WIFI 企业级认证手段 EAP-TLS介绍

EAP-TLS&#xff08;EAP-Transport Layer Security&#xff09;被认为是WLAN网络里最安全的认证方法&#xff0c;因此被企业广泛采用。本文会针对EAP-TLS的基本原理进行介绍。 在介绍原理之前&#xff0c;先介绍下WLAN网络里认证加密手段涉及到的一些基本概念。 1 802.1x IEE…...

【网络架构】keepalive

目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…...

【Dison夏令营 Day 03】使用 Python 创建我们自己的 21 点游戏

21 点(英文&#xff1a;Blackjack)是一种在赌场玩的纸牌游戏。这种游戏的参与者不是互相竞争&#xff0c;而是与赌场指定的庄家竞争。在本文中&#xff0c;我们将从头开始创建可在终端上玩的玩家与庄家之间的二十一点游戏。 二十一点规则 我们将为从未玩过二十一点的读者提供…...

Workbench密码登录登录失败

Workbench密码登录登录失败操作系统禁用了密码登录方式&#xff0c;会导致使用了正确的用户名和密码仍无法登录 sudo vim /etc/ssh/sshd_config 输入O进入编辑 改完后重启 systemctl restart sshd.service 登录报错 有试了几遍登上了 可能是改完还要等一会儿...

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收&#xff0c;标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台&#xff0c;用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…...

009、MongoDB的分片策略

目录 MongoDB的分片策略:范围分片vs哈希分片 1. 范围分片(Range Sharding) 1.1 工作原理 1.2 优点 1.3 缺点 1.4 研究支持 2. 哈希分片(Hash Sharding) 2.1 工作原理 2.2 优点 2.3 缺点 2.4 研究支持 3. 选择合适的分片策略 4. 实践案例 4.1 电子商务平台 4.2 社…...

go~缓存设计配合singleFlight

一个缓存设计&#xff0c;配合go的singleFlight 最开始的设计如下 添加分布式缓存 上线后分布式缓存上涨的流量并不等于下游下降的流量&#xff0c;而是下游下降的流量 * 2&#xff5e;3 究其原因&#xff0c;就是采用了go的singleFlight&#xff0c;假定请求缓存时长10ms&a…...

多线程引发的安全问题

前言&#x1f440;~ 上一章我们介绍了线程的一些基础知识点&#xff0c;例如创建线程、查看线程、中断线程、等待线程等知识点&#xff0c;今天我们讲解多线程下引发的安全问题 线程安全&#xff08;最复杂也最重要&#xff09; 产生线程安全问题的原因 锁&#xff08;重要…...

在晋升受阻或遭受不公待遇申诉时,这样写是不是好一些?

在晋升受阻或遭受不公待遇申诉时&#xff0c;这样写是不是好一些&#xff1f; 在职场中&#xff0c;晋升受阻或遭受不公待遇是员工可能面临的问题之一。面对这样的情况&#xff0c;如何撰写一份有效的申诉材料&#xff0c;以维护自己的合法权益&#xff0c;就显得尤为重要。#李…...

LeetCode 2710.移除字符串中的尾随零:模拟

【LetMeFly】2710.移除字符串中的尾随零&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/ 给你一个用字符串表示的正整数 num &#xff0c;请你以字符串形式返回不含尾随零的整数 num 。 示例 1&#xff1a; 输…...

uniapp入门

一、新建项目 进入到主界面&#xff0c;左上角点击新建——1.项目 输入项目名称&#xff0c;Vue版本选择3 二、创建页面 选中左侧文件目录里的pages文件夹&#xff0c;右键&#xff0c;选择新建页面 1输入名称 2选中“创建同名目录” 3选择模板&…...

在线JSON可视化工具--改进

先前发布了JSON格式化可视化在线工具&#xff0c;提供图形化界面显示结构关系功能&#xff0c;并提供JSON快速格式化、JSON压缩、快捷复制、下载导出、对存在语法错误的地方能明确显示&#xff0c;而且还支持全屏&#xff0c;极大扩大视野区域。 在线JSON格式化可视化工具 但…...

海豚调度调优 | 如何解决任务被禁用出现的Bug

&#x1f4a1; 本系列文章是 DolphinScheduler 由浅入深的教程&#xff0c;涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。 祝开卷有益。 本系列教程基于 DolphinScheduler 2.0.5 做的优化。&#xff…...

Python成为全球热门语言的“秘密”

1994年&#xff0c;美国举办了一次 针对Python的workshop 从全美国选出来的程序员 聚在一起讨论着这个“秘密武器” Python是如何从一个开发者的“副业” 变成现在全球热门语言呢&#xff1f; 今天我们一起探讨一下Python简史 往下翻看&#xff0c;解锁答案&#x1f447…...

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性&#xff0c;但是真正存储数据的还是主节点和从节点&#xff0c;并且每个节点都存储了全量的数据&#xff0c;此时&#xff0c;如果数据量过大&#xff0c;接近或超出了 主节点 / 从节点机器的物理内存&#xff0c;就…...

【语言模型】Xinference的部署过程

一、引言 Xinference&#xff0c;也称为Xorbits Inference&#xff0c;是一个性能强大且功能全面的分布式推理框架&#xff0c;专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家&#xff0c;都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…...

售价53.86万元新款奔驰E350eL插混版正式上市

6月1日,在 2024 粤港澳车展上,新款梅赛德斯-奔驰 E 350e L 插混版正式上市,售价 53.86 万元。外观方面,新车整体依旧延续燃油版车型的样子,标志性的“花生”大灯,大尺寸格栅以及立标等元素均得以保留。尺寸方面,新车也是保持一直,长宽高分别为 5092/1880/1489mm,轴距为…...

全新MINIJCW将于纽博格林24小时耐力赛首次亮相

作为宝马集团旗下的经典英伦品牌,MINI极富运动天赋,自诞生起便与赛车运动有着不解之缘。如今,在即将到来的纽博格林24小时耐力赛中,MINI将首次亮相全新一代MINI JOHN COOPER WORKS,并身披定制涂装,诠释MINI品牌悠久的赛车历史,及对卡丁车般驾驶乐趣的极致追求。纽博格林…...

python生成词云图

生成词云图的话需要先对数据进行分词处理 , 分词方法点击查看 import pandas as pd from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt# 假设您已经按照之前的步骤处理了数据&#xff0c;并且处理后的数据保存在comments_proc…...

Python OCR 文字识别使用模型:读光-文字识别-行识别模型-中英-通用领域

介绍 什么是OCR&#xff1f; OCR是“Optical Character Recognition”的缩写&#xff0c;中文意为“光学字符识别”。它是一种技术&#xff0c;可以识别和转换打印在纸张或图像上的文字和字符为机器可处理的格式&#xff0c;如计算机文本文件。通过使用OCR技术&#xff0c;可…...

MFC CList<CRect, CRect> m_listRect;的用法

CList<CRect, CRect&> 是 MFC&#xff08;Microsoft Foundation Classes&#xff09;中定义的一个双向链表模板类&#xff0c;用于存储 CRect 对象。在使用 CList 时&#xff0c;你可以执行多种操作&#xff0c;比如添加、移除、查找和遍历元素。以下是一些常见的用法…...

使用python绘制一个五颜六色的爱心

使用python绘制一个五颜六色的爱心 介绍效果代码 介绍 使用numpy与matplotlib绘制一个七彩爱心&#xff01; 效果 代码 import numpy as np import matplotlib.pyplot as plt# Heart shape function def heart_shape(t):x 16 * np.sin(t)**3y 13 * np.cos(t) - 5 * np.cos…...