当前位置: 首页 > news >正文

LLMs:LangChain-Chatchat(一款可实现本地知识库问答应用)的简介、安装、使用方法之详细攻略

LLMs:LangChain-Chatchat(一款可实现本地知识库问答应用)的简介、安装、使用方法之详细攻略

目录

LangChain-Chatchat的简介

1、原理图解

2、文档处理实现流程

1、模型支持

(1)、LLM 模型支持

(2)、Embedding 模型支持

LangChain-Chatchat的安装

1、镜像部署

T1、基于AutoDL平台云端部署镜像

第一步,注册AutoDL,并选择租赁合适的服务器套餐(按时计费)

第二步,创建镜像

T2、Docker 镜像本地部署

2、开发部署

第一步,配置开发环境

第二步,下载模型至本地

第三步,设置配置项

第四步,知识库初始化与迁移

第五步,启动 API 服务或 Web UI

(1)、启动 LLM 服务

T1、基于多进程脚本 llm_api.py 启动 LLM 服务

T2、基于命令行脚本 llm_api_stale.py 启动 LLM 服务

T3、PEFT 加载(包括lora,p-tuning,prefix tuning, prompt tuning,ia等)

(2)、启动 API 服务

(3)、启动 Web UI 服务

(3.1)、Web UI 对话界面:

(3.2)、Web UI 知识库管理页面:

(4)、一键启动

3、安装过程中常见问题集锦

LangChain-Chatchat的使用方法


LangChain-Chatchat的简介

       2023年8月14日,原 Langchain-ChatGLM 项目已正式发布 v0.2.0 版本,并正式更名为 Langchain-Chatchat。是一款基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。该项目已重构为使用 FastChat + Langchain + FastAPI + Streamlit 构建的基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。
       这是一种利用 langchain 思想实现的基于本地知识库问答应用,目标期望建立一套对中文场景与开源模型支持友好可离线运行的知识库问答解决方案。但是,本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。
>> 受 GanymedeNil 的项目 document.ai 和 AlexZhangji 创建的 ChatGLM-6B Pull Request 启发,建立了全流程可使用开源模型实现的本地知识库问答应用。
>> 本项目的最新版本中通过使用 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型,依托于 langchain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。
>> 依托于本项目支持的开源 LLM 与 Embedding 模型,本项目可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
>> 本项目实现原理如下图所示,过程包括加载文件 → 读取文本 → 文本分割 → 文本向量化 → 问句向量化 → 在文本向量中匹配出与问句向量最相似的 top k个 → 匹配出的文本作为上下文和问题一起添加到 prompt中 → 提交给 LLM生成回答。

GitHub地址
GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain | 基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答

1、原理图解

 

2、文档处理实现流程

 

1、模型支持

本项目中默认使用的 LLM 模型为 THUDM/chatglm2-6b,默认使用的 Embedding 模型为 moka-ai/m3e-base 为例。

(1)、LLM 模型支持

(2)、Embedding 模型支持

LangChain-Chatchat的安装

1、镜像部署

T1、基于AutoDL平台云端部署镜像

AutoDL镜像云端部署

AutoDL 镜像中 v5 版本所使用代码已更新至本项目 0.2.0 版本。

第一步,注册AutoDL并选择租赁合适的服务器套餐(按时计费)

官方地址:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL

 

第二步,创建镜像

 

T2、Docker 镜像本地部署

Docker 镜像本地部署

Docker 镜像

首先,定位到下载的项目文件夹下

其次,一行命令运行 Docker:

docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0

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/ 目录查看对应阶段日志;

2、开发部署

第一步,配置开发环境

软件需求

本项目已在 Python 3.8.1 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。

环境检查

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

$ python --version

Python 3.8.13

# 如果低于这个版本,可使用conda安装环境

$ conda create -p /your_path/env_name python=3.8

# 激活环境

$ source activate /your_path/env_name

# 或,conda安装,不指定路径, 注意以下,都将/your_path/env_name替换为env_name

$ conda create -n env_name python=3.8

$ conda activate env_name # Activate the environment

# 更新py库

$ pip3 install --upgrade pip

# 关闭环境

$ source deactivate /your_path/env_name

# 删除环境

$ conda env remove -p  /your_path/env_name

项目依赖

# 拉取仓库

$ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git

# 进入目录

$ cd langchain-ChatGLM

# 安装全部依赖

$ pip install -r requirements.txt

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

此外,为方便用户 API 与 webui 分离运行,可单独根据运行需求安装依赖包。

T1、如果只需运行 API,可执行

$ pip install -r requirements_api.txt

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

T2、如果只需运行 WebUI,可执行

$ pip install -r requirements_webui.txt

