LangChain-Chatchat:基于LangChain和ChatGLM2-6B构建本地离线私有化知识库

news2024/9/22 2:10:09

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。

一、前言

自从去年GPT模型火爆以来,降低了很多个人和企业进入人工智能领域的门槛,对于大模型尤其是开源的大模型国内应该比较受关注和期待,毕竟高额的成本也能将不少人阻挡在门外,其次,大家都希望在产品中集成LLM的能力,结合业务来落地智能化应用,提升产品的竞争力,最直接的应用就是构建知识库。

下面汇总了一下之前介绍的有关构建知识库相关的文章和视频,包含了开源和闭源多种不同的解决方案,从使用情况来看,因为都是开源产品,所以在架构和功能完整性上可能都不够全面,因为一直在持续的迭代过程,如果是站在一个中小企业的角度,去选型一款比较符合企业构建本地知识库需求的产品来评估,从以下介绍的开源产品目前的实现效果和未来规划目标来看,个人觉得Quivr从设计上来讲更加符合应用需求,前提是增加企业已有文档库、数据库纳入知识库的能力,扩展Danswer提高的功能,完善并丰富对于开源或者闭源模型的支持(目前暂时支持较弱)尤其是对于中文支持不错的国产模型比如ChatGLM2等,另外一种方案就是今天介绍的LangChain-Chatchat刚好可以与Quivr互补,其对于模型的支持很丰富,但对于业务端的属性支持较弱,只支持单个用户单个知识库,不能建立多个知识库通过权限来隔离。

当然不排除还有其它更合适的解决方案,至少开源的产品或多或少很难直接拿来作为生产级别去应用,还得需要进行二开去完善,大部分做的相对成熟的开源产品基本上都是走商业化路线,或者开源通过服务收费,比如模型微调训练,构建特定行业应用的大模型和对外提供模型API能力。

  • [文章]Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)

  • [文章]Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统

  • [文章]Genoss GPT简介:使用 Genoss 模型网关实现多个LLM模型的快速切换与集成

  • [文章]Cohere 正式发布企业知识库助手 Coral

  • [文章]基于ChatGLM-6B构建本地私有化离线知识库

  • [文章]Flowise|无代码 ChatBot 构建平台|LangChain

  • [文章]Quivr 基于Supabase构建本地知识库

  • [视频]Quivr 基于Supabase构建本地知识库

  • [视频]PrivateGPT:免费构建本地私有化知识库[部署教程]

在构建企业级知识库方面,有许多解决方案和产品可供选择,包括开源和闭源。这些解决方案的核心技术基于LangChain,如Quivr结合Supabase、PrivateGPT和ChatGLM 6B等。同时,也有无代码平台Flowise,基于LangChain.js提供丰富的内置组件,帮助用户快速构建聊天机器人、智能客户和知识问答等应用。

为了解决模型扩展和维护的问题,Stan Girard开发了Genoss,通过创建简单的API使得模型扩展能力完全解耦。此外,Danswer是一个开源项目,具有Connectors连接器优势,可以方便地将文档资料添加到向量数据库中进行索引。

在选择本地私有化模型时,清华大学开源的ChatGPT-6B模型对中文支持友好,并可在消费级显卡上运行。大语言模型的发展为智能客服、文档检索和代码搜索等场景提供了便利,提高了生产力。Coral这款AI知识库助手致力于解决企业痛点,重新定义生产力。

总之,在构建企业级知识库时,有多种解决方案可供选择。根据实际需求和场景来选择合适的方案,运用大语言模型的技术优势,提高企业生产力和效率。

二、介绍

2.1、ChatGLM2-6B

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:

  1. 更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。

  2. 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练。对于更长的上下文,我们发布了 ChatGLM2-6B-32K 模型。LongBench 的测评结果表明,在等量级的开源模型中,ChatGLM2-6B-32K 有着较为明显的竞争优势。

  3. 更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。

  4. 更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用

2.2、LangChain-Chatchat 介绍

LangChain-Chatchat (原 Langchain-ChatGLM): 基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。一种利用 LangChain 思想实现的基于本地知识库的问答应用,其目标是期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

它的核心思路是通过使用 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型,然后依托于 LangChain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。

依托于本项目支持的开源 LLM 与 Embedding 模型,全部可使用开源模型离线私有部署实现。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。

本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答

三、模型支持

LangChain-Chatchat 默认使用的 LLM 模型为 THUDM/chatglm2-6b,默认使用的 Embedding 模型为 moka-ai/m3e-base 为例。

