【DataWhale学习笔记-蝴蝶书共读】大语言模型背后

news2024/9/22 11:40:53

从图灵测试到ChatGPT

1950年,艾伦•图灵(Alan Turing)发表论文《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”(即图灵测试)的概念,用来检测机器智能水平。图灵测试的核心思想是,如果一个人(代号C)使用测试对象皆理解的语言去询问两个他不能看见的对象任意一串问题,其中一个是正常思维的人(代号B),另一个是机器(代号A)。如果经过若干询问以后,C不能得出实质的区别来分辨A与B的不同,则此机器A通过图灵测试。

1956年,人工智能正式成为了一个科学上的概念,而后涌现了很多新的研究目标与方向。虽然,图灵测试只是一个启发性的思想实验,而非可以具体执行的判断方法,但他却通过这个假设,阐明了“智能”判断的模糊性与主观性。从此图灵测试成为了 自然语言处理(Natural Language Processing,NLP) 任务的一个重要评测标准。图灵测试提供了一个客观和直观的方式来评估机器是否具有智能,即通过让机器与人类进行对话来判断其智能水平。这种方式可以避免对智能本质的哲学争论,也可以避免对智能具体表现形式的技术细节。因此,很多自然语言处理任务都可以用图灵测试来进行评测,例如对话系统、问答系统、文本生成等。

自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理包括很多不同的任务,如分词、词性标注、句法分析、语义分析、信息抽取、文本分类、文本摘要、机器翻译、问答系统、对话系统等。

图灵测试与自然语言处理任务有着密切而复杂的关系,可以从以下两个方面来概括:

  • 一方面,图灵测试是自然语言处理任务的一个重要驱动力。图灵测试提出了一个具有挑战性和吸引力的目标,即让机器能够用自然语言与人类进行流畅、智能、多样化的对话。为了达到这个目标,自然语言处理领域不断地发展和创新各种技术和方法,以提高机器对自然语言的理解和生成能力。例如,为了让机器能够回答用户提出的问题,就需要研究问答系统这一自然语言处理任务;为了让机器能够根据用户提供的信息生成合适的文本,就需要研究文本生成这一自然语言处理任务;为了让机器能够适应不同领域和场景的对话,就需要研究领域适应和情境感知这一自然语言处理任务等等。
  • 另一方面,图灵测试是自然语言处理任务的一个重要目标。图灵测试提出了一个具有前瞻性和理想性的愿景,即让机器能够达到与人类相同或者超越人类的智能水平。这个愿景激发了很多自然语言处理领域的研究者和开发者,使他们不断地探索和创新,以期实现真正意义上的自然语言理解和生成。例如,为了让机器能够理解用户提出的问题,就需要研究语义分析、知识表示、逻辑推理;为了让机器能够生成符合用户需求的文本,就需要研究文本规划、文本风格、文本评价;为了让机器能够与用户建立信任和情感的联系,就需要研究情感分析、情感生成、情感对话等等。

自然语言处理与人工智能发展历史有着密切而复杂的关系。它们相互促进、相互影响、相互依存、相互目标。自然语言处理在人工智能发展历史上有很多里程碑式的成果,比如:

  • 1954年,IBM实现了世界上第一个机器翻译系统,将俄语翻译成英语。
  • 1966年,约瑟夫·韦伊岑鲍姆开发了ELIZA,一种模拟心理治疗师的对话系统。
  • 1972年,特里·温诺格拉德开发了SHRDLU,一种能够理解和生成自然语言的程序,用于控制一个虚拟的机器人在一个虚拟的世界中进行操作。
  • 1988年,杰拉尔德·萨斯曼和詹姆斯·马丁创建了Text Retrieval Conference(TREC),一个旨在推动信息检索和自然语言处理技术发展的国际评测活动。
  • 2011年,苹果公司推出了Siri,一种基于自然语言处理技术的智能个人助理。同年,IBM的Watson战胜了《危险边缘》节目的冠军选手,展示了自然语言处理技术在问答领域的强大能力。
  • 2013年,谷歌公司推出了Word2Vec,一种基于神经网络的词向量表示方法,开启了自然语言处理领域的深度学习时代。
  • 2016年,Facebook发布了FastText的文本分类算法,它可以在处理大规模文本分类任务时取得很好的效果。
  • 2017年,Google发布了一篇很可能是AI历史上最重要的一篇论文《Attention is all you need》,在论文中作者提出了Transformer——一个具有多头注意力机制的模型,在文本特征提取方面取得了优异的效果。
  • 2018年,Google发布了BERT预训练模型,它在多项NLP任务上取得了最佳效果,引领自然语言处理进入了预训练时代。
  • 2020年,OpenAI发布的GPT-3模型有多达1750亿的参数,可以在提供少量样本或不提供样本的前提下完成大多数NLP任务。

