【项目】基于MCP+Tabelstore架构实现知识库答疑系统

基于MCP+Tabelstore架构实现知识库答疑系统

    • 整体流程设计
      • (一)Agent 架构
      • (二)知识库存储
        • (1)向量数据库Tablestore
        • (2)MCP Server
      • (三)知识库构建
        • (1)对文本进行切段并提取 FAQ
        • (2)写入知识库和 FAQ 库
      • (四)知识库检索
      • (五)知识库问答
    • 项目实践一
      • (1)创建知识库存储实例
      • (2)启动MCP Server
      • (3)导入知识库
      • (4)检索知识库
      • (5)基于知识库进行问答
    • 项目实践二:利用CherryStudio实现MCP
      • (1)效果
        • 1.1 写入到Tablestore
        • 1.2 搜索文档
      • (2)流程
      • (3)本地运行
        • 3.1 下载源码
        • 3.2 准备环境
        • 3.3 配置环境变量
        • 3.4 Embedding
        • 3.5 运行 MCP 服务
      • (4)集成三方工具
        • 4.1 Cherry Studio
      • (5)拓展应用场景

整体流程设计

在这里插入图片描述

主要分为两部分:知识库构建和检索。

1.知识库构建

  • 文本切段:对文本进行切段,切段后的内容需要保证文本完整性以及语义完整性。
  • 提取 FAQ:根据文本内容提取 FAQ,作为知识库检索的一个补充,以提升检索效果。
  • 导入知识库:将文本和 FAQ 导入知识库,并进行 Embedding 后导入向量。

2.知识检索(RAG)

  • 问题拆解:对输入问题进行拆解和重写,拆解为更原子的子问题。
  • 检索:针对每个子问题分别检索相关文本和 FAQ,针对文本采取向量检索,针对 FAQ 采取全文和向量混合检索。
  • 知识库内容筛选:针对检索出来的内容进行筛选,保留与问题最相关的内容进行参考回答。

相比传统的 Naive RAG,在知识库构建和检索分别做了一些常见的优化,包括 Chunk 切分优化、提取 FAQ、Query Rewrite、混合检索等。

(一)Agent 架构

在这里插入图片描述

整体架构分为三个部分:

  • 知识库:内部包含 Knowledge Store 和 FAQ Store,分别存储文本内容和 FAQ 内容,支持向量和全文的混合检索。
  • MCP Server:提供对 Knowledge Store 和 FAQ Store 的读写操作,总共提供 4 个 Tools。
  • 功能实现部分:完全通过 Prompt + LLM 来实现对知识库的导入、检索和问答这几个功能。

具体实现

所有代码开源在这里,分为两部分:

  • Python 实现的 Client 端:实现了与大模型进行交互,通过 MCP Client 获取 Tools,根据大模型的反馈调用 Tools 等基本能力。通过 Prompt 实现了知识库构建、检索和问答三个主要功能。
  • Java 实现的 Server 端:基于 Spring AI 框架实现 MCP Server,由于底层存储用的是 Tablestore,所以主体框架是基于这篇文章的代码进行改造。

(二)知识库存储

(1)向量数据库Tablestore

知识库存储选择 Tablestore(向量检索功能介绍),主要原因为:

  • 简单易用:仅一个创建实例步骤后即可开始使用,Serverless 模式无需管理容量和后续运维。
  • 低成本:完全按量计费,自动根据存储规模水平扩展,最大可扩展至 PB 级。当然如果采用本地知识库肯定是零成本,但这里实现的是一个企业级、可通过云共享的知识库。
  • 功能完备:支持全文、向量和标量等检索功能,支持混合检索。
(2)MCP Server

实现了 4 个 Tools(具体注册代码可参考 TablestoreMcp),相关描述如下:

