如何不修改模型参数来强化大语言模型 (LLM) 能力?
前言
如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
大语言模型 (Large Language Model, LLM, e.g. ChatGPT) 的参数量少则几十亿,多则上千亿,对其的训练往往需要大量的算力、智力以及财力支撑。基于此,许多低成本提高 LLM 能力的方法也相应被提出,其中包括模型微调 (e.g., LoRA) 以及一些无须改变模型参数的方法。本文主要关注后者,对下述几种常见的方法进行大致介绍:
- 提示语设计 (Prompt Engineering)
- 上下文学习 (In-Context Learning)
- 思维链 (Chain of Thought, CoT)
- Self-Consistency with CoT / Self-Refine
- Tree of Thought (ToT)
- LLM 调用工具 (Tools)
- WebGPT / Toolformer / ToolLLM
- Retrieval-Augmented Generation (RAG)
- 多模型合作
Prompt Engineering
Prompt(提示语)即给大语言模型的「指令」或「问题」,来引导模型输出合适的内容。
大语言模型与传统机器学习模型的最大区别在于,其具有一定意义上的 “通用能力”,即可以在不改变模型参数的前提下,完成各种各样的任务,例如文本分类 / 机器翻译 / 问答系统 / 文本摘要 / 情感分析等等。而在过去,不同的任务通常需要特定的模型来处理,例如机器翻译和情感分析,就无法只通过一个模型来处理。
由于语言模型的能力从 “专用” 转向了 “通用”,为了使模型更好地识别到对话中所需要完成的具体任务,Prompt Engineering(提示语设计)应运而生,即根据任务需求设计合适的提示语,以获得更精确且更高质量的回答。在使用大语言模型时,通过调整输入的 Prompt,可以极大地影响模型生成的内容,进而强化模型的能力。
提示词通常可以包含以下几个要素:
- 指令:想要模型执行的特定任务;
- 上下文:包含外部信息或额外的上下文信息,引导模型更好地响应;
- 问题描述:输入的具体问题;
- 回答格式:指定输出的类型或格式。
通常来说,指令 / 问题描述越清晰,上下文包含的有关信息越充分,模型越有可能输出高质量的回答。
此处举一个例子(1/2/3 行分别对应指令/问题/输出格式):
为不同的任务设计针对性的 Prompt,可以在不改变模型参数的情况下,强化模型回答的质量。关于 Prompt Engineering 的更多内容可以参考:提示工程指南、ChatGPT Prompt 整理。
In-Context Learning
In-Context Learning(上下文学习),指模型通过输入的上下文信息(通常是示例、对话历史、文本片段等)来推断任务或模式,并依次生成响应,而无需额外的模型训练。In-Context Learning 也可以视作是 Prompt Engineering 的一种形式,尽管后者更侧重于设计特定任务的提示语。
大语言模型的 “通用能力” 不仅体现在其可以做很多不同的任务,还体现在其可以根据 Prompt 中给出的上下文信息,在不改变参数的情况下进行 “学习”。
例如下述这个任务(生成式 AI 导论 2024 - 第 3 讲):
新闻分成以下类别:这些类别的定义可能与一般的定义不同:
- 政治:报道有关国家经济的消息,例如企业、投资、金融、股市。
- 社会:报道社会上发生的事件,例如灾难、天气、犯罪、人情趣味。
- 财经:报道国内的政治消息,例如政府部门、政策、选举、政策。
- 生活消费:报道与生活相关的小事,例如购物、气象、交通、医疗保健。
- 影视娱乐:报道有关娱乐圈的消息,例如艺人、节目、婚丧。
- 体育:报道与体育运动相关的消息,例如比赛、职业运动、运动明星。
- 国际:报道海外发生的事件,例如战争、大选、外交谈判、贸易。我会给你一篇新闻,请告诉我该新闻属于哪一类,只给我类别就好。
然后给出的具体新闻如下:
- “AI题材持续引领,芯片股今年以来股价暴涨近50%,周二(13日)收于721.28美元,市值达到1.78万亿美元,正式超过全球电商巨头亚马逊的市值1.75万亿美元,成为排名第4大的美国公司。”
这则新闻实际上属于财经类,但由于我们上面颠倒了新闻类别的定义,因此我们希望模型输出的是「政治」。经过测试,ChatGPT-4o 输出的仍然是「财经」,但 ChatGPT-o1 的输出则为「政治」。
可以看到大语言模型根据输入的上下文实现了某种意义的 “学习”,类似于先前预训练模型上实现的 “zero-shot learning” 与 “few-shot learning” 的效果:
zero-shot learning
:模型能够在没有见过某些任务的情况下,实现正确的预测(例如上面的例子);few-shot learning
:模型能够在只有极少数标注样本的情况下,在新任务上做出正确的预测。- ps:不过此处有一些不同,以往预训练模型实现的少样本学习,通常需要微调模型参数,但 LLM 可以仅通过修改 Prompt 实现,不需要修改模型参数。
基于大语言模型表现出的 In-Context Learning 的性质,也有许多人尝试用 LLM 做表格型任务,即将任务的少量标注样本通过 Prompt 的形式喂给模型,使模型能够基于这些样本实现对这个任务的正确预测。
例如下面这个简单的例子(From ChatGPT):
任务:填写下表中缺失的值。示例:| 产品名称 | 价格 | 销售数量 | 总销售额 |
|---------|-----|---------|---------|
| 苹果 | 1.2 | 50 | 60 |
| 香蕉 | 0.8 | 30 | 24 |
| 橙子 | 1.0 | 40 | 40 |
| 葡萄 | 2.0 | 20 | 40 |现在,使用相同的逻辑填写下表:| 产品名称 | 价格 | 销售数量 | 总销售额 |
|---------|-----|---------|---------|
| 苹果 | 1.6 | 30 | ? |
| 香蕉 | 1.8 | 50 | ? |
| 橙子 | 2.0 | 20 | ? |
| 葡萄 | 4.0 | 10 | ? |
ChatGPT 可以识别出「总销售额 = 价格 * 销售数量」的关系,并输出正确的结果:
Chain of Thought (CoT)
思维链 (CoT) 即让模型通过一系列中间步骤来思考问题,而不是直接给出最终答案。通过将推理过程分解成可理解的步骤,可以使模型避免常见的错误推断,并在复杂任务上提供更精准的答案。
如下图所示,通过引导模型给出答案的思考过程,模型在具体任务上取得了更好的结果 (NeurIPS22 - CoT):
基于 CoT 的工作,后续有许多进一步强化 CoT 效果的工作,接下来将对其中的一些主要内容进行介绍。
Self-Consistency with CoT
LLM 生成文本的方式是预测 next token,即 Decoder 不断根据已生成的内容,输出下一个字符。
Decoder 的实际功能是预测字符表中,每个字符作为下一个输出字符的概率,因此一种常见的输出策略就是 Greedy decode,每次输出概率最高的那个字符。
Self-Consistent CoT 就是在 CoT 的基础上,对模型的输出策略进行修改。具体操作如下:
- 首先构造引导模型按步骤思考的 CoT prompt;
- 随后将 Greedy decode 更换为按 next token 的概率采样选择下一个输出字符,来生成一组不同的回答;
- 最后选取一致性最高的答案(出现次数最多的答案)作为最终的输出结果。
下图为具体工作流程 (ICLR23 - Self-Consistency with CoT):
Self-Refine
此外,也可以在 CoT 的每一个步骤中,让语言模型对生成的答案进行自我纠错,进一步地提升答案的准确性。此处先介绍模型自我纠错的方式,其与 CoT 的结合放在下一小节的 Tree of Thought 中进行介绍。
模型自我纠错的具体操作如下:
- 首先将问题 x x x 输入给模型,得到模型的输出 y 0 \mathbf{y}_0 y0;
- 然后让模型判断 y 0 \mathbf{y}_0 y0 作为 x x x 问题的回答是否合适,得到模型的反馈 fb 0 \text{fb}_0 fb0;
- 再将 x , y 0 , fb 0 x,\mathbf{y}_0,\text{fb}_0 x,y0,fb0 都输入给模型,得到模型改进后的回答 y 1 \mathbf{y}_1 y1;
- 整个过程可以不断迭代,直至触发停止条件。
下述为一个具体例子 (NeurIPS23 - Self-Refine):
整体的算法如下所示(只需要提供生成回答 p gen p_{\text{gen}} pgen、提供反馈 p fb p_{\text{fb}} pfb、改进回答 p refine p_{\text{refine}} prefine 的 Prompt,再不断迭代即可):
Tree of Thought (ToT)
上述方法的特点分别为:(1) 按步骤进行思考;(2) 多次生成回答并选取一致性最高的答案;(3) 让模型检查自己的答案。将这三个特点进行融合,可以得到 Tree of Thought 方法,其与先前方法的区别可参考下述流程图 (NeurIPS23 - ToT):
Tree of Thought 的具体操作如下:
- 首先采用了 CoT 的方式,模型是一步一步思考的(即回答生成过程是一层一层往下);
- 其次采用了 CoT-SC 的方式,每一步会生成多个候选回答(即每一个 Thought 下面有多个子节点);
- 最后采用了类似 Self-Refine 的方式,对每一步的 Thought 进行评估,如果评估的结果不好,则不再继续深入,类似于搜索剪枝的操作(即标红的 Thought 没有继续往下搜)。
下述为一个 24 点(判断给出的四个数字是否可以通过加减乘除得到 24)的具体例子,其中标红的 Thought State 节点即评估结果不好被剪枝:
LLM + Tools
LLM 还可以通过调用一些外部工具(APIs),在不修改模型参数的同时提高模型性能。常见的外部工具有:搜索引擎、代码编译器、文生图 AI 等等。
WebGPT
WebGPT 是 OpenAI 在 21 年提出的一种 GPT 调用搜索引擎的方式,其调用工具的方法为预测 next command,类似于预测 next token 的思想。
具体来说,模型首先会判断是否要借助搜索引擎,如果借助则会执行 Search <query>
的命令,得到最初的搜索结果,随后根据之前获取的结果判断应该执行下述哪一个 command:
例如可能会触发 Clicked on link
(点击某个链接)、Quote
(收藏某段内容)、Back
(返回前一个页面) 等操作,如果最终触发了 End: Answer
,则会根据之前收藏的所有页面内容,生成最终的回答。
由于 Command 是重新定义的,因此模型在 GPT-3 的基础上,根据人类标注的调用搜索引擎的数据 + 强化学习再次进行了训练,具体细节可参考原论文。
Toolformer
随后 23 年提出的 Toolformer 在 WebGPT 上更进一步,不仅可以调用搜索引擎,还可以调用计算器、翻译器等各类工具。下述为 Toolformer 调用的工具 (APIs) 示例:
其思想依然是类似于 next token 预测,即如果输出了调用某些工具的触发词,则会调用相应的工具,并根据工具输出的结果继续生成后续文字。例如当模型生成 [QA(“Which country is Pittsburgh in?”)] 这样的内容时,会自动调用 QA 这个工具,得到 United States 这个输出后,将其嵌入到原本的生成内容中。
在模型训练过程中,Toolformer 利用了其他 LLM,例如 GPT-3 来生成训练数据。下述为论文中给出的用其他 LLM 来生成调用 QA 这个工具的训练数据的 Prompt:
为了进一步提高这种方式生成的数据质量,Toolformer 会对这些数据进行验证,即判断根据上述生成数据的内容,「调用 API 的输出」对比「不调用 API 的输出」,前者是否更接近正确答案。如果调用 API 后的结果更准确,则保留这条数据。
ToolLLM
更进一步地,ToolLLM 从 RapidAPI Hub 中收集了 16464 个现实世界的 RESTul APIs,并使用 ChatGPT 为这些 APIs 构建了指令微调的数据集。基于这些数据集进行微调,ToolLLM 实现了对这些 APIs 的管理与调用。RapidAPI 的层级结构,以及为这些 APIs 构建数据集的示例如下所示:
ToolLLM 整体分为 Data Construction、Train 以及 Inference 三部分,如下所示:
首先是数据集的构建:先从 RapidAPI 中搜集大量 APIs,再使用 ChatGPT 为这些 API 构建指令微调的数据集。随后类似于 Toolformer 的想法,再使用 ChatGPT 选取一些高质量的指令,即采用一种类似深度搜索树的方式(即下图中的 DFSDT,与 Tree of Thought 的想法类似),搜索 API 的调用路径,保留能成功找到路径的指令,如下图所示:
随后基于这些指令,可以通过监督学习 (Supervised Fine-tuning, SFT) 在 LLaMA 的基础上得到 ToolLLaMA;再基于 API 的文档,训练一个 API Retriever,用于后续判断指令与哪些 API 比较相关。
最后在模型推理时,先根据用户给出的指令,利用 API Retriever 获取相关的 APIs,然后再通过上述 DFSDT 的方式,查搜并评估不同的 API 调用路径,直至输出最终的答案。
Retrieval-Augmented Generation (RAG)
RAG 的核心思想为「检索技术 + LLM 提示语」,即根据用户的 Query 从垂域数据库中搜索出相关的内容,并使用合适的 Prompt 将这些相关内容与用户原始 Query 合并在一起,使得 LLM 回答地更加准确。
为了快速从垂域数据库中获取相关的内容,需要提前做好以下两步:
- 利用已有的一些 Embedding 模型(例如 ChatGPT-Embedding、Sentence Transformers 等)将知识库的文档转成向量形式;
- 利用当前向量数据库的一些技术(例如 Faiss、NMSLIB),构建这些向量形式的向量索引,以支持后续根据用户的 Query 快速查询相关内容。
一个初步的 RAG 框架如下所示,更多 RAG 相关内容以及进阶方法,可以参考:知乎 - 大模型 RAG、LLM - RAG 研究
多模型合作
多个模型一起合作,也是一种强化大语言模型能力的方式,类似于集成学习 (Ensemble Learning) 的想法。
FrugalGPT:让合适的模型做合适的事情
FrugalGPT 主要关注于如何降低 LLM 推理时的开销,其中提出了 LLM cascade 的方法,其核心思想为:(1) 简单的问题交给弱一些的模型(开销更小),困难的问题再交给强的模型;(2) 不同模型的能力可能可以互补。
下述图片表示了不同 LLM 在不同 Benchmark 上的表现,体现了模型能力之间的互补。图中的每一个格子表示对应行 LLM 答错但对应列 LLM 答对的比例,例如图 (a) 的第四行第三列表示:有 4% 的数据,GPT-4 回答错误但 GPT-3 回答正确。
LLM cascade 的具体做法是训练一个评分器 Scorer,其可以对一组输入和一组答案进行打分。随后将 LLM 根据开销串成级联的形式,如果开销较小的 LLM 得到的答案评分已经超过该 LLM 的预设阈值,则可以不再 query 开销更大的 LLM,整体流程类似如下形式:
LLM 的级联顺序以及对应的评分阈值,通过求解下述优化式得到(采用混合整数规划求解):
max L , τ E [ r ( a , f L z ( q ) ) ] s.t. E [ ∑ i = 1 z c ~ L i , 2 ∥ f L i ( q ) ∥ + c ~ L i , 1 ∥ q ∥ + c ~ L i , 0 ] ≤ b , z = arg min i g ( q , f L i ( q ) ) ≥ τ i . \begin{aligned} \max _{\boldsymbol{L}, \boldsymbol{\tau}} & \mathbb{E} {\left[r\left(a, f_{L_z}(q)\right)\right] } \\ \text { s.t. } & \mathbb{E}\left[ \sum_{i=1}^z \tilde{c}_{L_i, 2}\left\|f_{L_i}(q)\right\|+\tilde{c}_{L_i, 1}\|q\|+\tilde{c}_{L_i, 0}\right] \leq b, \\ & \quad z=\arg \min _i g\left(q, f_{L_i}(q)\right) \geq \boldsymbol{\tau}_i. \end{aligned} L,τmax s.t. E[r(a,fLz(q))]E[i=1∑zc~Li,2∥fLi(q)∥+c~Li,1∥q∥+c~Li,0]≤b,z=argiming(q,fLi(q))≥τi.
上述式子中,下标 z z z 表示最终选择的 LLM,因此最大化 E [ r ( a , f L z ( q ) ) ] \mathbb{E} {\left[r\left(a, f_{L_z}(q)\right)\right] } E[r(a,fLz(q))] 即最大化最终选择的 LLM 在问题 q q q 上的输出与真实答案 a a a 的相似度。另外,第二个约束展示了 z z z 是如何选取的,即使得评分器 g g g 输出评分超过 LLM 阈值 τ i \boldsymbol{\tau}_i τi 的第一个 LLM。第一个约束则表示整体的开销不能超过 Budget b b b,其中 c ~ \tilde{c} c~ 分别对应 LLM 输出 token 开销、输入 token 开销以及固定开销。
论文最后展示了上述三个数据集上 FrugalGPT 对比 Best individual LLM 的表现:
模型合作:让模型彼此讨论
也可以让模型之间互相讨论,即将 LLM A 的回答输入给 LLM B,让其参考后再进行输出。
例如采用下述的 Prompt(From arXiv 2023),让模型之间互相讨论:
如果 Prompt 里暗示模型之前其他模型的意见仅作为参考,则需要更长的讨论轮次才能最终达成一致。例如上述图片中 Debate Length 为 Long 的 Prompt。
以下为一些实验结果,可以看到互相讨论能够增强模型的能力:
参考资料
- Prompt Engineering Guide
- Hung-yi Lee: 生成式 AI 导论 2024 - 课程网站
- Hung-yi Lee: 生成式 AI 导论 2024 - 第 3 讲至第 5 讲
- Hung-yi Lee: 能够使用工具的 AI - New Bing, WebGPT, Toolformer
- Hung-yi Lee:生成式 AI 2023 - FrugalGPT(上)、(下)
- 知乎:大模型 RAG(检索增强生成)含高级方法
- NeurIPS 2022 - Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
- ICLR 2023 - Self-Consistency Improves Chain of Thought Reasoning in Language Models
- NeurIPS 2023 - Self-Refine: Iterative Refinement with Self-Feedback
- NeurIPS 2023 - Tree of Thoughts: Deliberate Problem Solving with Large Language Models
- arXiv 2021 - WebGPT: Browser-assisted question-answering with human feedback
- NeurIPS 2023 - Toolformer: Language Models Can Teach Themselves to Use Tools
- arXiv 2023 - FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance
- arXiv 2023 - Improving Factuality and Reasoning in Language Models through Multiagent Debate
- ICLR 2024 - ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs
相关文章:
如何不修改模型参数来强化大语言模型 (LLM) 能力?
前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 大语言模型 (Large Language Model, LLM, e.g. ChatGPT) 的参数量少则几十亿,多则上千亿,对其的训…...
Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)
参考文章 penHarmony南向开发笔记(一)开发环境搭建 OpenHarmony(鸿蒙南向开发)——标准系统移植指南(一) OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二&…...
Qemu配置QXL显卡支持分辨率
默认情况下,创建的vm的视频RAM限制为16MB。在win操作系统中分辨率最高就只能调到1024x768。 <video><model typecirrus vram16384 heads1 primaryyes/><address typepci domain0x0000 bus0x00 slot0x02 function0x0/> </video>单单修改ram…...
Hack The Box-Starting Point系列Three
答案 How many TCP ports are open?(靶机开了几个TCP端口) 2What is the domain of the email address provided in the “Contact” section of the website?(网站的“CONTACT”部分提供的电子邮件地址的域是什么?)…...
人工智能-Python多任务编程-进程、线程
多任务的实现方式 多进程 多线程 1 多任务的两种表现形式 并发: 在一段时间内交替去执行多个任务(任务数大于CPU核心数)并行: 在一段时间内真正的同时一起执行多个任务(任务数小于等于CPU核心数) 2 进程 进程(Proc…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之9 重新开始 之2
本文要点 对程序设计而言:前者基于一个自上而下的 分类体系--(生物遗传基因),后者者需要一个收集差异的自下而上的差异继承路径--(系统继承源流) 就是 广义和狭义 分类学。 共性对齐 和 差异收集 正是两者…...
Postman[7] 内置动态参数及自定义的动态参数
postman 内置动态参数和自定义的动态参数 1.内置动态参数 格式:{{$参数名}} 1.1时间戳 {{$timestamp}} //生成当前时间的时间戳 1.2随机整数 {{$randomint}} //生成0-1000之间的随机数 1.3GUID字符串 {{$guid}} //生成随机GUID字符串 2.自定义动态参数 格式…...
04-c++类和对象(下)
一、友元 前面学习的类中,只能通过该类的公共方法访问私有数据。而如果将某个函数设置为类的友元,那么这个函数就可以直接访问该类的私有数据,破坏了类的封装性,只在某些特定的情况下使用。 友元的分类:普通全局函数…...
《解密奖励函数:引导智能体走向最优策略》
在强化学习领域,奖励函数是核心要素,它决定了智能体如何学习和决策。设计一个恰当的奖励函数,能让智能体在复杂环境中不断探索、优化,最终实现最优策略。 奖励函数的重要性 奖励函数就像是一个引导者,它告诉智能体什…...
AF3 AtomAttentionEncoder类的init_pair_repr方法解读
AlphaFold3 的 AtomAttentionEncoder 类中,init_pair_repr 方法方法负责为原子之间的关系计算成对表示(pair representation),这是原子转变器(atom transformer)模型的关键组成部分,直接影响对蛋白质/分子相互作用的建模。 init_pair_repr源代码: def init_pair_repr(…...
VScode 格式化代码空格记录
点击 -> “文件” -> “首选项" -> “设置” -> 按下图操作: 怎么格式化代码空格,先看下: 保存代码后,这代码自动格式化发,如下图: 你可以试试看就即可...
28.Marshal.PtrToStringAnsi C#例子
//怎么说呢,这个代码Marshal的英文意思有将军,控制等等, //我的理解是类似于console控制台。 //然后后面这个Ansi是一种ASCII的扩展,还有其他编码方式可选 就是一个把后面的指针转化为字符串的一个代码 这是用法…...
Git的使用流程(详细教程)
目录 01.Git是什么? 1.1 Git简介 1.2 SVN与Git的最主要的区别 1.3 GIt主要特点 02.Git是干什么的? 2.1.Git概念汇总 2.2 工作区/暂存区/仓库 2.3 Git使用流程 03.Git的安装配置 3.1 Git的配置文件 3.2 配置-初始化用户 3.3 Git可视化…...
第R3周:RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前言二、代码流程1、导入包,设置GPU2、导入数据3、数据处理4、构建RNN模型5、编译模型6、模型训练7、模型评估 电脑环境:…...
clickhouse Cannot execute replicated DDL query, maximum retries exceeded报错解决
报错信息 在clickhouse中执行DDL命令对表进行改动时,出现报错Cannot execute replicated DDL query, maximum retries exceeded 解决方案 一、官方解决方案 官方说这是一个特定版本的bug,但是实际我自己用的22.9.34版本,也存在这个问题&a…...
【时时三省】(C语言基础)常见的动态内存错误
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 对NULL指针的解引用操作 示例: malloc申请空间的时候它可能会失败 比如我申请一块非常大的空间 那么空间可能就会开辟失败 正常的话要写一个if(p=&#x…...
【JVM】总结篇-字节码篇
字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box&…...
二十三种设计模式-抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式,用于创建一系列相关或相互依赖的对象,而不需要指定它们具体的类。这种模式主要用于系统需要独立于其产品的创建逻辑时,并且…...
【docker】Dockerfile 中使用宿主机代理的方式
在Dockerfile中配置代理主要有这几种方式,让我系统地整理一下: 构建参数方式(BUILD ARG) # 方式1:在Dockerfile顶部定义 ARG HTTP_PROXYhttp://proxy:7890 ARG HTTPS_PROXYhttp://proxy:7890# 方式2:在构…...
现代无线通信接收机架构:超外差、零中频与低中频的比较分析
写在前面:本博客是对三种接收机架构的学习笔记,仅供个人学习记录使用。内容主要是上网查阅的资料,以及个人的一些理解。如有错误的地方请指出! 文章目录 一、通信机基本架构 1、射频发射级的基本组成及完成功能2、射频接收级的基…...
CSS 图片廊:网页设计的艺术与技巧
CSS 图片廊:网页设计的艺术与技巧 引言 在网页设计中,图片廊是一个重要的组成部分,它能够以视觉吸引的方式展示图片集合,增强用户的浏览体验。CSS(层叠样式表)作为网页设计的主要语言之一,提供…...
Gemini和ChatGPT全面对比分析,有什么区别和优势?
当 AI 聊天机器人首次出现时,每个人都在竞相发布自己的足够好的第一版 AI 聊天机器人,很容易在 Gemini 与 ChatGPT 等应用程序之间进行比较。但随着 Google 和 OpenAI 不断添加新功能、模型和访问其聊天机器人的方式,差异变得不那么明显。 现…...
Ansys Discovery 中的网格划分方法:探索模式
本篇博客文章将介绍 Ansys Discovery 中可用于在探索模式下进行分析的网格划分方法。我们将在下一篇博客中介绍 Refine 模式下的网格划分技术。 了解 Discovery Explore 模式下的网格划分 网格划分是将几何模型划分为小单元以模拟系统在不同条件下的行为的过程。这是通过创建…...
前 5 名 IPhone 解锁工具/软件
设备已禁用并且您无法访问它?如果您无法通过密码解锁,尝试 iPhone 解锁软件可能是最好的解决方案。 虽然市场上有很多免费或付费的 iPhone 解锁工具,但您可能不知道它们之间的区别以及如何选择最适合您的工具。 本文将介绍 5 款iPhone 解锁…...
富士通 自动进纸 扫描仪 scan 按钮 触发设置
附赠光盘里的驱动和软件都先装好,然后3步, 1,控制面板,对着设备右键,详细设置,触发对应,选择stream capture软件。(差不多就这意思,懂的自然懂) 2ÿ…...
SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
在现代 Java 开发中,我们常常需要处理各种通用的功能和需求,诸如枚举的处理、JSON 数据处理,以及分页查询等。这些功能虽然看似简单,但在实际开发中往往涉及到许多细节和优化。为了提高开发效率、减少重复代码的编写,我…...
dos2unix: command not found
如果你在终端或命令行界面中遇到了“dos2unix: command not found”的错误,这意味着你的系统中没有安装dos2unix工具。dos2unix是一个用于将文本文件中的DOS/Mac格式的行结束符转换为Unix/Linux格式的行结束符的工具。 以下是一些解决方法: 安装dos2un…...
使用 Docker 查看 Elasticsearch 错误日志
在使用 Elasticsearch(简称 ES)的过程中,我们可能会遇到各种问题。为了快速定位和解决这些问题,查看错误日志是关键。本文将介绍如何使用 Docker 查看 Elasticsearch 的错误日志,并提供一些实用技巧。 1. 安装 Docker…...
Scala 访问修饰符
Scala 访问修饰符 在编程语言中,访问修饰符是一种重要的语法元素,它用于控制类、对象、特质、接口、方法和变量的访问级别。Scala作为一种多范式编程语言,也提供了丰富的访问修饰符,以实现封装和隐藏内部实现细节。本文将详细介绍…...
VisualRules规则引擎语法介绍
VisualRules规则引擎是一款用于处理复杂业务规则的引擎,广泛应用于金融、保险、医疗等领域。它通过将业务逻辑从代码中分离出来,以可配置的方式管理和执行规则。以下是VisualRules规则引擎的基本语法和使用方法: 1. 规则定义 规则通常由 条件…...
UDP_TCP
目录 1. 回顾端口号2. UDP协议2.1 理解报头2.2 UDP的特点2.3 UDP的缓冲区及注意事项 3. TCP协议3.1 报头3.2 流量控制2.3 数据发送模式3.4 捎带应答3.5 URG && 紧急指针3.6 PSH3.7 RES 1. 回顾端口号 在 TCP/IP 协议中,用 “源IP”, “源端口号”…...
web端显示spine动画
一、说明 (1)这边使用的spine版本是3.8.99 spine包含3个部分,可以将三个文件上传到cdn,三个文件放在相同的目录中 test.atlas 、 test.json 、test.png (2)pixi.js - v7.0.4 https://github.com/pixijs/pixijs &…...
【74HC192减法24/20/72进制】2022-5-17
缘由用74ls192设计一个72进制的减法计数器,需要有逻辑电路图-硬件开发-CSDN问答...
前端安全措施:接口签名、RSA加密、反调试、反反调试、CAPTCHA验证
文章目录 引言I 设置防爬虫功能使用robots.txt文件通过配置HTTP头部中的X-Robots-TagII 禁止打开开发者工具反复清空控制台无限debugger反调试检查是否按下了F12或其他调试快捷键禁用右键监听调试快捷键例子III 屏蔽粘贴/复制/剪切/选中IV 知识扩展: javascript内置命令调试分…...
算法攻略:顺序表的进阶之路——移除元素
题目如下: 思路: 双指针法 nums[src] val,srcnums[src] ! val,src的值赋值给dst,src和dst都 注: 1)双指针法:只是抽象出了两个指向数组的变量,并不是真的指针。 2&#…...
zookeeper+kafka
一、zookeeper 1.概述 zoo: 开源的分布式框架协调服务 zookeeper的工作机制:基于观察者模式设计的分布式结构,负责存储和管理架构当中的元信息,架构当中的应用接受观察者的监控,一旦数据有变化,通知对应的zookeeper&a…...
大循环引起CPU负载过高
一、问题背景 环境:jdk1.8 tomcat7 在一次发布时,cpu出现负载过高,其负载突破200%,并且响应时间也大幅度超时。 二、问题分析 【1】发布前做过压测,并没有发现cpu异常升高的现象,所以其可能与生产环境的请…...
xdoj ROT13加密
标题 ROT13加密 问题描述 ROT13是一种古典加密方法,其加密原理是把一个字母用字母表位置相距13的字母来进行 替换,例如字母‘a’用字母‘n’来替换,字母‘z’用字母‘m’来替换。 输入一段字符串,然后把其中的大小写字母按照上…...
图数据库 | 17、高可用分布式设计(上)
我们在前面的文章中,探索了多种可能的系统扩展方式,以及每种扩展方式的优劣。 本篇文章将通过具体的架构设计方案来对每一种方案的设计、投入产出比、各项指标与功能,以及孰优孰劣等进行评价。 在设计高性能、高可用图数据库的时候…...
五类推理(逻辑推理、概率推理、图推理、基于深度学习的推理)的开源库 (一)
在开发中,有一些开源库可以实现不同类型的推理,包括逻辑推理、概率推理、图推理、基于深度学习的推理等。以下是五类推理(逻辑推理、概率推理、图推理、基于深度学习的推理)的现成开源库,它们各自的功能、特点和适用场…...
java Redisson 实现限流每秒/分钟/小时限制N个
1.引入maven包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.redisson</groupId><artifactId>red…...
麒麟操作系统服务架构保姆级教程(八)数据库拆分静态业务拆分和负载均衡
当我们网站的访问量提升上来了,平均每分钟上千条访问量,但是服务器的性能是有限的,所以就需要将单台的架构进行拆分了,但是web服务器的内容不同怎么办,就会用到咱们的共享存储,两台web服务器今天咱们将LNMP…...
LQ24fresh
目录 C. 录入成绩 D. 标记名字 E. 奖杯排列 C. 录入成绩 (1)以国特 G 为切入点,枚举每一个 G 单独时是否为合法字符串,若合法 G1 有多少个 (2)用到的两个 string 函数: s.erase( i, a ) &…...
Postman[8] 断言
1.常见的断言类型 status code: code is 200 //检查返回的状态码是否为200 Response body: contain string //检查响应中包含指定字符串包含指定的值 response body:json value check/ /检查响应中其中json的值 Response body: is equal to string …...
YOLOv8/YOLOv11改进 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多种注意力机制
目录 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改进训练 前言 本篇文章将为大家介绍Ultralytics/YOLOv8/YOLOv11中常用注意力机制的添加,可以满足一些简单的涨点需求。本文仅写方法,原理不多讲解,需要可跳…...
C语言return与 ? :
上次讲解过一次函数,函数要配合return返回东西,但是在编写一些程序的时候我发现了很多冷门逻辑语法还没有掌握,当时讲课也是看一眼就过去了(死去的记忆开始攻击我) Return,爽! 现在有一个小问…...
持续大额亏损,销量增幅有限,北汽蓝谷依旧黯然神伤
撰稿 | 行星 来源 | 贝多财经 “起了个大早,赶了个晚集”,用在如今的北汽蓝谷身上再合适不过。 2025年的第一个工作日,北汽蓝谷新能源科技股份有限公司(SH:600733,简称“北汽蓝谷”)对外披露了子公司北京…...
(五)开机自启动以及scp工具文件传输小问题
文章目录 程序开机自启动先制作一个可执行程序第一种 通过命令行实现程序开机自启动第二种 通过 Linux 系统镜像实现程序开机自启动 scp工具文件传输小问题 程序开机自启动 原因:做成产品后,用户直接开机使用,总不能在开机执行程序后才可以使…...
数据挖掘——支持向量机分类器
数据挖掘——支持向量机分类器 支持向量机最小间隔面推导基于软间隔的C-SVM非线性SVM与核变换常用核函数 支持向量机 根据统计学习理论,学习机器的实际风险由经验风险值和置信范围值两部分组成。而基于经验风险最小化准则的学习方法只强调了训练样本的经验风险最小…...
自动化办公 | 根据成绩进行自动评级
今天我们将介绍一个常见的自动化办公需求:根据成绩自动评级。通过这篇文章,我们将介绍如何利用Python进行自动化办公,将表格中的成绩根据预定的规则进行评级,并生成一个新的带评级信息的表格。 需求背景 我们有一个表格…...