以上这些能力成果依赖于自然语言处理技术(NLP)的不断发展。NLP领域涉及到的技术非常广泛,但其中最基础的就是——词嵌入(也叫词向量,Word Embedding),以及与此相关的文本表征技术。它本质上是找到一种编码方式,实现从自然语言中到数学空间的映射。

我们为什么需要词向量呢?当我对计算机说出“我爱你。”的时候,计算机无法真正理解我说了什么。要想让计算机理解我说的话,必须要对“我爱你。”这句话进行编码(Encoding)——比如:我们可以让数字“1”代表“我”,数字“2”代表“爱”,数字“3”代表“你”,数字“0”代表“句号”。经过编码之后,计算机才能理解这句话然后再进行计算和处理。词向量就是以单词为为单位进行编码,那么如何进行编码才是最优的方式呢?从1940年代开始,人们就希望寻找解决这个问题的模型和方法,下面选择最经典的词袋模型和神经网络概率模型,做一些简单一点的介绍。

  • 词袋模型(Bag of Words,BOW):从名字来看,词袋模型就像是一个大袋子,把所有的词都装进来。文本中的每个单词都看作是独立的,忽略单词之间的顺序和语法,只关注单词出现的次数。在词袋模型中,每个文本可以表示为一个向量,向量的每个维度对应一个单词,维度的值表示该单词在文本中出现的次数。
  • 神经概率语言模型(Neural Probabilistic Language Model,NPLM):它可以通过学习大量的文本数据来预测下一个单词或字符的概率。其中,最早的神经网络语言模型是由Yoshua Bengio等人于2003年发表的《A Neural Probabilistic Language Model》提出的,它在得到语言模型的同时也产生了副产品词向量。

早期的词向量都是静态的,一旦训练完就固定不变了。随着NLP技术的不断发展,词向量技术逐渐演变成基于语言模型的动态表征。语言模型不仅可以表征词,还可以表征任意文本。

时间来到了2022年,终于轮到我们的主角要隆重登场了。2022年11月30日OpenAI发布了一款真正的智能聊天机器人ChatGPT,一经发布立刻就点燃了AI圈。仅仅五天就达到了100万用户。OpenAI不得不紧急扩容,用户发现ChatGPT不仅仅只会插科打诨和人类聊天,它还能写论文,讲笑话,编段子,生成演讲稿,写请假条,模仿导师写推荐信,甚至帮你写代码,写营销策划案等等。拥有了ChatGPT,就像你身边配备了一个功能强大的秘书。到了2023年1月,大量用户开始涌入,仅仅两个月的时间ChatGPT成为了史上最快达到1亿用户的应用。

无论是ChatGPT,还是其他后来的模仿者,它们其实都是语言模型,准确来说——大语言模型。使用时,无论是调用API还是开源项目,总有一些参数可能需要调整。对大部分内行人士来说应该都不成问题,但对外行就有点玄乎了。基于此,本文将简要介绍ChatGPT相关技术基本原理,行文将站在外行人角度,尝试将内容尽量平民化。虽然不能深入细节,但知晓原理足以很好使用了。

LM

LM,Language Model,语言模型,简单来说就是利用自然语言构建的模型。这个自然语言就是人常说的话,或者记录的文字等等,只要是人生产出来的文字,都可以看做语言。你现在看到的文字也是。模型就是根据特定输入,通过一定计算输出相应结果的一个东西,可以把它当做人的大脑,输入就是你的耳、眼听或看到的文字,输出就是嘴巴说出来或手写出来的文字。总结一下,语言模型就是利用自然语言文本构建的,根据输入的文字,输出相应文字的模型。