Tools功能给 LLM 的描述输入参数输出结果
storeKnowledge写入知识库内容,同时进行 Embedding 后写入向量。Store document into knowledge store for later retrieval.{
“content”:“知识库内容”, “meta_data”: { “source”: “文档” }
}
{
“content”: [
{ “type”: “text”,
“text”: “null” }
],
“isError”: false
}
searchKnowledge对知识库进行向量检索提取内容Search for similar documents on natural language descriptions from knowledge store.{
“query”: “知识库内容”, “size”: 100
}
{
“content”: [
{ “type”: “text”,
“text”: “[{“content”:“知识库内容”,“meta_data”:{“source”:“文档”}}]}” } ],
“isError”: false
}
storeFAQ写入 FAQ 内容,问题和答案分别写入 Question 和 Answer 两个字段,Question 字段额外进行 Embedding 后写入向量。Store document into FAQ store for later retrieval.{
“question”: “问题”, “answer”: “答案”
}
{
“content”: [ {
“type”: “text”,
“text”: “null” } ],
“isError”: false
}
searchFAQ通过对 Question 的全文和向量的混合检索来提取内容。Search for similar documents on natural language descriptions from FAQ store.{
“query”: “问题”, “size”: 100
}
{
“content”: [{
“type”: “text”,
“text”: “[{“question”:“问题”,“answer”:“答案”}]” } ],
“isError”: false
}

(三)知识库构建

(1)对文本进行切段并提取 FAQ

完全通过提示词来完成,可根据自己的要求进行调优。

提示词输入输出
需要将以下文本切段,并根据文本内容整理 FAQ。文本切段的要求:
<1>保证语义的完整性:不要将一个完整的句子切断,不要把表达同一个语义的不同句子分割开
<2>保留足够多的上下文信息:如果切割后的文本段必须依赖上下文信息才能表达正确的语义,那就不能切割开
<3>过滤无效信息:过滤格式化内容如大量填充的空格,过滤不完整的段落以及过滤
<4>移除 markdown 内容的标记,层次关系按 1, 2, 3 以及 1.1, 2.1 来标记
<5>只保留文本内容,移除链接等信息
<6>不要对标题单独切段:仅对正文进行切段,标题可以与正文合并一起,或者是作为上下文信息扩充进正文分段内
<7>切段后的文本如果不是一个完整的句子,请修改为一个完整表述的句子
表格存储向量检索在原有的 DiskANN 算法之上进行优化,提供大规模和高性能的向量检索服务。前期,我们也先对用户提供了基于 HNSW 的图算法,但是发现明显的性能问题,HNSW 对内存要求很高,很难支撑大规模数据,当内存不足时,HNSW 访问磁盘的性能较差。表格存储上的用户大多数数量相对较大,HNSW 的规模和成本问题不符合我们产品的定位,我们希望可以让更多的数据可以低成本的使用上向量能力,因此我们后续废弃掉了 HNSW 算法,使用 DiskAnn 重新实现了向量检索能力。{
“Chunks”: [ “表格存储向量检索在原有的 DiskANN 算法之上进行优化,提供大规模和高性能的向量检索服务。前期,我们也先对用户提供了基于 HNSW 的图算法,但是发现明显的性能问题。”, “HNSW 对内存要求很高,很难支撑大规模数据,当内存不足时,HNSW 访问磁盘的性能较差。表格存储上的用户大多数数量相对较大,HNSW 的规模和成本问题不符合我们产品的定位。”, “我们希望可以让更多的数据可以低成本使用上向量能力,因此我们后续废弃掉了 HNSW 算法,使用 DiskAnn 重新实现了向量检索能力。” ] }
{ “FAQ”: [
{“Question”: “表格存储向量检索使用了什么算法?”,
“Answer”: “表格存储向量检索在原有的 DiskANN 算法之上进行了优化,提供大规模和高性能的向量检索服务。” },
{“Question”: “为什么最初选择了 HNSW 图算法?”,
“Answer”: “前期对用户提供了基于 HNSW 的图算法,但发现其存在明显的性能问题。” },
{“Question”: “HNSW 算法的主要缺点是什么?”,
“Answer”: “HNSW 对内存要求很高,难以支撑大规模数据,且在内存不足时访问磁盘的性能较差。”},
{ “Question”: “为什么废弃了 HNSW 算法?”,
“Answer”: “HNSW 的规模和成本问题不符合表格存储产品的定位,无法满足大规模数据低成本使用向量能力的需求。” },
{“Question”: “表格存储最终采用什么算法替代 HNSW?”,
“Answer”: “后续废弃了 HNSW 算法,使用 DiskANN 重新实现了向量检索能力。” } ] }