3.1、LLM 模型支持

目前最新的版本中基于 FastChat 进行本地 LLM 模型接入,目前已经正式接入支持的模型达 30+,具体清单如下:

  • meta-llama/Llama-2-7b-chat-hf

  • Vicuna, Alpaca, LLaMA, Koala

  • BlinkDL/RWKV-4-Raven

  • camel-ai/CAMEL-13B-Combined-Data

  • databricks/dolly-v2-12b

  • FreedomIntelligence/phoenix-inst-chat-7b

  • h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-7b

  • lcw99/polyglot-ko-12.8b-chang-instruct-chat

  • lmsys/fastchat-t5-3b-v1.0

  • mosaicml/mpt-7b-chat

  • Neutralzz/BiLLa-7B-SFT

  • nomic-ai/gpt4all-13b-snoozy

  • NousResearch/Nous-Hermes-13b

  • openaccess-ai-collective/manticore-13b-chat-pyg

  • OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5

  • project-baize/baize-v2-7b

  • Salesforce/codet5p-6b

  • StabilityAI/stablelm-tuned-alpha-7b

  • THUDM/chatglm-6b

  • THUDM/chatglm2-6b

  • tiiuae/falcon-40b

  • timdettmers/guanaco-33b-merged

  • togethercomputer/RedPajama-INCITE-7B-Chat

  • WizardLM/WizardLM-13B-V1.0

  • WizardLM/WizardCoder-15B-V1.0

  • baichuan-inc/baichuan-7B

  • internlm/internlm-chat-7b

  • Qwen/Qwen-7B-Chat

  • HuggingFaceH4/starchat-beta

  • 任何 EleutherAI 的 pythia 模型,如 pythia-6.9b

  • 在以上模型基础上训练的任何 Peft 适配器。为了激活,模型路径中必须有 peft 。注意:如果加载多个peft模型,你可以通过在任何模型工作器中设置环境变量 PEFT_SHARE_BASE_WEIGHTS=true 来使它们共享基础模型的权重。

以上模型支持列表可能随 FastChat 更新而持续更新,可参考 FastChat 已支持模型列表。

除本地模型外,本项目也支持直接接入 OpenAI API,具体设置可参考 configs/model_configs.py.example 中的 llm_model_dictopenai-chatgpt-3.5 配置信息。

3.2、Embedding 模型支持

对于构建文本向量的模型,目前支持调用 HuggingFace 中的 Embedding 模型,目前已支持的 Embedding 模型达 15+,具体支持清单如下:

  • moka-ai/m3e-small

  • moka-ai/m3e-base

  • moka-ai/m3e-large

  • BAAI/bge-small-zh

  • BAAI/bge-base-zh

  • BAAI/bge-large-zh

  • BAAI/bge-large-zh-noinstruct

  • text2vec-base-chinese-sentence

  • text2vec-base-chinese-paraphrase

  • text2vec-base-multilingual

  • shibing624/text2vec-base-chinese

  • GanymedeNil/text2vec-large-chinese

  • nghuyong/ernie-3.0-nano-zh

  • nghuyong/ernie-3.0-base-zh

  • OpenAI/text-embedding-ada-002

四、项目部署

4.1、环境说明

这里就用阿里云的海外GPU服务器来演示如何部署基于ChatGLM2-6B本地知识库,服务器基本配置信息如下:

  • CPU8核(vCPU)

  • 内存30 GiB

  • GPU:NVIDIA A10 显存 24GB

4.2、安装 Conda

  • 如果是全新的服务器,首次需要安装Conda,在终端中,使用以下命令下载Miniconda安装脚本:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  • 使用以下命令运行安装脚本:
bash Miniconda3-latest-Linux-x86_64.sh
  • 按照安装程序的提示进行安装。您可以选择安装位置和环境变量设置等选项。

  • 安装完成后,关闭终端并重新打开一个新终端,在新终端中,使用以下命令激活conda环境:

 source ~/.bashrc
  • 使用以下命令检查conda是否成功安装:
conda --version

如果conda成功安装,您将看到conda的版本号,我这里安装的是conda 23.5.2。

4.3、安装 Python

首先,确信你的机器安装了 Python 3.8 - 3.11 版本

python --version 
Python 3.8.17

如果没有安装或者低于这个版本,可使用conda安装环境

conda create -p /opt/langchain-chatchat/pyenv python=3.8
激活Python虚拟环境
conda activate /opt/langchain-chatchat/pyenv