注:使用 langchain.document_loaders.UnstructuredFileLoader 进行 .docx 等格式非结构化文件接入时,可能需要依据文档进行其他依赖包的安装,请参考 langchain 文档。

请注意: 0.2.0 及更新版本的依赖包与 0.1.x 版本依赖包可能发生冲突,强烈建议新建环境后重新安装依赖包。

第二步,下载模型至本地

如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
以本项目中默认使用的 LLM 模型 THUDM/chatglm2-6b 与 Embedding 模型 moka-ai/m3e-base 为例:
下载模型需要先安装Git LFS,然后运行

$ git clone THUDM/chatglm2-6b · Hugging Face

$ git clone moka-ai/m3e-base · Hugging Face

第三步,设置配置项

复制模板文件

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

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

检查模型参数

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

>> 请确认已下载至本地的 LLM 模型本地存储路径写在 llm_model_dict 对应模型的 local_model_path 属性中,如:

llm_model_dict={

                "chatglm2-6b": {

                        "local_model_path": "/Users/xxx/Downloads/chatglm2-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": "/Users/xxx/Downloads/m3e-base",

                       }

第四步,知识库初始化与迁移

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

老用户

如果您是从 0.1.x 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型 configs/model_config.py 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:

$ python init_database.py

新用户

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

$ python init_database.py --recreate-vs

第五步,启动 API 服务或 Web UI

(1)启动 LLM 服务

如需使用开源模型进行本地部署,需首先启动 LLM 服务,启动方式分为三种:

T1、基于多进程脚本 llm_api.py 启动 LLM 服务

T2、基于命令行脚本 llm_api_stale.py 启动 LLM 服务

T3、PEFT 加载

三种方式只需选择一个即可,具体操作方式详见 5.1.1 - 5.1.3。

如果启动在线的API服务(如 OPENAI 的 API 接口),则无需启动 LLM 服务,即 5.1 小节的任何命令均无需启动。

T1、基于多进程脚本 llm_api.py 启动 LLM 服务

启动服务

在项目根目录下,执行 server/llm_api.py 脚本启动 LLM 模型服务:

$ python server/llm_api.py

多卡加载

项目支持多卡加载,需在 llm_api.py 中修改 create_model_worker_app 函数中,修改如下三个参数:

gpus=None,

num_gpus=1,

max_gpu_memory="20GiB"

其中,gpus 控制使用的显卡的ID,如果 "0,1";

num_gpus 控制使用的卡数;

max_gpu_memory 控制每个卡使用的显存容量

T2、基于命令行脚本 llm_api_stale.py 启动 LLM 服务

注意事项

注意:

>> llm_api_stale.py脚本原生仅适用于linux,mac设备需要安装对应的linux命令,win平台请使用wls;

>> 加载非默认模型需要用命令行参数--model-path-address指定模型,不会读取model_config.py配置;

启动服务

在项目根目录下,执行 server/llm_api_stale.py 脚本启动 LLM 模型服务:

$ python server/llm_api_stale.py

多worker启动

该方式支持启动多个worker,示例启动方式:

$ python server/llm_api_stale.py --model-path-address model1@host1@port1 model2@host2@port2

解决端口占用

如果出现server端口占用情况,需手动指定server端口,并同步修改model_config.py下对应模型的base_api_url为指定端口:

$ python server/llm_api_stale.py --server-port 8887

多卡加载

如果要启动多卡加载,示例命令如下:

$ python server/llm_api_stale.py --gpus 0,1 --num-gpus 2 --max-gpu-memory 10GiB

停止服务

注:以如上方式启动LLM服务会以nohup命令在后台运行 FastChat 服务,如需停止服务,可以运行如下命令:

$ python server/llm_api_shutdown.py --serve all

亦可单独停止一个 FastChat 服务模块,可选 [all, controller, model_worker, openai_api_server]

T3、PEFT 加载(包括lora,p-tuning,prefix tuning, prompt tuning,ia等)

简介

本项目基于 FastChat 加载 LLM 服务,故需以 FastChat 加载 PEFT 路径,即保证路径名称里必须有 peft 这个词,配置文件的名字为 adapter_config.json,peft 路径下包含 model.bin 格式的 PEFT 权重。

执行代码

示例代码如下:

PEFT_SHARE_BASE_WEIGHTS=true python3 -m fastchat.serve.multi_model_worker \

    --model-path /data/chris/peft-llama-dummy-1 \

    --model-names peft-dummy-1 \

    --model-path /data/chris/peft-llama-dummy-2 \

    --model-names peft-dummy-2 \

    --model-path /data/chris/peft-llama-dummy-3 \

    --model-names peft-dummy-3 \

    --num-gpus 2

详见 FastChat 相关 PR

(2)启动 API 服务

简介

本地部署情况下,按照 5.1 节启动 LLM 服务后,再执行 server/api.py 脚本启动 API 服务;

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

调用命令

调用命令示例:

$ python server/api.py

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

FastAPI docs 界面

 

 

(3)启动 Web UI 服务

T1、默认启动

按照 5.2 节启动 API 服务后,执行 webui.py 启动 Web UI 服务(默认使用端口 8501)

$ streamlit run webui.py

T2、主题色启动

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

$ streamlit run webui.py --theme.base "light" --theme.primaryColor "#165dff" --theme.secondaryBackgroundColor "#f5f5f5" --theme.textColor "#000000"

T3、指定端口号启动

或使用以下命令指定启动 Web UI 服务并指定端口号

$ streamlit run webui.py --server.port 666

(3.1)、Web UI 对话界面:

 

(3.2)、Web UI 知识库管理页面:

 

(4)一键启动

一键启动脚本

更新一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:

$ python startup.py --all-webui

关闭运行服务

并可使用 Ctrl + C 直接关闭所有运行服务。

可选参数包括 --all-webui, --all-api, --llm-api, --controller, --openai-api, --model-worker, --api, --webui,其中:

--all-webui 为一键启动 WebUI 所有依赖服务;

--all-api 为一键启动 API 所有依赖服务;

--llm-api 为一键启动 Fastchat 所有依赖的 LLM 服务;

--openai-api 为仅启动 FastChat 的 controller 和 openai-api-server 服务;

其他为单独服务启动选项。

若想指定非默认模型,需要用 --model-name 选项,示例:

$ python startup.py --all-webui --model-name Qwen-7B-Chat

注意事项

注意:

1. startup 脚本用多进程方式启动各模块的服务,可能会导致打印顺序问题,请等待全部服务发起后再调用,并根据默认或指定端口调用服务(默认 LLM API 服务端口:127.0.0.1:8888,默认 API 服务端口:127.0.0.1:7861,默认 WebUI 服务端口:本机IP:8501)

2.服务启动时间示设备不同而不同,约 3-10 分钟,如长时间没有启动请前往 ./logs目录下监控日志,定位问题。

3、安装过程中常见问题集锦

https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/FAQ.md

LangChain-Chatchat的使用方法

更新中……

相关文章:

LLMs:LangChain-Chatchat(一款可实现本地知识库问答应用)的简介、安装、使用方法之详细攻略

LLMs&#xff1a;LangChain-Chatchat(一款可实现本地知识库问答应用)的简介、安装、使用方法之详细攻略 目录 LangChain-Chatchat的简介 1、原理图解 2、文档处理实现流程 1、模型支持 (1)、LLM 模型支持 (2)、Embedding 模型支持 LangChain-Chatchat的安装 1、镜像部署…...

Qt 解析XML文件 QXmlStreamReader

如何使用QXmlStreamReader来解析格式良好的XML&#xff0c;Qt的文档中指出&#xff0c;它是一种更快、更方便的Qt自己的SAX解析器&#xff08;QXmlSimpleReader&#xff09;的替代&#xff0c;它也较快&#xff0c;在某种情况下&#xff0c;比DOM&#xff08;QDomDocument&…...

图像线段检测几种方法

1、方法一 当我将OpenCV提升到4.1.0时&#xff0c;LineSegmentDetector&#xff08;LSD&#xff09;消失了。 OpenCV-contrib有一个名为FastLineDetector的东西&#xff0c;如果它被用作LSD的替代品似乎很好。如果你有点感动&#xff0c;你会得到与LSD几乎相同的结果。 2、方…...

【Vue2.0源码学习】生命周期篇-初始化阶段(initEvents)

文章目录 1. 前言2. 解析事件3. initEvents函数分析4. 总结 1. 前言 本篇文章介绍生命周期初始化阶段所调用的第二个初始化函数——initEvents。从函数名字上来看&#xff0c;这个初始化函数是初始化实例的事件系统。我们知道&#xff0c;在Vue中&#xff0c;当我们在父组件中…...

SQL高级知识点

MySQL基础 1、安装 1)设置编码 2)设置密码 2、配置文件&#xff1a;my.ini、my.cnf 1)设置端口号 port3306 2)设置编码 default-character-setutf8character-set-serverutf8 3)存储引擎 default-storage-engineINNODB 4)最大连接数 max_connections100 注意&…...