以上是一个示例,可以看到通过大模型能比较准确的对文本进行切段并提取 FAQ。这种方式的优势是切段的文本能保证完整性以及语义一致性,能够比较灵活的对格式做一些处理。提取的 FAQ 很全面,对于简单问题的问答通过直接搜索 FAQ 是最准确直接的。最大的缺点就是执行比较慢并且成本较高,一次会消耗大量的 Token,不过好在是一次性的投入。

(2)写入知识库和 FAQ 库

这一步也是通过提示词来完成,基于 MCP 架构可以非常简单的实现,样例如下:

操作类型提示词模板
写入知识库将以下内容存储入 Knowledge 知识库内:%s
写入 FAQ将以下内容存储入 FAQ 库内:
Question:%s
Answer:%s

(四)知识库检索

同样这一步也是通过提示词加 MCP 来实现,非常的简单,样例如下:

提示词模板检索条件检索结果
你是产品答疑助手,在回答问题之前请先检索 Knowledge 库和 FAQ 库:
1. 先理解问题并对问题进行拆解,拆解成多个子问题。
2. 每个子问题同时检索 Knowledge 库和 FAQ 库,每次检索结果不超过 20 条
3. 对检索的内容进行筛选,保留与问题最相关的内容,Knowledge 和 FAQ 分别不超过 10 条。
最后合并检索内容,返回与检索内容最相关的 20 条,直接返回检索的结果,样例如下:
1. 如果是 Knowledge,格式为:Knowledge:<结果一>
2. 如果是 FAQ,格式为:FAQ:<结果二>
检索内容:%s
Tablestore 底层向量索引算法选择了哪种实现?Knowledge:表格存储向量检索在原有的 DiskANN 算法之上进行优化。
Knowledge:表格存储上的用户大多数数据量相对较大。
FAQ:为什么最初选择了 HNSW 图算法?
FAQ:为了给用户提供一种向量检索的服务选项。
FAQ:表格存储向量检索是基于什么算法实现的?
FAQ:表格存储向量检索是在原有的 DiskANN 算法基础上进行了优化。

通过提示词描述实现了一个稍微复杂点的检索:

  • 1.先对问题进行拆解,拆解为更原子的子问题。

  • 2.每个子问题分别检索知识库和 FAQ,检索结果汇总后筛选留下与问题最相关的内容。

  • 3.按照格式返回结果。

(五)知识库问答

直接看下提示词和效果

提示词模板问题答案
你是产品答疑助手,在回答问题之前请先检索 Knowledge 库和 FAQ 库:
1. 先理解问题并对问题进行拆解,拆解成多个子问题,子问题尽量是比较小比较原子的问题。
2. 每个子问题同时检索 Knowledge 库和 FAQ 库,每次检索结果不超过 10 条,最后合并所有子问题的检索结果。
对检索的内容进行筛选,保留与问题最相关的检索结果,利用检索到的内容进行回答,不要乱给答案。
我的问题是:%s
Tablestore 底层向量索引算法选择了哪种实现?Tablestore 底层向量索引算法选择了 DiskANN 算法实现。
最初,Tablestore 曾尝试使用 HNSW (Hierarchical Navigable Small World) 图算法来提供向量检索服务。
然而,HNSW 对内存要求很高,难以支撑大规模数据。当内存不足时,HNSW 访问磁盘的性能极差。考虑到大多数用户的大量数据需求以及希望让更多的数据能够以较低成本使用上向量能力的愿望,
最终决定不再使用 HNSW 算法,而是基于 DiskANN 算法进行了优化,提供了大规模和高性能的向量检索服务。

