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

智能体(AI Agent、Deepseek、硅基流动)落地实践Demo——借助大模型生成报表,推动AI赋能企业决策

文章目录

  • 一、 引言
  • 二、 系统设计与技术细节
    • 2.1 系统架构
    • 2.2 核心组件说明
  • 三、 Demo 代码
    • 推荐博客:
  • 四、输出
      • 年度营销报告
        • 1. 总销售额 根据提供的数据,年度总销售额为:740.0。
        • 2. 各产品销售额
        • 3. 各地区销售额
        • 4. 各产品在各地区的销售情况
      • 分析与建议
  • 五、 总结

一、 引言

在当前数字化转型和大数据时代,企业对实时数据分析和自动化决策的需求不断增加分享一个智能体 Demo,该 Demo 通过调用硅基流动 DeepSeek API 实现了自动生成 SQL 查询、执行数据库统计,并最终利用大模型生成详细营销报告的完整流程。

此外,硅基流动提供免费的模型服务,用户只需生成相应的 API Key,即可体验低成本高效能的 AI Infra 平台。


二、 系统设计与技术细节

本智能体 Demo 的目标是:

  1. 根据自然语言描述生成个性化 SQL 查询;
  2. 执行 SQL 查询获取数据库统计数据;
  3. 利用大模型根据查询结果生成详细的年度营销报告。

2.1 系统架构

系统整体由三个主要模块构成:

  • 文本解析与 SQL 生成模块:调用硅基流动 DeepSeek API,根据自然语言生成符合业务逻辑的 SQL 查询。
  • 数据库交互模块:通过生成的 SQL 语句与 MySQL 数据库交互,获取统计数据。
  • 报告生成模块:将查询结果传入大模型,再次生成完整的营销报告。

2.2 核心组件说明

  • 硅基流动 DeepSeek API
    DeepSeek 是硅基流动公司推出的大模型产品,支持文本生成和任务执行。此 Demo 使用的是 “deepseek-ai/DeepSeek-V3”,通过调用 API 并传入自然语言提示,获得 SQL 语句或报告文本。
    官网地址:硅基流动
  • LangChain 工具包
    利用 LangChain 提供的 SQLDatabaseToolkit、create_sql_agent 等组件,实现数据库交互与自动化任务管理。
  • 日志调试与正则表达式清洗
    为确保生成的 SQL 语句正确,我们在代码中详细记录了日志,并使用正则表达式剔除模型返回中可能存在的代码块格式标记(例如 sql 和)。

三、 Demo 代码