在深度学习的初期,最著名的语言模型是RNN,Recurrent Neural Network,中文叫循环神经网络。RNN 模型与其他神经网络不同的地方在于,它的节点之间存在循环连接,这使得它能够记住之前的信息,并将它们应用于当前的输入。这种记忆能力使得 RNN 在处理时间序列数据时特别有用,例如预测未来的时间序列数据、自然语言处理等。通俗地说,RNN 就像一个具有记忆功能的人,可以根据之前的经验和知识对当前的情况做出反应,并预测未来的发展趋势。如下图所示:

来自:https://colah.github.io/posts/2015-08-Understanding-LSTMs/

右边是左边的展开,A就是参数,X是输入,h就是输出,由于自然语言是Token by Token的,所以就组成了一个序列。那这个参数怎么学习呢?这就要稍微解释一下学习过程,请看下面的图:

RNN的演示代码

import torch.nn as nn

rnn = nn.RNN(32, 64)
input = torch.randn(4, 32)
h0 = torch.randn(1, 64)
output, hn  = rnn(input, h0)
output.shape, hn.shape
# (torch.Size([4, 64]), torch.Size([1, 64]))

上面nn.RNN就是RNN模型,输入是一个4×32的向量,换句话说,4个Token,维度d=32,h0就是初始化的输出,也就是output4个里面的第一个,这里output的四个64维的向量就分别表示4个输出,hn就是最后一个Token的输出,也可以看成是整个句子的表示。如果要输出词的概率,需要先扩充到词表大小,再进行归一化:

wo = torch.randn(64, 1000) # 假设词表大小N=1000
logits = output @ wo  # 4×1000
probs = nn.Softmax(dim=1)(logits) # 4×1000,每一行概率和为1

这里的probs每一行就是词表大小的概率分布,和为1,意思是这个Token到词表每个Token的概率。

Transformer

一个刚开始在NLP领域,后来横跨到语音和图像领域,并最终统一几乎所有模态的架构。这是Google2017年发的一篇论文,标题叫《Attention Is All You Need》,其最重要的核心就是提出来的Self-Attention机制,中文也叫自注意力。简单来说,就是在语言模型建模过程中,把注意力放在那些重要的Token上。想来,Google在发表论文之初也没有料想到今天吧。

Transformer是一种Encoder-Decoder架构,简单来说就是先把输入映射到Encoder,这里大家可以把Encoder先想象成上面介绍的RNN,Decoder也可以想象成RNN。这样,左边负责编码,右边则负责解码。这里面不同的是,左边因为我们是知道数据的,所以建模时可以同时利用当前Token的历史Token和未来(前面的)Token;但解码时,因为是一个Token一个Token输出来的,所以只能根据历史Token以及Encoder的Token表示进行建模,而不能利用未来的Token。

Transformer的这种架构从更普遍的角度来看,其实是Seq2Seq架构,大家别慌,这简单来说就是序列到序列模型,也就是输入是一个文本序列,输出是另一个文本序列。翻译就是个很好的例子,我们看下面这个来自Google的GNMT(Google Neutral Machine Translation)的经典图片:

GNMT图示,来自GNMT GitHub:https://github.com/belvo/Google-Neural-Machine-Translation-GNMT-

Transformer的结构

Transformer,来自Transformer论文

