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

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。

1. Ragflow 存在问题

Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow
Ragflow 当前版本: v0.17.0

Ragflow 目前主要存在以下问题:

  1. 登录页开放注册
    当前版本,在login页面,用户可直接进行注册,在小规模私有化部署中,开放注册接口,易对用户产生困扰,甚至存在被频繁调用攻击的风险。

  2. 知识库共享问题
    当前版本,团队成员进行知识库共享需要知识库的创建者邀请其它成员进团队,发出邀请时,需要其它成员点击接受才行,较为繁琐。

  3. 模型设置问题
    当前版本,所有团队成员的模型设置是独立的,如需共用同一套模型配置,需要每个用户单独进行设置,不利于团队化协作。

  4. 可视化管理
    当前版本,未存在超级管理员的后台界面,无法直观的对用户账户进行可视化管理。

本文将围绕以上四点问题,对Ragflow进行二次开发解决。

2. 开源协议

Ragflow采用的是较为宽松的Apache License 2.0 ,这意味着其允许进行二次开发和商用,且修改后可无需开源。

3. 技术栈分析

3.1 容器组件分析

通过docker启动该服务时,docker-compose-base.yml包含了部分基础配置参数,可以看到整个服务共包含5个容器组件:

services:es01:container_name: ragflow-es-01infinity:container_name: ragflow-infinitymysql:container_name: ragflow-mysqlminio:container_name: ragflow-minioredis:container_name: ragflow-redis

各组件功能如下:

  1. Elasticsearch
    主要用作文档引擎,负责存储和检索文本及向量数据,作为系统的知识库存储后端,用以支持向量存储和相似度搜索

  2. ragflow-infinity
    前端系统,包含基本的界面显示、数据交互、路由跳转等功能

  3. MySQL
    关系型数据库,存储系统的结构化数据,包括管理用户账户、权限等基础信息、
    存储知识库的元数据信息等

  4. MinIO
    对象存储服务,用于存储原始文档及文档切片图像信息

  5. Redis
    内存数据库, 采用Valkey版本,缓存大模型的响应结果,处理异步任务,临时保存对话上下文

3.2 前后端框架分析

该系统前端框架使用React+Typescript,代码统一在web文件夹。
后端框架使用Flask+Python,代码分好几部分,具体内容如下:

  • agent:对应前端agent相关模块功能
  • agentic_reasoning:对应前端搜索相关模块功能
  • api:核心后端程序,用来与前端进行数据对接,并提供后端服务和其它各组件连接及数据交互功能
  • deepdoc:提供文件ocr等解析相关功能
  • graphrag:知识图谱相关功能
  • rag:主要用以和大模型相关接口进行交互
  • sdk:拓展型功能,用来提供系统的外部调用,目前不太完善,可忽略。

3.3 前后端可视化分析

3.3.1 前端可视化分析

前端代码全部集成在web文件夹下,因此可直接在web路径下直接启动查看。

先安装依赖:

yarn instsall 

依赖安装完成,生成node_modules
再启动:

yarn start

访问http://localhost:9222 即可进入登录界面。

考虑到登录需要和后端交互,密码验证通过后,才能进入主界面。如需直接进入主界面预览,可修改web/src/utils/request.ts
这里的逻辑是:本来响应结果为504,弹出error,这里直接改成成功响应。