话不多说,注解很详细了,本代码以思路为主,不涉及开发。
sql建库(test)表:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for products
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products`  (`product_id` int NOT NULL,`product_name` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL,PRIMARY KEY (`product_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of products
-- ----------------------------
INSERT INTO `products` VALUES (1, 'Product A');
INSERT INTO `products` VALUES (2, 'Product B');
INSERT INTO `products` VALUES (3, 'Product C');-- ----------------------------
-- Table structure for sales_records
-- ----------------------------
DROP TABLE IF EXISTS `sales_records`;
CREATE TABLE `sales_records`  (`sale_id` int NOT NULL,`product_id` int NULL DEFAULT NULL,`sale_date` date NULL DEFAULT NULL,`customer_region` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL,`sales_amount` double NULL DEFAULT NULL,PRIMARY KEY (`sale_id`) USING BTREE,INDEX `product_id`(`product_id`) USING BTREE,CONSTRAINT `sales_records_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`product_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of sales_records
-- ----------------------------
INSERT INTO `sales_records` VALUES (1, 1, '2024-01-15', 'North', 100);
INSERT INTO `sales_records` VALUES (2, 1, '2024-02-20', 'South', 150);
INSERT INTO `sales_records` VALUES (3, 2, '2024-03-25', 'East', 200);
INSERT INTO `sales_records` VALUES (4, 2, '2024-04-10', 'West', 120);
INSERT INTO `sales_records` VALUES (5, 3, '2024-05-05', 'North', 90);
INSERT INTO `sales_records` VALUES (6, 3, '2024-06-18', 'South', 180);SET FOREIGN_KEY_CHECKS = 1;

Python:

import logging
import requests
import re
import time# 更新后的导入路径
from langchain_community.agent_toolkits.sql.base import create_sql_agent
from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
from langchain_community.utilities import SQLDatabasefrom langchain.llms import BaseLLM
from langchain.callbacks.manager import CallbackManagerForLLMRun
from langchain.schema import LLMResult, Generation# 配置日志输出(DEBUG 级别)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')def clean_sql(raw_text: str) -> str:"""清洗返回的 SQL 文本,去除代码块标记(例如 ```sql 开头和 ```结尾)。"""# 去除开头的代码块标记(例如 ```sql 或 ```)cleaned = re.sub(r"^```(?:sql)?\s*", "", raw_text, flags=re.IGNORECASE)# 去除结尾的代码块标记cleaned = re.sub(r"\s*```$", "", cleaned, flags=re.IGNORECASE)return cleaned.strip()class SiliconeFlowDeepSeek(BaseLLM):api_url: strapi_key: strdef _call(self, prompt: str, run_manager: CallbackManagerForLLMRun | None = None) -> str:logging.debug("调用硅基流动 DeepSeek API,输入提示:%s", prompt)headers = {"Authorization": f"Bearer {self.api_key}","Content-Type": "application/json"}# 构造请求 payload,按正确格式传递参数data = {"model": "deepseek-ai/DeepSeek-V3","messages": [{"role": "user", "content": prompt}],"stream": False,"max_tokens": 512,"stop": ["null"],"temperature": 0.7,"top_p": 0.7,"top_k": 50,"frequency_penalty": 0.5,"n": 1,"response_format": {"type": "text"},"tools": [{"type": "function","function": {"description": "<string>","name": "<string>","parameters": {},"strict": False}}]}try:response = requests.post(self.api_url, headers=headers, json=data)if response.status_code == 200:result = response.json()logging.debug("DeepSeek API 返回原始结果:%s", result)# 提取返回的文本内容return result["choices"][0]["message"]["content"]else:logging.error("DeepSeek API 请求失败,状态码:%s,响应内容:%s",response.status_code, response.text)return "请求失败"except Exception as e:logging.exception("调用 DeepSeek API 时发生异常:")return "请求失败"def _generate(self, prompts, stop=None, run_manager: CallbackManagerForLLMRun | None = None) -> LLMResult:all_generations = []for prompt in prompts:text = self._call(prompt, run_manager)all_generations.append([Generation(text=text)])return LLMResult(generations=all_generations)@propertydef _llm_type(self) -> str:return "silicone_flow_deepseek"if __name__ == '__main__':# 1. 初始化自定义大模型api_url = "https://api.siliconflow.cn/v1/chat/completions"api_key = "使用你的秘钥"  # 使用你的秘钥logging.debug("初始化硅基流动 DeepSeek 模型实例。")llm = SiliconeFlowDeepSeek(api_url=api_url, api_key=api_key)# 2. 连接 MySQL 数据库db_uri = "mysql+mysqlconnector://账号:密码@localhost:3306/test"#账号密码logging.debug("尝试连接 MySQL 数据库,URI:%s", db_uri)try:db = SQLDatabase.from_uri(db_uri)logging.debug("数据库连接成功,且已自动完成表结构自检。")except Exception as e:logging.exception("连接数据库失败:")raise e# 3. 初始化 SQL 工具包logging.debug("初始化 SQLDatabaseToolkit,整合数据库与大模型。")toolkit = SQLDatabaseToolkit(db=db, llm=llm)# 4. 创建 SQL Agent 执行器logging.debug("创建 SQL Agent 执行器,使用 zero-shot-react-description 模型。")agent_executor = create_sql_agent(llm=llm,toolkit=toolkit,verbose=True,agent_type="zero-shot-react-description")# 5. 生成并校验 SQL 语句(最多重试 3 次)nl_query = "统计每个产品在过去一年的总销售金额和按客户地区统计的销售金额分布"logging.debug("自然语言查询:%s", nl_query)# 附加数据库表结构信息schema_info = ("Table: products (product_id int primary key, product_name text)\n""Table: sales_records (sale_id int primary key, product_id int, sale_date date, customer_region text, sales_amount double)")max_attempts = 3attempts = 0valid_sql = Noneraw_sql_text = ""# 用于正则提取 SQL 语句,匹配以 SELECT 或 WITH 开头的部分(不区分大小写)sql_pattern = re.compile(r"(?i)^(SELECT\s+.*?;?)\s*$", re.DOTALL)while attempts < max_attempts:attempts += 1logging.debug("第 %d 次生成 SQL 语句", attempts)sql_prompt = (f"请仅生成针对下面查询的 MySQL SQL 语句,不要输出其他内容。\n"f"查询:{nl_query}\n"f"数据库表结构:\n{schema_info}")logging.debug("生成 SQL 语句提示:%s", sql_prompt)try:sql_llm_result = llm.invoke(sql_prompt)if isinstance(sql_llm_result, str):raw_sql_text = sql_llm_result.strip()else:raw_sql_text = sql_llm_result.generations[0][0].text.strip()logging.debug("模型原始返回的 SQL 内容:%s", raw_sql_text)except Exception as e:logging.exception("生成 SQL 语句时发生异常:")raise e# 清洗返回的 SQL 文本,去除代码块标记raw_sql_text = clean_sql(raw_sql_text)logging.debug("清洗后的 SQL 内容:%s", raw_sql_text)# 尝试用正则表达式提取合理的 SQL 语句match = sql_pattern.search(raw_sql_text)if match:sql_query = match.group(1).strip()logging.debug("正则表达式提取后的 SQL 语句:%s", sql_query)else:sql_query = raw_sql_textlogging.debug("未匹配到合理 SQL,直接使用清洗后的返回:%s", sql_query)# 校验 SQL 语句checker_prompt = (f"请检查下面的 SQL 语句是否正确:\n{sql_query}\n""只返回“正确”或者具体的错误信息。")logging.debug("SQL 查询校验提示:%s", checker_prompt)try:checker_llm_result = llm.invoke(checker_prompt)if isinstance(checker_llm_result, str):checker_output = checker_llm_result.strip()else:checker_output = checker_llm_result.generations[0][0].text.strip()logging.debug("模型原始返回的校验信息:%s", checker_output)except Exception as e:logging.exception("校验 SQL 语句时发生异常:")raise eif checker_output == "正确":valid_sql = sql_querylogging.debug("SQL 查询校验通过。")breakelse:logging.error("SQL 查询校验失败:%s", checker_output)time.sleep(1)if valid_sql is None:logging.error("经过多次重试后,未能生成有效 SQL。原始返回为:%s", raw_sql_text)raise Exception("经过多次重试后,仍未生成有效的 SQL 语句。")# 6. 执行 SQL 查询try:logging.debug("执行 SQL 查询:%s", valid_sql)query_result = db.run(valid_sql)logging.debug("SQL 查询执行结果:%s", query_result)except Exception as e:logging.exception("执行 SQL 查询时发生异常:")raise e# 7. 利用大模型生成年度营销报告report_prompt = f"根据以下销售数据生成一份详细的年度营销报告:\n{query_result}"logging.debug("生成报表提示:%s", report_prompt)try:report_llm_result = llm.invoke(report_prompt)if isinstance(report_llm_result, str):report_content = report_llm_result.strip()else:report_content = report_llm_result.generations[0][0].text.strip()logging.debug("生成的年度营销报告内容:%s", report_content)except Exception as e:logging.exception("生成报表时发生异常:")raise e# 8. 输出生成的 SQL 语句、原始模型返回和年度营销报告print("==== 生成的 SQL 查询 ====")print(valid_sql)print("\n==== 模型返回的原始 SQL 内容 ====")print(raw_sql_text)print("\n==== 年度营销报告 ====")print(report_content)logging.debug("整个流程执行完毕。")

此外也可以多加提示词等等,阅读精选文章,会更有启发!

推荐博客:

主页:小胡说技书
精选文章:小胡说技书博客分类(部分目录):服务治理、数据治理与安全治理对比表格

四、输出

有调试信息,这里太多了,去掉了。

==== 生成的 SQL 查询 ==== SELECT
p.product_id,
p.product_name,
SUM(sr.sales_amount) AS total_sales_amount,
sr.customer_region,
SUM(sr.sales_amount) OVER (PARTITION BY sr.customer_region) AS region_sales_amount FROM
products p JOIN
sales_records sr ON p.product_id = sr.product_id WHERE
sr.sale_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) GROUP BY
p.product_id, sr.customer_region;

