人工智能:企业RAG方案
一、LangChain + FAISS、Milvus / Weaviate介绍
在企业 RAG (Retrieval-Augmented Generation)方案中,LangChain + FAISS 和 Milvus / Weaviate 都是用于向量检索(Vector Search)的核心工具。两者的核心区别在于 存储方式、查询性能和可扩展性。
1. LangChain + FAISS
适用于小型或中型企业,低成本,轻量级向量检索
什么是 FAISS?
FAISS(Facebook AI Similarity Search)是一个高效的向量数据库,适用于嵌入式查询和相似性搜索。它是一个 纯本地的 Python 库,不需要额外的数据库支持,适合 小型数据集 或 离线搜索。
为什么选 LangChain + FAISS?
- 无需外部数据库,本地文件存储,部署简单,适合中小企业。
- 查询速度快,适用于几百万级的文档索引。
- LangChain 兼容,可以无缝对接 OpenAI、DeepSeek、Llama 等模型。
- 适合企业本地部署,不会产生数据外泄的风险。
示例代码
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings# 初始化 FAISS
embedding_model = OpenAIEmbeddings()
vector_db = FAISS.load_local("faiss_index", embedding_model)# 进行相似性搜索
query = "合同的主要条款是什么?"
docs = vector_db.similarity_search(query, k=5) # 返回最相关的 5 个文档
for doc in docs:print(doc.page_content)
适合中小企业,单机部署,查询速度快!
2. Milvus / Weaviate
适用于大规模企业,多租户,分布式向量数据库
什么是 Milvus?
Milvus 是一个 分布式向量数据库,支持 PB 级别数据索引,适用于海量文档查询。它可以和 Kubernetes、GPU 计算 结合,实现高并发、高吞吐量的查询。
什么是 Weaviate?
Weaviate 也是一个向量数据库,支持 混合搜索(全文 + 向量检索),并且可以直接嵌入 OpenAI、DeepSeek 等大模型 API,使其更加智能化。
为什么选 Milvus / Weaviate?
- 支持分布式扩展,适用于大型企业或 SaaS 级别的 RAG 方案。
- 支持高并发,能够在毫秒级别完成海量查询。
- 可以与 PostgreSQL、MongoDB 结合,支持结构化 + 非结构化数据查询。
- 支持 OpenAI / DeepSeek / Llama 的 AI 直接推理(Weaviate 更适合 AI 语义搜索)。
示例代码(Milvus)
from pymilvus import Milvus, DataType, Collection, connections# 连接 Milvus
connections.connect("default", host="localhost", port="19530")# 创建 Collection
collection = Collection("enterprise_docs")# 向量查询
query_vector = [0.1, 0.2, 0.3, ...] # 这里是文档的嵌入
search_param = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search([query_vector], "embeddings", search_param, limit=5)for hit in results[0]:print(f"匹配文档ID: {hit.id}, 相似度: {hit.distance}")
适合大规模企业,分布式部署,PB 级数据查询!
3. LangChain + FAISS vs. Milvus / Weaviate
对比项 | LangChain + FAISS | Milvus / Weaviate |
---|---|---|
适用场景 | 小型 / 中型企业,单机本地检索 | 大型企业 / 多租户,分布式检索 |
存储方式 | 本地存储(内存 + 磁盘) | 分布式存储(数据库 + 集群) |
查询速度 | 适用于百万级文档,查询快 | 适用于PB级数据,支持高并发 |
扩展性 | 不能水平扩展,需要手动分片 | 可以水平扩展,支持自动负载均衡 |
集成性 | 适用于离线搜索 | 适用于 AI 结合的语义搜索 |
✅ 如果企业数据量不大(少于 1000 万条记录)且本地部署,LangChain + FAISS 更合适!
✅ 如果企业有海量文档,且希望 SaaS 级服务,Milvus / Weaviate 更合适!
4. 结论
- 企业私有 RAG 方案(如 Nextcloud、OwnCloud)→ LangChain + FAISS(本地化、简单)
- 大规模 SaaS 级 RAG 方案(如多租户、多企业共享)→ Milvus / Weaviate(可扩展)
如果你的企业希望支持 OpenAI / DeepSeek / Llama 统一 API 方案,可以结合 Milvus / Weaviate + FastAPI,提供更强大的智能检索能力!🚀
二、企业私有RAG方案(基于LangChain + FAISS)
目标:在企业内部部署 LangChain + FAISS,结合 DeepSeek API / 本地 Llama,实现对 IBM ECM、Nextcloud、OwnCloud 等存储系统的文档分析和智能问答。
1、方案架构
核心组件
-
文档存储层(IBM ECM / Nextcloud / OwnCloud)
- 通过 WebDAV / API 获取文档数据。
- 支持多种文件格式(PDF、Word、Excel 等)。
-
预处理层
- OCR 解析(对于扫描版 PDF)
- 文本提取(NLTK / pdfplumber / docx2txt)
- 文档切分(LangChain RecursiveCharacterTextSplitter)
-
向量存储层
- LangChain + FAISS(本地存储,轻量级,支持快速相似度检索)
-
模型推理层
- DeepSeek API / 本地 Llama(统一 API 适配)
- 支持 Prompt Engineering(优化回答效果)
-
查询接口
- FastAPI / Flask 提供 REST API 接口
- 前端 Web 界面(支持搜索、问答、文档可视化)
2、关键实现步骤
1.获取文档数据
不同存储系统的 API 访问方式:
# 通过 WebDAV 获取 Nextcloud / OwnCloud 文件
import requestsWEBDAV_URL = "https://nextcloud.example.com/remote.php/webdav/"
USERNAME = "user"
PASSWORD = "password"response = requests.get(f"{WEBDAV_URL}/example.pdf", auth=(USERNAME, PASSWORD))
with open("example.pdf", "wb") as f:f.write(response.content)
对于 IBM ECM,可以使用 CMIS API 或定制连接器。
2.文档处理
文本提取(支持 PDF / Word):
from langchain.document_loaders import PyPDFLoader, Docx2txtLoaderpdf_loader = PyPDFLoader("example.pdf")
docs = pdf_loader.load()word_loader = Docx2txtLoader("example.docx")
docs.extend(word_loader.load())# 递归切分文本
from langchain.text_splitter import RecursiveCharacterTextSplittersplitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
split_docs = splitter.split_documents(docs)
3.生成向量嵌入并存储
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddingsembedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_db = FAISS.from_documents(split_docs, embedding_model)
vector_db.save_local("faiss_index") # 本地存储
4.向量搜索 + AI 回答
from langchain.chains import RetrievalQA
from langchain.llms import DeepSeekLLM# 加载向量数据库
vector_db = FAISS.load_local("faiss_index", embedding_model)# 初始化 DeepSeek API
llm = DeepSeekLLM(api_key="YOUR_API_KEY")# RAG 方案
qa = RetrievalQA.from_chain_type(llm=llm, retriever=vector_db.as_retriever())# 进行问答
query = "合同的主要条款是什么?"
answer = qa.run(query)
print(answer)
5.统一 API 提供查询接口
from fastapi import FastAPIapp = FastAPI()@app.get("/ask")
def ask(query: str):answer = qa.run(query)return {"query": query, "answer": answer}# 运行 API
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)
3、优化方向
✅ 数据同步:定期同步 ECM / Nextcloud / OwnCloud 数据。
✅ 缓存优化:对热门查询进行缓存,提高查询效率。
✅ 私有 Llama 部署:如果企业不希望依赖 DeepSeek,可改用本地 Llama。
✅ UI 前端支持:可开发 Web 页面,让用户直接交互。
这样,企业就可以在 本地私有化环境 下实现 智能文档问答 了!
三、文档权限管理
在企业内部部署 RAG 方案时,文档权限管理 是一个关键问题,尤其是 ECM(IBM ECM、Nextcloud、OwnCloud)等系统通常有严格的访问控制机制。要保证 AI 只能访问用户有权限查看的文档,可以采取以下 五层权限控制策略:
1、用户身份验证(Authentication)
✔ 统一身份认证(SSO / IAM 兼容)
- 采用 LDAP / Active Directory (AD) / OpenID Connect (OIDC) / SAML 进行单点登录(SSO)。
- 通过 OAuth2.0 / JWT 实现 API 级身份认证。
🔹 示例:基于 JWT 验证用户身份
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
import jwtSECRET_KEY = "your_secret_key"
ALGORITHM = "HS256"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")app = FastAPI()def verify_token(token: str = Depends(oauth2_scheme)):try:payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])return payloadexcept jwt.PyJWTError:raise HTTPException(status_code=401, detail="Invalid token")@app.get("/secure-data")
def secure_data(user: dict = Depends(verify_token)):return {"message": "Access granted", "user": user}
2、文档访问控制(Access Control)
✔ 方案:基于 ECM / Nextcloud / OwnCloud 权限
- 直接查询 ECM / Nextcloud / OwnCloud 文档权限表,确保用户只能访问自己有权限的文件。
- 采用 RBAC(基于角色的访问控制) 或 ABAC(基于属性的访问控制) 限制文档访问范围。
🔹 示例:查询用户权限
def user_has_access(user_id, doc_id):# 假设文档权限存储在数据库中query = f"SELECT * FROM doc_permissions WHERE user_id='{user_id}' AND doc_id='{doc_id}'"result = db.execute(query)return result is not None
🔹 示例:访问 Nextcloud API 验证权限
import requestsNEXTCLOUD_URL = "https://nextcloud.example.com/ocs/v2.php/cloud/shares"
HEADERS = {"OCS-APIRequest": "true"}def check_nextcloud_access(user, file_path):response = requests.get(f"{NEXTCLOUD_URL}?path={file_path}", headers=HEADERS, auth=(user, "password"))return response.status_code == 200
3、过滤向量索引(Embedding Filtering)
✔ 方案:向量数据库中存储权限信息
- 在 FAISS / Milvus / Weaviate 中存储 文档向量 + 访问权限。
- 每次查询时,只检索用户有权限的向量。
🔹 示例:FAISS 存储文档向量 + 用户权限
from langchain.vectorstores import FAISS# 假设 embeddings 存储在 FAISS 中,metadata 存储用户权限
vector_db = FAISS.load_local("faiss_index", embedding_model)# 仅检索用户有权限的向量
def search_secure_vectors(query, user_id):retriever = vector_db.as_retriever(search_type="similarity", filter={"allowed_users": user_id})return retriever.get_relevant_documents(query)
4、细粒度审计(Audit Logging)
✔ 方案:记录每次 AI 访问日志
- 记录 查询人、时间、查询内容、返回文档 ID,方便管理员审计。
- 可将日志存储在 Elasticsearch / Splunk / MongoDB 进行分析。
🔹 示例:记录 AI 查询日志
import time
import jsondef log_query(user_id, query, results):log_entry = {"timestamp": time.time(),"user_id": user_id,"query": query,"results": [doc["doc_id"] for doc in results],}with open("query_log.json", "a") as f:f.write(json.dumps(log_entry) + "\n")
5、API 级权限控制(RBAC / ABAC)
✔ 方案:基于角色(RBAC) 或 属性(ABAC)控制 API 权限
- RBAC(角色控制):限制哪些角色可以访问 AI 查询接口。
- ABAC(属性控制):限制不同用户对不同类别的文档访问权限。
🔹 示例:RBAC API 权限
from fastapi import DependsROLE_PERMISSIONS = {"admin": ["read", "write"],"manager": ["read"],"employee": ["read"],
}def check_permission(user: dict = Depends(verify_token)):role = user.get("role")if "read" not in ROLE_PERMISSIONS.get(role, []):raise HTTPException(status_code=403, detail="Permission denied")return user@app.get("/secure-query")
def secure_query(query: str, user: dict = Depends(check_permission)):return qa.run(query)
6、总结:如何确保企业 AI 只访问用户有权限的文档?
✅ 身份认证(SSO / JWT) ➝ 确保用户身份
✅ 文档权限验证(ECM / Nextcloud API) ➝ 仅访问有权限的文件
✅ 向量过滤(Embedding Filtering) ➝ 只检索有权限的向量
✅ 日志审计(Audit Logging) ➝ 记录查询行为,方便追踪
✅ API 权限控制(RBAC / ABAC) ➝ 限制不同角色的访问范围
这样可以确保 AI 只能访问用户有权限查看的文档,同时提高 企业数据安全性。🚀
四、自动同步ECM权限
为了确保企业私有 RAG 方案能够与 IBM ECM / Nextcloud / OwnCloud 的权限体系保持同步,避免 AI 访问无权限的文档,可以采取以下 三层自动同步策略:
1、实时查询 ECM 权限(实时 API 同步)
✅ 适用于文档量较少、访问频繁的场景(小型企业 / 中型企业)。
✅ 每次查询 AI 前,动态请求 ECM API 验证当前用户是否有权限。
🔹 方案:基于 ECM / Nextcloud / OwnCloud API 进行实时检查
- ECM / Nextcloud / OwnCloud 提供 API 以查询文档权限。
- 在 AI 查询前,调用 API 检查用户权限,仅允许有权限的查询。
示例:基于 Nextcloud API 实时检查权限
import requestsNEXTCLOUD_URL = "https://nextcloud.example.com/ocs/v2.php/cloud/shares"
HEADERS = {"OCS-APIRequest": "true"}def check_nextcloud_access(user, file_path):"""检查用户是否有权限访问 ECM 文档"""response = requests.get(f"{NEXTCLOUD_URL}?path={file_path}",headers=HEADERS,auth=(user, "password"),)return response.status_code == 200
适用场景
- 适用于小型数据量(< 10 万文档)。
- 适用于 ECM API 响应速度较快的情况。
- 但 API 调用较频繁,可能影响 ECM 服务器性能。
2、定期同步 ECM 权限(批量更新 + 本地缓存)
✅ 适用于文档较多、ECM API 调用成本高的企业(中型 / 大型企业)。
✅ 定期(如 每 10 分钟)同步 ECM 权限,并存入本地数据库(PostgreSQL / Redis / MongoDB)。
🔹 方案:批量同步 ECM 权限
- 每隔 X 分钟调用 ECM API,批量拉取所有文档权限。
- 本地数据库存储文档权限信息,并基于此数据过滤 AI 查询结果。
示例:定期同步 ECM 权限
import time
import requests
from database import save_document_permissionsECM_API_URL = "https://ecm.example.com/api/documents/permissions"def sync_ecm_permissions():"""批量同步 ECM 文档权限"""while True:response = requests.get(ECM_API_URL)if response.status_code == 200:permissions_data = response.json()save_document_permissions(permissions_data) # 存入数据库time.sleep(600) # 每 10 分钟同步一次
适用场景
- 适用于 10 万 - 100 万文档 级别的企业。
- 避免了频繁 ECM API 调用的性能开销。
- 但可能会有 最多 10 分钟的权限延迟。
3、向量数据库级别权限同步(Embedding Index 过滤)
✅ 适用于文档超大规模(> 100 万文档)的企业。
✅ 直接在 FAISS / Milvus / Weaviate 中存储 ECM 权限信息,AI 查询时自动过滤。
🔹 方案:存储向量时附加 ECM 权限
- 每个文档嵌入(embedding)时,存储 ECM 权限信息(如 UserID / Role)。
- AI 查询时,仅检索用户有权限的向量。
示例:FAISS + ECM 权限控制
from langchain.vectorstores import FAISSvector_db = FAISS.load_local("faiss_index", embedding_model)def search_secure_vectors(query, user_id):"""仅检索用户有权限的向量"""retriever = vector_db.as_retriever(search_type="similarity", filter={"allowed_users": user_id})return retriever.get_relevant_documents(query)
适用场景
- 适用于 > 100 万文档 超大规模企业 ECM。
- AI 查询速度快,不会影响 ECM 服务器性能。
- 但 ECM 权限变更后,向量数据库 可能需要重新索引。
4、总结:如何自动同步 ECM 权限?
同步方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
实时 API 同步 | 权限变更立即生效 | ECM 服务器压力大 | 小型企业 / ECM API 高速 |
定期批量同步 | 减少 API 负载 | 有一定时间延迟 | 10 万 - 100 万文档 |
向量数据库过滤 | AI 查询速度快 | 权限变更后需重新索引 | 100 万文档以上 |
相关文章:
人工智能:企业RAG方案
一、LangChain FAISS、Milvus / Weaviate介绍 在企业 RAG (Retrieval-Augmented Generation)方案中,LangChain FAISS 和 Milvus / Weaviate 都是用于向量检索(Vector Search)的核心工具。两者的核心区别在于 存储方…...
【Git流程最佳实践】 开发较大功能时应使用project branch
目录 背景和失败经验名词定义曾经使用project branch犯的错 建立project branch的必要性正确的使用project branch的方法 背景和失败经验 我们曾经使用过project branch,但是后来放弃了 名词定义 特性branch(特性分支): 在开发跨越新特性的时候会从主…...
线程的概念
目录 线程的概念 创建线程快速验证 物理内存管理 再谈页表 今天我们学习线程的概念 线程的概念 进程是一个指向起来的程序,进程内核数据结构代码和数据,线程称为指向流,执行粒度比进程要更细,是进程内部的一个执行分支&…...
firefly经典蓝牙和QProcess、QFileSystemWatcher记录
QProcess 默认不会启动一个 shell 来解析命令,而是直接调用操作系统的系统调用来启动外部程序。也就是通过fork一个子线程或者exec一个子进程来执行命令。 QProcess的参数模式 QProcess 需要明确指定命令的可执行文件路径或参数列表。 如果命令是一个可执行文件的路径…...
北斗设备启动流程与时长解析
北斗卫星导航系统作为我国自主研发的全球卫星导航系统,广泛应用于交通、通信、农业等多个领域。今天,我们就来详细探讨一下北斗设备的启动流程以及不同启动方式下的时长。 一、北斗设备的启动流程 北斗设备的启动流程可以分为以下几个关键步骤…...
PyTorch分布式训练中各节点如何通信
深度学习 文章目录 深度学习前言pytorch如何初始化分布式训练怎么知道要使用哪几台机器进行训练的如何根据标识进行初始化(init_method)如何获取进程的唯一标识rank如何实现数据如何分发 前言 同学们在处理分布式训练时经常会遇到以下几个疑问ÿ…...
又双叒叕Scrapy爬虫相关的面试题及详细解答
Scrapy是Python开发的一个快速、高层次的网络爬虫框架,专注于高效抓取网页并提取结构化数据。其核心设计基于异步处理机制,适合大规模数据采集任务。 文章目录 基础概念1. Scrapy框架的核心组件有哪些?架构与流程2. 描述Scrapy的工作流程核心组件详解3. 如何自定义Item Pipe…...
Docker与K8S是什么该怎么选?
用了很久的容器化,最近突然看到一个问题问: docker和K8S究竟有什么区别,到底该怎么选?我认真思考了一会,发现一时间还真说不明白,于是就研究了一段时间发布今天的博文! Docker vs Kubernetes&a…...
FPGA中串行执行方式之计数器控制
FPGA中串行执行方式之计数器控制 使用计数器控制的方式实现状态机是一种简单且直观的方法。它通过计数器的值来控制状态的变化,从而实现顺序逻辑。计数器的方式特别适合状态较少且状态转移是固定的场景。 基本原理 计数器控制的状态机 例程1:简单的顺序状态机 以下是一个…...
尝试使用tauri2+Django+React的项目
前言 使用Tauri2前端,本质是进程间的通信。并非前后端。 而想使用nw,先后端打包exe,再和前端打包成exe,并没有完成成功。 而笔者从Tauri中看到这种可能性。很有可能成功基于SeaORMMySQLTauri2ViteReact等的CRUD交互项目-CSDN博…...
用@keyframes-animation来实现动画效果
一、使用规则 keyframes 用于定义动画的关键帧。 animation属性 用于将keyframes动画用于元素上。 二、基本语法 keyframes keyframes xuanZhuan { /*xuanZhuan是动画名字,实现旋转*/0%{transform: rotate(0deg);}50%{transform: rotate(180deg);}100%{transform: rotate(…...
kernel中外部传递参数使用方法
在 Linux 内核模块开发中,module_param(rpc_tdebug, uint, 0600); 表示定义一个可通过外部传递参数进行配置的模块级变量,具体解析如下: 参数名称 rpc_tdebug 是模块参数的变量名,该变量需在代码中提前声明为静态全局变量&…...
AI赋能流域生态评估:从多源数据融合到服务价值预测的技术突破
流域生态系统服务评价是生态学与地理信息科学的交叉前沿,传统方法受限于数据碎片化与模型解释力不足。本文以随机森林-时空图卷积联合模型(RF-STGCN)为核心,结合2022年长江中游实际监测数据,详解AI技术在服务评价中…...
SZU软件工程大学生涯 2022~2026
用于个人面试前自我介绍,防止忘记或谈吐不流利。 面试官您好,我是来自深圳大学计算机与软件学院的软件工程专业的王雅贤。在校期间,我修读了程序设计基础、面向对象程序设计、数据结构、算法分析与设计、操作系统等核心课程,系统…...
如何设计一个合理的库存系统
库存管理系统是电商、供应链管理、仓储管理等核心系统之一。一个合理的库存系统需要同时满足高并发、数据一致性、实时性、扩展性等要求,以确保在各种业务场景下都能稳定运行。 本文将探讨如何设计一个合理的库存系统,包括库存模型设计、数据一致性策略…...
数据人的进阶之路:四年数仓实践与成长思考
前言 在数据仓库开发的过程中,常常会遇到很多值得思考的问题,它们不仅关乎技术的深度,也涉及业务理解、个人的成长,甚至是数据行业未来的价值。回顾过去的经历,有很多问题反复出现,甚至成为绕不开的课题&am…...
数据库原理及应用mysql版陈业斌实验一
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验一:数据库与数据表的定义和数据操作 1.实验数据如下 …...
Linux环境变量:深入解析与实用指南
目录 一、环境变量概述 二、环境变量的作用 三、环境变量的类型 3.1系统环境变量 3.2用户环境变量 四、环境变量的操作 4.1查看环境变量 4.2设置环境变量 4.3删除环境变量 五、环境变量的配置文件 六、环境变量的最佳实践 七、总结 环境变量是Linux系统中至关重要的…...
大数据 Spark 技术简介
Apache Spark 是一种快速、通用、可扩展的大数据处理引擎,最初由加州大学伯克利分校开发。它提供了一种高效的数据处理框架,可以处理大规模数据集,并在分布式计算集群上进行并行处理。 Apache Spark 的基本概念包括以下几个要点:…...
Go语言的基础类型
一基础数据类型 一、布尔型(Bool) 定义:表示逻辑真 / 假,仅有两个值:true 和 false内存占用:1 字节使用场景:条件判断、逻辑运算 二、数值型(Numeric) 1. 整数类型&…...
面试复习-基础网络+运维知识
一、TCP/IP模型及每层对应通信协议 1.1第一层-应用层 作用:服务及应用程序 HTTP --- 超文本传输协议--- 获取网页信息---80(TCP 80) HTTPS --- HTTP SSL(安全传输协议)/TLS ---443(TCP 443) …...
大屏设计新纪元:定制视觉盛宴
当城市天际线的巨型LED幕墙与元宇宙中的虚拟场景无缝交织,当博物馆的数字藏品在8K曲面屏上焕发新生,一个属于大屏设计的全新纪元已悄然降临。这场视觉革命不仅重构了信息传播的维度,更将“定制化体验”推向了前所未有的高度——每一寸屏幕都成…...
JavaIO流的使用和修饰器模式(直击心灵版)
系列文章目录 JavaIO流的使用和修饰器模式 文章目录 系列文章目录前言一、字节流: 1.FileInputStream(读取文件)2.FileOutputStream(写入文件) 二、字符流: 1..基础字符流:2.处理流:3.对象处理流:4.转换流: 三、修饰器…...
10-STL、位运算、常用函数库
1-STL vector vector是变长数组 //定义vector vector<int>a;//第一维长233,第二维长度动态变化 vector<int>b[233];//自定义的结构体类型也可以保存在vector中 struct res{...}; vector<rec>c;//函数 a.size();//返回vector的实际长度…...
【Ratis】Ratis Streaming概览
看了Tsz-Wo Nicholas Sze博士的一个关于Ratis的share,在share里提到了raits做的一个性能优化:客户端流。比较感兴趣,特此记录一下。如果想看原始分享的,可以搜关键词:Apache Ratis - A High Performance Raft Library 关于Ratis Stream的pdf介绍,在这个PR的附件里: [Ra…...
Python Seaborn面试题及参考答案
目录 如何用 stripplot () 绘制带随机偏移的分类散点图?如何控制 jitter 参数? swarmplot () 如何避免散点重叠?适用场景与数据量限制是什么? 使用 catplot () 绘制箱线图时,如何通过 kind 参数切换图表类型? 如何通过 hue 参数在分类图中添加第三个维度(如性别)? …...
linux下基本命令和扩展命令(安装和登录命令、文件处理命令、系统管理相关命令、网络操作命令、系统安全相关命令、其他命令)欢迎补充噢
基本命令 ls: 列出目录内容 ls:列出当前目录内容ls -l:以长格式列出(显示详细信息)ls -a:显示隐藏文件ls -lh:以易读格式显示文件大小 pwd: 显示当前工作目录 pwd:显示当前目录的绝对路径 cd:…...
K8S学习之基础四十:K8S配置altermanager发送告警到钉钉群
配置altermanager发送告警到钉钉群 创建钉钉群,设置机器人助手(必须是管理员才能设置),获取webhook webhook: https://oapi.dingtalk.com/robot/send?access_token25bed933a52d69f192347b5be4b2193bc0b257a6d9ae68d81619e3ae3d93f7c6…...
实用工具--OfficeAI 助手 v0.3.20(长期免费,2025-03-18 本地支持WPSWord联动)
软件简介 OfficeAI助手,作为Microsoft Office与WPS的得力智能插件,集文档自动生成、内容精准校对与润色、公式智能推荐等多功能于一体。它凭借强大的数据分析能力,深度融入Office/WPS办公生态,一键简化复杂流程,让办公…...
Android 关于compose的一些坑和理解
** 1.如何在 WindowManager.addView 中使用 Jetpack Compose** 一、引出问题 Android 开发中,很常见的一个场景,通过 WindowManager.addView() 添加一个 View 到屏幕上。Android 最新的视图框架 Jetpack Compose,如何应用进来。这个被添加的…...
ref setState 合成事件
ref & setState & 合成事件 受控组件的概念:数据改变视图的叫受控组件;通过dom操作改变的叫非受控。 语法:给refxxx赋一个值,然后通过this.refs.xxx就可以获取到相应dom元素,通过你这个名字存储的值就是这个do…...
调用feapder作为子程序时setting.py文件不起作用
feaper 官方文档地址: 简介及安装 - feapder官方文档|feapder-document 问题: 在最近的开发中需要调用feapder作为主程序调用的子程序时发现自动入库时无法入库,通过查看日志信息发现连接数据库时被拒绝连接了,但是我的setting.p…...
gralloc1_perform具体在干什么
gralloc1_perform 会在特定场景下通过 ioctl 调用,执行 缓存 (cache) 管理 和 内存映射 操作,确保 CPU 和 GPU 之间的数据一致性。 📌 为什么需要对 cache 进行操作? 在 Android 系统中,CPU 和 GPU 通常共享 DDR 内存…...
【Pandas】pandas Series plot.barh
Pandas2.2 Series Plotting 方法描述Series.plot([kind, ax, figsize, …])用于绘制 Series 对象的数据可视化图表Series.plot.area([x, y, stacked])用于绘制堆叠面积图(Stacked Area Plot)Series.plot.bar([x, y])用于绘制垂直条形图(Ver…...
机器学习之浅层神经网络
文章目录 一、浅层神经网络概述(一)定义(二)常见类型 二、浅层神经网络的前向传播三、浅层神经网络的反向传播四、编写浅层神经网络案例(Python NumPy 实现)代码解释 五、浅层神经网络与深度学习的区别&am…...
透析Vue的nextTick原理
nextTick 是 Vue.js 中的一个核心机制,用于在 下一次 DOM 更新周期后 执行回调函数。它的核心原理是 利用 JavaScript 的事件循环机制(Event Loop),结合微任务(Microtask)或宏任务(Macrotask&am…...
Beans模块之工厂模块注解模块@Qualifier
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
产品更新 | 数字助决胜:华望M-Arch平台实现从体系模型到仿真推演
华望产品更新速递 功能介绍 |M-Arch体系建模软件的核心功能 ◆体系架构建模 ◆逻辑仿真 ◆与多种工具集成 ◆多专业协同建模 产品亮点 |M-Arch软件在体系作战中的作用 ◆全面构建任务和体系架构建模的能力 ◆模型化的装备体系分析方法 ◆提升作战体系架构设计与优化 前…...
IP地址结构体与字符串转换函数详解
IP地址结构体与字符串转换函数详解 在Linux C网络编程中,IP地址的二进制结构体(如struct in_addr)与字符串形式(如"192.168.1.1")之间的转换经常涉及到,与IP地址格式相关的函数包括inet_aton、i…...
debug - 安装.msi时,为所有用户安装程序
文章目录 debug - 安装.msi时,为所有用户安装程序概述笔记试试在目标.msi后面直接加参数的测试 备注备注END debug - 安装.msi时,为所有用户安装程序 概述 为了测试,装了一个test.msi. 安装时,只有安装路径的选择,没…...
基于springboot的社区团购系统(012)
摘 要 本课题是根据用户的需要以及网络的优势建立的一个社区团购系统,来满足用户团购的需求。 本社区团购系统应用Java技术,MYSQL数据库存储数据,基于Spring Boot框架开发。在网站的整个开发过程中,首先对系统进行了需求分析&…...
应用权限组列表
文章目录 使用须知位置相机麦克风通讯录日历运动数据身体传感器图片和视频音乐和音频跨应用关联设备发现和连接剪切板文件夹文件(deprecated) 使用须知 在申请目标权限前,建议开发者先阅读应用权限管控概述-权限组和子权限,了解相关概念,再合…...
4.1、网络安全模型
目录 网络安全体系概述网络安全模型-BLP模型网络安全模型-Biba模型网络安全模型 - 信息流模型信息保障模型能力成熟度模型其它安全模型网络安全原则 网络安全体系概述 网络安全体系是网络安全保证系统的最高层概念抽象,是一个体系,体系一般是一个概念&a…...
前端对接生成式AI接口(类ChatGPT)问题汇总
文章目录 前端实现对话流问题总结流式数据传输问题后台Response Headers问题大量数据分段接收问题多个流时间戳(Time)相同导致被合并的问题 中止对话问题复制问题部署上线问题(Nginx缓冲导致) 前端实现对话流问题总结 流式数据传…...
布隆过滤器(Bloom Filter)详解
布隆过滤器详解 1. 什么是布隆过滤器? 布隆过滤器(Bloom Filter)是一种高效的概率型数据结构,主要用于判断某个元素是否存在于一个集合中。它的特点是: 允许误判:可能会误判元素存在(假阳性&…...
QoS(Quality of Service)服务质量概念
一、什么是QoS? QoS(Quality of Service)即服务质量,在网络业务中可以通过保证传输的带宽、降低传输时延、降低数据丢包率以及时延抖动等措施来提高服务质量。QoS是一套用于管理和提高网络性能的工具和技术,用于流量优…...
CSS实现当鼠标悬停在一个元素上时,另一个元素的样式发生变化的效果
CSS可以实现当鼠标悬停在一个元素上时,另一个元素的样式发生变化的效果。可以通过以下几种方法来实现: 1. 使用兄弟选择器(Adjacent Sibling Selector) 如果两个元素是兄弟关系(即它们有相同的父元素)&am…...
【C++11】左值引用、右值引用、移动语义和完美转发
🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 📌左值引用和右值引用 🎏左值和左值引用 🎏右值和右值引用 📌左值引用和右值引用比较 🎏左值引用 🎏右值…...
Docker镜像迁移
目录 1.查看镜像当前配置 2.镜像迁移 1. 停止 Docker Desktop 2. 关闭 WSL 实例(若基于 WSL 2) 4. 导出原镜像数据 5.注销原实例 6. 导入数据到新路径 7. 设置 Docker Desktop 使用新路径(可选) 8. 启动 Docker Desktop …...
Compose 实践与探索十五 —— 自定义触摸
1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier: Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了,直接去讲解更复杂的…...