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

实操部署DeepSeek,添加私有知识库

目录

一、环境介绍

PowerShell版本:

wsl版本:

虚拟机版本:

本机IP:

虚拟机IP:

容器宿主机IP(host.docker.internal):

Docker版本:

Docker Compose版本:

其他:

二、Dify部署

1、克隆Dify代码仓库

2、启动Dify

①在本地打包镜像

问题1:

②进入Dify 源代码的docker目录

③复制环境配置文件

④启动docker容器

⑤检查容器是否都正常

问题1:docker-db-1起不来,报错如下:

问题2:docker-ssrf_proxy起不来,报错如下:

问题3:dify-web起不来,报错如下:

⑥进入Dify

三、SearXNG部署

1、修改Dify配置文件

2、启动SearXNG服务

问题1:SearXNG起来了但是报错,报错如下:

3、使用SearXNG服务

问题1:输入http://host.docker.internal:8081后,点击保存,页面没反应或者报错,报错如下:

四、DeepSeek R1模型部署

1、ollama安装

2、修改ollama模型部署的路径

3、模型部署 DeepSeek R1

五、Embedding模型部署

六、在Dify中添加deepseek模型

问题1:

七、在Dify中添加Embeding模型添加

八、上传私有知识库

九、智能体搭建

问题1:在“工作室“建立好的应用,在点击进去时报错:


DeepSeek这么火,网络上关于本地部署大模型,然后什么搭建私有知识库的文章层出不穷,看着也不难,我就想着,找篇文章docker部署的文章,集成到Dify中,部署一个,看着简单,但是实际,好多好多坑,一个一个解决,还是决定这里结合参考的文章,再重新出一篇。

一、环境介绍

先介绍下环境,如果跟我环境差不多的应该更有参考意义:

本机:Windows 11系统,细版本是22000.1936,这个操作系统细版本应该没啥影响。

PowerShell版本:

执行命令获取:Get-Host | Select-Object Version

wsl版本:

WSL 2

虚拟机版本:

执行命令获取:wsl --list –verbose

进入虚拟机后再看下版本:

本机IP:

虚拟机IP:

容器宿主机IP(host.docker.internal):

Docker版本:

Docker Compose版本:

其他:

你要准备一个能连接外网的梯子。

二、Dify部署

1、克隆Dify代码仓库

如果不知道Dify是什么的,可以百度下,解释的文章很多。

Dify直接Docker安装。

我在我的X盘,建了一个目录,cd进去执行git操作,即克隆 Dify 源代码至本地环境:

git clone https://github.com/langgenius/dify.git

这一步出现了问题,网络没得问题,就是git的慢,我直接访问其主页,以zip的方式下载了下来,解压放到了我的x盘中,我下载好的文件也上传上去了,链接是:

https://download.csdn.net/download/qq_30168227/90369269https://download.csdn.net/download/qq_30168227/90369269

至此,我的目录结构是:

2、启动Dify

①在本地打包镜像

接下来的操作就是都要到Linux中了,像我windows上的这个路径X:\LLM\dify-main,在我WSL的Linux上默认路径就是:

接下来直接cd到/mnt/x/LLM/dify-main下:

cd /mnt/x/LLM/dify-main

然后修改Makefile中的版本号:

从原来的latest改为这种,可以不用思考,改成和我一样的。

然后cd /mnt/x/LLM/dify-main,在dify-main根目录下,执行打包镜像,请注意,这里要用到你的梯子了,不连接外网这块有些过不去,我当时是docker镜像源也加上了好几个,可以百度以下,把国内的一些都加上,遇到的问题就行,有些得连外网,有些不能连外网,连外网访问不了,反正两个网络切换,多试试就能下载好了。

make build-all

打包完成后,执行docker images命令,能看到打好的镜像:

上图中先不用看版本,我是因为某些坑,重新打了些镜像,你可以主要看下langgenius/dify-api:0.15.2和langgenius/dify-web:0.15.2有没有。

问题1:

这个时候,我遇到了一个问题,我WSL的镜像默认安装在了C盘,C盘空间不够了,所以我要进行,WSL的虚拟机迁移,也比较简单:

(1)查询虚拟机信息,关闭虚拟机

