Langchain-Chatchat大语言模型本地知识库的踩坑、部署、使用

news2024/11/17 8:52:42

Langchain-Chatchat的部署

  • Langchain-Chatchat
    • 概述
    • 实现原理
  • 开发环境准备
    • 软件要求
    • 硬件要求
  • 部署
    • 拉取仓库
    • 创建虚拟环境
    • 安装全部依赖
    • 初始化配置文件
    • 初始化知识库
    • 模型下载
    • 启动项目
    • 启动API服务
    • 启动Web UI服务
    • 使用
      • 对话功能
      • 知识库管理
      • 文件对话
      • 搜索引擎问答
  • 异常集合
    • 异常1
    • 异常2
    • 异常3

Langchain-Chatchat

概述

Langchain-Chatchat是一个基于ChatGLM大语言模型与Langchain应用框架实现,开源、可离线部署的检索增强生成(RAG)大模型的本地知识库问答应用项目。

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

实现原理

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

在这里插入图片描述

开发环境准备

软件要求

使用Ubuntu系统,其他系统可能出现系统兼容性问题

Linux Ubuntu 22.04.5 kernel version 6.7

最低要求

该要求仅针对标准模式,轻量模式使用在线模型,不需要安装torch等库,也不需要显卡即可运行。

Python 版本: >= 3.8(很不稳定), < 3.11
CUDA 版本: >= 12.1

推荐要求

开发者在以下环境下进行代码调试,在该环境下能够避免最多环境问题。

Python 版本 == 3.10.12
CUDA 版本: == 12.3

硬件要求

如果为了体验使用该项目,可以使用线上模型,不需要太高的硬件要求。

如果想要顺利在GPU运行本地模型的 int4 量化版本,至少需要以下的硬件配置

ChatGLM2-6B & LLaMA-7B

最低显存要求: 7GB

推荐显卡: RTX 3060, RTX 2060

LLaMA-13B

最低显存要求: 11GB

推荐显卡: RTX 2060 12GB, RTX 3060 12GB, RTX 3080, RTX A2000

Qwen-14B-Chat

最低显存要求: 13GB

推荐显卡: RTX 3090

LLaMA-30B

最低显存要求: 22GB

推荐显卡: RTX A5000, RTX 3090, RTX 4090, RTX 6000, Tesla V100, RTX Tesla P40

LLaMA-65B

最低显存要求: 40GB

推荐显卡: A100, A40, A6000

注意:

若使用 int8 推理,则显存大致为 int4 推理要求的 1.5 倍

若使用 fp16 推理,则显存大致为 int4 推理要求的 2.5 倍

数据仅为估算,实际情况以 nvidia-smi 占用为准。

同时,Embedding 模型将会占用 1-2G 的显存,历史记录最多会占用数 G 显存,因此,需要多冗余一些显存。

内存最低要求: 内存要求至少应该比模型运行的显存大。

部署

拉取仓库

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

# 进入目录
cd Langchain-Chatchat

创建虚拟环境

创建一个虚拟环境,使项目与项目间进行软件版本隔离

conda create -n chat python=3.10

# 激活使用虚拟环境
conda activate chat 

安装全部依赖

在虚拟环境内安装项目的依赖

pip install -r requirements.txt 
pip install -r requirements_api.txt
pip install -r requirements_webui.txt  

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

初始化配置文件

python copy_config_example.py

脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对配置文件进行修改。

在这里插入图片描述

basic_config.py:基础配置项:配置记录日志的格式和储存路径,通常不需要修改。

kb_config.py:数据库配置:配置分词器、知识库、向量数据库等信息

model_config.py:模型配置项:包含本地LLM模型、本地Embeddings模型、在线LLM模型API的相关配置

prompt_config.py:提示词配置项:提示词配置分为三个板块,分别对应三种聊天类型:基础的对话提示词、与知识库对话的提示词、与Agent对话的提示词。

server_config.py:服务和端口配置项:不需要进行大量的修改,仅需确保对应的端口打开,并不互相冲突即可。server_config.py中的配置优先于startup.py中的默认值,注意避免配置文件覆盖

初始化知识库

第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,需要以下命令初始化或重建知识库:

python init_database.py --recreate-vs

如果已经有创建过知识库,可以先执行以下命令创建或更新数据库表:

$ python init_database.py --create-tables

