人工智能:企业RAG方案

news2025/3/22 9:29:15

一、LangChain + FAISS、Milvus / Weaviate介绍

在企业 RAG (Retrieval-Augmented Generation)方案中,LangChain + FAISSMilvus / 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 + FAISSMilvus / 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、方案架构

核心组件

  1. 文档存储层(IBM ECM / Nextcloud / OwnCloud)

    • 通过 WebDAV / API 获取文档数据。
    • 支持多种文件格式(PDF、Word、Excel 等)。
  2. 预处理层

    • OCR 解析(对于扫描版 PDF)
    • 文本提取(NLTK / pdfplumber / docx2txt)
    • 文档切分(LangChain RecursiveCharacterTextSplitter)
  3. 向量存储层

    • LangChain + FAISS(本地存储,轻量级,支持快速相似度检索)
  4. 模型推理层

    • DeepSeek API / 本地 Llama(统一 API 适配)
    • 支持 Prompt Engineering(优化回答效果)
  5. 查询接口

    • FastAPI / Flask 提供 REST API 接口
    • 前端 Web 界面(支持搜索、问答、文档可视化)

2、关键实现步骤

1.获取文档数据

不同存储系统的 API 访问方式:

# 通过 WebDAV 获取 Nextcloud / OwnCloud 文件
import requests

WEBDAV_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, Docx2txtLoader

pdf_loader = PyPDFLoader("example.pdf")
docs = pdf_loader.load()

word_loader = Docx2txtLoader("example.docx")
docs.extend(word_loader.load())

# 递归切分文本
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
split_docs = splitter.split_documents(docs)

 3.生成向量嵌入并存储

from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings

embedding_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 FastAPI

app = FastAPI()

@app.get("/ask")
def ask(query: str):
    answer = qa.run(query)
    return {"query": query, "answer": answer}

# 运行 API
if __name__ == "__main__":
    import uvicorn
    uvicorn.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 jwt

SECRET_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 payload
    except 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 requests

NEXTCLOUD_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 json

def 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 Depends

ROLE_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 requests

NEXTCLOUD_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_permissions

ECM_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 FAISS

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)
适用场景
  • 适用于 > 100 万文档 超大规模企业 ECM。
  • AI 查询速度快,不会影响 ECM 服务器性能。
  • 但 ECM 权限变更后,向量数据库 可能需要重新索引

4、总结:如何自动同步 ECM 权限?

同步方式优点缺点适用场景
实时 API 同步权限变更立即生效ECM 服务器压力大小型企业 / ECM API 高速
定期批量同步减少 API 负载有一定时间延迟10 万 - 100 万文档
向量数据库过滤AI 查询速度快权限变更后需重新索引100 万文档以上

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

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

相关文章

基于 Java 和深度学习的图像分类应用实践

前言 随着人工智能技术的飞速发展,深度学习在图像处理、自然语言处理等领域展现出强大的能力。然而,许多开发者认为深度学习只能依赖 Python 的框架(如 TensorFlow 或 PyTorch)。事实上,Java 生态也有成熟的深度学习库,如 Deeplearning4j(DL4J),适合企业级应用场景。…

如何实现园区零碳管理?安科瑞EMS3.0推动园区低碳转型

当工业园区电费年耗超千万、碳排数据成监管红线&#xff0c;传统“拉闸限电”式管理已无法应对双碳倒计时——如何让光伏、储能、充电桩“听懂指令”&#xff0c;让每一度电创造3倍价值&#xff1f;187*210*98*782 一、零碳园区管理的三大痛点 1. 能源错配严重&#xff1a;风…

Python Django入门(创建其他网页)

在本章中&#xff0c;你将学习如何使用 Django&#xff08;http://djangoproject.com/ &#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知识。 我们将为这…

Error: The resource name must start with a letter

Error: The resource name must start with a letter 这个错误通常是由于资源名称&#xff08;如布局文件、字符串资源、ID 等&#xff09;不符合命名规则导致的。Android 资源名称必须遵循以下规则&#xff1a; 必须以字母开头&#xff08;不能以数字或下划线开头&#xff09…