==== 模型返回的原始 SQL 内容 ==== SELECT
p.product_id,
p.product_name,
SUM(sr.sales_amount) AS total_sales_amount,
sr.customer_region,
SUM(sr.sales_amount) OVER (PARTITION BY sr.customer_region) AS region_sales_amount FROM
products p JOIN
sales_records sr ON p.product_id = sr.product_id WHERE
sr.sale_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) GROUP BY
p.product_id, sr.customer_region;

==== 年度营销报告 ==== 为了生成一份详细的年度营销报告,我们需要对销售数据进行分析,包括总销售额、各产品销售额、各地区销售额等。以下是基于提供的数据生成的年度营销报告:


年度营销报告

1. 总销售额 根据提供的数据,年度总销售额为:740.0。
2. 各产品销售额
  • Product A: 150.0
  • Product B: 320.0 (200.0 + 120.0)
  • Product C: 270.0 (90.0 + 180.0)
3. 各地区销售额
  • East: 200.0
  • North: 90.0
  • South: 330.0 (150.0 + 180.0)
  • West: 120.0
4. 各产品在各地区的销售情况
  • Product A:
  • South: 150.0
  • Product B:
  • East: 200.0
  • West: 120.0
  • Product C:
  • North: 90.0
  • South: 180.0

分析与建议

  1. 产品表现:
  • Product B的销售额最高,达到320.0,显示出较强的市场竞争力。
  • Product C和Product A的销售额分别为270.0和150.0,需要进一步分析其市场定位和推广策略。
  1. 地区表现:
  • South地区的销售额最高,达到330.0,表明该地区市场需求旺盛。
  • East和West地区的销售额分别为200.0和120.0,需要加强市场推广活动。
  • North地区的销售额最低,仅为90.0,建议进行市场调研以了解原因并制定相应的营销策略。