从 MCP Server 的 Log 内可以看到自动调用了知识库和 FAQ 的检索工具,并能根据之前导入的内容进行回答。

项目实践一

开源地址:aliyun/alibabacloud-tablestore-mcp-server

(1)创建知识库存储实例

可通过命令行工具(下载地址)来创建 Tablestore 实例,参考这个文档先进行配置。

配置成功后执行以下命令进行实例创建,实例名自行选择,需要保证 Region 内唯一。

tablestore> create_instance -r cn-hangzhou -d 'Knowledge store for AI Agent.' -n 'my-store' done

(2)启动MCP Server

启动前需要在环境变量内配置如下几个参数:

变量名必填含义默认值
TABLESTORE_INSTANCE_NAME是(yes)实例名-
TABLESTORE_ENDPOINT是(yes)实例访问地址-
TABLESTORE_ACCESS_KEY_ID是(yes)秘钥 ID-
TABLESTORE_ACCESS_KEY_SECRET是(yes)秘钥 SECRET-

可参考代码库 README 内的步骤进行启动,也可将项目导入 IDE 后直接运行 App 这个类,启动后会自动初始化表和索引。

(3)导入知识库

这一步需要执行代码库内的 knowledge_manager.py 工具,执行前需要先配置访问大模型的 API-KEY,默认采用 qwen-max。

export LLM_API_KEY=sk-xxxxxx

请自行准备知识库文档,使用 markdown 格式,执行如下:

在这里插入图片描述

(4)检索知识库

执行如下:

在这里插入图片描述

(5)基于知识库进行问答

在这里插入图片描述

项目实践二:利用CherryStudio实现MCP

(1)效果

这里展示 2 个 tool 的能力,一个是存储工具,一个是搜索工具。 我们使用的软件是热门的开源软件 cherry-studio, 使用的大模型是通义千问的 qwen-max 模型

1.1 写入到Tablestore

cherry-studio 使用示例如下图:

在这里插入图片描述

python Server 端代码的写入日志如下图:

在这里插入图片描述

Tablestore(表格存储) 控制台数据存储结果如下图:

在这里插入图片描述

1.2 搜索文档

Tablestore(表格存储) 的多元索引支持向量、标量、全文检索等各种类型的组合查询,该示例代码中使用了混合检索,如需更复杂的查询,可以参考文章最后的“贡献代码和二次开发”章节了解如何自定义开发。

cherry-studio 搜索查询示例如下图:

在这里插入图片描述

python Server 端的查询日志如下图:

在这里插入图片描述

Tablestore(表格存储) 控制台数据也可以进行查询,这里以全文检索示例:

在这里插入图片描述

(2)流程

在这里插入图片描述

MCP server 提供的 2 个工具十分简单:

  1. 写入: 文档经过 MCP server 内置的 Embedding ( 默认为 BAAI/bge-base-zh-v1.5 ) 模型,写入到Tablestore(表格存储)即可。
  2. 查询: 用户的查询文本经过 MCP server 内置的 Embedding 模型转成向量,然后调用表格存储的 多元索引即可,其内部使用了 向量检索 和 全文检索 进行混合查询,最终召回用户期望的结果。

(3)本地运行

3.1 下载源码
  1. 使用 git clone 将代码下载到本地。
  2. 进入 python 源码的根目录:cd tablestore-mcp-server/tablestore-python-mcp-server
3.2 准备环境

代码需要 python3.10 版本以上进行构建,使用了 uv 进行包和环境管理。

安装 uv:

# 方式1:使用现有 python3 安装 uv
pip3 install uv
# 方式2:源码安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh

准备 Python 环境:

如果本地有 python3.10 版本以上环境,无需执行这一小步。

因为我们项目至少需要 python3.10 版本,这里使用 python3.12 进行示例。

# 查看当前有哪些 python 环境
uv python list
# 如果没有python 3.12.x 相关版本,请安装 python3.12 版本. 内部会从 github 下载 uv 官方维护的 python 包。 
uv python install 3.12