第一次使用时,会自动下载BAAI/bge-large-zh模型,用于知识库的初始化构建

recreating all vector stores
2023-12-06 11:31:27,108 - faiss_cache.py[line:80] - INFO: loading vector store in 'samples/vector_store/bge-large-zh' from disk.
2023-12-06 11:31:28,013 - SentenceTransformer.py[line:66] - INFO: Load pretrained SentenceTransformer: BAAI/bge-large-zh
.gitattributes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.52k/1.52k [00:00<?, ?B/s]
1_Pooling/config.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 191/191 [00:00<?, ?B/s]
README.md: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 27.9k/27.9k [00:00<00:00, 1.78MB/s]
config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 941/941 [00:00<?, ?B/s]
config_sentence_transformers.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 124/124 [00:00<?, ?B/s]
model.safetensors: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.30G/1.30G [03:50<00:00, 5.66MB/s]
pytorch_model.bin: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.30G/1.30G [04:09<00:00, 5.22MB/s]
sentence_bert_config.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 52.0/52.0 [00:00<?, ?B/s]
special_tokens_map.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 125/125 [00:00<00:00, 223kB/s]
tokenizer.json: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 439k/439k [00:00<00:00, 463kB/s]
tokenizer_config.json: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 366/366 [00:00<?, ?B/s]
vocab.txt: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 110k/110k [00:00<00:00, 331kB/s]
modules.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 349/349 [00:00<?, ?B/s]
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00,  2.13s/it]
2023-12-06 11:42:08,536 - loader.py[line:54] - INFO: Loading faiss with AVX2 support.
2023-12-06 11:42:08,537 - loader.py[line:58] - INFO: Could not load library with AVX2 support due to:
ModuleNotFoundError("No module named 'faiss.swigfaiss_avx2'")
2023-12-06 11:42:08,537 - loader.py[line:64] - INFO: Loading faiss.
2023-12-06 11:42:08,946 - loader.py[line:66] - INFO: Successfully loaded faiss.
2023-12-06 11:42:09,301 - faiss_cache.py[line:80] - INFO: loading vector store in 'samples/vector_store/bge-large-zh' from disk.
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  6.13it/s]

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\img\大模型指令对齐训练原理-幕布图片-350029-666381.jpg 添加到向量库,共包含2条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00,  2.01s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\大模型应用技术原理.md 添加到向量库,共包含7条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:07<00:00,  7.84s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\分布式训练技术原理.md 添加到向量库,共包含11条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:18<00:00, 18.49s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\img\大模型推理优化策略-幕布图片-699343-219844.jpg 添加到向量库,共包含1条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  5.38it/s]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\llm\大模型技术栈-实战与应用.md 添加到向量库,共包含2条文档

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_open.csv 添加到向量库,共包含323条文档
Batches:  45%|███████████████████████████████████████████████████████████████████████████████████▋                                                                                                    | 5/11 [02:00<02:08, 21.40s/it]

正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_closed.xlsx 添加到向量库,共包含86条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [01:35<00:00, 31.86s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain-ChatGLM_open.xlsx 添加到向量库,共包含126条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [02:14<00:00, 33.64s/it]
正在将 samples/F:\GitHub\Langchain-Chatchat\knowledge_base\samples\content\test_files\langchain.pdf 添加到向量库,共包含52条文档
Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:56<00:00, 28.44s/it]
2023-12-06 11:55:42,220 - faiss_cache.py[line:24] - INFO: 已将向量库 ('samples', 'bge-large-zh') 保存到磁盘
总计用时: 0:24:15.137100

注意:

Windows环境下,会默认自动将该模型下载到C:\Users\Admin\.cache\torch\sentence_transformers目录下,若下载失败,参考异常3中的处理办法

模型下载

模型下载取决于自己的网络情况,这里需要提前下载THUDM/chatglm2-6bmoka-ai/m3e-base到本地,然后在model_config.py中配置

1.若网络良好(全球畅通无阻)则完全不需要先下载模型,在执行过程中会自动下载相关模型。

2.如果网络存在问题,则可以事先下载好需要的模型,然后在model_config.py文件中配置,具体配置参考异常3中的处理办法

启动项目

启动项目整个过程中,坑也比较多,参考异常2与异常3中的处理办法。

python startup.py -a   