3.建议:

  • 产品推广:
    • Product B的成功经验可以复制到其他产品上。
    • Product A和Product C需要加强品牌宣传和市场推广。
  • 地区策略:
    • South地区继续保持并优化销售策略。
    • East和West地区增加市场推广力度。
    • North地区进行深入的市场调研,制定针对性的营销计划。

这份报告基于提供的数据进行了详细的分析和建议,希望能为您的年度营销策略提供有价值的参考。

五、 总结

本文以一个智能体 Demo 为例,展示了如何利用硅基流动 DeepSeek API 生成 SQL 查询、执行数据库统计,并进一步自动生成详细的营销报告。硅基流动提供的免费模型服务为企业和开发者降低了 AI 应用门槛,使得智能体系统在各行业落地成为可能。

希望这篇博客文章能为您在智能体及大模型应用方面提供新的思路,并激发更多开发者探索 AI 技术的无限可能!

封面图:在这里插入图片描述

相关文章:

智能体(AI Agent、Deepseek、硅基流动)落地实践Demo——借助大模型生成报表,推动AI赋能企业决策

文章目录 一、 引言二、 系统设计与技术细节2.1 系统架构2.2 核心组件说明 三、 Demo 代码推荐博客&#xff1a; 四、输出年度营销报告1. 总销售额 根据提供的数据&#xff0c;年度总销售额为&#xff1a;740.0。2. 各产品销售额3. 各地区销售额4. 各产品在各地区的销售情况 分…...