关闭环境
conda deactivate /opt/langchain-chatchat/pyenv

# 删除环境
conda env remove -p /opt/langchain-chatchat/pyenv

这里的路径可根据大家的实际情况来调整即可

root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# conda activate /opt/langchain-chatchat/pyenv
(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# python --version
Python 3.8.17
(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# 

更新py库

pip3 install --upgrade pip

4.4、项目依赖

# 拉取仓库
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
$ cd Langchain-Chatchat

使用pypi源安装全部依赖(默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装)

pip install -r requirements.txt -i https://pypi.python.org/simple

说明:默认安装不指定镜像[pip install -r requirements.txt]安装过程可能会出现依赖或者其它奇怪的错误,建议指定镜像源下载,国外的服务器用pypi镜像,国内的服务器可以用阿里源或者清华源。

# 使用阿里源
$ pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/

# 使用清华源
$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装依赖的时候可能会出现如下错误:

Could not find a version that satisfies the requirement setuptools_scm (from versions: none)

这个错误通常在安装或配置setuptools_scm包时遇到问题时出现。只需要重新安装setuptools_scm

pip install --index-url https://pypi.org/simple/ setuptools_scm

4.5、下载模型

因为模型文件一般比较大(ChatGLM2-6B的模型权重文件差不多12G),首先需要先安装Git LFS

# 添加Git LFS的APT存储库。运行以下命令将Git LFS的APT存储库添加到您的系统中:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

# 安装Git LFS。运行以下命令来安装Git LFS:
sudo apt-get install git-lfs

# 安装完成后,您可以运行以下命令来验证Git LFS是否已成功安装:
git lfs version

# 如果成功安装,您将看到Git LFS的版本信息。
git-lfs/3.4.0 (GitHub; linux amd64; go 1.20.6)

下载模型放入指定文件目录中

# 下载 LLM 模型
$ git clone https://huggingface.co/THUDM/chatglm2-6b /your_path/chatglm-6b

# 下载 Embedding 模型
$ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese /your_path/text2vec

# 模型需要更新时,可打开模型所在文件夹后拉取最新模型文件/代码
$ git pull

your_path换成你模型的实际下载路径即可,我这里将模型放在 /opt/langchain-chatchat/models 目录。

$ git clone https://huggingface.co/THUDM/chatglm2-6b /opt/langchain-chatchat/models/chatglm-6b

$ git clone https://huggingface.co/moka-ai/m3e-base /opt/langchain-chatchat/models/m3e-base

4.6、设置配置项

复制模型相关参数配置模板文件 configs/model_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 model_config.py

cp model_config.py.example model_config.py

复制服务相关参数配置模板文件 configs/server_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 server_config.py

cp server_config.py.example server_config.py

在开始执行 Web UI 或命令行交互前,请先检查 configs/model_config.pyconfigs/server_config.py 中的各项模型参数设计是否符合需求:

  • 请确认已下载至本地的 LLM 模型本地存储路径写在 llm_model_dict 对应模型的 local_model_path 属性中,如:
llm_model_dict={
    "chatglm2-6b": {
            "local_model_path": "/opt/langchain-chatchat/models/chatglm-6b",
            "api_base_url": "http://localhost:8888/v1",  # "name"修改为 FastChat 服务中的"api_base_url"
            "api_key": "EMPTY"
     }
}
  • 请确认已下载至本地的 Embedding 模型本地存储路径写在 embedding_model_dict 对应模型位置,如:
embedding_model_dict = {
     "m3e-base": "/opt/langchain-chatchat/models/m3e-base",
}

如果你选择使用OpenAI的Embedding模型,请将模型的 key写入 embedding_model_dict中。使用该模型,你需要鞥能够访问OpenAI官的API,或设置代理。

4.7、知识库初始化

当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。

  • 如果您是从 0.1.x 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型与 configs/model_config.py 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:
$ python init_database.py
  • 如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启 normalize_L2,需要以下命令初始化或重建知识库:
$ python init_database.py --recreate-vs

4.8、启动LLM服务

如需使用开源模型进行本地部署,需首先启动 LLM 服务,如果启动在线的API服务(如 OPENAI 的 API 接口),则无需启动 LLM 服务。

这里选择基于多进程脚本 llmapi.py 启动 LLM 服务的方式,在项目根目录下,执行 server/llmapi.py 脚本启动 LLM 模型服务:

$ python server/llm_api.py

如果部署服务器具备单张或者多张GPU显卡,只需在 llmapi.py 中修改 createmodelworkerapp 函数中,修改如下三个参数:

gpus=None, 
num_gpus=1, 
max_gpu_memory="20GiB"

其中,gpus 控制使用的显卡的ID,如果 "0,1"; num_gpus 控制使用的卡数;max_gpu_memory 控制每个卡使用的显存容量。

4.9、启动API服务

在线调用API服务的情况下,直接执执行 server/api.py 脚本启动 API 服务;

python server/api.py

启动 API 服务后,可访问 localhost:7861{API 所在服务器 IP}:7861 FastAPI 自动生成的 docs 进行接口查看与测试。

  • FastAPI docs 界面

4.9、启动 Web UI 服务

使用 Langchain-Chatchat 主题色启动 Web UI 服务(默认使用端口 8501

$ streamlit run webui.py --theme.base "light" --theme.primaryColor "#165dff" --theme.secondaryBackgroundColor "#f5f5f5" --theme.textColor "#000000"
  • Web UI 对话界面:

  • Web UI 知识库管理页面:

说明:安装过程中如果遇到其它的问题,建议先去官方GitHub的FAQ中看看,大部分问题已经有解决方案了。 https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/FAQ.md

五、Docker 环境部署

如果想快速部署 LangChain-Chatchat 产品来体验,可以选择Docker一键部署的方式,比较简单,只需要先安装Docker 容器,在Unbuntu环境中如何安装 Docker & Docker Compose,可以参考文章 《Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)》中的3.2节。这里不过多赘述。 Windows安装Docker更简单。

Docker镜像使用的版本一般会稍微滞后一些,如果想快速体验最新的版本按前面开发模式部署会更合适一点。

LangChain-Chatchat项目使用的 Docker 镜像地址是:

registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0

docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0
  • 该版本镜像大小 33.9GB,使用 v0.2.0,以 nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 为基础镜像

  • 该版本内置一个 embedding 模型:m3e-large,内置 chatglm2-6b-32k

  • 该版本目标为方便一键部署使用,请确保您已经在Linux发行版上安装了NVIDIA驱动程序

  • 请注意,您不需要在主机系统上安装CUDA工具包,但需要安装 NVIDIA Driver 以及 NVIDIA Container Toolkit,请参考安装指南

  • 首次拉取和启动均需要一定时间,首次启动时请参照下图使用 docker logs -f <container id> 查看日志

  • 如遇到启动过程卡在 Waiting.. 步骤,建议使用 docker exec -it <container id> bash 进入 /logs/ 目录查看对应阶段日志

六、References

ChatGLM2-6B

https://github.com/THUDM/ChatGLM2-6B

LangChain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat


如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。

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

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

相关文章

09-微信小程序 网络请求API(实现轮播广告和简易的聊天窗口)

09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口) 文章目录 微信小程序API服务器域名配置注意网络相关APIrequestRequestTask 请求任务对象object.success 回调函数object.fail 回调函数案例代码&#xff08;实现轮播图&#xff09; WebSocket案例代码&#xff08;实现…

Vue:插槽,与自定义事件

1.插槽slot <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <div id"app"><!-- <p>列表书籍</p>--> <!-- …

【【STM32分析IO该设置什么模式的问题】】

STM32分析IO该设置什么模式的问题 我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉&#xff0c;但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以…

如何选择合适的损失函数

目录 如何选择合适的损失函数 1、均方误差&#xff0c;二次损失&#xff0c;L2损失&#xff08;Mean Square Error, Quadratic Loss, L2 Loss&#xff09; 2、平均绝对误差&#xff0c;L1损失&#xff08;Mean Absolute Error, L1 Loss&#xff09; 3、MSE vs MAE &#xff…

C++--两个数组的dp问题(2)

1.交错字符串 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定三个字符串 s1、s2、s3&#xff0c;请判断 s3 能不能由 s1 和 s2 交织&#xff08;交错&#xff09; 组成。 两个字符串 s 和 t 交织 的定义与过程如下&#xff0c;其中每个字符串都…

matlab使用教程(26)—常微分方程的求解

1.求解非刚性 ODE 本页包含两个使用 ode45 来求解非刚性常微分方程的示例。MATLAB 提供几个非刚性 ODE 求解器。 • ode45 • ode23 • ode78 • ode89 • ode113 对于大多数非刚性问题&#xff0c;ode45 的性能最佳。但对于允许较宽松的误差容限或刚度适中的问题&…

前端vue3+typescript架构

1、vue creat 项目名称 选择自定义 选择需要的依赖 选择vue3 一路enter&#xff0c;选择eslistprettier 继续enter&#xff0c;等待安装 按步骤操作&#xff0c;项目启动成功 2、vscode安装5款插件 2、代码保存自动格式化&#xff0c;保证每个开发人员代码一致&#xff0c;根目…

关于devos勒索病毒,这些是你应该了解的,勒索病毒解密

Devos 勒索病毒是一种近年来引起广泛关注的恶意软件&#xff0c;它通过加密用户文件来实施勒索&#xff0c;给用户带来了极大的困扰。本文将介绍 Devos 勒索病毒的特征、危害、防范措施及案例分析&#xff0c;帮助大家更好地了解和应对这一威胁。 一、Devos 勒索病毒的特点 加密…

C语言——指针进阶(一)

目录 ​编辑 一.字符指针 1.1 基本概念 1.2 面试题 二.指针数组 三.数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 四.数组参数、指针参数 4.1 一维数组传参 ​编辑 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 ​编辑 五.…

ScheduleJS Crack,新的“信息列”水平滚动功能

ScheduleJS Crack,新的“信息列”水平滚动功能 增加了对Angular 16的支持 新的“信息列”水平滚动功能。 新的“信息列”固定功能。 添加了输入属性以处理组件模板中的偶数和奇数ScheduleRowPlainBackgroundColor以及CSS变量。 改进了“信息列”和角度甘特组件的类型。 Schedul…

Linux内核学习(十一)—— 进程地址空间(基于Linux 2.6内核)

目录 一、地址空间 二、内存描述符 三、虚拟内存区域 四、操作内存区域 find_vma() mmap() 和 do_mmap()&#xff1a;创建地址区间 五、页表 一、地址空间 进程地址空间由进程可寻址并且允许进程使用的虚拟内存组成&#xff0c; 每个进程都有一个 32 位或 64 位的平坦&…

HTB Getting Started

HackTheBox Getting Started 练习解析 1.Basic Tools 直接用知识点 sjhdvjshtb[/htb]$ netcat 10.10.10.10 22SSH-2.0-OpenSSH_8.4p1 Debian-32.Service Scanning 这题需要连接vpn进行扫描 kail连接VPN sudo openvpn academy-regular.opvn #kail 没安装openvpn需要进行安装…

文本分类任务

文章目录 引言1. 文本分类-使用场景2. 自定义类别任务3. 贝叶斯算法3.1 预备知识3.2 贝叶斯公式3.3 贝叶斯公式的应用3.4 贝叶斯公式在NLP中的应用3.5 贝叶斯公式-文本分类3.6 代码实现3.7 贝叶斯算法的优缺点 4. 支持向量机4.1 支持向量机-核函数4.2 支持向量机-解决多分类4.3…

设计模式入门:解密优雅的代码构建

从本篇文章开始&#xff0c;我们将开启一个设计模式的系列文章&#xff0c;主要用来介绍常用的设计模式&#xff0c;使用场景和代码案例&#xff0c;对设计模式不熟悉的老铁可以关注一下&#xff0c;可以快速让你入门设计模式。 在软件开发的世界中&#xff0c;设计模式是一种…

1.神经网络基础知识

所有有用的计算机系统都有一个输入和一个输出&#xff0c; 并在输入和输出之间进行某种类型的计算。 神经网络也是如此。 当我们不能精确知道一些事情如何运作时&#xff0c; 我们可以尝试使用模型来估计其运作方式&#xff0c; 在模型中&#xff0c; 包括了我们可以调整的参数…

4-1-netty

非阻塞io 服务端就一个线程&#xff0c;可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件

list(介绍与实现)

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modififiers 1.2.6 list的迭代器失效 2. list的模拟实现 2.1 模拟实现list 2.2 list的反向迭代器 1.…

Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目、Mojo 新得 1 亿美元融资...

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中三则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊由 Python猫 出品…

内核模块添加功能及使用(静态、动态)

一、向内核添加新功能 1.1 静态加载法&#xff1a; 即新功能源码与内核其它代码一起编译进uImage文件内 新功能源码与Linux内核源码在同一目录结构下 在linux-3.14/driver/char/目录下编写myhello.c&#xff0c;文件内容如下&#xff1a; #include <linux/module.h> #i…

如何使用腾讯云服务器搭建网站?

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网分享使用腾讯云服务器建站教程&#xff0c;新手站长搭…