解鎖Dify與MySQL的深度融合:MCP魔法開啟數據新旅程

文章目錄

  • 解鎖Dify與MySQL的深度融合:MCP魔法開啟數據新旅程
    • 引言:技術融合的奇妙開篇
    • 認識主角:Dify、MCP 與 MySQL
      • (一)Dify:大語言模型應用開發利器
      • (二)MCP:連接的橋梁
      • (三)MySQL:經典數據庫
    • 準備工作:搭建融合舞臺
      • (一)環境搭建
      • (二)安裝與配置 Dify
      • (三)安裝與配置 MySQL
    • 關鍵步驟:Dify 與 MySQL 的牽手過程
      • (一)安裝必要插件
      • (二)配置 MCP SSE
      • (三)創建 Dify 工作流
      • (四)配置 Agent 策略
      • (五)搭建MCP SERVER
        • 1.下載代碼
        • 2.配置數據庫
        • 3.配置依賴
        • 4.啟動 mcp server
    • 測試與優化:讓融合更完美
      • (一)工作流測試
        • 測試1.列出身高大于等于168cm所有學生
        • 測試2. 列出體重大于等于60kg的學生
        • 測試3. 哪個學生成績最好
        • 測試4. 總成績最好的是哪個班級
    • 常見問題與解決方案:排憂解難
      • (一)連接失敗
      • (二)工具調用錯誤
      • (三)SQL 執行錯誤

解鎖Dify與MySQL的深度融合:MCP魔法開啟數據新旅程

引言:技術融合的奇妙開篇

在當今數字化時代,數據管理與人工智能技術的融合日益緊密。Dify 作為一款強大的大語言模型應用開發平臺,通過 MCP(模型上下文協議)與 MySQL 這一廣泛使用的關系型數據庫進行整合,為開發者們打開了一扇通往高效數據處理與智能應用開發的新大門。這種整合不僅能充分發揮 Dify 在自然語言處理和 AI 應用構建方面的優勢,還能借助 MySQL 出色的數據存儲和管理能力,實現更復雜、更智能的數據驅動型應用開發,極大地拓展了應用的功能邊界和實用性。接下來,就讓我們深入探索 Dify 通過 MCP 整合 MySQL 的詳細過程與技術細節 。

認識主角:Dify、MCP 與 MySQL

(一)Dify:大語言模型應用開發利器

Dify 是一款極具創新性的開源大語言模型(LLM)應用開發平臺 ,它將后端即服務(Backend as Service, BaaS)與 LLMOps 理念巧妙融合,為開發者打造了一個便捷高效的 AI 應用開發環境。其低代碼 / 無代碼開發模式堪稱一大亮點,通過直觀的可視化界面,開發者只需簡單的拖拽和配置操作,就能輕松定義 Prompt(提示詞)、上下文以及插件等關鍵要素,無需在底層技術細節中耗費過多精力,這使得開發門檻大幅降低,即使是編程經驗相對較少的人員也能參與到 AI 應用的開發中來。

Dify 還采用了模塊化設計,各個模塊功能明確、接口清晰,開發者可以根據具體的項目需求,靈活選擇并組合使用這些模塊,從而構建出高度個性化的 AI 應用。在功能組件方面,Dify 更是提供了豐富多樣的選擇,涵蓋 AI 工作流、RAG 管道、Agent、模型管理等多個領域,全面支持從應用原型設計到實際生產部署的整個過程。同時,Dify 對多種主流大型語言模型提供了良好的支持,包括 OpenAI 的 GPT 系列、Claude3 等,開發者可以根據應用場景和性能要求,自由選擇最契合的模型,進一步提升應用的智能水平和適應性 。

(二)MCP:連接的橋梁

MCP,即模型上下文協議(Model Context Protocol),在 Dify 與 MySQL 的整合中扮演著至關重要的橋梁角色。作為一項新興的開放協議,MCP 為大語言模型與外部應用之間搭建了一條雙向通信通道,宛如 AI 世界里的 “USB-C” 接口,讓模型能夠便捷地發現、理解并安全調用各種外部工具或 API。

在 Dify 通過 MCP 整合 MySQL 的場景中,MCP 主要發揮了兩方面關鍵作用。一方面,它提供了統一的協議支持,使得 Dify 中的大語言模型能夠以標準化的方式與 MySQL 進行交互,避免了因不同數據庫接口差異而帶來的復雜適配工作。另一方面,MCP 還具備強大的工具調用能力,允許 Dify 根據用戶的需求和指令,動態地調用 MySQL 相關的工具和功能,實現對數據庫中數據的查詢、更新、插入等操作,從而將大語言模型的智能處理能力與 MySQL 的數據存儲和管理能力緊密結合起來,為開發者創造出更多的應用可能性 。

(三)MySQL:經典數據庫

MySQL 作為一款開源的關系型數據庫管理系統,在數據存儲和管理領域擁有著廣泛的應用和卓越的聲譽。它具備眾多顯著的優勢,使其成為了眾多企業和開發者的首選數據庫之一。

MySQL 以其高度的可靠性和穩定性著稱,經過長時間的發展和大規模應用的驗證,它能夠在各種復雜的環境下穩定運行,確保數據的安全存儲和可靠訪問,無論是面對小規模的個人項目,還是大規模的企業級應用,MySQL 都能從容應對。在性能方面,MySQL 表現出色,采用了高效的索引和查詢優化技術,能夠快速處理大規模數據和高并發的訪問請求,迅速響應用戶的查詢和操作指令,為應用提供流暢的運行體驗。此外,MySQL 還具備出色的可擴展性,支持水平和垂直擴展,能夠根據業務的發展和數據量的增長,靈活地進行部署和配置調整,滿足不斷變化的業務需求 。同時,MySQL 豐富的生態系統也為開發者提供了便利,大量的開源工具、第三方插件和擴展可供選擇,進一步增強了其功能和應用場景。

準備工作:搭建融合舞臺

(一)環境搭建