mac os设置jdk版本

打开环境变量配置文件 sudo vim ~/.bash_profile 设置不同的jdk版本路径 # 设置JAVA_HOME为jdk17路径 export JAVA_HOME$(/usr/libexec/java_home -v 17)# 设置JAVA_HOME为jdk8路径 export JAVA_HOME$(/usr/libexec/java_home -v 1.8) 设置环境变量 # 将jdk加入到环境变量…...

Llama 3.1 本地电脑部署 Linux系统 【轻松简易】

本文分享在自己的本地电脑部署 llama3.1&#xff0c;而且轻松简易&#xff0c;快速上手。 这里借助Ollama工具&#xff0c;在Linux系统中进行大模型部署~ Llama3.1&#xff0c;有三个版本&#xff1a;8B、70B、405B Llama 3.1 405B 是第一个公开可用的模型&#xff0c;在常识…...

计算机网络安全之一:网络安全概述

1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及&#xff0c;越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是&#xff0c;支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而&#xff0…...

docker 部署JAR

docker pull openjdk:23 使用Docker运行生成的JAR包是一个将应用程序容器化的好方法&#xff0c;它确保了你的应用可以在任何安装了Docker的环境中以相同的方式运行。以下是创建一个Docker镜像并运行包含你Java应用程序的JAR包的基本步骤。1. 准备 Dockerfile首先&#xff0c;在…...

深研究:与Dify建立研究自动化应用

许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...

第1章:LangChain4j的聊天与语言模型

LangChain4J官方文档翻译与解析 目标文档路径: https://docs.langchain4j.dev/tutorials/chat-and-language-models/ 语言模型的两种API类型 LangChain4j支持两种语言模型&#xff08;LLM&#xff09;的API&#xff1a; LanguageModel&#xff1a;这种API非常简单&#xff0c;…...

IPv6报头40字节具体怎么分配的?

目录 IPv6报头结构 字段详解 示例代码&#xff1a;IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比&#xff0c;IPv6不仅提供了更大的地址空间&#xff0c;还简化了报头结构&#xff0c;提高了网络设备的处理效率。…...

Ubuntu ARM / aarch64 CPU 镜像下载:如何在 ARM 设备上安装和使用 Ubuntu

随着 ARM 架构的逐渐普及&#xff0c;尤其是在移动设备和高效能计算设备中的应用&#xff0c;许多开发者和用户开始关注基于 ARM 架构的操作系统。Ubuntu 作为一款广泛使用的 Linux 发行版&#xff0c;自然也为 ARM 架构提供了优化的版本。本文将详细介绍如何下载适用于 ARM / …...

图论入门算法:拓扑排序(C++)

上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…...

MySQL中count(1)和count(*) 的区别

MySQL中count(1)和count(*) 的区别 在 MySQL 中&#xff0c;COUNT(1) 和 COUNT(*) 均用于统计查询结果中的行数&#xff0c;但它们在语义及其背后的机制上有一些区别。 基本功能 COUNT(*)&#xff1a;统计表中所有行的数量&#xff0c;无论列是否为 NULL。 COUNT(1)&#xf…...

Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路

一、资料快车 1、深入了解Android输入系统&#xff1a;https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考&#xff1a; 2、系统程序分析方法 1&#xff09;加入log&#xff0c;并跟着log一步步分析 -logc…...

Web入侵实战分析-常见web攻击类应急处置实验2

场景说明 某天运维人员&#xff0c;发现运维的公司站点被黑页&#xff0c;首页标题被篡改&#xff0c;你获得的信息如下&#xff1a; 操作系统&#xff1a;windows server 2008 R2业务&#xff1a;公司官网网站架构&#xff1a;通过phpstudy运行apache mysqlphp开放端口&…...

Jenkins 配置 Credentials 凭证

