AI2.0时代如何快速落地AI智能应用开发,抓住时代机会

写在前面的话

当我们提到人工智能时也就是AI的时候呢,我们大多数人首先想到的可能就是像chatGPT这样的聊天机器人,这些聊天机器人通过理解,还有生成自然语言可以给我们提供一些信息,这个是AI最终的形态吗或者AI最终的形式吗?

比尔盖茨在他的个人博客中写道,现有的软件形式然而相当的笨拙软件的未来是智能代理,即AI agent。他认为5年之内,每个人都将拥有自己的智能助理,现在所有的软件都值得用智能方式重构一遍,他提到了人工智能代理agent,不仅会改变每个人与计算机交互的方式,它将颠覆软件行业,带来自我们从键入命令到点击图标以来最大的一个计算革命。

比如说你是一家商业咨询公司,每天有大量的数据表格要处理,那不仅要把数据库里面的原始数据
做清洗然后还要抽取成表格还要从这个表格里面去做统计分析,然后最后得到一些商业洞察,那么这个时候,通用的类chatGPT是无法满足的,最理想的方式呢就是使用AI的能力,构建属于自己的业务的一个chatbot或者代理机器人把数据库连接到agent输入你最终想要的洞察问题,不一会儿这个报告就出来了。甚至可以更进一步,比如连接上我们的电子邮箱,直接就发送出去了。包括在银行、电商平台等各个行业,都是可以广泛应用的。它可以有效提高客户互动的质量和效率。同时在类似数据可视化领域agent能够将原始数据转化为交互图表和图形,让数据分析变得更加有效和直观这对于类似市场分析、健康数据追踪等领域尤其重要。为理解大量复杂信息提供了一种新的方式。

我们大家都知道未来是AI的时代,但是呢很多人都会困惑说我如何去迎接AI时代,是学一堆AI工具怎么用吗,是练好提示词怎么写作吗,其实这些都是比较表面的一些东西,如果说打算投身到这个行业,我觉得agent是可以为大家提供一个选择的。个人来说,学习agent之后,可以结合自己的业务和长处去开发各种的agent来实现它业务的一个倍增,我们可以看到现在随着AI的发展,对这个专业人才需求也不断增加。

文章三大部分介绍

首先第一部分会深入了解AIGC行业,会从这个大模型的发展历程聊起介绍主流的大模型,讨论他们现在的不足,然后会引入微调和launching的解决方案,还会去拆解AIGC行业,从论文算法到应用去理解一些行业术语,最后我们会通过虚拟项目进行需求分析和技术选型,揭开后面的内容。

第二部分会深入这个launching的这个框架,通过学习launching的7大板块,系统的理解agent开发基础理论。比如说在本地环境如何运行launching,理解model IO的概念,掌握提示词模板的应用,还会构建大模型外脑这种知识库做增强检索、文本切分、下单数据库等等等等这样的一些内容。

最后第三部分通过一个完整的虚拟项目,把前面学到的知识付诸实践。从项目准备、产品分析、架构设计到开发实现过程。后面还有扩展的部分比如数字人、智能语音等等。

AI2.0时代应用开发者机会

大语言模型(LLM)基础与发展