在cmd中,我的虚拟机名字什么的文章开头已经查询了,命令是wsl -l -v,出来名字、状态、版本等信息,我这里直接先关闭WSL:wsl --shutdown

(2)导出虚拟机

我新建了一个非C盘的目录,X:\WSL,将虚拟机导出过去:wsl --export Ubuntu_2204  X:\WSL\ubuntu.tar

看你虚拟机的大小,导出的时间一般都得几分钟,这个没有导出进度条,耐心等待就行。

(3)注销老虚拟机

进行了这一步才会释放原磁盘的空间。

wsl --unregister Ubuntu_2204

(4)重新导入虚拟机

wsl --import Ubuntu_2204 X:\WSL X:\WSL\ubuntu.tar --version 2

(5)再测试

刚刚第四步好后迁移就算完成,直接cmd或者powerShell中执行wsl进入虚拟机的命令,能进去就是没啥问题。

②进入Dify 源代码的docker目录

我这里就是:cd /mnt/x/LLM/dify-main/docker

③复制环境配置文件

我这里是:cp /mnt/x/LLM/dify-main/docker/.env.example /mnt/x/LLM/dify-main/docker/.env

④启动docker容器

我的Docker Compose是V2版本,如文章开头的环境信息中展示的,所以在/mnt/x/LLM/dify-main/docker使用这个命令启动:

docker compose up -d

如果你的是V1版本的,就是这个命令:

docker-compose up -d

这里附一个停止的命令:docker compose down

运行完成之后可以看到类似这种输出,显示所有容器的状态等信息:

⑤检查容器是否都正常

命令是:docker compose ps,结果如下

可以看到,我现在的都是正常的,但是实际上,我遇到了几个问题,导致有几个容器一直不断重启,一个一个排,遇到的值得记录有如下几个。

问题1:docker-db-1起不来,报错如下:

看容器报错日志的命令是:

docker logs [OPTIONS] CONTAINER,可以跟-f(持续跟踪日志输出,类似于 tail -f 命令)、-t(在日志中显示时间戳,方便定位日志产生的时间)等参数,我下面日志,执行的命令是:

docker logs docker-db-1

initdb: error: could not change permissions of directory "/var/lib/postgresql/data/pgdata": Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... mkdir: can't create directory '/var/lib/postgresql/data/pgdata': Permission denied mkdir: can't create directory '/var/lib/postgresql/data/pgdata': Permission denied mkdir: can't create directory '/var/lib/postgresql/data/pgdata': Permission denied

我的解决是这样的:

(1)我使用 docker inspect 命令查看容器的数据卷挂载信息,看看挂载到了哪个目录

docker inspect docker-db-1 | grep Mounts -A 10

我需要直接修改这个目录的路径,但是有个问题,就是我是WSL的虚拟机,实际磁盘用的还是windows上的X盘,在Linux上直接使用chown等命令,不得行,所以我先改下挂载的方式:

(1.1)检查 SELinux 或 AppArmor 限制

Ubuntu 系统默认启用了 AppArmor,某些情况下它可能会限制容器对文件系统的操作。

# 禁用 AppArmor:

sudo systemctl stop apparmor

sudo systemctl disable apparmor

# 临时禁用 SELinux

sudo setenforce 0

(2.2)修改下WSL的配置文件

文件路劲在Linux的/etc下:

我改好的如下:

主要是最后一条,改好保存后,重启wsl(cmd中wsl –shutdown,然后重新进入wsl)。

(2.3)检查文件系统挂载选项

查看挂载信息:使用 mount 命令查看 /mnt/x/LLM/dify-main/docker/volumes/db/data 所在文件系统的挂载选项(X盘)。

mount | grep /mnt/x

检查是否有写保护:如果挂载选项中包含 ro(只读),则需要重新挂载文件系统为可写模式。首先,卸载该文件系统:

sudo umount /mnt/x

然后,重新挂载为可写模式(假设挂载点是 /dev/sdX):

sudo mount -t drvfs X: /mnt/x -o metadata

(2)修改权限

sudo chown -R postgres:postgres /mnt/x/LLM/dify-main/docker/volumes/db/data

chmod -R 777 /mnt/x/LLM/dify-main/docker/volumes/db/data