这个图更多的是体现了内部结构。左边是Encoder的一个Block(一共N个),右边是Decoder的一个Block(一共N个),简单起见,我们可以假设N=1,那左边这个结构就是一个Encoder,右边的就是Decoder。也可以把它们就想象成一个RNN,这样有助于从宏观上把握。现在,想象完了,我们回到现实,Transformer 用到的东西和RNN并没有关系,通过上图也可以看出来,它主要用了两个模块:Multi-Head Attention和Feed Forward。对于前者,我们不妨回顾一下GNMT的Attention,它是Decoder中的Token和Encoder中每一个Token的重要性权重。Multi-Head Attention中用到一个东西叫SelfAttention,和刚刚说的Attention非常类似,只不过它是自己的每一个Token和自己的每一个Token的重要性权重。简单来说,就是“一句话到底哪里重要”。这玩意儿可以说是非常精髓了,无论是ChatGPT,还是其他非文本的模型,几乎都用到了它,可以说是真正的一统江湖。Multi-Head是啥意思呢,简单来说,就是把刚刚的这种自己注意自己重复Multi次(Multi个Head),每个注意到的信息不一样,这样就可以捕获到更多信息。比如我们前面提过的这句话:「我喜欢在深夜的星空下伴随着月亮轻轻地想你」,有的Head「我」注意到「喜欢」,有的Head「我」注意到「深夜」,有的Head「我」注意到「想你」……这样看起来是不是更加Make Sense。对于Feed Forward,大家可以把它当做「记忆层」,大模型的大部分知识都存在这里面,Multi-Head Attention则根据不同权重的注意提取知识。

GPT

GPT,Generative Pre-trained Transformer,没错了,就是ChatGPT的那个GPT,中文叫「生成式预训练Transformer」。生成式的意思就是类似语言模型那样,Token by Token生成文本,也就是上面提到的Decoder。预训练刚刚也提过了,就是在大量语料上训练的语言模型。GPT模型从1到4,一共经历了5个版本,中间有个ChatGPT是3.5版

GPT的基本结构

GPT基本结构,来自GPT论文

关于左边,我们上面已经介绍过了,用的就是Transformer的架构(GPT中是Decoder),具体里面的子模块可以不用关注。重点看看右边,这里有一个值得注意的地方,就是针对不同的任务输入,都拼接成文本序列,然后丢给Transformer Decoder再通过一个Linear+SoftMax输出结果。Linear是一种最基础的网络结构,SoftMax我们前面介绍过,主要用来把输出映射到概率分布(和为1)。这种拼接输入的方法在当时那个大模型时代非常流行的,紧跟其后的BERT也是类似的方式。这样统一的处理方法能够减少不同任务对模型的改动。反正不管什么任务,都想方设法搞成一个序列就行。

RLHF

RLHF,Reinforcement Learning from Human Feedback,从人类反馈中学习,听起来怎么平平无奇。确实,它的思想非常朴素简单,但却有着不可忽视的效果。刚刚我们已经提到了,GPT-3说未来要找新的方法,这其中就包括从人类中学习、强化学习微调、多模态等。时至今日,从InstructGPT到ChatGPT,再到GPT-4,它一步一步在实现这些新的方法。这里有一点需要提醒,这些方向并不是一开始就清晰地摆在那里的,中间还是有非常多的探索和阶段性成果(既有他们自己的研究,也有其他从业人员的研究)。千万不要看到结果觉得平平无奇,尤其是作为非行业人士(特别是有些媒体),这中间的艰难探索永远值得尊敬。另外,有时候即便知道了方法,要做出来,还做出效果来,这也是非常有难度的。而且本文由于科普性质,只能介绍一丢丢内容,虽然整体结构比较完整,但总体还是比较浅显(所以标题是「一点所以然」)。总的来说,要做出来很有难度,不过我们只是用的话,如前面所言,有手就行。

好了,言归正传,RLHF被人熟知应该主要是源自OpenAI的InstructGPT这篇论文,当然更大范围的熟知就是ChatGPT的发布。因为后者没有论文,也没有开源,所以我们也只能拿InstructGPT的管窥一窥ChatGPT的豹。当然,如果按照ChatGPT官方页面的说法,这个「管」可能还比较粗。如果用简单的语言来描述InstructGPT,其实就是用强化学习的算法微调一个根据人类反馈改进的语言模型。重要的是,它调出了效果——1.3B的InstructGPT堪比175B的GPT-3,如下图所示:

不同策略不同模型效果对比,来自InstructGPT论文

LLM