LLM(Large Language Model)大语言模型是人工智能领域中一种强大的自然语言处理模型,其发展历史可以追溯到词向量、词嵌入技术的出现,逐步演进到对句子和文本的理解,最终实现了对复杂语境的全面理解和生成。

  1. 词向量与词嵌入:

    • 词向量是将单词映射到向量空间的技术,最早由Yoshua Bengio等人提出。这使得单词之间的语义关系能够以向量的形式被表示。
    • 词嵌入技术(Word Embeddings)通过训练将单词映射到连续的实值向量空间中,从而捕捉了单词之间的语义关系。Word2Vec、GloVe和FastText等算法为这一技术的发展做出了重要贡献。
  2. 句向量与全文向量:

    • 句向量技术是将整个句子映射到一个向量空间中,捕捉句子的语义信息。Doc2Vec和Skip-Thought Vectors是一些早期的方法,通过训练模型将句子映射到连续向量空间中。
    • 全文向量是将整个文档或文本片段表示为一个向量的技术,捕捉了文档的整体语义信息。这为模型理解文本上下文提供了基础。
  3. 理解上下文:

    • 随着深度学习技术的发展,神经网络模型开始在自然语言处理领域展现出强大的性能。特别是循环神经网络(RNN)和长短期记忆网络(LSTM)等模型,使得模型能够更好地理解文本的上下文信息。
    • Transformer模型的出现进一步提高了对文本上下文的理解能力,其自注意力机制允许模型在处理长文本时能够更好地捕捉到远距离的依赖关系,而不受长期依赖问题的困扰。
  4. 大模型介绍:

    • 随着硬件计算能力的提升和大规模数据集的可用性增加,研究人员开始尝试构建更大的语言模型。其中最著名的就是OpenAI的GPT系列(Generative Pre-trained Transformer),包括GPT、GPT-2、GPT-3等模型。这些模型利用了Transformer的架构,并通过大规模的预训练数据和参数数量的增加,实现了前所未有的语言理解和生成能力。
    • 这些大型语言模型可以通过预训练的方式学习语言的统计规律和语义信息,并在具体任务上进行微调,因此被广泛应用于文本生成、问答系统、机器翻译等领域,取得了令人瞩目的成果。

综上所述,LLM的发展史可以看作是从对单词到句子再到全文的理解能力逐步提升,最终通过大规模预训练的深度神经网络模型实现了对复杂语境的全面理解和生成。 

国内外主要LLM及特点介绍

 hugging face

提供简单易用的NLP模型和工具库,搞ai界的github。

Hugging Face – The AI community building the future.

大模型的不足以及解决方案

不具备记忆能力,上下文窗口的限制,实时信息更新慢,新旧知识难以区分,无法灵活操控外部系统,无法为领域问题,提供专业靠谱的答案。

AIGC产业拆解以及常见名词

aigc产业拆解

aigc常用名词 

应用级开发者应该如何拥抱AIGC 

这张这张图上,越往上他的整个难度大,门槛高,然后越往下,机会就会越多。

机会最少的是基座大模型,就是类似chatGPT、国内的百川智能这样的,特点就是消耗算力特别巨大,需要大量的资本来支持。做一次全量的训练的话现在可能在几千万美金,所以只有巨头和大资本是玩得起的。相应的来说的话,他的职业机会是比较少的。

再往下就是我们的行业垂直大模型,就是在所谓的在基座模型基础上去灌入一些行业的数据,在基础大模型上做微调,职业机会稍微多了一点。但是对于我们应用级开发者呢还是机会不是那么多。

再往下看就是所谓的AI原生应用,不管是ToB还是ToC的这块都有大量的机会。我们这些传统做互联网、科技公司、应用开发公司、科技创业公司、应用开发者都有大量的机会存在。它是一个比较重要的一个位置,也是未来一个爆发的赛道。就像苹果一样有自己的APP store。

所以说在这个时候其实是有大量的职业机会或者大量的这种应用开发的机会存在的,我们传统的应用开发者去快速转型去跟上这个赛道的一个绝佳的机会。有点像当年这个苹果刚发布APP store时候那个状态。可以说所有的应用,都值得用AI啊重新做一遍。

比如说AI加文旅,你计划做一次旅行,你的旅游的这个机器人会帮你找到适合你预算的酒店,然后智能体呢还会知道你你在一年中什么时候去旅行,根据他对你总是尝试这个新的目的地的了解或者你喜欢故地重游的行为的了解,他会向你建议旅游目的地,当他被询问的时候他智能就会根据你的兴趣和冒险的倾向为你推荐做可以做的事情,还能帮你预定你喜欢的餐厅。如果没有这样的一个AI场景的话,你现在做这些事情可能需要旅行社帮你去定制。但是呢使用了智能体加这个场景之后我们就可以解决。不远的未来我们每个人都会有自己的私人智能体助理。

agent开发这一个层面上,需要做哪些准备工作呢?或者说我们转型需要掌握一些什么东西。

1、首先就是要学习机器学习和深度学习的一些基础知识,大模型层面和行业模型层面有一个基础的知识准备。