【安全】原型链污染 - Code-Breaking 2018 Thejs

目录 准备工作 环境搭建 加载项目 复现 代码审计 payload 总结 准备工作 环境搭建 Nodejs BurpSuite 加载项目 项目链接 ① 下载好了cmd切进去 ② 安装这个项目 可以检查一下 ③运行并监听 可以看到已经在3000端口启动了 复现 代码审计 const fs require(fs) cons…...

【架构】探索计算机处理器的世界:ARM和x86架构解析及指令集

目录 导语ARM架构x86架构AMD公司对比与应用不同架构处理器的指令集结语 导语 计算机处理器是数字化时代的核心引擎&#xff0c;而在众多处理器架构中&#xff0c;ARM和x86是备受关注的三个。本文将带您深入探索这三个架构&#xff0c;介绍它们的特点、公司背景以及应用领域。让…...

SpringBoot权限认证

SpringBoot的安全 常用框架&#xff1a;Shrio,SpringSecurity 两个功能&#xff1a; Authentication 认证Authorization 授权 权限&#xff1a; 功能权限访问权限菜单权限 原来用拦截器、过滤器来做&#xff0c;代码较多。现在用框架。 SpringSecurity 只要引入就可以使…...

OpenGL-入门-BMP像素图glReadPixels

glReadPixels函数用于从帧缓冲区中读取像素数据。它可以用来获取屏幕上特定位置的像素颜色值或者获取一块区域内的像素数据。下面是该函数的基本语法&#xff1a; void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *da…...