Jenkins 配置 Credentials 凭证 一、创建凭证 Dashboard -> Manage Jenkins -> Manage Credentials 在 Domain 列随便点击一个 (global) 二、添加 凭证 点击左侧 Add Credentials 四、填写凭证 Kind&#xff1a;凭证类型 Username with password&#xff1a; 配置 用…...

Android Http-server 本地 web 服务

时间&#xff1a;2025年2月16日 地点&#xff1a;深圳.前海湾 需求 我们都知道 webview 可加载 URI&#xff0c;他有自己的协议 scheme&#xff1a; content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的&#xff0c;如果你想直接…...

selenium爬取苏宁易购平台某产品的评论

目录 selenium的介绍 1、 selenium是什么&#xff1f; 2、selenium的工作原理 3、如何使用selenium&#xff1f; webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么&#xff1f; 用于Web应用程序测试的工具。可以驱动浏览…...

Linux中POSIX应用场景

Linux 提供了丰富的 POSIX&#xff08;Portable Operating System Interface&#xff09;标准接口&#xff0c;这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数&#xff0c;涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...

Boringssl介绍

BoringSSL 是 Google 从 OpenSSL 分支出来的一个开源 TLS/SSL 库&#xff0c;旨在为 Google 的产品和服务提供一个更加轻量、安全和现代化的加密库。它是 OpenSSL 的一个替代品&#xff0c;专注于简化代码、提高安全性和减少潜在的攻击面。 以下是对 BoringSSL 的详细介绍&…...

react实例与总结(二)

目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…...

僵尸进程、孤儿进程

一、僵尸进程、孤儿进程 僵尸进程、孤儿进程 1、僵尸进程&#xff1a; &#xff08;1&#xff09;定义&#xff1a;子进程死了&#xff08;内存、打开的文件等都释放了&#xff09;&#xff0c;但没有完全死&#xff08;数据结构<包含进程ID&#xff0c;进程状态、运行时…...

快速入门Springboot+vue——MybatisPlus多表查询及分页查询

学习自哔哩哔哩上的“刘老师教编程”&#xff0c;具体学习的网站为&#xff1a;7.MybatisPlus多表查询及分页查询_哔哩哔哩_bilibili&#xff0c;以下是看课后做的笔记&#xff0c;仅供参考。 多表查询 多表查询[Mybatis中的]&#xff1a;实现复杂关系映射&#xff0c;可以使…...

redis解决高并发看门狗策略

当一个业务执行时间超过自己设定的锁释放时间&#xff0c;那么会导致有其他线程进入&#xff0c;从而抢到同一个票,所有需要使用看门狗策略&#xff0c;其实就是开一个守护线程&#xff0c;让守护线程去监控key&#xff0c;如果到时间了还未结束&#xff0c;就会将这个key重新s…...

深入解析 MySQL 8 C++ 源码:二级索引回表操作

在数据库系统中&#xff0c;索引是优化查询性能的关键技术之一。MySQL 的 InnoDB 存储引擎支持多种索引类型&#xff0c;其中二级索引&#xff08;非聚簇索引&#xff09;和聚簇索引&#xff08;主键索引&#xff09;是最常见的两种。然而&#xff0c;由于二级索引的叶子节点只…...

MySQL如何解决幻读?

目录 一、什么是幻读&#xff1f; 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因&#xff1f; 1.4?读已提交&#xff08;Read Committed&#xff09; 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5?可重…...

RabbitMQ的脑裂(网络分区)问题

问题描述&#xff1a; Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data 一、什么是MQ脑裂&#xff1f; 网络分区 如果另一个节点在一段时间内&#xff08;默认为 60 秒&#xff09;无法与其联系&#xff0…...

【网络安全 | 漏洞挖掘】价值$40000:从路径遍历升级至RCE

未经许可,不得转载。 文章目录 路径遍历RCE路径遍历 在进行目标侦查和端口扫描时,我发现了一个使用 8443 端口的子域名:http://admin.target.com:8443。许多人可能会忽略返回 404 的子域名,但我并没有。 对 http://admin.target.com:8443/FUZZ 进行模糊测试时,我发现了一…...

程函方程的详细推导