在開始整合 Dify 與 MySQL 之前,需要確保開發環境準備就緒。主要涉及 Python 環境以及相關插件的安裝,建議使用 Python 3.8 及以上版本,以確保與后續安裝的庫和工具具有良好的兼容性。同時,為了實現 Dify 與 MySQL 之間基于 MCP 的通信和數據交互,還需要安裝一些關鍵的插件和依賴庫 。例如,用于支持 MCP 協議的相關插件,以及能夠實現 Dify 與 MySQL 進行連接和數據操作的數據庫驅動插件等,具體版本可根據官方文檔和實際測試來確定,以保障系統的穩定性和功能的完整性。

(二)安裝與配置 Dify

安裝步驟

首先,通過官方 GitHub 倉庫獲取 Dify 的源代碼。打開終端,執行以下命令進行克隆:

git clone https://github.com/langgenius/dify.git --branch 1.1.0

安裝過程需要依賴 Docker 和 Docker Compose,若尚未安裝,需先完成這兩個工具的安裝。在 rocky 9.5 系統上,安裝 Docker 的命令如下:

# 先開 外網代理export http_proxy="http://192.168.1.xxx:7897"export https_proxy="http://192.168.1.xxx:7897"export no_proxy="localhost,127.0.0.1"#更新dnf源
dnf update
# 搜索docker 鏡像
dnf search docker #添加 docker安裝包倉庫dnf -y install dnf-plugins-corednf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo#安裝docker  compose
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#docker 設置為開機自啟動
sudo systemctl enable --now docker

設置 docker 的下載鏡像代理
在/etc/systemd/system/docker.service.d目錄新增文件: http-proxy.conf
文件內容如下:

[Service]
Environment="HTTP_PROXY=http://192.168.1.xxx:7897"
Environment="HTTPS_PROXY=http://192.168.1.xxx:7897"
Environment="NO_PROXY=localhost,127.0.0.1"
systemctl daemon-reload
systemctl restart docker
systemctl status docker

這樣在下載鏡像時就會很快。

在 Dify 項目目錄下,通過 Docker Compose 來啟動 Dify 服務。在終端中執行:

 cp .env.example .envdocker compose up -d# 驗證安裝是否成功
(base) [root@localhost docker]# pwd
/root/dify/docker
(base) [root@localhost docker]# docker compose ps
NAME                     IMAGE                                       COMMAND                   SERVICE         CREATED        STATUS                  PORTS
docker-api-1             langgenius/dify-api:1.2.0                   "/bin/bash /entrypoi…"   api             25 hours ago   Up 25 hours             5001/tcp
docker-db-1              postgres:15-alpine                          "docker-entrypoint.s…"   db              25 hours ago   Up 25 hours (healthy)   5432/tcp
docker-nginx-1           nginx:latest                                "sh -c 'cp /docker-e…"   nginx           25 hours ago   Up 25 hours             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-plugin_daemon-1   langgenius/dify-plugin-daemon:0.0.7-local   "/bin/bash -c /app/e…"   plugin_daemon   25 hours ago   Up 25 hours             0.0.0.0:5003->5003/tcp, :::5003->5003/tcp
docker-redis-1           redis:6-alpine                              "docker-entrypoint.s…"   redis           25 hours ago   Up 25 hours (healthy)   6379/tcp
docker-sandbox-1         langgenius/dify-sandbox:0.2.11              "/main"                   sandbox         25 hours ago   Up 25 hours (healthy)   
docker-ssrf_proxy-1      ubuntu/squid:latest                         "sh -c 'cp /docker-e…"   ssrf_proxy      25 hours ago   Up 25 hours             3128/tcp
docker-weaviate-1        semitechnologies/weaviate:1.19.0            "/bin/weaviate --hos…"   weaviate        25 hours ago   Up 25 hours             
docker-web-1             langgenius/dify-web:1.2.0                   "/bin/sh ./entrypoin…"   web             25 hours ago   Up 25 hours             3000/tcp
docker-worker-1          langgenius/dify-api:1.2.0                   "/bin/bash /entrypoi…"   worker          25 hours ago   Up 25 hours             5001/tcp
(base) [root@localhost docker]# 

此命令會在后臺啟動 Dify 的所有相關服務,包括前端、后端以及必要的中間件服務 。

基礎配置

啟動完成后,通過瀏覽器訪問 Dify 的前端界面,默認地址為http://localhost:3000。首次訪問時,需要進行一些基礎配置,如設置管理員賬號和密碼等信息 。

接著,配置 Dify 的服務器地址和端口。若采用默認配置,服務器地址即為localhost,端口為5000。若需修改,可在 Dify 項目目錄下的相關配置文件中進行調整,通常是在.env文件中修改API_SERVER_HOSTAPI_SERVER_PORT等環境變量,以滿足實際的部署需求 。

(三)安裝與配置 MySQL

安裝流程:略

準備表結構和數據:
新建數據庫test

CREATE DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

1.班級表