启动时,如果没用在model_config.py中配置配置模型信息,则会自动模型下载THUDM/chatglm2-6b到本地使用

==============================Langchain-Chatchat Configuration==============================
操作系统:Windows-10-10.0.19045-SP0.
python版本:3.10.13 | packaged by Anaconda, Inc. | (main,Sep 11 2023, 12:20:02) [GCC 11.4.0]
项目版本:v0.2.8
langchain版本:0.0.344. fastchat版本:0.2.33


当前使用的分词器:ChineseRecursiveTextSplitter
当前启动的LLM模型:['chatglm3-6b', 'zhipu-api', 'openai-api'] @ cuda
{'device': 'cuda',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'model_path': 'THUDM/chatglm3-6b',
 'port': 20002}
{'api_key': '',
 'device': 'auto',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'online_api': True,
 'port': 21001,
 'provider': 'ChatGLMWorker',
 'version': 'chatglm_turbo',
 'worker_class': <class 'server.model_workers.zhipu.ChatGLMWorker'>}
{'api_base_url': 'https://api.openai.com/v1',
 'api_key': '',
 'device': 'auto',
 'host': '0.0.0.0',
 'infer_turbo': False,
 'model_name': 'gpt-3.5-turbo',
 'online_api': True,
 'openai_proxy': '',
 'port': 20002}
当前Embbedings模型: bge-large-zh @ cuda
==============================Langchain-Chatchat Configuration==============================


2023-12-06 12:20:03,211 - startup.py[line:650] - INFO: 正在启动服务:
2023-12-06 12:20:03,211 - startup.py[line:651] - INFO: 如需查看 llm_api 日志,请前往 F:\GitHub\Langchain-Chatchat\logs
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Started server process [5259]
2023-12-06 12:202:30 | ERROR | stderr | INFO:     Waiting for application startup.
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Application startup complete.
2023-12-06 12:20:30 | ERROR | stderr | INFO:     Uvicorn running on http://0.0.0.0:20000 (Press CTRL+C to quit)
2023-12-06 12:20:30 | INFO | model_worker | Register to controller
2023-12-06 12:20:32 | INFO | model_worker | Loading the model ['chatglm3-6b'] on worker 407a17ca ...
config.json:   0% 0.00/1.32k [00:00<?, ?B/s]
config.json: 100% 1.32k/1.32k [00:00<00:00, 6.39MB/s]
configuration_chatglm.py:   0% 0.00/2.33k [00:00<?, ?B/s]
configuration_chatglm.py: 100% 2.33k/2.33k [00:00<00:00, 8.98MB/s]
modeling_chatglm.py:   0% 0.00/55.6k [00:00<?, ?B/s]
modeling_chatglm.py: 100% 55.6k/55.6k [00:00<00:00, 40.6MB/s]
quantization.py:   0% 0.00/14.7k [00:00<?, ?B/s]
quantization.py: 100% 14.7k/14.7k [00:00<00:00, 27.7MB/s]
pytorch_model.bin.index.json:   0% 0.00/20.4k [00:00<?, ?B/s]
pytorch_model.bin.index.json: 100% 20.4k/20.4k [00:00<00:00, 74.7MB/s]
Downloading shards:   0% 0/7 [00:00<?, ?it/s]
pytorch_model-00001-of-00007.bin:   0% 0.00/1.83G [00:00<?, ?B/s]
pytorch_model-00001-of-00007.bin:   1% 21.0M/1.83G [00:00<00:08, 207MB/s]
pytorch_model-00001-of-00007.bin:   3% 62.9M/1.83G [00:00<00:05, 300MB/s]
pytorch_model-00001-of-00007.bin:   6% 115M/1.83G [00:00<00:04, 382MB/s]
pytorch_model-00001-of-00007.bin:   9% 157M/1.83G [00:00<00:04, 385MB/s]
pytorch_model-00001-of-00007.bin:  11% 199M/1.83G [00:00<00:04, 350MB/s]
pytorch_model-00001-of-00007.bin:  13% 241M/1.83G [00:00<00:04, 364MB/s]