(3)重启容器

直接docker compose重启即可,或者重启单个容器docker restart [容器 ID 或容器名称]。

问题2:docker-ssrf_proxy起不来,报错如下:

ERROR: Cannot open cache_log (/var/log/squid/cache.log) for writing;

fopen(3) error: (13) Permission denied

ERROR: logfileHandleWrite: daemon:/var/log/squid/access.log: error writing ((32) Broken pipe)

我的解决是这样的,直接基于原来的镜像,重新打一个镜像:

(1)新建目录

mkdir /mnt/x/LLM/dify-main/docker-ssrf_proxy_lyg

(2)在新目录中新建DockerFIle

FROM ubuntu/squidRUN touch /var/log/squid/cache.logRUN chmod -R 777 /var

(3)重新打包镜像

cd /mnt/x/LLM/dify-main/docker-ssrf_proxy_lyg

docker build -t ubuntu/squid:0.15.4 .

打包好的镜像可以通过docker images看到:

(4)更新 docker-compose.yml 文件

如果容器是通过docker compose启动的,要修改这个文件,在 docker-compose.yml 文件中,确保已将镜像的版本(标签)更新为新的版本号:

我的docker-compose.yml在/mnt/x/LLM/dify-main/docker/docker-compose.yaml路径下。

(5)重启

在启动新版本的镜像之前,需要停止并移除当前基于旧版本镜像运行的容器。在包含/mnt/x/LLM/dify-main/docker/目录下,执行以下命令:

docker-compose down

docker-compose up -d

问题3:dify-web起不来,报错如下:

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages)

[PM2][ERROR] Permission denied, to give access to current user:

$ sudo chown undefined:undefined /.pm2/rpc.sock /.pm2/pub.sock

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages)

$ sudo chown undefined:undefined /.pm2/rpc.sock /.pm2/pub.sock

[PM2][ERROR] Permission denied, to give access to current user:

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages)

[PM2][ERROR] Permission denied, to give access to current user:

$ sudo chown undefined:undefined /.pm2/rpc.sock /.pm2/pub.sock

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages

我的解决也是重新打一个镜像:

(1)修改Dockerfile

这个镜像的Dockerfile不用新建,直接在老的上面做修改,位置在/mnt/x/LLM/dify-main/web,修改如下:

旧的:

新的:

对比可以看出来,我注释了原来的chown和chmod命令,新增了一条chmod命令:&& chmod -R 777 /.pm2 /app/web

(2)重新打包镜像

cd /mnt/x/LLM/dify-main/web

docker build -t langgenius/dify-web:0.15.4 .

(3)更新 docker-compose.yml 文件并重启

文件位置和修改方式,重启方式都是一样的,这里不再赘述。

⑥进入Dify

刚刚问题都已经完成处理,所以容器都运行正常,也就是说我们已经成功在本地安装好了Dify,可以在浏览器上输入网址,直接进入,我中间重启了次wsl,没有设置静态IP,所以IP变成了172.26.106.243,进入的URL也就是:http://172.26.106.243,如下图:

三、SearXNG部署

SearXNG 是一个免费的互联网元搜索引擎,整合了各种搜索服务的检索结果。用户不会被跟踪,搜索行为也不会被分析。现在可以直接在 Dify 中使用此工具,下面介绍具体docker部署步骤。

1、修改Dify配置文件

SearXNG 的配置文件位于 /mnt/x/LLM/dify-main/api/core/tools/provider/builtin/searxng/docker/settings.yml, 配置文档可参考SearXNG官网文档。

可以按需修改配置,也可直接使用默认配置,我是直接使用的默认的,就中间因为问题改了次日志级别,后来错误解决后又改了回来,其他的都是用的默认的:

  • 2、启动SearXNG服务

cd /mnt/x/LLM/dify-main

这个启动命令是原来版本的,但是我出现了问题,经过了修改,就没用这个来启动,你如果用着哥启动没得问题,那就可以使用:docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng/searxng

我的端口时8080,成功后直接访问:http://172.26.106.243:8080/

尝试搜索:

问题1:SearXNG起来了但是报错,报错如下:

FileNotFoundError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/usr/local/searxng/searx']