2、需要有Python语言基础,这个方向大量的项目都是用Python来开发的

3、学会使用AI,例如开发工具和框架

4、应用开发是离不开行业场景和业务流程的,所以需要对行业的场景有一个深入的了解,抓到里面最关键的部分,可能成功的几率就会比较高

一、LangChain框架初识

LangChain是什么以及发展过程

LangChain是一个2022年10月25日开源的框架,其主要作用是帮助开发者更加高效、便捷地在实际应用程序中整合和利用大型语言模型(LLMs),例如GPT-3等,并且扩展这些模型的能力使其能够与外部数据源、API和其他服务进行交互。通过LangChain,开发者可以构建上下文感知的应用程序,使得语言模型不仅能基于自身训练内容生成回复,还能结合实时信息和历史上下文进行推理和决策。其特点包括模块化组件设计、支持数据感知的链式调用结构以及增强的语言模型代理功能,从而简化了开发流程并促进了基于LLM的创新型应用的诞生,如聊天机器人、智能问答系统、搜索引擎等高级NLP应用场景。

LangChain是react论文论文的落地实现,那么这个react表示的是什么,react其实是reason加act的一个合并缩写,也就是推理加行动。那么这篇论文啊为什么是launching的基础,它有什么特别。

人类的这个AI的这个方面,我们终极的目标是希望实现AGI,就是所谓的通用AI,那么在通用AI之前我们现在已经走到了大模型这个阶段,大模型要实现像人脑一样的思考首先就是要反过来想人类是怎么解决问题的,人类之所以拥有独一无二的认知能力,重要原因是我们不会采取无意义的行动。人类行动的背后都是有原因的都是有一个逻辑链条。我们人类通过行动,去获取外部世界的信息,这些信息呢又可以让我们形成更加完善的逻辑链条,进而调整后续的行动。

但是一个AI的程序它天然不具备这样的能力,那比如说我们跟open AI交互的时候,很多时候其实是一个直接的输入输出的一个关系,他没有这样的一个思维链,也没有这样的一个逻辑链。模型会给一些推理过程但是答案也是错的,因为它只推理没有获得外部信息,他这种情况下做的最好的只能是把他预训练时候底膜里面的东西知识拿出来去关联,那关联不到他就会瞎编就会出现幻觉。

那么react也就是这个reason加act,这样的一个范式就是想驱动LLM大模型来用类似这样的方法去工作,可以让大模型像人脑一样去思考。

LangChain的github地址:langchain-ai/langchain: 🦜🔗 Build context-aware reasoning applications (github.com)

LangChain能做什么它有什么能力

LangChain的核心思想是将不同的功能组件连接起来形成一个链式结构,每个组件都可以独立运作或与其他组件协作,这些组件包括但不限于:提示模板(Prompt Templates)、大型语言模型(LLMs)、代理(Agents)、短期/长期记忆(Memory)等。

LLMs & Prompt

提供了目前市面上几乎所有 LLM 的通用接口,同时还提供了 提示词 的管理和优化能力,同时也提供了非常多的相关适用工具,以方便开发人员利用 LangChain与 LLMs 进行交互。

Chains

LangChain 把 提示词、大语言模型、结果解析封装成 Chain,并提供标准的接口,以便允许不同的Chain形成交互序列,为 AI原生应用提供了端到端的 Chain

Retrieval Augemented Generation

检索增强生成式 是一种解决预训练语料数据无法及时更新而带来的回答内容陈旧日的方式。LangChain提供了支持 检索增强生成式 的 Chain,在使用时,这些 Chain 会首先与外部数据源进行交互以获得对应数据,然后再利用获得的数据与 LLMs 进行交互。典型的应用场如:基于特定数据源的问答机器人。

Agent

对于一个任务,代理主要涉及让 LLMs 来对任务进行拆分、执行该行动、并观察执行结果,代理 会重复执行这个过程,直到该任务完成为止。LangChain 为 代理 提供了标准接口,可供选择的代理,以及一些端到端的代理的示例。

Memory

指的是 chain 或 agent 调用之间的状态持久化。LangChain 为 内存 提供了标准接口,并提供了一系列的 内存 实现。

Evaluation