Loading checkpoint shards:   0%|                                                                                                                                                                               | 0/7 [00:00<?, ?it/s]
Loading checkpoint shards:  14%|███████████████████████▊                                                                                                                                               | 1/7 [00:20<02:02, 20.42s/it]
Loading checkpoint shards:  29%|███████████████████████████████████████████████▋                                                                                                                       | 2/7 [00:44<01:51, 22.35s/it]
Loading checkpoint shards:  43%|███████████████████████████████████████████████████████████████████████▌                                                                                               | 3/7 [01:08<01:33, 23.26s/it]
Loading checkpoint shards:  57%|███████████████████████████████████████████████████████████████████████████████████████████████▍                                                                       | 4/7 [01:41<01:21, 27.07s/it]
Loading checkpoint shards:  71%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                               | 5/7 [02:10<00:55, 27.80s/it]
Loading checkpoint shards:  86%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                       | 6/7 [02:34<00:26, 26.42s/it]
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [02:46<00:00, 21.66s/it]
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [02:46<00:00, 23.73s/it]

启动API服务

创建新终端,进入虚拟环境,启动API服务:

python server/api.py

访问:http://0.0.0.0:7861/docs
在这里插入图片描述

启动Web UI服务

最后启动Web UI服务,创建新终端,进入虚拟环境,

streamlit run webui.py

访问:http://localhost:8501/
在这里插入图片描述

使用

对话功能

可以选择本地模型,线上模型,然后进行对话

在这里插入图片描述

知识库管理

可以新建知识库,上传相关资料信息
在这里插入图片描述
上传后会建立向量数据库
在这里插入图片描述
进行提问,回答基于知识库进行回答
在这里插入图片描述

文件对话

上传一个报销制度文件,然后提问
在这里插入图片描述

搜索引擎问答

在这里插入图片描述

异常集合

异常1

场景:

初始化配置文件

python init_database.py --recreate-vs

问题:

 cannot import name 'Doc' from 'typing_extensions'

解决:

因为安装的typing_extensions版本不正确,需要重新安装

pip install typing_extensions==4.8.0

异常2

场景:

启动项目

python startup.py -a

问题:

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a singl
e OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE t
o allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

解决1:

这里使用Anaconda创建虚拟环境,其中有ibiomp5md.dll文件,重命名以备份该文件,如:libiomp5md.dll.back

在这里插入图片描述
解决2:

startup.py文件上方设置环境变量,保证前后顺序

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

异常3

场景:

启动项目过程中

python startup.py -a

问题:

| OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing 
a file named config.json.

解决:

默认使用的LLM 模型 THUDM/ChatGLM3-6B 与 Embedding 模型BAAI/bge-large-zh,会远程连接模型网站。这里使用魔法也不得行,不知为啥,具体模型网站能访问的。

下载LLM 模型THUDM/ChatGLM3-6B与Embedding模型BAAI/bge-large-zh

1.访问https://huggingface.co/BAAI/bge-large-zh下载
在这里插入图片描述
2.访问https://huggingface.co/THUDM/chatglm3-6b下载
在这里插入图片描述

然后修改configs/model_config.py文件,指定模型存放位置与使用模型名称,需保证存放模型目录下的模型文件名与model_config.py文件使用的名称一致。

# 统一存放模型位置
MODEL_ROOT_PATH = "../../../models"

# 选用的 Embedding 名称
EMBEDDING_MODEL = "bge-large-zh"

# 要运行的LLM名称,可以包括本地模型和在线模型
LLM_MODELS = ["chatglm3-6b", "zhipu-api", "openai-api"]