unable to load app 0 (mountpoint='') (callable not found or import error)

*** no app loaded. going in full dynamic mode ***

Traceback (most recent call last):

  File "/usr/local/searxng/searx/webapp.py", line 87, in <module>

    from searx.webadapter import (

  File "/usr/local/searxng/searx/webadapter.py", line 11, in <module>

    from searx.preferences import Preferences, is_locked

  File "/usr/local/searxng/searx/preferences.py", line 19, in <module>

    from searx import settings, autocomplete, favicons

  File "/usr/local/searxng/searx/favicons/__init__.py", line 11, in <module>

    from .proxy import favicon_url, favicon_proxy

  File "/usr/local/searxng/searx/favicons/proxy.py", line 24, in <module>

    from . import cache

  File "/usr/local/searxng/searx/favicons/cache.py", line 93, in <module>

    class FaviconCacheConfig(msgspec.Struct):  # pylint: disable=too-few-public-methods

  File "/usr/local/searxng/searx/favicons/cache.py", line 106, in FaviconCacheConfig

    db_url: str = tempfile.gettempdir() + os.sep + "faviconcache.db"

                  ^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib/python3.12/tempfile.py", line 315, in gettempdir

    return _os.fsdecode(_gettempdir())

                        ^^^^^^^^^^^^^

  File "/usr/lib/python3.12/tempfile.py", line 308, in _gettempdir

    tempdir = _get_default_tempdir()

              ^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib/python3.12/tempfile.py", line 223, in _get_default_tempdir

    raise FileNotFoundError(_errno.ENOENT,

我的解决是这样的,直接基于原来的镜像,重新打一个镜像:

(1)新建目录

mkdir /mnt/x/LLM/dify-main/searxng_lyg

(2)在新目录中新建DockerFIle

# 基于现有的 searxng/searxng 镜像FROM searxng/searxng# 创建 /usr/tmp 目录并设置权限RUN mkdir -p /usr/tmp && chmod 777 /usr/tmp

(3)重新打包镜像

cd /mnt/x/LLM/dify-main/searxng_lyg

docker build -t searxng_lyg:0.0.1 .

打包好的镜像可以通过docker images看到

(5)重启

这个镜像是直接启动的,没有通过compose,而且我为了避免网络问题,使用host网络,端口改为使用8080(使用—network host后,没法指定端口了,我的环境默认就会使用8080,根据你的具体环境来,可以使用netstat或者ss看看虚拟机监听的端口,看看你的环境用的哪个),所以直接运行命令:

docker ps,找到原来运行的镜像;

docker stop xxxx,然后stop掉原来的镜像;

再重新启动:

docker run --rm -d --add-host=host.docker.internal:host-gateway --network host -v "/mnt/x/LLM/dify-main/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng_lyg:0.0.1

3、使用SearXNG服务

在Dify中,以上图的路径访问过去,我的已授权那儿在你的页面应该是进入授权页面的按钮:

点击授权,输入http://host.docker.internal:8081之后,点击保存即可,如果成功的话,会出现「已授权」的字样。

问题1:输入http://host.docker.internal:8081后,点击保存,页面没反应或者报错,报错如下:

{code: "invalid_param",…}

code: "invalid_param"

message: "HTTPConnectionPool(host='172.26.111.225', port=8081): Max retries exceeded with url: /?q=SearXNG&format=json&categories=general (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6e4a939460>, 'Connection to 172.26.111.225 timed out. (connect timeout=None)'))"

status: 400

或者报错干脆就是无法建立连接类的报错。

我的解决方法是:

我排查了下,发现我的容器内无法解析host.docker.internal,可能是因为docker版本问题,一步一步排查,解决。

(1)处理无法解析host.docker.internal的问题

docker compose启动的容器直接在上文提到的docker-compose.yaml中改,每个image下都加入以下内容:

我这里图没有截全,要每个image下的都加。

然后上文提到的方式,重启这些容器。

其他的我不是用docker compose启动的就只有SearXNG,刚刚部署的时候我给了两个命令,我自己改后的命令如下:

docker run --rm -d --add-host=host.docker.internal:host-gateway --network host -v "/mnt/x/LLM/dify-main/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng_lyg:0.0.1

其中“--add-host=host.docker.internal:host-gateway”就是起到这个作用,如果你是用的官方给出的启动命令,可以加上,重新启动下。

四、DeepSeek R1模型部署

1、ollama安装

需要启动梯子,进入到ollama官网https://ollama.com/,选择对应的操作系统,下载ollama应用程序:

因为我前文提到了,我C盘容量不够了,所以这个我直接安装到其他盘了,我是见了一个新目录X:\Ollama,将上一步下载好的ollama安装包放到这个目录。

然后打开CMD,进入X:\Ollama目录下,使用命令安装:OllamaSetup.exe /DIR=X:\Ollama,在跳出来的安装页面上,正常用下一步就行了。

安装成功之后,在cmd输入ollama,如果出现下面的内容,则说明安装成功:

2、修改ollama模型部署的路径

Ollama模型下载部署也是默认到C盘,我这里也改到我制定好的目录,还是放到X:\Ollama目录下。

下面增加系统环境变量,即“我的电脑”-》属性-》“高级系统设置”-》“环境变量”

新建一个用户环境变量:

接下来将默认的Ollama的大模型目录挪到我指定的里面,即将

红框中的这个路径下的models目录,整个剪切到X:\Ollama下。

重新打开Ollama即可。

3、模型部署 DeepSeek R1

在ollama官网的顶部,点击「Models」,然后选择「DeepSeek R1」:

然后在模型界面根据自己电脑情况,选择对应版本,我选择了1.5B的来尝试。

然后将右边红框中的命令(ollama run deepseek-r1:1.5b)复制到CMD中执行即可。

有下载进度条,耐心等待即可。

下载完后会自动部署,就可以直接用来对话了。

五、Embedding模型部署

为了使用私有的向量数据库,并使用混合检索来提升检索精度,还需要通过ollama下载一个文本Embedding模型,上面那个没问题的话,这个也非常简单。

ollama pull shaw/dmeta-embedding-zh

六、在Dify中添加deepseek模型

登录到已经部署好的Dify中,点击右上角的头像,然后点击设置:

找到Ollama,添加我们刚刚那两步下载部署好的模型。

上面填写的,主要是“基础URL”的内容,11434是ollama默认的端口,在“基础URL”中,如果ollama和Dify是同机部署,并且Dify是通过Docker部署,那么填http://host.docker.internal:11434,其他情况填http://ollama的地址:11434,填完之后点击保存即可,如果你的保存成功,没啥问题正好,我的出现了写问题,我添加进去后,保存没有反应,下面问题我具体写下。

问题1:

我的ollama是在我本机,也就是我的windows上直接安装的,就不能使用,即无法解析host.docker.internal,这个时候,肯定用本机的WSL IP:172.26.96.1:11434,但是这个有点问题,我在本机ping我的虚拟机IP没问题,但是在虚拟机上ping我的本机IP不同,这个大概率是windows防火墙的问题,我是这样做的:

(1)配置windows防火墙

我的是Windows Defender 防火墙。

(1.1)按下 Win + R 组合键,输入 wf.msc 并回车,打开 “高级安全 Windows Defender 防火墙”。

(1.2)在左侧导航栏中选择 “入站规则”。

(1.3)点击右侧的 “新建规则”,在弹出的 “新建入站规则向导” 中:

(1.4)规则类型选择 “自定义”,然后点击 “下一步”。

(1.5)程序选择 “所有程序”,点击 “下一步”。

(1.6)协议和端口:协议类型选择 全部,点击 “下一步”。

(1.7)作用域:在 “远程 IP 地址” 中选择 “这些 IP 地址”,点击 “添加”,输入 172.26.96.0/20(这是 WSL 子网的 CIDR 表示法),然后点击 “下一步”。

(1.8)操作选择 “允许连接”,点击 “下一步”。

(1.9)配置文件根据你的实际情况选择,一般全选,然后点击 “下一步”。

(1.10)给规则命名(例如 “Allow WSL ICMP”),点击 “完成”。

(2)手动设置ollama的监听IP与端口

即cmd启动OLLAMA Server,在CMD下直接执行:

set OLLAMA_HOST=0.0.0.0

set OLLAMA_PORT=11434

ollama serve

七、在Dify中添加Embeding模型添加

基本与上面的一样。在添加模型那里,点击“Text Embedding”,模型名称填:shaw/dmeta-embedding-zh,在“基础URL中”,如果ollama和Dify是同机部署,并且Dify是通过Docker部署,那么填http://host.docker.internal:11434,其他情况填http://ollama的地址:11434,填完之后点击保存即可。

我的是:

八、上传私有知识库

在Dify的首页,点击“知识库“,进入到知识库界面,点击创建知识库:

上传已有文档,直接下一步,基本都是默认选项,然后在“索引方式“一栏中,选择”高质量“,Embedding模型选择刚才添加的ollama embedding模型。

在“检索设置“一栏,选择”混合检索“,即同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,用户可以选择设置权重或配置重新排序模型。然后点击”保存并处理 “:

待处理完成即可,处理完成后,再看,会是“可用“状态。

可以点击进去,试一下“召回测试“:

九、智能体搭建

点击“工作室 “,选择“创建空白应用 “,选择”Agent“,然后填写”应用名称“,点击”创建“:

创建完成后,进去,按照你的需要填写一些信息,就可以探索了,具体使用就不细讲了,我这里还是遇到了一个问题。

问题1:在“工作室“建立好的应用,在点击进去时报错:

Application error: a client-side exception has occurred (see the browser console for more information).

Console中报错:

content.js:1 TypeError: Cannot read properties of undefined (reading 'tabId')

    at 634.js:2

    at Generator.next (<anonymous>)

    at t (147.js:2)

at u (147.js:2)

我的解决就是,换个浏览器就好了,报错的浏览器时chrom,也就是谷歌浏览器,我换成Edge,没有问题。

相关文章:

实操部署DeepSeek,添加私有知识库

目录 一、环境介绍 PowerShell版本&#xff1a; wsl版本&#xff1a; 虚拟机版本&#xff1a; 本机IP&#xff1a; 虚拟机IP&#xff1a; 容器宿主机IP&#xff08;host.docker.internal&#xff09;&#xff1a; Docker版本&#xff1a; Docker Compose版本&#xff…...

宜宾数字经济新标杆:树莓集团赋能区域产业转型升级

树莓集团在宜宾成为数字经济新标杆&#xff0c;有力地赋能区域产业转型升级。在传统产业数字化转型方面&#xff0c;树莓集团针对宜宾的制造业企业&#xff0c;引入工业互联网技术。 通过搭建工业互联网平台&#xff0c;实现企业生产设备的联网和数据采集&#xff0c;帮助企业…...

8.大规模推荐系统的实现

接下来我们将学习大规模推荐系统的实现。在实际应用中&#xff0c;推荐系统需要处理海量数据&#xff0c;并在短时间内生成推荐结果。这要求我们在设计和实现推荐系统时&#xff0c;考虑到数据的分布式存储与处理、计算的高效性和系统的可扩展性。在这一课中&#xff0c;我们将…...

第三届通信网络与机器学习国际学术会议(CNML 2025)

在线投稿&#xff1a; 学术会议-学术交流征稿-学术会议在线-艾思科蓝 通信网络机器学习 通信理论 通信工程 计算机网络和数据通信 信息分析和基础设施 通信建模理论与实践 无线传感器和通信网络 云计算与物联网 网络和数据安全 光电子学和光通信 无线/移动通信和技术 智能通信…...

MySQL两阶段提交策略

书接上一篇文章&#xff0c;MySQL通过不同的策略来保证事务的ACID&#xff1a;原子性、一致性、隔离性、持久性&#xff0c;通过锁机制实现隔离性&#xff0c;通过redoundobinlog三种日志实现事务的原子性、一致性和持久性。 本文主要讲MySQL的持久性的一个实现机制-两阶段提交…...

uniapp商城之购物车模块

文章目录 一、列表渲染二、删除单品1.封装删除API2.按钮绑定事件三、修改单品数量1.复用步进器组件2.属性和事件的绑定3.接口封装4.调用接口四、修改商品选中/全选1.单品选中绑定事件调用修改API2.计算全选状态3.绑定事件调用全选API并渲染单品选中状态五、底部结算信息1.计算选…...

STM32_USART通用同步/异步收发器

目录 背景 程序 STM32浮空输入的概念 1.基本概念 2. STM32浮空输入的特点 3. STM32浮空输入的应用场景 STM32推挽输出详解 1. 基本概念 2. 工作原理 3. 应用场景 使能外设时钟 TXE 和 TC的区别 USART_IT_TXE USART_IT_TC 使能串口外设 中断处理函数 背景 单片…...

python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!

一、YAML详解 YAML是一种数据类型&#xff0c;它能够和JSON数据相互转化&#xff0c;它本身也是有很多数据类型可以满足我们接口 的参数类型&#xff0c;扩展名可以是.yml或.yaml 作用&#xff1a; 1.全局配置文件 基础路径&#xff0c;数据库信息&#xff0c;账号信息&…...

python基础入门:6.3异常处理机制

Python异常处理全面指南&#xff1a;构建健壮程序的关键技术 # 完整异常处理模板 def process_file(file_path):"""文件处理示例函数"""file Nonetry:file open(file_path, r, encodingutf-8)data json.load(file)if not data:raise EmptyDa…...

Mybatis快速入门与核心知识总结

Mybatis 1. 实体类&#xff08;Entity Class&#xff09;1.1 实体类的定义1.2 简化编写1.2.1 Data1.2.2 AllArgsConstructor1.2.3 NoArgsConstructor 2. 创建 Mapper 接口2.1 Param2.2 #{} 占位符2.3 SQL 预编译 3. 配置 MyBatis XML 映射文件&#xff08;可选&#xff09;3.1 …...

畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用

文章目录 SiliconFlow 硅基流动注册使用注册创建API密钥使用网页端使用代码调用api调用支持的模型 SiliconFlow 硅基流动注册使用 注册 硅基流动官网 https://cloud.siliconflow.cn/i/XcgtUixn 注册流程 切换中文 ​ 邀请码&#xff1a; XcgtUixn 创建API密钥 账户管理 --&g…...

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码示例&#xff0c;使用Arduino语言&#xff1a; 硬件连接 INMP441 VCC → ESP32的3.3VINMP441 GND → ESP32的GNDINMP441 SCK → ESP32的GPIO 17INMP441 WS → ESP32的GPIO 18INMP441 SD → ESP32的GPIO 16RG…...

Springboot 中如何使用Sentinel

在 Spring Boot 中使用 Sentinel 非常方便&#xff0c;Spring Cloud Alibaba 提供了 spring-cloud-starter-alibaba-sentinel 组件&#xff0c;可以快速将 Sentinel 集成到你的 Spring Boot 应用中&#xff0c;并利用其强大的流量控制和容错能力。 下面是一个详细的步骤指南 …...

访问Elasticsearch服务 curl ip 端口可以 浏览器不可以

LINUX学习 在虚拟机上面的linux上面用docker 部署Elasticsearch项目后&#xff0c;在linux系统内部用curl ip 端口地址的形式可以访问到Elasticsearch。可以返回数据。 但是在本机的浏览器中输入ip 端口&#xff0c;会报错&#xff0c;找不到服务。 ping 和 trelnet均不通。 …...

Curser2_解除机器码限制

# Curser1_无限白嫖试用次数 文末有所需工具下载地址 Cursor Device ID Changer 一个用于修改 Cursor 编辑器设备 ID 的跨平台工具集。当遇到设备 ID 锁定问题时&#xff0c;可用于重置设备标识。 功能特性 ✨ 支持 Windows 和 macOS 系统&#x1f504; 自动生成符合格式的…...

人工智能与低代码如何重新定义企业数字化转型?

引言&#xff1a;数字化转型的挑战与机遇 在全球化和信息化的浪潮中&#xff0c;数字化转型已经成为企业保持竞争力和创新能力的必经之路。然而&#xff0c;尽管“数字化”听上去是一个充满未来感的词汇&#xff0c;落地的过程却往往充满困难。 首先&#xff0c;传统开发方式…...

arkTS基础

arkTS基础 // 变量声明 let hi: string hello; hi hello,world; // 常量声明 const hi: string hello;// ArkTS是一种静态类型语言&#xff0c;所有数据的类型都必须在编译时确定 // 如果一个变量或常量的声明包含了初始值&#xff0c;那么开发者就不需要显式指定其类型。…...

C++20中的std::atomic_ref

一、std::atomic_ref 我们在学习C11后的原子操作时&#xff0c;都需要提前定义好std::atomic变量&#xff0c;然后才可以在后续的应用程序中进行使用。原子操作的优势在很多场合下优势非常明显&#xff0c;所以这也使得很多开发者越来习惯使用原子变量。 但是&#xff0c;在实…...

四、自然语言处理_08Transformer翻译任务案例

0、前言 在Seq2Seq模型的学习过程中&#xff0c;做过一个文本翻译任务案例&#xff0c;多轮训练后&#xff0c;效果还算能看 Transformer作为NLP领域的扛把子&#xff0c;对于此类任务的处理会更为强大&#xff0c;下面将以基于Transformer模型来重新处理此任务&#xff0c;看…...

spring学习(使用spring加载properties文件信息)(spring自定义标签引入)

目录 一、博客引言。 二、基本配置准备。 &#xff08;1&#xff09;初步分析。 &#xff08;2&#xff09;初始spring配置文件。 三、spring自定义标签的引入。 &#xff08;1&#xff09;基本了解。 &#xff08;2&#xff09;引入新的命名空间&#xff1a;xmlns:context。 &…...

bigemap pro如何进行poi兴趣点搜索?

准备工具&#xff1a;BIGEMAP Pro是数据要素设计软件(DED),国产基础软件&#xff0c;大数据编辑、制图、多源数据要素类处理软件打开软件右上角选择分类搜索然后用矩形或者选择行政边界线选择需要查询的范围选中范围以后点击查询然后可以直接加载到地图然后图层右键数据导出矢量…...

Mybatis源码02 - 初始化基本过程(引导层部分)

初始化基本过程&#xff08;引导层部分&#xff09; 文章目录 初始化基本过程&#xff08;引导层部分&#xff09;一&#xff1a;初始化的方式及引入二&#xff1a;初始化方式-XML配置文件1&#xff1a;MyBatis初始化基本过程2&#xff1a;创建Configuration对象的过程2.1&…...

【Elasticsearch】bucket_sort

Elasticsearch 的bucket_sort聚合是一种管道聚合&#xff0c;用于对父多桶聚合&#xff08;如terms、date_histogram、histogram等&#xff09;的桶进行排序。以下是关于bucket_sort的详细说明&#xff1a; 1.基本功能 bucket_sort聚合可以对父聚合返回的桶进行排序&#xff…...

k8s证书过期怎么更新?

在 Kubernetes 集群中&#xff0c;证书过期可能导致集群不可用&#xff0c;尤其是 API Server、Controller Manager、Scheduler 等组件所使用的证书。为了恢复集群的正常运行&#xff0c;您需要更新这些证书。以下是更新 Kubernetes 证书的基本步骤&#xff1a; 1. 检查证书状…...

活动预告 |【Part 1】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…...

AIGC-微头条爆款文案创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…...

C# 比较两个List集合内容是否相同

在 C# 中&#xff0c;要比较两个 List<T> 集合的内容是否相同&#xff0c;可以通过以下几种方法&#xff1a; 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法&#xff08;顺序和内容都相等&#xff09; 顺序和内容都相等&#xff1a;使用 SequenceEqual。 usin…...

vue2 多页面pdf预览

使用pdfjs-dist预览pdf&#xff0c;实现预加载&#xff0c;滚动条翻页。pdfjs的版本很重要&#xff0c;换了好多版本&#xff0c;终于有一个能用的 node 20.18.1 "pdfjs-dist": "^2.2.228", vue页面代码如下 <template><div v-loading"loa…...

【python】matplotlib(animation)

文章目录 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折线图2.2、条形图2.3、散点图 3、参考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 库中用于创建动画的一个…...

Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用

Hello Robot公司近日发布了其新一代开源移动操作机器人Stretch 3&#xff0c;这是一款高度灵活的机器人平台&#xff0c;专为机器人研究、教育实验和商业自动化设计。Stretch 3 结合了先进的移动机器人技术、灵巧操作能力和开源软件生态系统&#xff0c;为用户提供了一个功能强…...