LangChain 还提供了非常多的评估能力以允许我们可以更方便的对 LLMs 进行评估。

LangChain的优势和劣势

优势 
1、大语言模型调用能力,支持多平台多模型调用,为用户提供灵活选择。

LangChain的核心优势之一是其对多个大型语言模型(LLMs)平台的兼容性,它允许开发人员无缝地集成和切换不同的模型,如OpenAI、Cohere或Hugging Face等。这意味着开发者可以根据项目需求选择最合适的模型,而不是被特定API所限制,极大地增强了应用的灵活性和可扩展性。

2、轻量级SDK(python、javascript)将LLMs与传统编程语言集成在一起。

通过提供Python和JavaScript等编程语言的轻量级软件开发工具包(SDK),LangChain简化了将LLMs整合到传统应用程序中的过程。这种集成方式降低了开发门槛,使得非AI专家也能相对容易地利用强大的语言模型功能,构建复杂的应用程序逻辑。

3、多模态支持,提供多模态数据支持,如图像、音频等。

LangChain不仅限于处理文本数据,还能够支持多模态输入输出,例如处理图像、音频和其他类型的数据。这一特性使得基于LangChain构建的应用可以理解并生成多媒体内容,从而实现更加丰富、智能的交互体验。

劣势
1、学习曲线相对较高。

尽管LangChain旨在简化LLM的应用开发,但由于其架构设计较为先进且具有高度模块化的特点,对于初次接触该框架的开发者来说,理解和掌握如何配置、串联各个组件以达到预期效果可能需要一定的时间投入和学习成本。

2、文档相对不完善,官方文档不是很完善。

刚开始的时候可能是因为赶进度的原因,他的文档质量非常低,基本上得去看他的原代码才能明白是做什么的,但是最新的版本发布以后文档的质量水平有很大的提升了。

3、缺乏大型工业化应用实践。

缺乏大型的工业化应用,也就说没有哪特别大的厂商在用它,但是有很多中小项目在用。

LangChain安装以及测试实例

pip安装LangChain
pip install --upgrade langchain -i https://pypi.org/simple 
conda安装LangChain
conda install langchain -c conda-forge
测试示例

我使用的是阿里云的通义千问大模型,使用openai、百度文心都可以,这里只是为了学习测试

调用官方sdk样例
from http import HTTPStatus
import dashscope#api_key需要自己申请,申请地址阿里云 https://bailian.console.aliyun.com/
dashscope.api_key=""
def sample_sync_call():prompt_text = '用萝卜、土豆、茄子做饭,给我个菜谱。'resp = dashscope.Generation.call(model='qwen-turbo',prompt=prompt_text)# The response status_code is HTTPStatus.OK indicate success,# otherwise indicate request is failed, you can get error code# and message from code and message.if resp.status_code == HTTPStatus.OK:print(resp.output)  # The output textprint(resp.usage)  # The usage informationelse:print(resp.code)  # The error code.print(resp.message)  # The error message.sample_sync_call()
 使用langchain库调用
#!pip install langchain langchainhub dashscope
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
from langchain_community.llms import Tongyi
from langchain import hub
import osprompt1 = ChatPromptTemplate.from_template("""{input}""")
os.environ["DASHSCOPE_API_KEY"] = ""
llm = Tongyi()chain_one = LLMChain(llm=llm,prompt=prompt1,verbose=False
)
print(chain_one.invoke("用萝卜、土豆、茄子做饭,给我个菜谱。"))

LangChain的核心模块与实操

模型IO大语言模型的交互接口

langchain中,“模型IO大语言模型的交互接口”是指一套标准化的方法和结构,用于与各种大型语言模型(Large Language Models, LLMs)进行交互。这些接口旨在提供一种通用的方式来封装不同LLM服务提供商(如OpenAI、Cohere、Hugging Face等)的具体API细节,使开发者能够以一致的方式调用不同模型的功能,而不必关心底层实现的差异。

prompts模板
概念

LangChain 提供了一套用于构建和操作提示(prompts)的模板系统,旨在帮助用户更高效、灵活地与各种大语言模型(LLMs)交互。Prompts 模板旨在标准化、模块化以及自动化提示的设计过程,以优化模型输出的质量和一致性。

