Text2SQL:自助式数据报表开发---0517
Text2SQL技术
早期阶段:依赖于人工编写的规则模板来匹配自然语言和SQL语句之间的对应关系
机器学习阶段:采用序列到序列模型等机器学习方法来学习自然语言与SQL之间的关系
LLM阶段:借助LLM强大的语言理解和代码生成能力,利用提示工程,微调等方法将Text2SQL性能提升到新的高度
我们目前已处于LLM阶段,基于LLM 的 Text-to-saL系统会包含以下几个步骤
自然语言理解:分析用户输入的自然语言问题,理解其意图和语义。
模式链接: 将问题中的实体与数据库模式中的表和列进行链接。
SQL生成:根据理解的语义和模式链接结果,生成相应的 SQL查询语句。
SQL执行:在数据库上执行SQL查询,将结果返回给用户,(function call)
LLM模型选择
闭源模型,收费且数据上传服务器
开源模型:
Qwen72B开源天花板,但贵,会用7B比较多
横向是参数,纵向是性能,性价比看斜率
写代码Qwen-coder,CodeGeex
Function Call-->SQL执行
搭建SQL Copilot
LangChain中的SQL Agent
SQL Agent如何通过自然语言,撰写SQL
1)通过 sql_db_list_tables,看到数据库中的表都有哪些
2)思考,我需要查哪张表(基于用户的Query)
3)Action: sql_db_schema
找到对应数据表的 表结构(CREATE TABLE)
4)基于表结构,和用户的Query =>撰写SQL语句
5)执行SQL =>得到SQL执行后的结果
6)再思考是否能回答用户的问题
Thinking:如果表特别多的情况下,不可能把所有表结构传入大模型吧
是的,如果有10万张表,光是10万张表名,大模型都看不过来;
助手是分业务场景的,每个业务场景的表的数量就不会太多,分而治之。
Thinking:可不可以用知识库来限定使用的表结构?
一般知识库适用于保存之前查询问题的SQL语句的
Query =>SQL之间的问答对;
RAG的作用是给LLM提供开卷考试;
LLM的考试:用户给你Query,你写SQL
Thinking:如何处理自然语言中隐含的多层逻辑(如嵌套子查询,多条件连接),以此生成复杂的SQL,有什么技巧?
LLM写复杂的SQL,一般处理3张表联查是没有问题;
我们可能会有一些规则,或者存在多个使用字段表达同一个意思***
1)COMMENTS,注释
2)向量数据库,存储着过去的Query => SQL(对的答案)
Thinking:拿到数据库数据后如何保证后续的生成不影响数字的准确?
SQL执行后,得到dataframe,LLM会基于dataframe进行后续的推理
Thinking:如果SQL一直不正确,可否人工写个准确的SQL给大模型,并与问题关联,这里就可以用向量数据库
自己编写(LLM+Prompt)
Thinking:直接使用SQL+LLM会有什么问题?
1)多个相似的数据表 =>导致Langchain会尝试多次生成SQL
2)用户Prompt太宽泛 =>生成的结果,不是用户想要的
所以得给Agent配备专有的知识库,在prompt中动态完善和query相关的context
SQL+向量数据库+LLM:
向量数据库可以提供领域知识,当用户检索某个问题的时候=>从向量数据库中找到相关的内容,放到prompt中=>提升SQL查询的相关性,保留以前的答案
RAG技术(Retrieval Augmented Generational)
在prompt中增加few-shot examples
专门定制搜索工具,从向量数据库中检索到与用户query相近的知识
SQL + 向量数据库+ LLM 使用:
如果想让LLM使用tool(可以按照某个顺序,执行完这个再执行下一个),比较有效的方式是写在prompt中,而不是在tool description中进行定义
向量数据库的作用:
给Prompt提供更多的context,用于LLM进行决策
CASE:保险场景SQL Copilot实战
Qwen2.5 7B或者72B CodeGeex
在这三种写法中,写法3可能是最好的,原因如下:
1. 结构清晰
写法3采用了一种正式的模板格式,将问题、输入和响应明确分开,使整个提示的逻辑非常清晰:
-
Question
:明确指出了用户的问题。 -
Input
:提供了数据表的建表语句(create_sql
),这对于理解表结构和字段非常重要。 -
Response
:清晰地指出了生成的 SQL 语句的位置。
这种结构化的方式可以帮助模型更好地理解任务需求,减少歧义。
2. 信息完整
写法3包含了以下关键信息:
-
问题描述:明确指出了用户需要解决的问题。
-
输入数据:提供了数据表的建表语句,帮助模型理解数据结构。
-
输出格式:指定了生成的 SQL 语句的位置和格式。
这种完整性使得模型能够更全面地理解任务,从而生成更准确的 SQL 查询。
3. 易于扩展
写法3的模板化设计使得它非常易于扩展。如果需要增加更多的信息或步骤,可以在模板中轻松添加新的部分。例如,如果需要增加对数据表的中文描述或其他约束条件,可以很方便地整合到模板中。
4. 可读性高
写法3的格式非常清晰,易于阅读和维护。无论对于开发人员还是模型来说,都能快速理解提示的内容和结构。
5. 减少歧义
由于写法3明确了每个部分的内容和格式,减少了模型对提示的误解。相比之下,写法1和写法2虽然也能传递必要的信息,但结构上不如写法3清晰,容易导致模型在理解上出现偏差。
对比其他写法
-
写法1:
-
优点:简洁,直接在提示中包含表描述。
-
缺点:缺乏结构化,模型可能难以快速定位关键信息。
-
-
写法2:
-
优点:使用了注释,提供了一定的结构。
-
缺点:信息组织不够清晰,模型可能需要更多时间来解析提示。
-
总结
写法3通过其清晰的结构、完整的信和高可读性,能够更有效地引导模型生成准确的 SQL 查询。这种模板化的方法不仅提高了生成结果的质量,还便于维护和扩展,因此在实际应用中可能表现最佳。
补全代码能力
Thinking:text2SQL,数据保护问题是不是解决不了,生产环境有落地吗?
在生产环境中,可以用开源模型,比如Qwen2.5-Coder
可以用云端数据库,也可以自己电脑本地搭建数据库
Thinking:如何想知道哪个大模型,用哪种格式会效果更好
开源大模型:
Qwen2.5-Coder ***,CodeGeex,SQLCoder =>代码补全大模型
prompt = f"""-- language: SQL
### Question: {query}
### Input: {create sql}
### Response:
Here is the SQL query l have generated to answer the question `{query}:
```sql
''''''
导出建表语句,创建SQL数据表的SQL语句
查询SQL数据,机器学习的建模=>Function Call,让LLM调用Function Call来执行特定的任务。
助手的结构设计:
1)为什么要划分很多助手?
因为用户的需求是多样的,数据表是多样的,Function Call也是多样的;
LLM直接来判断,选择哪个数据表,哪个FunctionCall =>比较困难,容易出错
所以划分不同的助手,每个助手有自己的业务场景(职责),也有自己匹配的数据
表,和Function cal。这样执行起来更清晰
2)能否打造一个 all in one 助手
Step1,先打造多个助手,比如100个
Step2,all in one 助手 =>先判断调用哪个助手
相当于是一个分诊台;
query input =>给到特定的助手;
Vanna使用
Vanna工作原理:
---训练RAG模型
输入数据库的元数据(如INFORMATION_SCHEMA),DDL语句,文档或示例SQL
模型将这些信息转换为向量并存储到向量库中,用于后续检索
---生成SQL
用户提问时,系统从向量库中检索相关上下文,组装成Prompt发送给LLM
LLM生成SQL后,自动执行并返回结果(表格或图标)
Vanna使用步骤:
vanna安装
pip install vanna,可选扩展如vanna[chromadb,mysql]支持本地化部署
连接数据库
自定义run_sql方法(如MySQL需要通过mysql.connector返回Pandas DataFrame)
训练模型
通过DDL,文档或SQL示例训练,例如:
vn.train(ddl="CREATE TABLE users(id INT PRIMARY KEY,name VARCHAR(100))")
提问与查询
调用vn.ask("查询销售额最高产品"),生成并执行SQL
ask函数
作用:用户通过自然语言提问时调用此函数,它是查询的核心入口,会依次调用generate_sql、run_sq1、generate_plotly_code、get_plotly_figure四个函数来完成整个查询及可视化的过程。
工作流程:
-->首先将用户的问题转换成向量表示,然后在向量数据库中检索与问题语义最相似的DDL语句、文档和SQL查询。
-->将检索到的信息和用户的问题一起提供给LLM,生成对应的SaL查询。
-->执行生成的SQL查询,并将查询结果以表格和Plotly图表的形式返回给用户,
比如:vn.ask("查询heros表中 英雄攻击力前5名的英雄")
generate sql函数
作用:根据用户输入的自然语言问题,生成对应的SQL语句。
工作流程:
调用get_similar_question_sql函数,在向量数据库中检索与问题相似的sql/question对。
在向量数据库中检索与问题相似的建表语句ddl。
调用get related ddl函数,
调用get related documentation函数,在向量数据库中检索与问题相似的文档
调用get_sql_prompt函数,结合上述检索到的信息生成prompt,然后将prompt提供给LLM,生成SQL语句。
比如:sql=vn.generate_sql("査询heros表中 英雄攻击力前5名的英雄")
run_sql函数
作用:执行generate_sql函数生成的SQL语句,并返回查询结果
工作流程:将生成的SQL语句发送到连接的数据库中执行,获取并返回查询结果。
比如:
sql=vn.generate_sql("査询heros表中 英雄攻击力前5名的英雄")
vn.run sql(sql)
=========================================================================
结构化数据库 SQL,非结构化数据库 NoSQL
SQL数据库 更有前景;oracle,mysql
AI大模型的项目,要处理数据,哪种数据更有价值,更容易看到结果?
RAG 处理很多非结构化的数据,难点在什么 =>数据清洗
结构化数据的 Text2SQL,更容易看到一些结果
3种搭建Text2SQL的能力:
1)LangChain
2)Vanna
3)开源的大模型 Code大模型的使用+prompt
Thinking:缺乏含义的话,在字段的备注里面加说明
1)字段的注释
2)有时候,还需要提供一些字段值,尤其是针对分类的字段
gender = male
gender ='男’
不光是建表语句需要给到 LLM,针对提问的分类字段,也需要给到大模型
Thinking:能介绍一些非结构化的数据清洗的比较好的方法吗?
工具:使用LLM来进行数据清洗
非结构化数据 常见的问题是什么?
1)文件过时
2)标注,文档的注释(摘要、关键词、提一些文档知识的问题)
提升RAG的能力
摘要 =>LLM写摘要
关键词 =>LLM写关键词抽取
给文档知识提一些问题=>LLM写知识问题
机器学习的建模:
1)写代码,可以用Cursor
2)需要了解都有哪些机器学习模型,能做什么
LR线性回归,对特征的重要性进行计算
w1x1+w2x2+w3x3 = y
x1,x2,x3=>年卡人数,促销人数,普通人数
Thinking:机器学习建模这种是不是只有获取不到底层的时候才适用?除此之外在text2SQL中还有什么应用场景?
时间序列=>预测未来一段时间的y
d1,d2,d3,d4...dn,dn+1
相关文章:
Text2SQL:自助式数据报表开发---0517
Text2SQL技术 早期阶段:依赖于人工编写的规则模板来匹配自然语言和SQL语句之间的对应关系 机器学习阶段:采用序列到序列模型等机器学习方法来学习自然语言与SQL之间的关系 LLM阶段:借助LLM强大的语言理解和代码生成能力,利用提示…...
关于 Web 漏洞原理与利用:1. SQL 注入(SQLi)
一、原理: 拼接 SQL 语句导致注入 SQL 注入的根本原因是:开发者将用户的输入和 SQL 语句直接拼接在一起,没有任何过滤或校验,最终被数据库“当作语句”执行了。 这就像是我们给数据库写了一封信,结果攻击者在我们的…...
【NLP 75、如何通过API调用智谱大模型】
事事忘记,事事等待,事事自愈 —— 25.5.18 一、调用智谱大模型 zhipuai.model_api.invoke():调用智谱 AI 的大模型(如 ChatGLM)进行文本生成或推理,支持同步请求。 参数列表 参数名类型是否必需默认值说…...
【RabbitMQ】 RabbitMQ高级特性(二)
文章目录 一、重试机制1.1、重试配置1.2、配置交换机&队列1.3、发送消息1.4、消费消息1.5、运行程序1.6、 手动确认 二、TTL2.1、设置消息的TTL2.2、设置队列的TTL2.3、两者区别 三 、死信队列6.1 死信的概念3.2 代码示例3.2.1、声明队列和交换机3.2.2、正常队列绑定死信交…...
EMQX开源版安装指南:Linux/Windows全攻略
EMQX开源版安装教程-linux/windows 因最近自己需要使用MQTT,需要搭建一个MQTT服务器,所以想到了很久以前用到的EMQX。但是当时的EMQX使用的是开源版的,在官网可以直接下载。而现在再次打开官网时发现怎么也找不大开源版本了,所以…...
MySQL 数据库备份与还原
作者:IvanCodes 日期:2025年5月18日 专栏:MySQL教程 思维导图 备份 (Backup) 与 冗余 (Redundancy) 的核心区别: 🎯 备份是指创建数据的副本并将其存储在不同位置或介质,主要目的是在发生数据丢失、损坏或逻辑错误时进…...
【数据结构】2-3-4 单链表的建立
数据结构知识点合集 尾插法建立单链表 建立链表时总是将新节点插入到链表的尾部,将新插入的节点作为链表的尾节点 /*尾插法建立链表L*/ LinkList List_TailInsert(LinkList &L) { int x; /*建立头节点*/ L (LNode *)malloc(sizeof(LNode)); /*…...
JVM如何处理多线程内存抢占问题
目录 1、堆内存结构 2、运行时数据 3、内存分配机制 3.1、堆内存结构 3.2、内存分配方式 1、指针碰撞 2、空闲列表 4、jvm内存抢占方案 4.1、TLAB 4.2、CAS 4.3、锁优化 4.4、逃逸分析与栈上分配 5、问题 5.1、内存分配竞争导致性能下降 5.2、伪共享(…...
猫番阅读APP:丰富资源,优质体验,满足你的阅读需求
猫番阅读APP是一款专为书籍爱好者设计的移动阅读应用,致力于提供丰富的阅读体验和多样化的书籍资源。它不仅涵盖了小说、非虚构、杂志等多个领域的电子书,还提供了个性化推荐、书架管理、离线下载等功能,满足不同读者的阅读需求。无论是通勤路…...
Redis 学习笔记 4:优惠券秒杀
Redis 学习笔记 4:优惠券秒杀 本文基于前文的黑马点评项目进行学习。 Redis 生成全局唯一ID 整个全局唯一 ID 的结构如下: 这里的时间戳是当前时间基于某一个基准时间(项目开始前的某个时间点)的时间戳。序列号是依赖 Redis 生…...
C++学习:六个月从基础到就业——C++17:if/switch初始化语句
C学习:六个月从基础到就业——C17:if/switch初始化语句 本文是我C学习之旅系列的第四十六篇技术文章,也是第三阶段"现代C特性"的第八篇,主要介绍C17引入的if和switch语句的初始化表达式特性。查看完整系列目录了解更多内…...
C++跨平台开发经验与解决方案
在当今软件开发领域,跨平台开发已成为一个重要的需求。C作为一种强大的系统级编程语言,在跨平台开发中扮演着重要角色。本文将分享在实际项目中的跨平台开发经验和解决方案。 1. 构建系统选择 CMake的优势 跨平台兼容性好 支持多种编译器和IDE 强大…...
RabbitMQ 工作模式(上)
前言 在 RabbitMQ 中,一共有七种工作模式,我们也可以打开官网了解: 本章我们先介绍前三种工作模式 (Simple)简单模式 P:producer 生产者,负责发送消息 C:consumer 消费者&#x…...
为什么需要加密机服务?
前言 大家好,我是老马。 以前我自己在写工具的时候,都是直接自己实现就完事了。 但是在大公司,或者说随着合规监管的要求,自己随手写的加解密之类的,严格说是不合规的。 作为一家技术性公司,特别是金融…...
【Linux】利用多路转接epoll机制、ET模式,基于Reactor设计模式实现
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:多路转接epoll,实现echoserver 至此,Linux与…...
c/c++的findcontours崩溃解决方案
解决 Windows 平台 OpenCV findContours 崩溃:一种更稳定的方法 许多在 Windows 平台上使用 OpenCV 的开发者可能会在使用 findContours 函数时,遇到令人头疼的程序崩溃问题。尽管网络上流传着多种解决方案,但它们并非总能根治此问题。 当时…...
机器学习 Day18 Support Vector Machine ——最优美的机器学习算法
1.问题导入: 2.SVM定义和一些最优化理论 2.1SVM中的定义 2.1.1 定义 SVM 定义:SVM(Support Vector Machine,支持向量机)核心是寻找超平面将样本分成两类且间隔最大 。它功能多样,可用于线性或非线性分类…...
npm与pnpm--为什么推荐pnpm
包管理器中 npm是最经典的,但大家都任意忽略一个更优质的管理器:pnpm 1. 核心区别 特性npmpnpm依赖存储方式扁平化结构(可能重复依赖)硬链接 符号链接(共享依赖,节省空间)安装速度较慢&#…...
ollama调用千问2.5-vl视频图片UI界面小程序分享
1、问题描述: ollama调用千问2.5-vl视频图片内容,通常用命令行工具不方便,于是做了一个python UI界面与大家分享。需要提前安装ollama,并下载千问qwen2.5vl:7b 模型,在ollama官网即可下载。 (8G-6G 显卡可…...
济南国网数字化培训班学习笔记-第三组-1-电力通信传输网认知
电力通信传输网认知 电力通信基本情况 传输介质 传输介质类型(导引与非导引) 导引传输介质,如电缆、光纤; 非导引传输介质,如无线电波; 传输介质的选择影响信号传输质量 信号传输模式(单工…...
Kubernetes控制平面组件:Kubelet详解(六):pod sandbox(pause)容器
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
51单片机,两路倒计时,LCD1602 ,Proteus仿真
初始上电 默认2路都是0分钟的倒计时 8个按键 4个一组 一组控制一路倒计时 4个 按键:加 减 开始或者暂停 复位到0分钟相当于停止 针对第一路倒计时 4个 按键2:加 减 开始或者暂停 复位到0分钟相当于停止 针对第2路倒计时 哪一路到了0后蜂鸣器响 对应LED点亮 main.c 文件实现了…...
MySQL之储存引擎和视图
一、储存引擎 基本介绍: 1、MySQL的表类型由储存引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等。 2、MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG_MYISAN、MYISAM、InnoBDB。 3、这六种又分…...
写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
1. 添加依赖 在项目的 pom.xml(Maven)中添加以下依赖: xml <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0…...
一:操作系统之系统调用
系统调用:用户程序与操作系统交互的桥梁 在计算机的世界里,应用程序是我们日常接触最多的部分,比如浏览器、文本编辑器、游戏等等。然而,这些应用程序并不能直接控制硬件资源,比如读写硬盘、创建新进程、发送网络数据…...
【ROS2】 核心概念6——通信接口语法(Interfaces)
古月21讲/2.6_通信接口 官方文档:Interfaces — ROS 2 Documentation: Humble documentation 官方接口代码实战:https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用简化的描…...
SmartETL函数式组件的设计与应用
SmartETL框架主要采用了面向对象的设计思想,将ETL过程中的处理逻辑抽象为Loader和Processor(对应loader模块和iterator模块),所有流程组件需要继承或实现DataProvider(iter方法)或JsonIterator(…...
Spring Security与SaToken的对比与优缺点分析
Spring Security与SaToken对比分析 一、框架定位 Spring Security 企业级安全解决方案,深度集成Spring生态提供完整的安全控制链(认证、授权、会话管理、攻击防护)适合中大型分布式系统 SaToken 轻量级权限认证框架,专注Token会…...
|从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面
🐑 |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面🐑 文章目录 🐑 |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面🐑♈前言♈♈Pyside2环境搭建♈♈做个简单的UI界面♈♒代码实现♒♒QTdesigner设计UI界面♒ ♒总…...
【爬虫】DrissionPage-7
官方文档: https://www.drissionpage.cn/browser_control/get_page_info/ 1. 页面信息 📌 html 描述:返回当前页面的 HTML 文本。注意:不包含 <iframe> 元素的内容。返回类型:str 示例: html_co…...
系统架构设计(十二):统一过程模型(RUP)
简介 RUP 是由 IBM Rational 公司提出的一种 面向对象的软件工程过程模型,以 UML 为建模语言,是一种 以用例为驱动、以架构为中心、迭代式、增量开发的过程模型。 三大特征 特征说明以用例为驱动(Use Case Driven)需求分析和测…...
深入解析Java事件监听机制与应用
Java事件监听机制详解 一、事件监听模型组成 事件源(Event Source) 产生事件的对象(如按钮、文本框等组件) 事件对象(Event Object) 封装事件信息的对象(如ActionEvent包含事件源信息…...
QT聊天项目DAY11
1. 验证码服务 1.1 用npm安装redis npm install redis 1.2 修改config.json配置文件 1.3 新建redis.js const config_module require(./config) const Redis require("ioredis");// 创建Redis客户端实例 const RedisCli new Redis({host: config_module.redis_…...
Python训练营---Day29
知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等&…...
Flask-SQLAlchemy_数据库配置
1、基本概念(SQLAlchemy与Flask-SQLAlchemy) SQLAlchemy 是 Python 生态中最具影响力的 ORM(对象关系映射)库,其设计理念强调 “框架无关性”,支持在各类 Python 项目中独立使用,包括 Flask、D…...
世界银行数字经济指标(1990-2022年)-社科数据
世界银行数字经济指标(1990-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90623839 https://download.csdn.net/download/paofuluolijiang/90623839 此数据集涵盖了1990年至2022年间全球各国的数字经济核心指标,数据…...
Redis进阶知识
Redis 1.事务2. 主从复制2.1 如何启动多个Redis服务器2.2 监控主从节点的状态2.3 断开主从复制关系2.4 额外注意2.5拓扑结构2.6 复制过程2.6.1 数据同步 3.哨兵选举原理注意事项 4.集群4.1 数据分片算法4.2 故障检测 5. 缓存5.1 缓存问题 6. 分布式锁 1.事务 Redis的事务只能保…...
NY337NY340美光固态颗粒NC010NC012
NY337NY340美光固态颗粒NC010NC012 在存储技术的浩瀚星空中,美光的NY337、NY340、NC010、NC012等固态颗粒宛如璀璨星辰,闪耀着独特的光芒。它们承载着先进技术与无限潜力,正深刻影响着存储行业的格局与发展。 一、技术架构与核心优势 美光…...
DAY26 函数定义与参数
浙大疏锦行-CSDN博客 知识点回顾: 1.函数的定义 2.变量作用域:局部变量和全局变量 3.函数的参数类型:位置参数、默认参数、不定参数 4.传递参数的手段:关键词参数 5.传递参数的顺序:同时出现三种参数类型时 函数的定义…...
系统安全及应用
目录 一、账号安全控制 1.基本安全措施 (1)系统账号清理 (2)密码安全控制 (3)历史命令,自动注销 2.用户提权和切换命令 2.1 su命令用法 2.2 sudo命令提权 2.3通过是sudo执行特权命令 二、系统引导和登录控制…...
微信小程序 地图 使用 射线法 判断目标点是否在多边形内部(可用于判断当前位置是否在某个区域内部)
目录 射线法原理简要逻辑代码 小程序代码调试基础库小程序配置地图数据地图多边形点与多边形关系 射线法 原理 使用射线法来判断,目标点是否在多边形内部 这里简单说下,具体细节可以看这篇文章 平面几何:判断点是否在多边形内(…...
第三十七节:视频处理-视频读取与处理
引言:解码视觉世界的动态密码 在数字化浪潮席卷全球的今天,视频已成为信息传递的主要载体。从短视频平台的爆火到自动驾驶的视觉感知,视频处理技术正在重塑人类与数字世界的交互方式。本指南将深入探讨视频处理的核心技术,通过Python与OpenCV的实战演示,为您揭开动态影像…...
什么是 Flink Pattern
在 Apache Flink 中,Pattern 是 Flink CEP(Complex Event Processing)模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式(Event Sequence Pattern)。 🎯 一、什么是 Flink Pattern&am…...
ADB基本操作和命令
1.ADB的含义 adb 命令是 Android 官方提供,调试 Android 系统的工具。 adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#x…...
NSString的三种实现方式
oc里的NSString有三种实现方式,为_ _NSCFConstantString、__NSCFString、NSTaggedPointerString 1._ _NSCFConstantString(字面量字符串) 从字面意思上可以看出,_ _NSCFContantString可以理解为常量字符串,这种类型的字符串在编译期就确定了…...
2025年PMP 学习二十 第13章 项目相关方管理
第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理,针对于团队之外的相关方的,核心目标是让对方为了支持项目,以达到项目目标。 文章目录 第13章 项目相…...
学习黑客Kerberos深入浅出:安全王国的门票系统
Kerberos深入浅出:安全王国的门票系统 🎫 作者: 海尔辛 | 发布时间: 2025-05-18 🔑 理解Kerberos:为什么它如此重要? Kerberos是现代网络环境中最广泛使用的身份验证协议之一,尤其在Windows Active Dire…...
蓝桥杯19681 01背包
问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi,价值为 wi。每件物品只能使用一次。 请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。 输入格式 第一行输…...
使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
12. 1852.每个子数组的数字种类数 1852. 每个子数组的数字种类数 - 力扣(LeetCode) 思想 找到nums 所有 长度为 k 的子数组中 不同 元素的数量。 返回一个数组 ans,其中 ans[i] 是对于每个索引 0 < i < n - k,nums[i..(i …...