以下是基于非均匀介质弹性波方程&#xff08;无纵波假设&#xff09;推导程函方程的详细过程&#xff0c;完整考虑纵波&#xff08;P 波&#xff09;和横波&#xff08;S 波&#xff09;的耦合效应&#xff1a;...

AD(Altium Designer)三种方法导入图片

目录 1、脚本方式导入图片 1.1 准备脚本文件和导入图片 1.2 运行脚本 1.3 导入文件 1.4 选中文件 2.5 运行 2.6 导入图片 2.7 选择图片 2.8 转换 2.9 退出 2.10 联合 2.11 确认 2.12 调整大小 2.13 复制 2.14 粘贴 2、图片直接导入图片 2.1点击放置 2.2 图片…...

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…...

问题记录汇总

记录一些问题 如何分析错误帧问题-CSDN博客...

安全问答—安全的基本架构

前言 将一些安全相关的问答进行整理汇总和陈述&#xff0c;形成一些以问答呈现的东西&#xff0c;加入一些自己的理解&#xff0c;欢迎路过的各位大佬进行讨论和论述。很多内容都会从甲方的安全认知去进行阐述。 1.安全存在的目的&#xff1f; 为了支持组织的目标、使命和宗…...

玩客云 IP查找

1.玩客云使用静态IP在不同网段路由器下不能使用&#xff0c;动态不好找IP地址 1.1使用python3 实现自动获取发送 import requests import os import socket# 从环境变量获取 PushPlus 的 token 和群组编码 PUSH_PLUS_TOKEN os.getenv("PUSH_PLUS_TOKEN") PUSH_PLU…...

鸿蒙与跨端迁移的重要性

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是由华为公司开发的一款面向未来的全场景分布式操作系统。它旨在提供一个统一的平台&#xff0c;支持各种设备之间的无缝协作和数据共享&#xff0c;从而为用户提供更加连贯和高效的体验。在鸿蒙的生态系统中&#xff0c;跨端迁移…...

MATLAB学习之旅:从入门到基础实践

在当今科技飞速发展的时代,MATLAB作为一款强大的数学软件,犹如一把神奇的钥匙,能够打开众多领域的大门。无论是工程计算、数据分析,还是算法开发、可视化呈现,MATLAB都展现出了无与伦比的魅力。今天,就让我们踏上这段奇妙的MATLAB学习之旅,从最基础的部分开始,逐步探索…...

【队列】循环队列(Circular Queue)详解

文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中&#xff0c;队列是一种常用的数据结构&#xff0c;而循环队列&#xff08;Circular Queue&#xff09;则一般是一种基于数组实现的队列&#x…...

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言&#xff08;官网是&#xff1a;https://open.bigmodel.cn&#xff09;的案例&#xff0c;回答响应流式输出显示&#xff0c;这里使用的是免费模型&#xff0c;需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…...

【JavaEE进阶】MyBatis入门

目录 &#x1f334;前言 &#x1f332;什么是MyBatis? &#x1f333;准备工作 &#x1f6a9;创建工程 &#x1f6a9;配置数据库连接字符串 &#x1f6a9;数据准备 &#x1f6a9;编写持久层代码 &#x1f343;单元测试 &#x1f334;前言 在应⽤分层学习时,我们了解到…...

网络安全:防范NetBIOS漏洞的攻击

稍微懂点电脑知识的朋友都知道&#xff0c;NetBIOS 是计算机局域网领域流行的一种传输方式&#xff0c;但你是否还知道&#xff0c;对于连接互联网的机器来讲&#xff0c;NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System&#xff0c;网络基本输入输…...

【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动&#xff1a;nvidia-550&#xff08;1&#xff09;查询显卡ID&#xff08;2&#xff09;PCI ID Repository查询显卡型号&#xff08;3&#xf…...

如何在本地和服务器新建Redis用户和密码