request.interceptors.response.use(async (response: Response, options) => {if (response?.status === 413 || response?.status === 504) {// 原代码// message.error(RetcodeMessage[response?.status as ResultCode]);// 修改return new Response(JSON.stringify({code: 0,message: 'Success',data: {}}));}

3.3.2 mysql可视化分析

下面再可视化查看其它组件信息,在docker/.env文件中,包含了各组件的密码。

启动docker服务,首先查看mysql数据库信息。

使用DBeaver进行连接,连接参数如下,默认用户名为root,密码为infini_rag_flow

在这里插入图片描述

可以看到,该数据库中包含多张数据表,后续在解决实际问题时,会进一步分析。

在这里插入图片描述

3.3.3 Elasticsearch可视化分析

Elasticsearch需要通过Kibana进行可视化分析。虽然.env文件中写了Kibana的初始用户名和密码,但实际服务中,并未启用Kibana。看到仓库中有人提出过该问题,具体可参考该pr:https://github.com/infiniflow/ragflow/pull/548/files

3.3.4 MinIO可视化分析

MinIO自带了可视化管理的控制台,访问http://localhost:9001/即可进入,默认用户名为rag_flow,默认密码为infini_rag_flow

进入可看见,里面的容器包含了原始上传的pdf文件和切块分页的图像数据。

在这里插入图片描述

3.3.5 Redis可视化分析

使用Rdis insight连接Redis数据库,默认地址为127.0.0.1:6379,默认用户名为default,默认密码为infini_rag_flow

在这里插入图片描述
进入可看见,里面存储了一些缓存数据。

在这里插入图片描述

4. 问题解决方法

分析完了,开始解决开头提到的一些具体问题。

4.1 关闭注册通道

关闭注册通道,可直接将前端界面上的注册元素注释掉。

在这里插入图片描述

具体方法是修改src\pages\login\index.tsx文件,注释掉以下内容:

{ <div>{title === 'login' && (<div>{t('signInTip')}<Button type="link" onClick={changeTitle}>{t('signUp')}</Button></div>)}{title === 'register' && (<div>{t('signUpTip')}<Button type="link" onClick={changeTitle}>{t('login')}</Button></div>)}
</div>}

这样修改,用户直接通过浏览器访问/register也是无法注册的,因为注册功能并不是一个单独界面,而是在login中,post到后端进行处理。

4.2 后台添加用户

阻止用户自己注册之后,管理员还需要为用户进行注册。可直接采用修改数据库内容的方式进行实现。

连接mysql数据库,用户信息存储在user表中。该表包含以下字段,核心字段是emailpassword

在这里插入图片描述

email比较容易理解,存储的就是登陆明文邮箱,但密码是哈希字符串,为了防止被人攻击泄露,不能存储明文密码,因此,要解决注册问题,首先需要理清楚密码的加密逻辑。

通过仔细阅读源代码,我理清楚了注册阶段,密码的加密存储过程:
首先,前端获取到用户原始输入密码后,先进行Base64编码,防止特殊字符造成解析失败,编码后利用公钥进行RSA加密;
后端接收到加密密码后,利用私钥进行RSA解密,最后通过Hash处理,存储到数据库。

A[原始密码] --> B[前端Base64编码] --> C[RSA加密] --> D[后端RSA解密] --> E[hash存储]

为了让这个过程更容易理解,我写了个python代码,模拟了该过程,其中,私钥数据可以在文件中找到,路径为 conf/private.pem

import base64
from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_v1_5
from werkzeug.security import generate_password_hash, check_password_hashdef rsa_decrypt(encrypted_password: str, private_key_path: str, passphrase: str) -> str:# 从文件中读取私钥with open(private_key_path, "r") as key_file:private_key = key_file.read()# 导入私钥rsa_key = RSA

相关文章:

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。 1. Ragflow 存在问题 Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow Ragflow 当前版本: v0.17.0 Ragflow 目前主要存在以下问题: …...

力扣hot100二刷——链表

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…...

【Godot4.3】斜抛运动轨迹曲线点求取函数

概述 原文写于去年9月。一篇测试性的文章。 基于初始位置和初始速度的抛物线 # 抛物运动轨迹曲线 - 基于初始位置和初始速度计算 func projectile_motion_curve(start_pos:Vector2, # 物体的起始位置velocity:Vector2, # 初始速度nums:int, …...

SpringBoot基础Kafka示例

这里将生产者和消费者放在一个应用中 使用的Boot3.4.3 引入Kafka依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…...

【安卓逆向】安卓病毒介绍及其简单案例分析

目录 引言 一、Android 病毒介绍及分析方法 1.1 Android 病毒预览 1.2 Android 病毒分析必备知识 1.3 Android 病毒的常见类型及恶意行为 1.3.1 常见病毒类型 1.3.2 常见病毒行为 1.4 病毒激活条件 1.5 Android 病毒的传播方式 1.6 Android 病毒分析的一般方法 二…...

Git的命令学习——适用小白版

浅要了解一下Git是什么&#xff1a; Git是目前世界上最先进的的分布式控制系统。Git 和其他版本控制系统的主要差别在于&#xff0c;Git 只关心文件数据的整体是否发生变化&#xff0c;而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上…...

Bad owner or permissions on ssh/config - 解决方案

问题 在Windows系统通过ssh连接远程服务器时报错&#xff1a; ssh [ssh_user][ip] Bad owner or permissions on C:\\Users\\[win_user]/.ssh/config原因 这是因为.ssh文件夹或.ssh/config文件的权限异常&#xff0c;当前Windows账号没有读写权限导致的。 Windows系统重装&a…...

AI 赋能软件开发:从工具到思维的全面升级

喜欢可以到主页订阅专栏 引言 在当今技术飞速发展的时代,人工智能(AI)正以前所未有的速度渗透到各个领域,软件开发行业也不例外。AI 不仅改变了开发工具的使用方式,更深刻地影响了开发者的思维模式和工作流程。从代码生成到错误检测,从性能优化到项目管理,AI 正在全面…...

【Ubuntu系统设置固定内网ip,且不影响访问外网 】

Ubuntu系统安装后&#xff0c;由于每次重新开机会被重新分配内网ip&#xff0c;所以我们可以设置固定内网ip&#xff0c;且不影响访问外网&#xff0c;亲测有效 打开【终端】&#xff0c;查看当前内网ip&#xff08;inet&#xff09;&#xff0c;子网掩码&#xff08;netmask&a…...

VSCode集成C语言开发环境

下载MinGW https://sourceforge.net/projects/mingw/ 点击download按钮下载exe文件到本地 点击exe文件安装 选择基础包和c编译版 vscode安装部分跳过 安装code runner和c/c插件 **(1) 创建 C 文件** 新建一个测试文件&#xff08;例如 hello.c&#xff09;&#xf…...

力扣:3305.元音辅音字符串计数

给你一个字符串 word 和一个 非负 整数 k。 返回 word 的 子字符串 中&#xff0c;每个元音字母&#xff08;a、e、i、o、u&#xff09;至少 出现一次&#xff0c;并且 恰好 包含 k 个辅音字母的子字符串的总数。 示例 1&#xff1a; 输入&#xff1a;word "aeioqq"…...

vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题

1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆&#xff0c;邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible &#xff1b; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…...

【ELK】ElasticSearch 集群常用管理API操作

目录 常用_cat 概览 集群状态 集群配置 集群磁盘使用 索引信息与配置 shard - 分片 查看段信息 nodes -节点 用户与权限 tasks 和 pending_tasks allocation - 均衡 thread_pool -线程 templete 模版 ILM 生命周期 其他 集群版本&#xff1a; 7.17.6 API地址&…...

BambuStudio学习笔记:MTUtils

# MTUtils.hpp 功能解析## 文件概述 该头文件提供了多线程同步工具和数值生成功能&#xff0c;主要包含以下组件&#xff1a;### 核心组件1. **自旋锁 (SpinMutex)**- 基于原子操作的高性能锁- 实现Lockable概念&#xff0c;可与标准库锁守卫配合使用2. **缓存对象模板 (Cached…...

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…...

Ubuntu 22.04 安装配置 FTP服务器 教程

今天搞定在 Ubuntu 22.04 系统上安装和配置 VSFTPD &#xff0c;还会涉及防火墙设置、SSL/TLS 设置&#xff0c;以及创建专门登录 FTP 服务器的账户。开始&#xff01; 一、安装 VSFTPD 首先&#xff0c;咱得让系统知道有啥新软件包可以安装。打开终端&#xff0c;输入下面这…...

2021-05-28 C++自己写一个strcmp函数

规则 当s1<s2时&#xff0c;返回为负数-1&#xff1b; 当s1s2时&#xff0c;返回值 0&#xff1b; 当s1>s2时&#xff0c;返回正数1。 即&#xff1a;两个字符串自左向右逐个字符相比&#xff08;按ASCII值大小相比较&#xff09;&#xff0c;直到出现不同的字符或遇…...

版本控制器Git(3)

文章目录 前言一、分支管理策略二、Bug分支管理遇到Bug时的处理方法使用 git stash 暂存工作区内容创建并切换到Bug修复分支恢复之前的工作 三、临时分支的删除总结 前言 我们在上篇讲到了分支&#xff0c;现在我们就着这个继续来讲解&#xff01; 一、分支管理策略 master分支…...

TDengine 使用教程:从入门到实践

TDengine 是一款专为物联网&#xff08;IoT&#xff09;和大数据实时分析设计的时序数据库。它能够高效地处理海量的时序数据&#xff0c;并提供低延迟、高吞吐量的性能表现。在本文中&#xff0c;我们将带领大家从 TDengine 的安装、基本操作到一些高级功能&#xff0c;帮助你…...

Python Web项目的服务器部署

一.部署运行 1.虚拟环境的安装&#xff1a;&#xff08;一行一行运行&#xff09; wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh bash miniconda.sh -b -p /opt/miniconda3 echo export PATH"/opt/miniconda3/bin:$PAT…...

linux - ubuntu 使用时一些小问题整理 --- 持续更新

目录 ubuntu 中 root用户默认不存在解决办法 在Ubuntu系统中&#xff0c;将用户添加到sudoers文件中&#xff0c;使其能够以超级用户权限执行命令&#xff0c;通常可以通过以下几种方法实现&#xff1a; 方法1&#xff1a;将用户添加到sudo组 方法2&#xff1a;直接编辑sud…...

道路运输安全员考试:备考中的心理调适与策略

备考道路运输安全员考试&#xff0c;心理调适同样重要。考试压力往往会影响考生的学习效率和考试发挥。​ 首先&#xff0c;要正确认识考试压力。适度的压力可以激发学习动力&#xff0c;但过度的压力则会适得其反。当感到压力过大时&#xff0c;要学会自我调节。可以通过运动…...

关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】

问题需求 目录和文件结构如下&#xff1a; E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt现在要在master.xlsx点击单元格进而访问Level1.txt、Level2.txt、Level3.txt这些文件。 方法一&#xff1a;“单元格右键…...

深入理解Tomcat:Java Web服务器的安装与配置

大家好&#xff01;今天我们来聊聊Java Web开发中最重要的工具之一——Apache Tomcat。Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;它是运行Java Web应用程序的核心环境。无论是开发、测试还是部署Java Web应用&#xff0c;Tomcat都是不可或缺的工具。本文将详…...

【从零开始学习计算机科学】编译原理(五)语法制导翻译

【从零开始学习计算机科学】编译原理(五)语法制导翻译 语法制导翻译语法制导定义SDDSDD的求值顺序两类重要的SDD语法制导的翻译方案SDTSDT的实现L属性定义的SDT左递归翻译方案语法制导翻译 语法表述的是语言的形式,或者说是语言的样子和结构。而程序设计语言中另一方面,是…...

Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境

在日常的开发过程中&#xff0c;使用版本控制工具 Git 是一个非常重要的技能&#xff0c;特别是对于管理和协作开发。通过 GitHub&#xff0c;我们可以轻松地进行代码版本管理和共享。这篇博客将带您一步步学习如何配置 Git 环境并将本地仓库与 GitHub 远程仓库连接起来。 一、…...

【MySQL是怎么运行的】0、名词解释

聚簇索引&#xff1a;聚簇索引和数据在一起&#xff0c;又名主键索引&#xff0c;是主键id构建的一颗B树&#xff0c;非叶节点是主键id&#xff0c;叶子节点是真实数据。其他索引统称二级索引&#xff0c;也称为非聚簇索引。覆盖索引&#xff1a;查找的数据就在索引树上&#x…...

网络安全事件响应--应急响应(windows)

应用系统日志 Windows主要有以下三类日志记录系统事件&#xff1a;应用程序日志、系统日志和安全日志。 系统和应用程序日志存储着故障排除信息&#xff0c;对于系统管理员更为有用。安全日志记录着事件审计信息&#xff0c;包括用户验证&#xff08;登录、远程访问等&#x…...

使用 UNIX 命令在设计中搜索标识符:vcsfind 的入门指南

在现代软件开发和硬件设计中&#xff0c;快速准确地定位和搜索特定标识符是提高开发效率的关键。本文将介绍如何使用 UNIX 命令 vcsfind 在设计中搜索标识符&#xff0c;帮助您更高效地管理您的项目。 什么是 vcsfind&#xff1f; vcsfind 是一个强大的 UNIX 命令行工具&#x…...

Qt不同窗口类的控件信号和槽绑定

做项目的时候我使用了Qt&#xff0c;不同的界面使用了不同的ui的类进行解耦&#xff0c;但是信号和槽绑定的时候可能是不同界面的控件互相进行通讯连接&#xff0c;然而ui指针对于各个界面类是私有成员&#xff0c;无法直接跳过访问&#xff0c;在网上看了一些参考资料&#xf…...

【Godot4.2】Vector2向量插值的应用

求线段的等分点 extends Node2Dvar pos:Vector2 var split_num:int var p1 Vector2(200,200) var p2 Vector2(100,100)func _input(event: InputEvent) -> void:if event is InputEventMouseButton:if event.button_index MOUSE_BUTTON_WHEEL_DOWN:split_num clamp(spl…...

Java线程安全

Java线程安全实现方式及原理详解 一、线程安全的核心概念 线程安全指多线程环境下,程序能正确且一致地处理共享资源的状态,不会因线程调度顺序导致数据不一致或逻辑错误。例如多个线程同时修改共享变量时,需通过同步机制确保操作原子性。 二、主要实现方式及原理 synchro…...

电机控制常见面试问题(九)

文章目录 一、谈谈电机死区时间1.死区时间过短的后果&#xff1a;2.如何判断死区时间不足?3.解决方案 二、请描述对实时操作系统&#xff08;RTOS&#xff09;的理解三.解释FOC算法的原理并比较与其他无刷电机控制算法的优劣四.什么是电机堵转&#xff0c;如何避免电机堵转五.…...

Django与模板

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲视图 Django与模板文件工作流程 模板引擎&#xff1a;主要参与模板渲染的系统。 内容源&#xff1a;输入的数据流。比较常见的有数据库、XML文件和用户请求这样的网络数据。 模板&am…...

UFW 配置 Ubuntu 防火墙并设置防火墙规则

一、什么是 UFW&#xff1f; UFW&#xff0c;全称为 Uncomplicated Firewall&#xff0c;顾名思义&#xff0c;它是一种简单易用的防火墙管理工具。与传统的防火墙配置工具相比&#xff0c;UFW 以其简洁明了的命令行界面而闻名。虽然它主要为普通用户设计&#xff0c;但它也具…...

在Keil 5中如何建立一个STM32项目

大家在使用Keil时大多都是利用样板项目来建立自己的项目&#xff0c;为了了解基本建立项目的知识写下了本篇文章。 项目建立流程 1.建立项目文件夹并明确其作用 —— 2.下载HAL库 —— 3.拷贝相关文件到对应文件夹 —— 4.打开Keil 5新建项目 —— 5.将项目文件夹添加到项目 …...

Linux 系统负载过高的排查思路

技术探讨&#xff1a;Linux系统负载过高的排查思路 在Linux服务器运行过程中&#xff0c;如果系统负载过高&#xff0c;可能会导致性能下降和服务不稳定。以下是针对Linux系统负载过高问题的排查思路和解决方法&#xff1a; 1. 查看系统负载&#xff1a; 使用uptime或top命令查…...

kotlin高级用法总结

Kotlin 是一门功能强大且灵活的编程语言&#xff0c;除了基础语法外&#xff0c;它还提供了许多高级特性&#xff0c;可以帮助你编写更简洁、高效和可维护的代码。以下是 Kotlin 的一些高级用法&#xff0c;涵盖了协程、扩展函数、属性委托、内联类、反射等内容。 协程&#x…...

Windows Wise Care 365 PRO-中文便携版

Windows Wise Care 365 PRO 链接&#xff1a;https://pan.xunlei.com/s/VOL9UE-i-GLXYr-6KhdyghHOA1?pwdajqe# - 禁止后续强制升级提示弹窗&#xff0c;杜绝后台下载升级文件 - 禁止自动创建开机启动项、任务计划&#xff0c;删除相关选项 - 去右侧无用区域&#xff1a;用户…...

SpringBoot 自动配置原理

自动配置是Spring Boot的关键特性之一&#xff0c;它简化了传统Spring应用繁琐的配置&#xff0c;通过智能推断和条件化配置简化了Spring应用的开发。 1. 自动配置的核心思想 目标&#xff1a;根据项目的依赖&#xff08;如类路径中的 JAR 包&#xff09;和已有的配置&#xf…...

HTMLCSS绘制三角形

1.代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>01triangle</title><s…...

WorkTool 技术解析:企业微信自动化办公的合规实现方案

引言&#xff1a;企业微信生态中的自动化需求 随着企业微信用户规模突破4亿&#xff08;据腾讯2023年财报&#xff09;&#xff0c;其开放生态催生了自动化办公的技术需求。传统RPA&#xff08;机器人流程自动化&#xff09;工具在PC端已广泛应用&#xff0c;但移动端自动化仍…...

Linux机器之间排查网络连通问题

网络连通性排查步骤&#xff08;基于五层模型&#xff09; 以下按照网络五层架构&#xff0c;从底层到高层逐层排查&#xff0c;并分别列出Ubuntu和CentOS对应的命令。 1. 物理层 排查点&#xff1a;网线、网卡状态、物理连接。 命令&#xff08;通用&#xff09;&#xff1a…...

大数据学习(62)- Hadoop-yarn

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

Stable Diffusion/DALL-E 3图像生成优化策略

Stable Diffusion的最新版本或社区开发的插件&#xff0c;可以补充这些信息以保持内容的时效性。 云端源想 1. 硬件与部署优化&#xff08;进阶&#xff09; 显存压缩技术 使用--medvram或--lowvram启动参数&#xff08;Stable Diffusion WebUI&#xff09;&#xff0c;通过分…...

21 | 全面测试项目功能

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课&#xff1b;欢迎加入 云原生 AI 实战 星球&#xff0c;12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;&#xff1b;本节课最终…...

Debian系统grub新增启动项

参考链接 给grub添加自定义启动项_linux grub定制 启动项名称自定义-CSDN博客 www.cnblogs.com 1. boot里面的grub.cfg 使用vim打开boot里面的grub.cfg sudo vim /boot/grub/grub.cfg 这时候会看到文件最上方的提示 2. 真正配置grub的文件 从刚才看到的文件提示中&#x…...

C语言中的assert断言,你了解多少呢?

引言 ‘ 介绍了assert 是什么&#xff0c;以及assert的优缺点 一、什么assert是断言 assert.h 头文件定义了宏 assert() &#xff0c;用于在运行时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终止运行。这个宏常常被称为“断言”。 int a 10;asse…...

设计模式之工厂模式

工厂模式属于创建型设计模式的一种&#xff0c;其实在我看来它更是在面向对象编程语言的抽象层的更加灵活的应用。工厂模式其实在创建型模式中难度较高&#xff0c;整体的理解上需要一定时间进行消化&#xff0c;在一些Java常见框架中&#xff0c;这种模式也是频繁出现的设计&a…...

详细学习 pandas 和 xlrd:从零开始

详细学习 pandas 和 xlrd&#xff1a;从零开始 前言 在数据处理和分析中&#xff0c;Excel 文件是最常见的数据格式之一。Python 提供了强大的库 pandas&#xff0c;可以轻松地处理 Excel 文件中的数据。同时&#xff0c;我们还可以使用 xlrd 来读取 Excel 文件&#xff0c;尤…...