创建虚拟环境:

# 使用 python 3.12 版本当做虚拟环境
uv venv --python 3.12
3.3 配置环境变量

代码里所有的配置是通过环境变量来实现的,出完整的变量见下方表格。 主要依赖的数据库 Tablestore(表格存储) 支持按量付费,使用该工具,表和索引都会自动创建,仅需要在控制台上申请一个实例即可。

变量名必填含义默认值
SERVER_HOSTMCP server 的 host0.0.0.0
SERVER_PORTMCP server 的 port8001
TABLESTORE_INSTANCE_NAME是(yes)实例名-
TABLESTORE_ENDPOINT是(yes)实例访问地址-
TABLESTORE_ACCESS_KEY_ID是(yes)秘钥 ID-
TABLESTORE_ACCESS_KEY_SECRET是(yes)秘钥 SECRET-
TABLESTORE_TABLE_NAME表名ts_mcp_server_py_v1
TABLESTORE_INDEX_NAME索引名ts_mcp_server_py_index_v1
TABLESTORE_VECTOR_DIMENSION向量维度768
TABLESTORE_TEXT_FIELD文本字段名_content
TABLESTORE_VECTOR_FIELD向量字段名_embedding
EMBEDDING_PROVIDER_TYPEEmbedding 模型提供者hugging_face(当前仅支持 hugging_face)
EMBEDDING_MODEL_NAMEEmbedding 模型名字BAAI/bge-base-zh-v1.5(维度是768,和 TABLESTORE_VECTOR_DIMENSION 呼应)
TOOL_STORE_DESCRIPTION写入的 MCP tool 的描述文字参考 settings.py
TOOL_SEARCH_DESCRIPTION查询的 MCP tool 的描述文字参考 settings.py
3.4 Embedding

为了方便,这里不使用云服务的Embedding能力,而使用了内置的本地Embedding模型,示例代码仅支持了 HuggingFace 的本地Embedding模型,使用十分简单,如果网络不好,可以配置 HuggingFace 的镜像。

export HF_ENDPOINT=http://hf-mirror.com
3.5 运行 MCP 服务
# 加速下载 Hugging 的 Embedding Model
export HF_ENDPOINT=http://hf-mirror.comexport TABLESTORE_ACCESS_KEY_ID=xx
export TABLESTORE_ACCESS_KEY_SECRET=xx
export TABLESTORE_ENDPOINT=xxx
export TABLESTORE_INSTANCE_NAME=xxx
# 默认以 sse 模式运行,如果希望以 stdio 模式运行可以添加: `--transport stdio`
uv run tablestore-mcp-server

(4)集成三方工具

4.1 Cherry Studio

Cherry-Studio,是一个热门的开源的 AI Client 软件, 免费使用,其支持 MCP 服务。

安装 :Github链接 下载最新版本的适合自己机器运行环境的安装包. 比如我的电脑是m1芯片的mac,因此下载 Cherry-Studio-1.1.4-arm64.dmg 进行安装。安装好后,需要配置大模型的 api-key 相关信息,这里不再一一描述。

按照如下所示创建MCP服务:

在这里插入图片描述

在聊天里使用MCP服务(可以把一些模版填充到 Cherry Studio 的模版里,生成一个自己的特殊助手,后续可以直接使用):

在这里插入图片描述

(5)拓展应用场景

MCP 的 Tool 的能力和场景是 Tool 的描述来提供的,因此我们可以定义一些特殊的能力,可以发挥你的想象力。另外,当前我们没有接入一些复杂的多字段自由 Filter 能力、稀疏向量(Sparse Vector)能力,后续有时间会继续进行集成。

仅需要修改如下配置即可, 如何写可以参考 settings.py

  export TOOL_STORE_DESCRIPTION="你的自定义的描述"export TOOL_SEARCH_DESCRIPTION="你的自定义的描述"