我们正在经历并进入一个新的时代,LLM作为一个外部「最强大脑」未来一定会非常容易被每个人获取,至于用来做什么,Depends Your Imagination。无论哪个行业,相信这都是一个令人振奋的信号,笔者本人就经常激动到夜不能寐。对于这种大变革,我们能做什么呢,我不知道,未来太多可能,但我相信最好的办法就是拥抱它。让我们HuggingLLM,一起创造时代、创造未来。我们相信世界必将会因此而变得更美好。

国内LLM介绍

阿里巴巴 千问Qwen

官方GITHUB

QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. (github.com)

智谱 ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于General Language Model (GLM)架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。欢迎通过chatglm.cn体验更大规模的 ChatGLM 模型。

官方GITHUB

THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型 (github.com)

书生.浦语

InternLM 是在过万亿 token 数据上训练的多语千亿参数基座模型。通过多阶段的渐进式训练,InternLM 基座模型具有较高的知识水平,在中英文阅读理解、推理任务等需要较强思维能力的场景下性能优秀,在多种面向人类设计的综合性考试中表现突出。在此基础上,通过高质量的人类标注对话数据结合 RLHF 等技术,使得 InternLM 可以在与人类对话时响应复杂指令,并且表现出符合人类道德与价值观的回复

InternLM2 系列模型具有如下特性:

  • 有效支持20万字超长上下文:模型在 20 万字长输入中几乎完美地实现长文“大海捞针”,而且在 LongBench 和 L-Eval 等长文任务中的表现也达到开源模型中的领先水平。 可以通过 LMDeploy 尝试20万字超长上下文推理。
  • 综合性能全面提升:各能力维度相比上一代模型全面进步,在推理、数学、代码、对话体验、指令遵循和创意写作等方面的能力提升尤为显著,综合性能达到同量级开源模型的领先水平,在重点能力评测上 InternLM2-Chat-20B 能比肩甚至超越 ChatGPT (GPT-3.5)。
  • 代码解释器与数据分析:在配合代码解释器(code-interpreter)的条件下,InternLM2-Chat-20B 在 GSM8K 和 MATH 上可以达到和 GPT-4 相仿的水平。基于在数理和工具方面强大的基础能力,InternLM2-Chat 提供了实用的数据分析能力。
  • 工具调用能力整体升级:基于更强和更具有泛化性的指令理解、工具筛选与结果反思等能力,新版模型可以更可靠地支持复杂智能体的搭建,支持对工具进行有效的多轮调用,完成较复杂的任务。可以查看更多样例

官方GITHUB

InternLM/InternLM: Official release of InternLM2 7B and 20B base and chat models. 200K context support (github.com)

最后插播一则广告,最近书生·浦语大模型实战营第二期正式启动,两周时间带你玩转大模型微调部署和评测,从零搭建多模态、RAG智能体应用。课程还有免费的A100算力使用

参考文档

hugging-llm/content/chapter1/ChatGPT基础科普——知其一点所以然.md at main · datawhalechina/hugging-llm (github.com)

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

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

相关文章

RabbitMQ介绍及搭建

架构 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,使用erlang语言编写,依赖Erlang环境运行。 Broker:运行消息队列服务进程的节点,包含Exchange、Queue; Producer:消…

自学Python第二十九天-feapder框架创建爬虫

自学Python第二十九天-feapder框架创建爬虫 安装feapder 的设计架构feapder 框架的简单使用简单创建爬虫简单爬取数据简单的数据保存 中间件校验浏览器渲染使用浏览器渲染获取接口数据 feapder是一款上手简单,功能强大的 Python爬虫框架,内置 AirSpide…

Games101笔记-模型、视图、投影

在旋转点,旋转矩阵的逆等于矩阵的转置 视图变换和投影变换 三维变换 左边3*3是线性变换,右边一列是仿射变换(平移) 先线性再平移 缩放、旋转、平移 x叉乘y得到z,y叉乘z得到x, xyz给任何两个可以得到另一个 (循环对称) z叉乘x得…

EDI在汽车主机厂配送流程中的应用

汽车主机厂的汽车配送流程始于汽车 “生产结束 ” ,止于 “交付给经销商 ” 。在这个流程中,企业作为主机厂的下游供应商,与主机厂的物流服务供应商之间的信息交换将会变得十分重要。 配送流程:运输订单以及报告 汽车主机厂提供预…