PromptTemplate: 这是最基础的提示模板类,用于定义一个可复用的、结构化的文本模板,其中可能包含占位符或变量。模板可以包含静态文本和动态部分,动态部分通过指定的输入变量(如 foo 和 bar)进行填充。

StringPromptTemplate: 特定类型的提示模板,专用于处理字符串形式的模板。它可能提供了额外的方法或特性,便于直接操作文本模板。

PipelinePromptTemplate: 这种模板允许将多个独立的提示按照特定顺序组成一个“流水线”,每个步骤可能使用不同的模型或处理逻辑,使得复杂任务能够通过一系列有序的子任务来完成。

 关于提示词

好的提示词能够使语言模型更加有效准确的回答

PromptTemplate字符模板

简单的字符替换

from langchain.prompts import PromptTemplateprompt = PromptTemplate.from_template("你是一个起名大师,帮我起1个具有{county}特色的男孩名字")
prompt.format(county="法国")
ChatPromptTemplate模板

生成ai对话上下文背景,也就是先做个铺垫,可以使ai更加优化准确的回答

from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([("system","你是一个起名大师,你的名字叫{name}"),("human","你好{name},你感觉如何?"),("ai","你好!我状态非常好!"),("human","{user_input}"),]
)
chat_template.format_messages(name="陈大师",user_input="你叫什么名字呢?")
 StoryPromptTemplate自定义模板
from langchain.prompts import PromptTemplate, StringPromptTemplate
from pydantic import BaseModel
from typing import List
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
from langchain_community.llms import Tongyi
from langchain import hub
import os# 定义一个用于故事创作的自定义输入模型,包括标题、角色、情节点等信息
class StoryInput(BaseModel):title: strcharacters: List[str]plot_points: List[str]# 定义自定义提示模板
class StoryPromptTemplate():# 基础提示模板字符串base_prompt: str = "撰写一篇标题为《{title}》的短篇故事,故事中包含以下角色:{characters}。故事应包含以下情节点:{plot_points}。请以一句引人入胜的开场句开始故事。"def render(self, story_input: StoryInput) -> str:"""使用提供的故事输入渲染自定义提示。"""formatted_characters = ", ".join(story_input.characters)formatted_plot_points = "\n".join(f"- {point}" for point in story_input.plot_points)return self.base_prompt.format(title=story_input.title,characters=formatted_characters,plot_points=formatted_plot_points,)# 创建一个故事输入实例
story_input = StoryInput(title="神秘森林",characters=["艾芙琳", "加伦", "智者猫头鹰"],plot_points=["艾芙琳发现一张通往隐藏林地的古老地图。","加伦警告森林周围存在一股黑暗诅咒。","智者猫头鹰揭示了解除诅咒的秘密。",],
)# 创建自定义提示模板实例
story_prompt = StoryPromptTemplate()# 渲染并打印出最终的提示
final_prompt = story_prompt.render(story_input)prompt1 = ChatPromptTemplate.from_template("""{input}""")
os.environ["DASHSCOPE_API_KEY"] = "sk-cf5d02e81ea44717a35e22c72e4c0dc1"
llm = Tongyi()chain_one = LLMChain(llm=llm,prompt=prompt1,verbose=False
)
result = chain_one.invoke(final_prompt)
text_content = result['text']
print(text_content)

 持续更新。。。

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

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

相关文章

django-hexo-admin(一个基于django的hexo博客平台)

django-hexo-admin 一个过分简单的前后端分离的基于django、vue3的hexo博客平台后台管理系统 1. 项目介绍 一个异常简单的但理论上能够完全保留hexo生态的博客后台管理系统。仅仅对hexo的source以及输出路径public做出了一定的硬性调整,所以如果你很熟悉hexo,那么你将非常轻…

【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)

这里写目录标题 STM32资料包: 百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码:8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑&#…

Docker资源管理和分配指南

什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组(如CPU、内存、磁盘输入输出等)。 什么是Docker资源限制?…

代码随想录阅读笔记-二叉树【合并二叉树】

题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023