2025年- G23-Lc97-104.二叉树的最大深度-java版(递归调用左右子树)

1.题目描述 2.思路 要用到max函数&#xff0c;返回的时候返回左右子树的最大值。其次要递归调用左右子树&#xff0c;寻找最大深度。 在每个递归返回时&#xff0c;我们 必须把当前节点的深度算进去&#xff0c;否则我们只计算了子树的深度&#xff0c;而没有包括当前节点。 …

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…

到底爱不爱我

L2-3 到底爱不爱我 古代少女有了心上人时&#xff0c;会悄悄折一条树枝&#xff0c;揪那枝上的叶子&#xff0c;揪一片叶子念一句“爱我”&#xff0c;再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候&#xff0c;看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…

Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南

文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言&#xff0c;在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库&#xff0c;使…

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型&#xff0c;平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分&#xff1a;platform_device和platform_driver&#xff0c;例如可使用文件device.c和d…

w264民族婚纱预定系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Compose 实践与探索十五 —— 自定义触摸

1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier&#xff1a; Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了&#xff0c;直接去讲解更复杂的…

炫酷的3D按钮效果实现 - CSS3高级特性应用

炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…

teaming技术

一.介绍 在CentOS 6与RHEL 6系统中&#xff0c;双网卡绑定采用的是bonding技术。到了CentOS 7&#xff0c;不仅能继续沿用bonding&#xff0c;还新增了teaming技术。在此推荐使用teaming&#xff0c;因其在查看与监控方面更为便捷 。 二.原理 这里介绍两种最常见的双网卡绑定…

【JavaEE进阶】Linux常用命令

目录 &#x1f343;前言 &#x1f334;pwd 与 ls &#x1f6a9;pwd &#x1f6a9;ls &#x1f38d;cd &#x1f332;mkdir与touch &#x1f6a9;mkdir &#x1f6a9;touch &#x1f340;cat与rm &#x1f6a9;cat &#x1f6a9;rm &#x1f38b;vim &#x1f6a9;…

【FastGPT】利用知识库创建AI智能助手

【FastGPT】利用知识库创建AI智能助手 摘要创建知识库上传文档创建应用准备提示词准备开场白关联知识库AI回答效果 摘要 关于FastGPT的部署&#xff0c;官方提供了docker-compose方式的部署文档&#xff0c;如果使用的是podman和podman-compose的同学&#xff0c;可以参考这篇…

【DeepSeek 学c++】dynamic_cast 原理

用于向下转化。 父类引用指向指类对象 假设父亲是a, 子类是b. B* pb new B; 子类对象 A* pa 父类引用指向子类对象&#xff0c; 那么向上转化 Apa pb 这个是自动完成的&#xff0c;隐式转化&#xff0c;不需要dynamic_cast 向下转化指的是 A pa new B。 这个是指向子类对象…

【递归,搜索与回溯算法篇】- 名词解释

一. 递归 1. 什么是递归&#xff1f; 定义&#xff1a; 函数自己调用自己的情况关键点&#xff1a; ➀终止条件&#xff1a; 必须明确递归出口&#xff0c;避免无限递归 ➁子问题拆分&#xff1a; 问题需能分解成结构相同的更小的子问题缺点&#xff1a; ➀栈溢出风险&#x…

Beans模块之工厂模块注解模块@Qualifier

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

数据结构---图的深度优先遍历(DFS)

一、与树的深度优先遍历之间的联系 1.类似于树的先根遍历。 递归访问各个结点&#xff1a; 2.图的深度优先遍历 先设置一个数组&#xff0c;初始值全部设置为false&#xff0c;先访问一个结点&#xff0c;在用一个循环&#xff0c;依次检查和这个结点相邻的其他结点&#xff0c…

健康养生:拥抱生活,从呵护身心开始

在这个瞬息万变的时代&#xff0c;人们好似不停旋转的陀螺&#xff0c;在忙碌中迷失了对健康的关注。然而&#xff0c;健康养生绝非可有可无的点缀&#xff0c;它是幸福生活的基石&#xff0c;如同阳光与空气&#xff0c;滋养并支撑着我们的生命。当我们懂得拥抱健康养生&#…