CREATE TABLE `classes` (`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班級ID,示例:202301',`className` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班級名稱,示例:2023級計算機1班',`grade` int NOT NULL COMMENT '年級,示例:2023',`headTeacherId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班主任ID,外鍵(teachers.id),示例:T003',`classroom` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '教室位置,示例:1號樓302',`studentCount` int NOT NULL COMMENT '學生人數,示例:35',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '備注信息,示例:市級優秀班集體',PRIMARY KEY (`id`),KEY `headTeacherId` (`headTeacherId`),CONSTRAINT `headTeacherId` FOREIGN KEY (`headTeacherId`) REFERENCES `teachers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='班級表';

2.課程表

CREATE TABLE `courses` (`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '課程ID,示例:C001',`courseName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '課程名稱,示例:高等數學',`credit` int NOT NULL COMMENT '學分,示例:4',`teacherId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授課教師ID,外鍵(teachers.id),示例:T001',`semester` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '學期,格式"YYYY-N",示例:2023-1',`type` enum('必修','選修') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '選修' COMMENT '課程類型,"必修"或"選修",示例:選修',`prerequisite` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '先修課程ID,可選,外鍵(courses.id),示例:C003',PRIMARY KEY (`id`),KEY `teacherId` (`teacherId`),CONSTRAINT `teacherId` FOREIGN KEY (`teacherId`) REFERENCES `teachers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='課程表';

3.成績表

CREATE TABLE `scores` (`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '成績記錄ID,示例:S20230101C001',`studentId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '學生ID,外鍵(students.id),示例:S20230101',`courseId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '課程ID,外鍵(courses.id),示例:C001',`score` int NOT NULL COMMENT '綜合成績,0-100,示例:85',`examDate` date NOT NULL COMMENT '考試日期,示例:2024-5-20',`usualScore` int DEFAULT '0' COMMENT '平時成績,0-100,示例:90',`finalScore` int DEFAULT '0' COMMENT '期末成績,0-100,示例:80',PRIMARY KEY (`id`),KEY `studentId` (`studentId`),KEY `courseId` (`courseId`),CONSTRAINT `courseId` FOREIGN KEY (`courseId`) REFERENCES `courses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `studentId` FOREIGN KEY (`studentId`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成績表';

4.學生表

CREATE TABLE `students` (`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '學號,示例:S20230101',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '學生姓名,示例:王強',`gender` enum('男','女') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '男' COMMENT '性別,"男"或"女",示例:男',`birthDate` datetime NOT NULL COMMENT '出生日期,示例:2005-01-15',`classId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班級ID,外鍵(classes.id),示例:202301',`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聯系電話,示例:13812345678',`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '電子郵箱,示例:20230101@school.edu.cn',`emergencyContact` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '緊急聯系人電話,示例:13876543210',`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '家庭住址,示例:北京市海淀區中關村大街1棟101室',`height` int NOT NULL COMMENT '身高(cm),示例:175',`weight` int NOT NULL COMMENT '體重(kg),示例:65',`healthStatus` enum('良好?','一般?','較差') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '良好?' COMMENT '健康狀況,示例:良好',PRIMARY KEY (`id`),KEY `classId` (`classId`),CONSTRAINT `classId` FOREIGN KEY (`classId`) REFERENCES `classes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='學生表';

5.教師表

CREATE TABLE `teachers` (`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '教師ID,示例:T001',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '教師姓名,示例:張建國',`gender` enum('男','女') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '男' COMMENT '性別,"男"或"女",示例:男',`subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '教授科目,示例:數學',`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '職稱,示例:教授',`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聯系電話,示例:13812345678',`office` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '辦公室位置,示例:博學樓301',`wechat` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信,示例:lily_teacher',`isHeadTeacher` enum('true','false') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'false' COMMENT '是否為班主任,示例:true',PRIMARY KEY (`id`,`office`) USING BTREE,KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='教師表';

錄入數據

  1. 插入 teachers 表數據
INSERT INTO `teachers` (`id`, `name`, `gender`, `subject`, `title`, `phone`, `office`, `wechat`, `isHeadTeacher`) VALUES
('T001', '張建國', '男', '數學', '教授', '13812345678', '博學樓301', 'lily_teacher', 'true'),
('T002', '李明', '男', '英語', '副教授', '13812345679', '博學樓302', 'tom_teacher', 'false'),
('T003', '王芳', '女', '物理', '講師', '13812345680', '博學樓303', 'lucy_teacher', 'true'),
('T004', '趙強', '男', '化學', '副教授', '13812345681', '博學樓304', 'jack_teacher', 'false'),
('T005', '陳靜', '女', '計算機', '教授', '13812345682', '博學樓305', 'rose_teacher', 'true'),
('T006', '劉偉', '男', '語文', '講師', '13812345683', '博學樓306', 'mike_teacher', 'false'),
('T007', '黃麗', '女', '歷史', '副教授', '13812345684', '博學樓307', 'jane_teacher', 'true'),
('T008', '周明', '男', '地理', '講師', '13812345685', '博學樓308', 'ben_teacher', 'false'),
('T009', '吳芳', '女', '生物', '教授', '13812345686', '博學樓309', 'susan_teacher', 'true'),
('T010', '鄭強', '男', '政治', '副教授', '13812345687', '博學樓310', 'david_teacher', 'false');
  1. 插入 classes 表數據
INSERT INTO `classes` (`id`, `className`, `grade`, `headTeacherId`, `classroom`, `studentCount`, `remark`) VALUES
('202301', '2023級計算機1班', 2023, 'T005', '1號樓302', 35, '市級優秀班集體'),
('202302', '2023級數學1班', 2023, 'T001', '1號樓303', 32, '校級優秀班集體'),
('202303', '2023級英語1班', 2023, 'T002', '1號樓304', 30, NULL),
('202304', '2023級物理1班', 2023, 'T003', '1號樓305', 34, '校級先進班集體'),
('202305', '2023級化學1班', 2023, 'T004', '1號樓306', 31, NULL),
('202201', '2022級計算機1班', 2022, 'T005', '1號樓402', 36, '市級優秀班集體'),
('202202', '2022級數學1班', 2022, 'T001', '1號樓403', 33, NULL),
('202203', '2022級英語1班', 2022, 'T002', '1號樓404', 32, '校級優秀班集體'),
('202204', '2022級物理1班', 2022, 'T003', '1號樓405', 30, NULL),
('202205', '2022級化學1班', 2022, 'T004', '1號樓406', 35, '市級先進班集體');
  1. 插入 students 表數據
INSERT INTO `students` (`id`, `name`, `gender`, `birthDate`, `classId`, `phone`, `email`, `emergencyContact`, `address`, `height`, `weight`, `healthStatus`) VALUES
('S20230101', '王強', '男', '2005-01-15 00:00:00', '202301', '13812345678', '20230101@school.edu.cn', '13876543210', '北京市海淀區中關村大街1棟101室', 175, 65, '良好'),
('S20230102', '李華', '女', '2005-02-20 00:00:00', '202301', '13812345679', '20230102@school.edu.cn', '13876543211', '上海市浦東新區張江高科技園區2棟201室', 165, 55, '良好'),
('S20230201', '張明', '男', '2005-03-10 00:00:00', '202302', '13812345680', '20230201@school.edu.cn', '13876543212', '廣州市天河區珠江新城3棟301室', 180, 70, '良好'),
('S20230202', '劉芳', '女', '2005-04-05 00:00:00', '202302', '13812345681', '20230202@school.edu.cn', '13876543213', '深圳市南山區科技園4棟401室', 168, 58, '良好'),
('S20230301', '陳偉', '男', '2005-05-15 00:00:00', '202303', '13812345682', '20230301@school.edu.cn', '13876543214', '南京市玄武區珠江路5棟501室', 178, 68, '良好'),
('S20230302', '趙麗', '女', '2005-06-20 00:00:00', '202303', '13812345683', '20230302@school.edu.cn', '13876543215', '杭州市西湖區文三路6棟601室', 162, 52, '良好'),
('S20230401', '黃強', '男', '2005-07-10 00:00:00', '202304', '13812345684', '20230401@school.edu.cn', '13876543216', '成都市高新區天府軟件園7棟701室', 176, 66, '良好'),
('S20230402', '周靜', '女', '2005-08-05 00:00:00', '202304', '13812345685', '20230402@school.edu.cn', '13876543217', '武漢市洪山區光谷廣場8棟801室', 167, 57, '良好'),
('S20230501', '吳偉', '男', '2005-09-15 00:00:00', '202305', '13812345686', '20230501@school.edu.cn', '13876543218', '西安市雁塔區科技路9棟901室', 177, 67, '良好'),
('S20230502', '鄭芳', '女', '2005-10-20 00:00:00', '202305', '13812345687', '20230502@school.edu.cn', '13876543219', '長沙市岳麓區麓谷大道10棟1001室', 163, 53, '良好');
  1. 插入 courses 表數據
INSERT INTO `courses` (`id`, `courseName`, `credit`, `teacherId`, `semester`, `type`, `prerequisite`) VALUES
('C001', '高等數學', 4, 'T001', '2023-1', '必修', NULL),
('C002', '大學英語', 3, 'T002', '2023-1', '必修', NULL),
('C003', '大學物理', 4, 'T003', '2023-1', '必修', NULL),
('C004', '大學化學', 3, 'T004', '2023-1', '必修', NULL),
('C005', '計算機基礎', 3, 'T005', '2023-1', '必修', NULL),
('C006', '數據結構', 4, 'T005', '2023-2', '選修', 'C005'),
('C007', '線性代數', 3, 'T001', '2023-2', '選修', 'C001'),
('C008', '概率論與數理統計', 4, 'T001', '2023-2', '選修', 'C001'),
('C009', '英語口語', 2, 'T002', '2023-2', '選修', 'C002'),
('C010', '物理實驗', 2, 'T003', '2023-2', '選修', 'C003');
  1. 插入 scores 表數據
INSERT INTO `scores` (`id`, `studentId`, `courseId`, `score`, `examDate`, `usualScore`, `finalScore`) VALUES
('S20230101C001', 'S20230101', 'C001', 85, '2024-05-20', 90, 80),
('S20230101C002', 'S20230101', 'C002', 90, '2024-05-20', 85, 95),
('S20230101C005', 'S20230101', 'C005', 95, '2024-05-20', 92, 98),
('S20230201C001', 'S20230201', 'C001', 88, '2024-05-20', 87, 90),
('S20230201C003', 'S20230201', 'C003', 82, '2024-05-20', 80, 85),
('S20230301C002', 'S20230301', 'C002', 87, '2024-05-20', 85, 90),
('S20230301C004', 'S20230301', 'C004', 80, '2024-05-20', 78, 82),
('S20230401C003', 'S20230401', 'C003', 86, '2024-05-20', 84, 88),
('S20230401C005', 'S20230401', 'C005', 92, '2024-05-20', 90, 94),
('S20230501C004', 'S20230501', 'C004', 84, '2024-05-20', 82, 86);

關鍵步驟:Dify 與 MySQL 的牽手過程

(一)安裝必要插件

在 Dify 平臺中,要實現通過 MCP 整合 MySQL,首先需要安裝兩個關鍵插件:Agent 策略(支持 MCP 工具) 和 MCP SSE 。

Agent 策略集合(支持 MCP SSE 發現和調用工具)
github地址:https://github.com/junjiem/dify-plugin-agent-mcp_sse

通過 HTTP with SSE 傳輸使用 MCP 協議來發現和調用工具。
github地址:https://github.com/junjiem/dify-plugin-tools-mcp_sse
在這里插入圖片描述

(二)配置 MCP SSE

插件安裝完成后,需要對 MCP SSE 進行配置,以建立與 MySQL 服務的連接。具體操作如下:
在 Dify 的插件管理界面中,點擊已安裝的 MCP SSE 插件。
在這里插入圖片描述
點擊上圖中的已授權,出現如下圖,配置上mcp mysq server的sse 地址:

{"mysql_mcp_server_pro":{"url":"http://192.168.1.XXX:9000/sse"}}

注:不要留空格,不然會報錯。

在這里插入圖片描述

填寫完成后,點擊保存。這樣,Dify 就能夠通過 MCP SSE 插件與指定的 MySQL 服務地址進行通信,為后續的數據交互做好準備 。

(三)創建 Dify 工作流

接下來,需要在 Dify 中創建一個工作流,用于實現與 MySQL 的交互邏輯 。創建過程如下:

進入 Dify 的工作流創建頁面,選擇創建工作流類型為 “Chatflow”,并為工作流命名,例如 “Dify_MySQL_Integration” 。
在這里插入圖片描述

在工作流設計畫布中,默認會有一個 LLM 節點,但在我們的場景中,需要刪除該節點,因為我們主要通過 Agent 來調用 MySQL 相關工具 。
在這里插入圖片描述

從節點庫中拖拽一個 “Agent” 節點到畫布上 。這個 Agent 節點將作為與 MySQL 交互的核心組件,負責根據用戶的指令調用相應的 MCP 工具,實現對 MySQL 數據庫的操作 。此時,一個基本的工作流框架就搭建好了,后續還需要對 Agent 進行詳細配置 。

(四)配置 Agent 策略

1.選擇 ReAct (Support MCP Tools) 策略:點擊添加的 Agent 節點,在右側的配置面板中,將 AGENT 策略選擇為 “ReAct (Support MCP Tools)” 。選擇該策略的原因在于它對 MCP 工具的支持較為穩定和有效 。例如,在實際測試中,若選擇 FunctionCalling 策略,可能會遇到調用 MCP 時提示找不到 call_tool 方法的問題,而 ReAct 策略能夠避免此類問題,確保 Agent 能夠順利調用 MCP 工具與 MySQL 進行交互 。
在這里插入圖片描述

2.配置工具列表:在 Agent 配置面板的 “工具列表” 部分,點擊右側的添加按鈕,選擇 “通過 SSE 發現和調用 MCP 工具” 。然后添加與 MySQL 相關的工具列表,假設之前在 MCP SSE 中配置的 MySQL 服務地址對應的名稱為 “mysql_mcp_server”,則在 MCP 服務器配置中添加:

在這里插入圖片描述
注:要選擇對應模型:
我原來選擇我本地部署的deepseek:14B ,非常慢,導致達不到預想的結果,后面改成用阿里百煉云的API 模型,效果桿桿的。
通過這樣的配置,Agent 就能夠識別并調用與該 MySQL 服務相關的工具,實現對數據庫的查詢、更新等操作 。

3. 配置指令:指令部分也就是提示詞,它是引導 Agent 正確執行任務的關鍵 。例如,可以設置如下指令:
在這里插入圖片描述

使用中文回復。當用戶提問中涉及學生、教師、成績、班級、課程等實體時,需要使用 MySQL MCP 進行數據查詢和操作,表結構說明如下:# 學生管理系統數據庫表結構說明## 1. 教師表 (teachers)| 字段名 | 類型 | 描述 | 約束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 教師ID | 主鍵 | "T001" |
| name | varchar | 教師姓名 | 必填 | "張建國" |
| gender | enum | 性別 | "男"或"女" | "男" |
| subject | varchar | 教授科目 | 必填 | "數學" |
| title | varchar | 職稱 | 必填 | "教授" |
| phone | varchar | 聯系電話 | 必填 | "13812345678" |
| office | varchar | 辦公室位置 | 必填 | "博學樓301" |
| wechat | varchar | 微信(可選) | 可選 | "lily_teacher" |
| isHeadTeacher | enum | 是否為班主任,"true"或"false" | 可選 | true |## 2. 班級表 (classes)| 字段名 | 類型 | 描述 | 約束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 班級ID | 主鍵 | "202301" |
| className | varchar | 班級名稱 | 必填 | "2023級計算機1班" |
| grade | int | 年級 | 必填 | 2023 |
| headTeacherId | varchar | 班主任ID | 外鍵(teachers.id) | "T003" |
| classroom | varchar | 教室位置 | 必填 | "1號樓302" |
| studentCount | int | 學生人數 | 必填 | 35 |
| remark | varchar | 備注信息 | 可選 | "市級優秀班集體" |## 3. 課程表 (courses)| 字段名 | 類型 | 描述 | 約束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 課程ID | 主鍵 | "C001" |
| courseName | varchar | 課程名稱 | 必填 | "高等數學" |
| credit | int | 學分 | 必填 | 4 |
| teacherId | varchar | 授課教師ID | 外鍵(teachers.id) | "T001" |
| semester | varchar | 學期 | 格式"YYYY-N" | "2023-1" |
| type | enum | 課程類型 | "必修"或"選修" | "必修" |
| prerequisite | varchar | 先修課程ID | 可選,外鍵(courses.id) | "C003" |## 4. 學生表 (students)| 字段名 | 類型 | 描述 | 約束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 學號 | 主鍵 | "S20230101" |
| name | varchar | 學生姓名 | 必填 | "王強" |
| gender | enum | 性別 | "男"或"女" | "男" |
| birthDate | date | 出生日期 | 必填 | date("2005-01-15") |
| enrollmentDate | date | 入學日期 | 必填 | date("2023-8-1") |
| classId | varchar | 班級ID | 外鍵(classes.id) | "202301" |
| phone | varchar | 聯系電話 | 必填 | "13812345678" |
| email | varchar | 電子郵箱 | 必填 | "20230101@school.edu.cn" |
| emergencyContact | varchar | 緊急聯系人電話 | 必填 | "13876543210" |
| address | varchar | 家庭住址 | 必填 | "北京市海淀區中關村大街1棟101室" |
| height | int | 身高(cm) | 必填 | 175 |
| weight | int | 體重(kg) | 必填 | 65 |
| healthStatus | enum | 健康狀況 | 必填,"良好"或"一般?"或"較差" | "良好" |## 5. 成績表 (scores)| 字段名 | 類型 | 描述 | 約束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 成績記錄ID | 主鍵 | "S20230101C001" |
| studentId | varchar | 學生ID | 外鍵(students.id) | "S20230101" |
| courseId | varchar | 課程ID | 外鍵(courses.id) | "C001" |
| score | int | 綜合成績 | 0-100 | 85 |
| examDate | date | 考試日期 | 必填 | date("2024-5-20") |
| usualScore | int | 平時成績 | 0-100 | 90 |
| finalScore | int | 期末成績 | 0-100 | 80 |### 補考成績記錄說明
補考記錄在_id后添加"_M"后綴,如"S20230101C001_M"## 表關系說明1. **一對多關系**:- 一個班級(classes)對應多個學生(students)- 一個教師(teachers)可以教授多門課程(courses)- 一個學生(students)有多條成績記錄(scores)2. **外鍵約束**:- students.classId → classes.id- courses.teacherId → teachers.id- scores.studentId → students.id- scores.courseId → courses.id- classes.headTeacherId → teachers.id

這里的 “query” 變量將作為用戶輸入的查詢內容,傳遞給 Agent,Agent 根據這個變量的值調用相應的 MySQL 工具進行查詢操作 。同時,還需要設置最大迭代次數,該參數用于控制工具調用的深度和復雜性,防止出現無限循環或過度調用工具的情況,避免資源浪費和系統性能問題,默認值通常為 3,可根據實際需求進行調整 。最后,在 “連接直接回復” 部分選擇變量 “Agent.text”,這樣 Agent 執行任務后的結果將通過該變量直接回復給用戶 。完成上述配置后,點擊發布預覽,一個能夠通過 MCP 與 MySQL 進行整合的 Dify 工作流就配置完成了 。

(五)搭建MCP SERVER

1.下載代碼
 git clone https://github.com/wenb1n-dev/mysql_mcp_server_pro.git
2.配置數據庫
vi .env
cd mysql_mcp_server_pro/src/config

在這里插入圖片描述

3.配置依賴
pip install mcp
pip install mysql-connector-python
pip install uvicorn
pip install python-dotenv
pip install starlette
4.啟動 mcp server
uv run server.py

在這里插入圖片描述

測試與優化:讓融合更完美

(一)工作流測試

完成上述配置后,就可以對創建的 Dify 工作流進行測試,以驗證其是否能夠正確地與 MySQL 進行整合并實現預期的功能 。

測試方式:進入 Dify 的工作流測試界面,在輸入框中輸入實際的查詢問題,例如 “哪個老師學生最多” 。這個問題看似簡單,卻涉及到對數據庫中教師與學生關系數據的查詢和分析。Dify 工作流接收到這個問題后,會觸發之前配置好的 Agent 節點 。

工作原理:Agent 節點根據配置的指令和策略,識別出這是一個需要查詢 MySQL 數據庫的任務,然后通過 MCP 協議調用相應的 MySQL 工具 。該工具將問題轉化為 SQL 查詢語句,并發送到 MySQL 數據庫進行執行 。假設數據庫中存儲教師和學生信息的表分別為teachersstudents,且students表中有一個字段teacher_id用于關聯teachers表,那么生成的 SQL 查詢語句可能類似于:

SELECT teachers.teacher_name, COUNT(students.student_id) AS student_countFROM teachersJOIN students ON teachers.teacher_id = students.teacher_idGROUP BY teachers.teacher_nameORDER BY student_count DESCLIMIT 1;

結果查看:MySQL 數據庫執行查詢后,將結果返回給 Dify 工作流中的 Agent 節點,Agent 節點再將結果按照之前配置的格式和變量,通過 “連接直接回復” 中的Agent.text變量返回給用戶 。用戶在 Dify 的工作流測試界面中就能看到查詢結果,例如 “教師 [具體教師姓名] 的學生最多,共有 [X] 名學生” 。通過這樣的測試過程,可以直觀地驗證 Dify 與 MySQL 的整合是否成功,以及工作流的配置是否正確 。如果測試過程中出現問題,如查詢結果為空、報錯等,就需要仔細檢查工作流的配置、SQL 語句的正確性以及數據庫的連接和權限設置等方面,逐步排查并解決問題 。

測試1.列出身高大于等于168cm所有學生

原數據如下:
在這里插入圖片描述
大模型回答的結果:

在這里插入圖片描述
符合預期。

測試2. 列出體重大于等于60kg的學生

在這里插入圖片描述

符合預期。

測試3. 哪個學生成績最好

在這里插入圖片描述
在這里插入圖片描述
符合預期。

測試4. 總成績最好的是哪個班級

在這里插入圖片描述
符合預期。

常見問題與解決方案:排憂解難

在 Dify 通過 MCP 整合 MySQL 的過程中,可能會遇到一些常見問題,下面為大家一一列舉并提供相應的解決方案 。

(一)連接失敗

錯誤描述:在配置 MCP SSE 連接 MySQL 服務地址后,Dify 無法成功連接到 MySQL,可能提示 “連接超時” 或 “無法找到服務器” 等錯誤信息 。

可能原因

網絡問題:MySQL 服務器與 Dify 所在的服務器之間網絡不通,可能是由于防火墻阻止了連接,或者網絡配置錯誤 。例如,MySQL 服務器的防火墻未開放 Dify 連接所需的端口(默認為 3306),導致 Dify 無法建立連接 。

地址或端口錯誤:在配置 MCP SSE 的 MySQL 服務地址和端口時,填寫錯誤 。如將 IP 地址寫錯,或者端口號與 MySQL 實際監聽的端口不一致 。

MySQL 服務未正常運行:MySQL 服務器端的服務可能未啟動,或者在運行過程中出現異常停止,導致無法響應 Dify 的連接請求 。

解決方案

檢查網絡和防火墻:在 MySQL 服務器上,檢查防火墻設置,確保 Dify 所在服務器的 IP 地址能夠訪問 MySQL 的端口 。在 Linux 系統中,若使用的是 ufw 防火墻,可通過sudo ufw allow 3306命令開放 3306 端口(假設 MySQL 使用默認端口) 。對于 CentOS 系統,使用firewall - cmd --zone = public --add - port = 3306/tcp --permanent命令添加端口規則,并執行sudo firewall - cmd --reload使規則生效 。同時,可使用ping命令測試兩臺服務器之間的網絡連通性,使用telnet命令測試端口是否可訪問,如telnet mysql_server_ip 3306

確認地址和端口:仔細檢查 MCP SSE 配置中填寫的 MySQL 服務地址和端口,確保與 MySQL 服務器的實際配置一致 。可登錄 MySQL 服務器,查看 MySQL 配置文件(通常是my.cnfmy.ini),確認bind - addressport參數的設置 。

檢查 MySQL 服務狀態:在 MySQL 服務器上,使用sudo systemctl status mysql命令檢查 MySQL 服務是否正在運行 。若服務未運行,可使用sudo systemctl start mysql命令啟動服務 。如果服務啟動失敗,查看 MySQL 的錯誤日志(通常位于/var/log/mysql/error.log),根據日志信息排查具體原因,如數據庫文件損壞、配置錯誤等 。

(二)工具調用錯誤

錯誤描述:在 Dify 工作流中,配置好 Agent 策略和工具列表后,調用 MySQL 相關工具時,提示 “找不到工具” 或 “工具調用失敗” 等錯誤 。

可能原因

插件安裝或配置問題:Agent 策略 (支持 MCP 工具) 和 MCP SSE 插件可能未正確安裝,或者在插件配置過程中出現錯誤 。例如,MCP SSE 插件的 sse 地址配置錯誤,導致無法正確發現和調用 MySQL 工具 。

策略選擇不當:在 Agent 配置中,選擇的 AGENT 策略與 MCP 工具不兼容 。如前文提到的,若選擇 FunctionCalling 策略,可能會遇到調用 MCP 時提示找不到 call_tool 方法的問題 。

工具列表配置錯誤:在 Agent 的工具列表中,MCP 服務器地址配置錯誤,或者未正確添加與 MySQL 相關的工具 。

解決方案

檢查插件安裝和配置:在 Dify 的插件管理界面,確認 Agent 策略 (支持 MCP 工具) 和 MCP SSE 插件已成功安裝 。對于 MCP SSE 插件,點擊插件進入配置頁面,檢查添加的 sse 地址是否正確 。若有多個 MCP 應用,確保每個應用的地址和配置都準確無誤 。可參考前文安裝插件時的步驟和配置示例,重新核對配置信息 。

選擇正確的策略:將 Agent 的 AGENT 策略選擇為 “ReAct (Support MCP Tools)”,該策略對 MCP 工具的支持較為穩定 。避免使用可能存在兼容性問題的策略,如 FunctionCalling 策略 。

核對工具列表配置:在 Agent 的工具列表配置中,仔細檢查 MCP 服務器地址的配置,確保與 MCP SSE 插件中配置的地址一致 。同時,確認已正確添加與 MySQL 相關的工具,可參考前文工作流配置中工具列表的添加步驟和示例,重新添加或修改工具列表 。

(三)SQL 執行錯誤

錯誤描述:在 Dify 工作流測試時,輸入查詢問題后,返回的結果提示 SQL 執行錯誤,如 “語法錯誤”“表不存在” 等 。

可能原因

提示詞或指令問題:在 Agent 配置的指令(提示詞)中,對用戶輸入的解析和轉換為 SQL 語句的邏輯存在問題,導致生成的 SQL 語句語法錯誤 。例如,指令中對變量的引用錯誤,或者對查詢條件的描述不清晰,使得生成的 SQL 語句無法正確執行 。

數據庫結構變化:MySQL 數據庫中的表結構發生了變化,如字段名稱修改、表被刪除等,但 Dify 工作流中的配置和查詢邏輯未及時更新,導致查詢時提示 “表不存在” 或 “未知列” 等錯誤 。

解決方案

優化提示詞和指令:仔細檢查 Agent 配置中的指令,確保其能夠準確地將用戶輸入轉換為正確的 SQL 語句 。可參考一些 SQL 生成的示例和規則,對指令進行優化和調試 。例如,在指令中明確變量的使用方式和查詢條件的表達,如 “使用中文回復。查詢學生表中成績大于變量 score 的學生信息,變量 score 由用戶輸入” 。同時,在工作流測試時,逐步分析用戶輸入和生成的 SQL 語句之間的轉換過程,找出問題所在并進行修正 。

同步數據庫結構信息:定期檢查 MySQL 數據庫的結構變化,當數據庫結構發生改變時,及時更新 Dify 工作流中的相關配置和查詢邏輯 。可以建立數據庫結構變更的通知機制,確保開發人員能夠及時了解數據庫的變化情況 。在 Dify 工作流中,根據新的數據庫結構,修改查詢語句中的表名、字段名等信息,以保證查詢的正確性 。例如,若 “students” 表被重命名為 “student_information”,則需要在 Dify 工作流的查詢語句中相應地修改表名 。通過對這些常見問題的分析和解決,可以幫助開發者在 Dify 通過 MCP 整合 MySQL 的過程中更加順利地進行開發和調試,確保系統的穩定運行 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93311.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雜記 02

1 WSL安裝 WSL的安裝遇到了問題,睡醒起來發現電腦藍屏了,linux系統沒裝好,但是好像大部分開發環境都是linux下需要的,先這樣用一下吧,到時候再說。可以問下前輩開發細節,主要是網絡代理問題,保…

劇本殺小程序系統開發:重構推理娛樂生態

在娛樂產業蓬勃發展的今天,推理娛樂作為一種充滿智慧和挑戰的娛樂形式,受到了越來越多人的喜愛。劇本殺,作為推理娛樂的代表之一,正以其獨特的魅力吸引著大量玩家。而劇本殺小程序系統開發,則為推理娛樂生態的重構帶來…

力扣習題:基本計算器

本片內容我們將針對于一個力扣中的一道很經典的習題:基本計算器。 這道題目十分經典,在很多大廠的面試題中都有出現過 因此我們將進一步來學習 該題目代碼已經上傳作者的個人gitee:CPP 學習代碼庫: C代碼庫新庫,舊有C倉庫滿員了喜…

Element用法---Loading 加載

僅供參考 文章目錄一、加載動畫二、Loading 組件1、指令調用 Loading2、服務調用 Loading一、加載動畫 當我們打開某個頁面時,如果需要加載的數據很多或者網絡很差,頁面加載就會非常緩慢,中間可能會很長時間顯示空白,那么就需要加…

飛算AI 3.2.0實戰評測:10分鐘搭建企業級RBAC權限系統

飛算AI 3.2.0實戰評測:10分鐘搭建企業級RBAC權限系統 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都…

事務的四大特性

事務(Transaction)是數據庫管理系統(DBMS)中用于保證數據操作正確性和一致性的核心機制。事務的特性通常用 ACID 四個字母概括,分別代表 原子性(Atomicity)、一致性(Consistency&…

WIN11系統下Open3D 0.19.0支持GPU的python版本

前往Open 3D官網下載https://github.com/isl-org/Open3D下載對應版本的源碼。 根據官方手冊利用cmake進行編譯&安裝,其中需要修改一些代碼適應于win 11系統,編譯時間較長需要耐心等待。最后,安裝結果如下圖,搞了四天&#xff…

ICCV 2025 | 4相機干掉480機位?CMU MonoFusion高斯潑濺重構4D人體!

???? 近日,卡內基梅隆大學(Carnegie Mellon University)的研究團隊在動態場景重建領域取得重要進展。其發表于ICCV 2025的論文《MonoFusion: Sparse-View 4D Reconstruction via Monocular Fusion》提出創新方法MonoFusion 。該方法突破常…

ADB 無線調試連接(Windows + WSL 環境)

gradle wrapper --gradle-version 8.4 Windows WSL 成功連接 Android 設備(用于 ./gradlew installDebug)的完整過程總結:? ADB 無線調試連接過程(Windows WSL 環境) 📌 目標:從 WSL 中通過 …

【.net core】【wetercloud】處理前端項目免登陸,且從前端項目跳轉至系統內時的問題

1.前端項目訪問后臺內容時免登陸(一般用于后臺接口需要校驗登陸時)處理思路:將后臺用戶的登陸校驗令牌信息在用戶登錄后添加至前端項目訪問地址的參數列表中,如:https://yourdomain/Home/Index#/https://yourdomain/vi…

設備 AI 知識庫,管理效率新飛躍

在設備管理領域,高效解決設備故障、合理規劃維護工作對企業生產運營至關重要。易點易動設備管理系統新推出的設備 AI 知識庫,為提升管理效率帶來了新契機。設備 AI 知識庫集成先進的人工智能技術,是設備管理領域的創新應用。易點易動設備管理…

C#繪制斐波那契螺旋

Fabonacci 數列,也就是”兔子數列“, 如果第一項為0的話,就是, 0,1,1,2,3,5,8,13,21,34,55,89……

JavaScript 任務 - clearTimeout 函數與 clearInterval 函數

clearTimeout 函數 1、基本介紹 clearTimeout 函數用于取消先前通過 setTimeout 函數設置的定時器 clearTimeout(【timeoutID】)參數說明timeoutID要取消的定時器的標識符,這個 ID 是由 setTimeout 函數返回的2、演示 let timeoutId1 setTimeout(() > {console.…

在 CentOS 7 中使用 systemd 創建自定義服務

systemd 創建自定義服務簡述創建自定義服務步驟文件覆蓋優先級創建服務流程在 /etc/systemd/system/ 目錄下創建 .service 文件(需 root 權限):編寫服務配置模板Systemd 服務文件三大區塊詳解[Unit] 區塊 - 服務元數據與依賴[Service] 區塊 -…

【QT】printsupport庫遠程實現打印機打印

【QT】printsupport庫遠程實現打印機打印 前言 思路 實現 當前所有可用打印機瀏覽 打印預覽 打印輸出 手動選擇打印 自動打印 防呆補充 庫打包 前言 在打印機的通訊控制方式中,有USB、網口、串口、WIFI等,針對局域網環境下,用自研軟件控制打印機打印的應用場景,針對自研軟…

LT3045EDD#TRPBF ADI亞德諾 超低噪聲LDO穩壓器 電子元器件IC

LT3045EDD#TRPBF ADI 超低噪聲LDO穩壓器專業解析1. 產品技術檔案LT3045EDD#TRPBF是ADI(Analog Devices Inc.)推出的超低噪聲/超高PSRR線性穩壓器,采用DFN-12 (3x3mm)封裝,以其0.8μVRMS超低噪聲和79dB超高頻PSRR成為精密電源設計。…

易語言模擬真人鼠標軌跡算法 - 非貝塞爾曲線

一.簡介 鼠標軌跡算法是一種模擬人類鼠標操作的程序,它能夠模擬出自然而真實的鼠標移動路徑。 鼠標軌跡算法的底層實現采用C/C語言,原因在于C/C提供了高性能的執行能力和直接訪問操作系統底層資源的能力。 鼠標軌跡算法具有以下優勢: 模擬人…

Spring Boot 3 數據源連接信息存儲方法

在Spring Boot 3中,數據源連接信息的存儲方式主要有以下幾種,根據安全性和環境需求選擇合適的方式: 1. 配置文件(推薦基礎方式) 位置:src/main/resources/application.properties 或 application.yml 示例…

按鍵序列常用示例

按鍵序列常用示例 按鍵編碼 基礎按鍵對應編碼 A-Z 原字符即可 KeyCodeSHIFTCTRL^ALT% 其他按鍵 KeyCodeBACKSPACE{BACKSPACE}, {BS}, or {BKSP}BREAK{BREAK}CAPS LOCK{CAPSLOCK}DEL or DELETE{DELETE} or {DEL}DOWN ARROW{DOWN}END{END}ENTER{ENTER} or ~ESC{ESC}HELP{HEL…

【LeetCode Solutions】LeetCode 熱題 100 題解(36 ~ 40)

CONTENTS二叉樹 - LeetCode 94. 二叉樹的中序遍歷(簡單)二叉樹 - LeetCode 104. 二叉樹的最大深度(簡單)二叉樹 - LeetCode 226. 翻轉二叉樹(簡單)二叉樹 - LeetCode 101. 對稱二叉樹(簡單&…