MODEL_PATH = {
    "embed_model": {
        "ernie-tiny": "nghuyong/ernie-3.0-nano-zh",
        "ernie-base": "nghuyong/ernie-3.0-base-zh",
        "text2vec-base": "shibing624/text2vec-base-chinese",
        "text2vec": "GanymedeNil/text2vec-large-chinese",
        "text2vec-paraphrase": "shibing624/text2vec-base-chinese-paraphrase",
        "text2vec-sentence": "shibing624/text2vec-base-chinese-sentence",
        "text2vec-multilingual": "shibing624/text2vec-base-multilingual",
        "text2vec-bge-large-chinese": "shibing624/text2vec-bge-large-chinese",
        "m3e-small": "moka-ai/m3e-small",
        "m3e-base": "moka-ai/m3e-base",
        "m3e-large": "moka-ai/m3e-large",
        "bge-small-zh": "BAAI/bge-small-zh",
        "bge-base-zh": "BAAI/bge-base-zh",
         # "bge-large-zh": "BAAI/bge-large-zh",
         # 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
        "bge-large-zh": "bge-large-zh",
        "bge-large-zh-noinstruct": "BAAI/bge-large-zh-noinstruct",
        "bge-base-zh-v1.5": "BAAI/bge-base-zh-v1.5",
        "bge-large-zh-v1.5": "BAAI/bge-large-zh-v1.5",
        "piccolo-base-zh": "sensenova/piccolo-base-zh",
        "piccolo-large-zh": "sensenova/piccolo-large-zh",
        "nlp_gte_sentence-embedding_chinese-large": "damo/nlp_gte_sentence-embedding_chinese-large",
        "text-embedding-ada-002": "your OPENAI_API_KEY",
    },

    "llm_model": {
        # 以下部分模型并未完全测试,仅根据fastchat和vllm模型的模型列表推定支持 
        # "chatglm2-6b": "THUDM/chatglm2-6b",
        # 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
        "chatglm2-6b": "chatglm2-6b",
        "chatglm2-6b-32k": "THUDM/chatglm2-6b-32k",

        "chatglm3-6b": "THUDM/chatglm3-6b",
        "chatglm3-6b-32k": "THUDM/chatglm3-6b-32k",
        "chatglm3-6b-base": "THUDM/chatglm3-6b-base",
    },

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

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

相关文章

Linux——web网站服务(一)

一、安装httpd服务器Apache网站服务 1、准备工作 为了避免发送端口冲突&#xff0c;程序冲突等现象&#xff0c;卸载使用rpm方式安装的httpd #使用命令检查是否下载了httpd [rootserver ~]# rpm -qa httpd #如果有则使用 [rootserver ~]# rpm -e httpd --nodeps Apache的配置…

AGI 时代,小红书邀您一起复盘年度 100 件值得学习的好案例

2023 年&#xff0c;由 ChatGPT 引爆新一轮人工智能热潮&#xff0c;开启了由大模型驱动的 AGI 时代。随着 AIGC 的快速崛起&#xff0c;传统的研发模式是否会被 AI 颠覆也成为了巨大的未知数。面对不同规模团队与不同业务场景&#xff0c;企业想要找到可靠、可行、可落地的转型…

temu日本站在哪里入驻

在跨境电商领域中&#xff0c;Temu是拼多多推出的一款备受瞩目的平台。如今&#xff0c;越来越多的商家希望将自己的业务扩展到日本市场&#xff0c;而在Temu日本站上入驻就成为了一个不可忽视的机遇。本文将为您介绍如何在Temu日本站上入驻&#xff0c;并提供一些有用的技巧和…

Swing程序设计(9)复选框,下拉框

文章目录 前言一、复选框二、下拉框总结 前言 该篇文章简单介绍了Java中Swing组件里的复选框组件、列表框组件、下拉框组件&#xff0c;这些在系统中都是常用的组件。 一、复选框 复选框&#xff08;JCheckBox&#xff09;在Swing组件中的使用也非常广泛&#xff0c;一个方形方…

【MATLAB源码-第98期】基于matlab的能量谷优化算法(EVO)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 能量谷优化算法&#xff08;Energy Valley Optimization, EVO&#xff09;是一种启发式优化算法&#xff0c;灵感来源于物理学中的“能量谷”概念。它试图模拟能量在不同能量谷中的转移过程&#xff0c;以寻找最优解。 在EVO…

Spring boot各种Date时间相差8小时出现的问题及其解决方法!

数据库中存的是2019-07-22 22:00:00 但是页面展示2019-07-22 14:00:00 查看数据时区是08:00导致的,数据库是Oracle&#xff0c;生成数据库没办法改时区 一&#xff1a;Spring boot ResponseBody转换JSON 时 Date 时间相差8小时 一描述&#xff1a;当使用jackson时&#xff0c;…

什么是JVM的内存模型?详细阐述Java中局部变量、常量、类名等信息在JVM中的存储位置

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、JVM基本介绍 二、JVM内存模型 2.0 概述 2.1 类加载子系统 2.2 运行时数据区 2.2.0 基本…

使用静态HTTP提供动态内容

在Web开发中&#xff0c;静态HTTP和动态HTTP常被视作两种截然不同的技术。静态HTTP主要用于传输不变的内容&#xff0c;如HTML、CSS和JavaScript文件&#xff0c;而动态HTTP则能处理用户交互、实时数据等动态需求。但鲜为人知的是&#xff0c;我们其实可以通过一些技巧&#xf…

Python Appium Selenium 查杀进程的实用方法

一、前置说明 在自动化过程中&#xff0c;经常需要在命令行中执行一些操作&#xff0c;比如启动应用、查杀应用等&#xff0c;因此可以封装成一个CommandExecutor来专门处理这些事情。 二、操作步骤 # cmd_util.pyimport logging import os import platform import shutil i…

软件测试--selenium安装使用

安装selenium不少人使用pip命令来安装selenium&#xff0c;辛辛苦苦安装完之后&#xff0c;还是不能使用。所以我们可以是直接使用编译器&#xff0c;pycharm直接安装selenium扩展包。 file中点击settings 在Settings中点击Project Interpreter,点击加号就可以安装各种需要的扩…

SpringBoot 项目将jar 部署在服务器引用外部 配置文件

SpringBoot 官方给出了四种方式引用外部配置文件的方式 在jar包的同一目录下建一个config文件夹&#xff0c;然后把配置文件放到这个文件夹下(最常用)直接把配置文件放到jar包的同级目录在classpath下建一个config文件夹&#xff0c;然后把配置文件放进去在classpath下直接放配…

AI智能降重软件大全,免费最新AI智能降重软件

在当今信息爆炸的时代&#xff0c;内容创作者们面临着巨大的写作压力&#xff0c;如何在保持高质量的前提下提高效率成为摆在许多人面前的难题。AI智能降重软件因其独特的算法和功能逐渐成为提升文案质量的得力助手。本文将专心分享一些优秀的AI智能降重软件。 147SEO改写软件 …

unity 2d 入门 飞翔小鸟 柱子移动(十一)

c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class PoleMove : MonoBehaviour {//移动上限制public float up;//移动下限public float below;//速度private float speed;// Start is called before the first frame update…

中断分类、中断过程、向量中断

中断过程&#xff1a; &#xff08;1&#xff09;中断请求 中断源以硬件信号形式通过中断控制线路向CPU提出中断请求。 中断源&#xff1a;引起中断事件的原因。 中断源可以是外部的硬件设备&#xff0c;如键盘、打印机等输入/输出设备和各种控制设备&#xff1b;也可以是软件…

C/C++ 实现动态资源文件释放

当我们开发Windows应用程序时&#xff0c;通常会涉及到使用资源&#xff08;Resource&#xff09;的情况。资源可以包括图标、位图、字符串等&#xff0c;它们以二进制形式嵌入到可执行文件中。在某些情况下&#xff0c;我们可能需要从可执行文件中提取自定义资源并保存为独立的…

CV计算机视觉每日开源代码Paper with code速览-2023.12.4

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【目标检测】TIDE: Test Time Few Shot Object Detection 论文地址&#xff1a;https://arxiv.org//pdf/2311.18358 开源代码&#xff1a;G…

《Spring Cloud Alibaba 从入门到实战》理论知识篇

基础知识篇 理论篇 俗话说&#xff0c;没有最好的架构&#xff0c;只有最合适的架构。 微服务架构也是随着信息产业的发展而出现的最有普遍适用性的一套架构模式。 通常来说&#xff0c;我们认为架构发展历史经历了这样一个过程&#xff1a;单体架构 -> SOA 面向服务架构 …

css 输入框动态特效

先上图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 输入框动效</title><style>.inputBox {position: relative;width: 250px;}.inputBox input {width: 100%;padding: 10px…

PyTorch2.0环境搭建

一、安装python并配置环境变量 1、打开python官网&#xff0c;下载并安装 Welcome to Python.org 下载 寻找版本&#xff1a;推荐使用3.9版本&#xff0c;或其他表中显示为安全&#xff08;security&#xff09;的版本 安装&#xff1a;&#xff08;略&#xff09; 2、配置环…

《Android编程权威指南》之第二个activity源码及挑战

文章目录 前言效果图依赖MainactivityKotlin的“ &#xff1f;”kotlin的符号 QuizViewModelQuestion类CheatActivityonBackPressed()companion CheatViewModelstring.xml 前言 实现禁止一题多答&#xff0c;按题记录作弊状态、偷看次数限制、横竖屏切换依旧保存状态数据 个人…