同源策略以及SpringBoot的常见跨域配置

先说明一个坑。在跨域的情况下&#xff0c;浏览器针对复杂请求&#xff0c;会发起预检OPTIONS请求。如果服务端对OPTIONS进行拦截&#xff0c;并返回非200的http状态码。浏览器一律提示为cors error。 一、了解跨域 1.1 同源策略 浏览器的同源策略&#xff08;Same-Origin Po…...

基于jeecg-boot的flowable流程跳转功能实现

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 今天我…...

react图片预加载

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 图片预加载的原理&#xff1a;new一个image对象&#xff0c;用这个对象加载图片&#xff0c;等这个对象将这个图片请求完后&#xff0c;再将这个图片放入原本应该放置的位置 代码如下&#xff1a; import React, { useEffe…...

数据库管理

SQL语言分类&#xff1a; DDL&#xff1a;数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 DML&#xff1a;数据操纵语言&#xff0c;用于对表中的数据进行管理 DQL&#xff1a;数据查询语言&#xff0c;用于从数据表中查找符合条件的数据记录 DCL&am…...

【2023年11月第四版教材】《第8章-整合管理》(第3部分)

《第8章-整合管理》&#xff08;第3部分&#xff09; 9 监控项目工作9.1 监控项目工作★★★9.2 数据分析9.4 决策9.5 工作绩效报告 10 实施整体变更控制10.1 实施整体变更控制★★★ &#xff08;18上36&#xff09;10.2 变更请求★★★10.3变更控制工具★★★10.4 数据分析10…...

初阶数据结构(三)链表

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn&#x1f493; ⏩专栏分类&#xff1a;c &#x1f69a;代码仓库&#xff1a;小小unicorn的学习足迹&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 前面我们讲的线性表的顺序存储结构。它…...

Python小知识 - 八大排序算法

八大排序算法 排序算法是计算机科学中非常重要的一个研究领域。排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在计算机内部&#xff0c;而外部排序是数据记录在计算机外部&#xff0c;这里我们主要讨论内部排序。 内部排序中的算法大致可以归纳为四类&…...

安卓动态申请权限

我们在使用一些官方app时&#xff0c;刚下载进去之后经常会弹出各种各样的权限获取请求&#xff0c;今天简单学习了下&#xff0c;希望不会误人子弟哈哈哈哈。 一、将需要用到的权限添加到Manifest清单里 <uses-permission android:name"android.permission.WRITE_EXT…...

关于亚马逊云科技云技能孵化营学习心得

1、活动介绍 本活动主要是面向想要全面了解亚马逊云科技 (Amazon Web Services) 云的个人&#xff0c;而不受特定技术角色的限制。内容包括亚马逊云科技云概念、亚马逊云科技服务、安全性、架构、定价和支持等等&#xff0c;此外还可以参加亚马逊的认证考试。 2、学习过程 该…...

计算机安全学习笔记(III):强制访问控制 - MAC

基本概念 强制访问控制是一种高级访问控制机制&#xff0c;旨在通过强制执行事先定义的安全策略&#xff0c;实现资源和信息的严格保护。与自主访问控制&#xff08;Discretionary Access Control&#xff0c;DAC&#xff09;不同&#xff0c;MAC 的控制权不由用户自身决定&am…...

java判断ip是否为指定网段

具体网络知识原理请看这个博文 /**** param address servletRequest.getRemoteAddr();* param host servletRequest.getRemoteHost();* return* Description 检验IP是否符合安全限定*/private boolean ipIsInNet(String address, String host){Set<String> iPset allow…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...