修改后从 MCP Client 中可以看到工具 (Tool) 的描述已经变成了自定义的描述,那么大模型(LLM)就会根据你的描述去使用工具(Tool)。

在这里插入图片描述

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

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

相关文章

免费将静态网站部署到服务器方法(仅支持HTML,CSS,JS)

原视频链接&#xff1a;把HTML免费部署到网站上&#xff0c;实现别人也能访问的教程来啦QAQ_哔哩哔哩_bilibili 注意&#xff1a;仅支持HTML、CSS、JS。不支持Vue等框架。 1.打开网站www.wordpress.org 点击红框按钮 点击红框按钮下载wordpress模板文件并解压。 将自己编写的…

游戏引擎学习第235天:在 Windows 上初始化 OpenGL

奇怪有问题 之前没注意到 这个问题是Count 0 GlobalConstants_Renderer_UsedDebugCamer 打开的话会有Bug Count是零的话就不让排序了 game.h: 查阅 TODO 列表 大家好&#xff0c;欢迎来到 game Hero&#xff0c;这是一档我们在直播中一起编写完整游戏的节目。不幸的是&a…

使用eCharts绘制中国地图

eCharts官网&#xff1a;https://echarts.apache.org/zh/index.html 1. 首先新建一个html页面&#xff0c;并引入echarts <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-…

Linux与Anaconda环境部署与管理(运维交接)

文章目录 一、前言二、Linux基础命令三、进程管理与监控四、后台任务与服务管理五、Anaconda环境管理六、JAR包的运行与管理七、网络与端口映射八、安全与权限管理九、故障排查与日志分析十、附录 一、前言 本文将详细介绍Linux系统下的常用命令以及Anaconda环境管理&#xff…

php:实现压缩文件上传、解压、文件更名、删除上传临时文件、存入数据库等操作

一、效果图 1.上传文件 2.压缩包文件 3.itemno1文件 二层结构 或 三层结构 4.上传到系统路径\ItemNo 5.更名后的itemno1文件(命名:当天日期+六位随机数) 二、普通实现 1、内容介绍 含有两种结构 二层结构:zip->料号文件夹->料号文件三层结构:zip->总文件夹-&g…

基于大语言模型的减肥健身计划系统设计与实现

基于大语言模型的减肥健身计划系统设计与实现 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】功能演示与部署指南 【技术栈】 ①&#xff1a;系统环境&#xff1a;Python 3.x Django 4.2 ②&#xff1a;开发环境&#xff1a;Web服务…

c#开发大冲锋游戏登录器

1 前言 本文主要分享登录器的简要开发过程&#xff0c;只适合小白选手&#xff0c;高手请自动避让。 此项目是复刻大冲锋计划中的子集。 &#xff08;注&#xff1a;大冲锋是迅雷代理的一款次时代多职业第一人称FPS射击游戏&#xff0c;目前已经关服嗝屁。&#xff09; 2 …

Linux[基础指令][2]

Linux[基础指令][2] cp(复制) 格式:cp [-rf] 源文件 {普通文件,目录} 拷贝 cp -r 递归拷贝目录 蓝色为目录,白色为具体文件 拷贝后面加一个不存在的文件会新建文件再拷贝 cp -ir -i是覆盖的时候询问 如果目标文件存在就会覆盖原有文件 mv(重命名/剪切) 格式:mv 源文件…

React18+ 项目搭建-从初始化、技术选型到开发部署的全流程规划

搭建一个 React 项目需要从项目初始化、技术选型到开发部署的全流程规划。以下是详细步骤和推荐的技术栈&#xff1a; 一、项目初始化 1. 选择脚手架工具 推荐工具&#xff1a; Vite&#xff08;现代轻量级工具&#xff0c;支持 React 模板&#xff0c;速度快&#xff09;&am…

人工智能学习框架完全指南(2025年更新版)