6-高维空间:机器如何面对越来越复杂的问题

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)二维输入数据 (二)数据特征维度 …

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

小白向-使用git实现不同服务器改动的同步

背景 深度学习项目,已有可运行的backbone,已将此项目在github建库。 需要使用不同分支进行不同改动的测试;有两台服务器可供程序运行; 项目需求 以github云端仓库为媒介,实现不同服务器改动无痛关联。维护项目代码…

MS14_064 漏洞利用与安全加固

文章目录 环境说明1 MS14_064 简介2 MS14_064 复现过程3 MS14_064 安全加固 环境说明 渗透机操作系统:kali-linux-2024.1-installer-amd64漏洞复现操作系统: sc_winxp_pro_with_sp2 1 MS14_064 简介 要利用此漏洞则需要进行用户交互。通过发送电子邮件信息给本地登…

【云开发笔记No.4】DevOps的起源,定义和基本原则

DevOps,作为一组过程、方法与系统的统称,它的出现并不是偶然的,而是源于软件开发与运维领域长期以来所面临的挑战和痛点。其诞生背景可以追溯到敏捷开发模式的兴起以及持续开发所带来的运维问题。随着软件行业的飞速发展,传统的软…

Godot 学习笔记(3):IOC容器注入,以NlogServices为例

文章目录 前言环境注意事项Ioc注入文件夹设置Service服务搭建Nlog.configNlogService配置ButtonTest1Service控制反转Program主入口ButtonTest1从Ioc中获取服务 输出生命周期问题 总结 前言 Godot.Net中使用IOC之后,Godot的代码将会被极大的解耦。这里不不展开说明…

【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程

文章目录 一、什么是CodeGeeX(一)我理解的CodeGeeX(二)优缺点 二、CodeGeex下载、安装、注册(一)安装VS Code(Visual Studio Code)(二)下载安装CodeGeeX(三)注…

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…

Trait与生命周期

原文链接:(*∇`*) 咦,又好了~ Rust – xiaocr_bloghttp://www.xiaocr.fun/index.php/2024/03/18/trait%E4%B8%8E%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ 目录 Trait 定义trait 默认实现 trait作为参数 Trait Bound语法 通过指定多个 trait bound …

B003-springcloud alibaba 服务治理 nacos discovery ribbon feign

目录 服务治理服务治理介绍什么是服务治理相关方案 nacos实战入门搭建nacos环境安装nacos启动nacos访问nacos 将商品微服务注册进nacos将订单微服务注册进nacos订单服务通过nacos调用商品服务 实现服务调用的负载均衡什么是负载均衡代码实现负载均衡增加一个服务提供者自定义实…

【CKA模拟题】掌握Pod日志输出的秘密

题干 For this question, please set this context (In exam, diff cluster name) 对于这个问题,请设置这个上下文(在考试中,diff cluster name) kubectl config use-context kubernetes-adminkubernetes product pod is running. when you access log…

flask之ssti [WesternCTF2018]shrine1

打开题目 整理一下,代码: import flask import osapp flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) app.route(/)def index():return open(__file__).read()app.route(/shrine/)def shrine(shrine):def safe_jinja(s):s s.replace((, ).replac…

无人机三维建模过程中注意事项

无人机三维建模是指利用无人机技术进行三维建模,该方法通过无人机搭载的多种传感器,如摄像头、激光扫描仪等,获取建筑物的多角度影像数据,然后利用计算机视觉技术和三维重建算法,将这些影像数据转化为高精度的三维模型…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

文章目录 一、数据聚合1.1 聚合种类1.2 DSL实现聚合1.3 RestAPI实现聚合1.4 演示:多条件聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 DSL自动补全查询2.5 实现酒店搜索框自动补全2.5.1 修改酒店索引库数据结构2.5.2 RestAPI实现自动补全查询2.5.3 实战 三、…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…

196基于matlab的计算器GUI可视化

基于matlab的计算器GUI可视化,具有加减乘除功能。可作为练习使用。程序已调通,可直接运行。 196 matlab GUI可视化 计算器 - 小红书 (xiaohongshu.com)