文章目录 一. Redis安装二. 新建Redis用户&#xff0c;测试连接2.1 本地数据库2.2 线上数据库2.2.1 安装和配置2.2.2 测试连接 三. 配置四. 分布式 一. Redis安装 Redis安装 可以设置开机自动启动&#xff0c;也可以在去查看系统服务&#xff0c;按[win R]&#xff0c;输入命…...

使用SHOW PROCESSLIST和SHOW ENGINE INNODB STATUS排查mysql锁等待问题

现象&#xff1a; mysql 查某表一直不能结束&#xff0c;查别的表没有问题。已知之前刚刚alter此表想把它的一个字段长度增长&#xff0c;但是这个操作一直没有结束。现在应该怎么办? 方案: 使用 SHOW PROCESSLIST; 查看当前所有活动的SQL线程&#xff0c;找出是否有长时间…...

探索HarmonyOS的UI开发新境界:从基础到进阶的深度解析

在科技日新月异的今天&#xff0c;操作系统作为连接硬件与软件的桥梁&#xff0c;其重要性不言而喻。HarmonyOS&#xff0c;作为华为自主研发的分布式全场景操作系统&#xff0c;正以其独特的分布式技术架构和一次开发多端部署的能力&#xff0c;引领着操作系统的新潮流。本文将…...

Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位

需求如下&#xff1a; 项目 测试demo 有多个渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主测试代码外&#xff0c;需要一个单独 Activity 调用测试代码。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因为支付功能需要引入对应的 moudule&#xff0c;因此…...

OpenCV(1):简介、安装、入门案例、基础模块

1 OpenCV 简介 OpenCV 是一个功能强大、应用广泛的计算机视觉库&#xff0c;它为开发人员提供了丰富的工具和算法&#xff0c;可以帮助他们快速构建各种视觉应用。随着计算机视觉技术的不断发展&#xff0c;OpenCV 也将会继续发挥重要的作用。OpenCV 提供了大量的计算机视觉算法…...

Linux-GlusterFS操作子卷

文章目录 分布式卷添加卷分布式卷删除子卷删除总卷 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月20日19点30分 分布式卷添加卷 Node1上进行操作 扩容 #服务器端 gluster volu…...

kettle从入门到精通 第九十二课 ETL之kettle 使用Kettle的Carte对外发布读写接口

场景&#xff1a;使用kettle实现将查询结果返回给客户端&#xff0c;也就是说kettle暴露查询接口供外围系统调用。前提必须是使用carte服务才可以提供接口供外部系统调用。具体实操方法如下&#xff1a; 1、设计转换 根据具体需求设计转换&#xff0c;主要用到的步骤有获取变…...

【精调】LLaMA-Factory 快速开始1: Meta-Llama-3.1-8B-Instruct

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml llamafactory-cli chat examples/inference/llama3_lora_sft.yaml llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml模型下载 git clone https://www.modelscope.cn/LLM-Research/Meta-Lla…...

数据库加密全解析:从传输到存储的安全实践

title: 数据库加密全解析:从传输到存储的安全实践 date: 2025/2/17 updated: 2025/2/17 author: cmdragon excerpt: 数据加密是数据库安全的最后一道物理防线。传输层SSL/TLS配置、存储加密技术及加密函数实战应用,覆盖MySQL、PostgreSQL、Oracle等主流数据库的20+生产级加密…...

PHP+Apache+MySQL安装(Windows)

一、安装教程 参考链接1 参考链接2 二、问题描述 PHP安装目录下找不到php8apache2_4.dll PHP安装包下载错误 Apache Service Monitor: request operation has failed! 定位问题&#xff1a; 查看【事件查看器】 解决问题 安装或更新与PHP版本相对应的Visual C Redistribu…...

alt+tab切换导致linux桌面卡死的急救方案

环境 debian12 gnome43.9 解决办法 观察状态栏&#xff0c;其实系统是没有完全死机的&#xff0c;而且gnome也可能没有完全死机。 1. alt f4 关闭桌面上的程序&#xff0c;因为这个方案是我刚刚看到的&#xff0c;所以不确定能不能用&#xff0c;比起重启系统&#xff0c;…...