一、核心框架分类与适用场景 人工智能框架根据功能可分为深度学习框架、机器学习框架、强化学习框架和传统工具库,以下是主流工具及选型建议: 1. 深度学习框架 (1)PyTorch 核心优势:动态计算图、灵活性强,适合科研与快速原型开发,支持多模态任务(如NLP、CV) 。技术生…

MySQL 详解之事务管理

MySQL 详解之事务管理 在数据库领域,事务是一个核心概念,它确保了数据操作的可靠性和一致性。尤其是在处理涉及多个步骤且必须全部成功或全部失败的业务场景时,事务更是不可或缺。本篇文章将深入探讨 MySQL 中的事务管理,帮助您全面理解事务的工作原理及其在实际应用中的重…

SpringAI+DeepSeek大模型应用开发——5 ChatPDF

ChatPDF 知识库 RAG检索增强 由于训练大模型非常耗时&#xff0c;再加上训练语料本身比较滞后&#xff0c;所以大模型存在知识限制问题&#xff1a; 知识数据比较落后&#xff0c;往往是几个月之前的&#xff1b;不包含太过专业领域或者企业私有的数据&#xff1b; 为了解决…

SSH 互信被破坏能导致 RAC 异常关闭吗

一、 SSH 互信和 RAC 的关系 1、SSH 互信对 RAC 的作用 Oracle 11g R2 在安装 Grid Infrastructure 的时候&#xff0c;能够通过安装程序配置节 点间的 SSH 用户等效性&#xff0c;之所以要在安装之前配置 SSH 用户等效性&#xff0c;是为了能 够在安装前使用 C…

【数字图像处理】立体视觉信息提取

双目立体视觉原理 设一个为参考平面&#xff0c;一个为目标平面。增加了一个摄像头后&#xff0c;P与Q在目标面T上有分别的成像点 双目立体视觉&#xff1a;从两个不同的位置观察同一物体&#xff0c;用三角测量原理计算摄像机到该物体的距离的 方法 原理&#xff1a;三角测量…

基于springboot+vue的校园二手物品交易平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【Redis】Redis基本命令(1)

KEYS 返回所有满足样式&#xff08;pattern&#xff09;的key。 KEY * 返回所有key&#xff0c;不简易使用 性能问题&#xff1a;当 Redis 存储百万级键时&#xff0c;会消耗大量 CPU 和内存资源&#xff0c;Redis 是单线程模型&#xff0c;KEYS * 执行期间会阻塞其他所有命令…

C#通用常见面试题-精心整理

以下是优化后的版本,在原有内容基础上补充了应用场景,其他结构保持不变: 上位机面试题解答(技术详解+示例) C#-IOC框架 1. 值类型和引用类型的本质区别 解释 值类型:存储在栈中,直接保存数据值(如 int, struct)。引用类型:存储在堆中,变量保存对象地址(如 class,…

K8S节点出现Evicted状态“被驱逐”

在Kubernetes集群中&#xff0c;Pod状态为“被驱逐&#xff08;evicted&#xff09;”表示Pod无法在当前节点上继续运行&#xff0c;已被集群从节点上移除。 问题分析&#xff1a; 节点磁盘空间不足 &#xff0c;使用df -h查看磁盘使用情况 可以看到根目录 / 已100%满&#x…

[密码学基础]国密算法深度解析:中国密码标准的自主化之路

国密算法深度解析&#xff1a;中国密码标准的自主化之路 国密算法&#xff08;SM系列算法&#xff09;是中国自主研发的密码技术标准体系&#xff0c;旨在打破国际密码技术垄断&#xff0c;保障国家信息安全。本文将从技术原理、应用场景和生态发展三个维度&#xff0c;全面解…

Linux 网络基础(三) TCP/IP协议

一、TCP 与 IP 的关系 IP 层的核心作用是定位主机&#xff0c;具有将数据从主机 A 发送到主机 B 的能力&#xff0c;但是能力并不能保证一定能够做到&#xff0c;所以这时就需要 TCP 起作用了&#xff0c;TCP 可以通过超时重传、拥塞控制等策略来保证数据能够发送到 B 主机。 所…