《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023 前言简介相关工作模型构架Basic ClassificationBias ExtractionUnbiased Inference实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天…

WPS二次开发系列:WPS SDK初始化

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 本文将详细介绍WPS SDK初始化&#xff0c;帮您能够更…

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注&#xff1a;PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

LeetCode 第391场周赛个人题解

目录 哈沙德数 原题链接 思路分析 AC代码 换水问题 II 原题链接 思路分析 AC代码 交替子数组计数 原题链接 思路分析 AC代码 最小化曼哈顿距离 原题链接 思路分析 AC代码 哈沙德数 原题链接 思路分析 签到题&#xff0c;不说了 AC代码 class Solution:def s…

Firefox 关键词高亮插件的简单实现

目录 1、配置 manifest.json 文件 2、编写侧边栏结构 3、查找关键词并高亮的方法 3-1&#xff09; 如果直接使用 innerHTML 进行替换 4、清除关键词高亮 5、页面脚本代码 6、参考 1、配置 manifest.json 文件 {"manifest_version": 2,"name": &quo…

ES6展开运算符

1.展开可迭代对象&#xff08;简单理解为数组和伪数组&#xff09;&#xff0c;如数组、 NodeList 、arguments。 可以通过展开运算符把一个伪数组转换为数组 const a [...document.body.children]; console.log(a); console.log(Array.isArray(a));2.实现数组的浅拷贝 cons…

金融出海机遇与挑战

全球化进程持续推进&#xff0c;在大环境的驱使下&#xff0c;金融科技公司逐渐将视野放到“海外”&#xff0c;本文将分析金融科技应用出海所面临的机遇与挑战。 一、金融科技出海机遇 政策支持 中关村互联网金融研究院和中关村金融科技产业发展联盟发布的《中国金融科技与数…

wireshark解析grpc/protobuf的方法

1&#xff0c;wireshark需要安装3.20以上 下载地址&#xff1a;https://www.wireshark.org/ 2&#xff0c;如果版本不对&#xff0c;需要卸载&#xff0c;卸载方法&#xff1a; sudo rm -rf /Applications/Wireshark.app sudo rm -rf $HOME/.config/wireshark sudo rm -rf /…

如何写一篇吸引人的软文(A5资源网原创)

写一篇吸引人的软文需要结合以下几个关键要素&#xff1a; 标题&#xff1a;一个吸引人的标题是吸引读者点击进入文章的第一步。标题要简洁明了&#xff0c;能够引起读者的兴趣&#xff0c;同时也要与文章内容相关。可以使用一些诱人的词汇&#xff0c;如”绝密揭露”、”独家…

Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像

Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像 —— 2024-04-03 夜 code review! 文章目录 Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像1.这里把这本书的例程代码放在了Dockerfile所在的文件夹内以使镜像预装例程代码2.创建Dockerfile3.构建Do…

Educational Codeforces Round 133 (Rated for Div. 2) (C dp D前缀和优化倍数关系dp)

A&#xff1a;能用3肯定用三&#xff0c;然后分类讨论即可 #include<bits/stdc.h> using namespace std; const int N 2e510,M2*N,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; typedef unsigned long long ULL; usi…

开源项目生存现况:xz投毒事件引发的思考与GNU tar维护挑战

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/04/xz-tar/&#xff09; 嗨&#xff0c;大家好&#xff01;我是来自淘宝网“学习日记小店”的 learndiary&#xff0c;专注于 Linux 服务领域。今天我要和大家谈谈近期备受瞩目的 XZ 供应链投毒事件…

【前端面试3+1】10 npm run dev 发生了什么、vue的自定义指令如何实现、js的数据类型有哪些及其不同、【最长公共前缀】

一、npm run dev发生了什么 运行npm run dev时&#xff0c;通常是在一个基于Node.js的项目中&#xff0c;用来启动开发服务器或者执行一些开发环境相关的任务。下面是一般情况下npm run dev会执行的步骤&#xff1a; 1. 查找package.json中的scripts字段&#xff1a; npm会在项…

redis之主从复制、哨兵模式

一 redis群集有三种模式 主从复制&#xff1a; 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。 缺陷&#xff1a; 故障恢复无法自动化&…